鶸鸡程序员,新世纪农民工

0%

Deep & Cross Network(DCN)[1]是来自于 2017 年 google 和 Stanford 共同完成的一篇工作,对比同样来自 google 的工作 Wide & Deep[2],DCN 不需要特征工程来获得高阶的交叉特征,对比 FM 系列[3][4]的模型,DCN 拥有更高的计算效率并且能够提取到更高阶的交叉特征。

Read more »

开源项目 DeePray 发布啦!针对推荐算法,特别是点击率预估领域目不暇接的诞生新模型现状,如何将心仪模型快速应用于领域内一直是一项棘手的问题,DeePray这个项目通过统一构建数据流水线,提供各类网络层组件,在此之上,以模块化设计,用组件之砖,搭建各类网络之模型,并以灵活配置式的方式提供调用接口,你也可以在DeePray的基础上,选用各类组件模块,就像玩乐高积木一样建造你自己的模型。deepray.model目录下已实现LR、FM、FFM、DeepFM、Wide&Deep、Deep&Cross、NFM、xDeepFM、FLEN、AutoInt、DIN等各具特色的分类模型,你只需要处理好自己的数据,然后import deepray as dp就可以使用啦!

总之DeePray的目标是:

  • 容易使用, 即使新手也可以快速上手深度学习工具
  • 面对大规模数据也能快速处理
  • 易于扩展的模块化架构可以像玩乐高游戏一样构建神经网络!

由于开始动手做这个项目的时候是在2020年1月份左右,那时候TensorFlow 2.0正式版已经推出3个月了,而TensorFlow1.x静态图运行和TensorFlow2.x默认动态图运行方式让TensorFlow的使用就像两套不同的语言,于是我选择向前看直接从TensorFlow 2.0开始,边学习TF2的使用边开始DeePray的开发,历时半年的业余时间,中间又经历了两次TensorFlow正式版的升级,因此你在使用DeePray时候需要保证已经安装了最新版本的TensorFlow(TensorFlow>=2.2.0)。

DeePray的诞生免不了与另一个前辈DeepCTR进行比较,DeePray具有比DeepCTR更高的模块复用结构,因此也更加容易扩展。
以Deep&Cross模型为例,这是一个典型的双塔结构网络,Deep网络和Cross网络是并行的,Embedding层和Prediction层等公共网络层已抽取到父类BaseCTRModel中,因此新的个性化模型只需继承BaseCTRModel,然后从deepray.base.layers中选用组件DeepNet和CrossNet就可以搭建Deep&Cross网络了,是不是就跟搭建积木一样简单。

DeePray DeepCTR
Screen Shot 2020-06-05 at 4.01.39 PM Screen Shot 2020-06-05 at 3.56.01 PM
Screen Shot 2020-06-05 at 4.40.30 PM Screen Shot 2020-06-05 at 4.41.04 PM

分别由DeePray和DeepCTR实现的DCN、DeepFM模型对比,窃以为DeePray中的实现更为简洁、也更为清晰易读。在一个个实现不同网络模型的过程中,我也参考了DeepCTR的实现方案,在此向浅梦大佬致敬!

Data Pipeline

面对海量的多到内存一次放不下的数据,构建数据流水线是一个好主意,因此DeePray选择与TensorFlow的DataSet api深度整合,支持TFRecords数据格式,通过调整数据读取相关参数以便获得最佳性能,当然你也可以继承BaseCTRModel类后重写create_train_data_iterator()方法来构造自己的数据迭代器,下面以Census Adult Data Set为例,进行数据处理准备DeePray的输入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler, LabelEncoder

from deepray.utils.converter import CSV2TFRecord


# http://archive.ics.uci.edu/ml/datasets/Adult
train_data = 'DeePray/examples/census/data/raw_data/adult_data.csv'
df = pd.read_csv(train_data)
df['income_label'] = (df["income_bracket"].apply(lambda x: ">50K" in x)).astype(int)
df.pop('income_bracket')

NUMERICAL_FEATURES = ['age', 'fnlwgt', 'hours_per_week', 'capital_gain', 'capital_loss', 'education_num']
CATEGORY_FEATURES = [col for col in df.columns if col != LABEL and col not in NUMERICAL_FEATURES]
LABEL = ['income_label']

for feat in CATEGORY_FEATURES:
lbe = LabelEncoder()
df[feat] = lbe.fit_transform(df[feat])
# Feature normilization
mms = MinMaxScaler(feature_range=(0, 1))
df[NUMERICAL_FEATURES] = mms.fit_transform(df[NUMERICAL_FEATURES])


prebatch = 1 # flags.prebatch
converter = CSV2TFRecord(LABEL, NUMERICAL_FEATURES, CATEGORY_FEATURES, VARIABLE_FEATURES=[], gzip=False)
converter.write_feature_map(df, './data/feature_map.csv')

train_df, valid_df = train_test_split(df, test_size=0.2)
converter(train_df, out_file='./data/train.tfrecord', prebatch=prebatch)
converter(valid_df, out_file='./data/valid.tfrecord', prebatch=prebatch)

快速实验

完成数据预处理之后通过简单的几行代码,填写好必要配置之后便可进行试验,如果你想换用其他模型,只需修改--model一个参数即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys

from absl import app, flags

import deepray as dp
from deepray.base.trainer import train
from deepray.model.build_model import BuildModel

FLAGS = flags.FLAGS

def main(flags=None):
FLAGS(flags, known_only=True)
flags = FLAGS
model = BuildModel(flags)
history = train(model)
print(history)

argv = [
'--model=lr',
'--train_data=/Users/vincent/Projects/DeePray/examples/census/data/train',
'--valid_data=/Users/vincent/Projects/DeePray/examples/census/data/valid',
'--feature_map=/Users/vincent/Projects/DeePray/examples/census/data/feature_map.csv',
'--learning_rate=0.01',
'--epochs=10',
'--batch_size=64',
]
main(flags=argv)

构建个性化新网络模型

只需要继承BaseCTRModel类,然后在build方法中选用你想要的网络组件,既可以是Keras中已有的、也可以是deepray.base.layers中提供的,还可以是你自己创造的.

1
2
3
4
5
6
7
class CustomModel(BaseCTRModel):
def build(self, input_shape):
self.lstm_block = tf.keras.layers.LSTM(50)

def build_network(self, features, is_training=None):
v = self.lstm_block(features)
return v

开始尝试吧

目前DeePray的安装包已托管到pypi,只需要pip install deepray就可以快速安装,具体的CPU或GPU运行设备是由你的TensorFlow版本决定的,记住DeePray要配合最新的TensorFlow版本使用喔!

DeePray这个项目还在持续开发中,新模型的开发、测试、文档,包括可能的PyTorch版本都需要补充,目前我个人精力有限,迭代会不及时,特别欢迎感兴趣的同学参与进来一起完善建设和维护!快来点个Star吧!

https://github.com/fuhailin/DeePray

题外记

2020年春节,突然爆发的病毒疫情,让我和父母在湖北家中整整隔离了近60天没有出门,这也迫使我有时间完成DeePray基础搭建工作,谨以此文纪念那段特殊时光。

最后我也开通了微信公众号【公众号ID:StateOfTheArt】,欢迎大家关注一起交流!

关注公众号趙大寳Note

核心概念

下面介绍Kafka相关概念,以便运行下面实例的同时,更好地理解Kafka.
\1. Broker
Kafka集群包含一个或多个服务器,这种服务器被称为broker
\2. Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
\3. Partition
Partition是物理上的概念,每个Topic包含一个或多个Partition.
\4. Producer
负责发布消息到Kafka broker
\5. Consumer
消息消费者,向Kafka broker读取消息的客户端。
\6. Consumer Group
每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)

什么是kafka?

Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。
简单地说就是一个实现消息的发送与高效消费的一个消息中间件。

kafka可以帮助我们做什么?或者是解决什么问题?

  • 日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如Hadoop、Hbase、Solr等;
  • 消息系统:解耦和生产者和消费者、缓存消息等;
  • 用户活动跟踪与审计数据收集:Kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载到Hadoop、数据仓库中做离线分析和挖掘;
  • 运营指标:Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;
  • 流式处理;

启动Zookeeper服务

1
zookeeper-server-start.sh config/zookeeper.properties

启动Kafka服务:

1
kafka-server-start.sh config/server.properties

创建一个自定义topic,并命名为“wordsendertest”:

1
 

这个topic叫test,2181是zookeeper默认的端口号,partition是topic里面的分区数,replication-factor是备份的数量,在kafka集群中使用,这里单机版就不用备份了

列出所有创建的Topics:

1
kafka-topics.sh --list --zookeeper localhost:2181

sass绑定Toptic生产消息:

1
kafka-console-producer.sh --broker-list localhost:9092 --topic test

绑定Toptic,并从头开始接收消息:

1
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

停止kafka-producer,然后删除Topic:

删除Topic下的消息数据:

1
kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --config retention.ms=1000

To purge the Kafka topic, you need to change the retention time of that topic. The default retention time is 168 hours, i.e. 7 days. So, you have to change the retention time to 1 second, after which the messages from the topic will be deleted. Then, you can go ahead and change the retention time of the topic back to 168 hours.

1
kafka-topics.sh --zookeeper localhost:2181 --delete --topic test

References:

  1. https://kafka.apache.org/documentation.html

HBase是运行在Hadoop分布式文件系统HDFS上进行数据存储的开源非关系型分布式数据库,2020年我尝试在Mac上配置一个伪分布式的v2.2.3 HBase环境,看看能不能进行一些基本的读写操作,以便熟悉一下分布式数据库有什么特点。

Read more »

```

去年我曾发文记录如何在Ubuntu上配置伪分布式版的Hadoop3娱乐环境:https://fuhailin.github.io/Hadoop-Install/ ,通过配置Hadoop娱乐环境你可以熟悉Hadoop的一些基本概念与操作方式,后来我的Dell被我玩坏了,也就没法在Ubuntu上顺畅娱乐了,后来一狠心入手了现在MacBook Pro,希望它能皮实耐操一点。今天我们继续在MacOS配置一个Hadoop、Spark娱乐环境,看看它能不能运行处理一些HelloWorld程序。

Read more »

别看线性回归算法原理简单,但其中也还有许多特殊的问题需要特别的手段处理。比如离群点就是一个特别的案例。
少数离群点会显著影响训练集的均值结果,对回归线的整体拟合度产生较大的影响,因此我们需要找出其中的离群点并去除它们。

Read more »

https://mp.weixin.qq.com/s/XmpvNH97k1z6P9kYA36X_Q

以我目前使用较多的Python语言编程为例,可以使用PyMysql来连接MySQL数据库并进行“query、insert、update”等操作,但是这样的方案你每次请求连接MySQL都会有一个单独的连接,这很浪费资源,特别是当请求的数量达到一定数量时会对MySQL的性能产生明显的影响。因此在实际使用中,数据库连接池技术通常被用来进行数据库连接中的资源复用。

Solution:DBUtils

DBUtils是一个允许在非线程安全数据库接口周围使用线程安全包装器的Python数据库连接池工具包。

为什么要使用Docker:“有了Docker,开发人员能够借助任何工具、使用语言来构建任何应用”。Docker化的应用是完全绿色便携的,能运行在任何平台。

Read more »

DeepWalk(2014’KDD),一种用于学习网络中顶点的潜在表示方法.DeepWalk提出了新的、无监督的、独立于标签分布的(捕获结构信息时不考虑标签)、捕获图结构信息的算法。算法目标是学习图的结构特征,其中d是节点的潜在表示(向量形式)的维数。图结构特征可以用于任何分类算法。将与简单的机器学习算法集成,还可以用来实现很多其他问题。

Read more »

简介

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

Linux上的安装

jdk至少需要在1.8.0_73以上版本

Read more »

沪深300指数由上海和深圳证券市场中市值大、流动性好的300只股票组成,综合反映中国A股市场上市股票价格的整体表现。
恒生指数(Hang Seng Index)是以反映香港股市行情的重要指标,指数由五十只恒指成份股的市值计算出来的,代表了香港交易所所有上市公司的十二个月平均市值涵盖率的63%。
标普500是由标准普尔於1957年创立的,被广泛认为是三只股指中衡量美国经济状况最好的一项指标。标普500股票平均价格指数是由每支成分股公司的市场价值之和除以一个由标准普尔设定的除数得到的终值。简而言之就是,所有股票的市值总和除以标普除数,或总市值/标普除数。
道琼斯工业平均指数,简称道指,是三只股指中历史最为悠久也是全球最知名的股指。道指最早是在1884年由道琼斯公司的创始人查尔斯·亨利·道开始编制的一种算术平均股价指数。道指代表了华尔街日报确认的30只大盘股。不同於标普500和纳指,道指成分股的比重是根据股票价格排序的,也就是说股票价格越高的公司越能影响道指的表现。道指股票价格平均指数是入选股票的价格之和除以道指除数得到的终值。
纳斯达克指数,简称纳指,1985年开始交易,是三只股指中最为年轻的股指。纳指代表著在纳斯达克上市的最大的非金融公司,其中科技股所占比重较大,因此通常被认为是一只科技股指。该股指是根据每个公司的市场价值来设置权重,这意味著每个公司对指数的影响力是由其市场价值决定的。

Read more »

Task:

1、Fill in the blank

2、Outfit generation given texts or images

3、 Compatibility prediction

Read more »