Graph_embedding之SDNE
目标复现SDNE,思考如何利用点击和相关属性获取合适的商品embedding,用于以后的商品聚类。
模型简介模型结构
SDNE是16年发表在kdd上的一篇论文,是第一篇将深度学习模型运用于Graph embedding的论文。其可以看作LINE的一种延伸。使用一个自编码器来同时优化1阶和2阶损失,训练结束的中间向量作为商品embedding。
损失函数
1阶损失:不同节点中间变量的相似程度,α表示控制1阶损失函数
2阶损失:同一节点重构后的差距,Β矩阵用于控制非0元素,对其实施更高的惩罚系数,避免非0元素由于反向传播变0
reg损失:控制模型参数,v正则化参数
论文核心模型的输入:每个节点的领结矩阵,相邻节点的拉普拉斯矩阵
模型的输出:每个节点预测的领结矩阵
领接矩阵用于表示顶点之间相邻关系的矩阵。分为有向无权,有向有权,无向无权,无向有权矩阵。
如果是无权,其实权重代表的就是两个节点之间是否相连,相连为1,不相连为0。如果是有权,权重的设定可以是多样化的,可以只用连接信息设置权重,也可以添加side_info设置综合权重【新品的话就必须加side_info】。
有向无向对于邻接矩阵没 ...
NLP预处理:词干提取和词性还原
最近在做的项目里面需要做一个关键词多属性提取,然后由于以前接触的都是中文的项目,所以就会拿中文分词的一些操作来用,但在英文的项目,其实就有词干提取和词性还原两种非常好用的方法
自然语言处理中一个很重要的操作就是所谓的stemming 和 lemmatization,二者非常类似。它们是词形规范化的两类重要方式,都能够达到有效归并词形的目的,二者既有联系也有区别。
词干提取NLTK中提供了三种最常用的词干提取器接口,即 Porter stemmer, Lancaster Stemmer 和 Snowball Stemmer。而且词干提取主要是基于规则的算法。
Porter
1980年最原始的词干提取法
1234567from nltk.stem.porter import PorterStemmertext='chineses'porter_stemmer = PorterStemmer()stem_text = porter_stemmer.stem(text)print(stem_text)--------------------Out[148]: ' ...
Graph_embedding之deepwalk
历史deepwalk的作者Bryan参照word2vec的思想,将文本应用到图的结构中,形成了这篇文章,内容也不复杂,也算是为后世的Graph embedding开了一个头。
流程图
论文理解适用领域
network分类
异常检测
主要内容
前提基于领域假设
deepwalk用的是没有权重的图
作者证明了单词共现和节点共现有类似的现象,因此文本的那一套也可以用于图。
当数据稀疏时或者使用低于60%数据量的数据集时效果比传统模型好
具体步骤
首先基于节点信息和边的信息,生成底层图谱
以每个node作为定长序列的起始点,利用随机游走生成定长序列,所以该随机游走也称为截断式随机游走。
将输出的序列作为word2vec的输入,生成nodes embedding
将类别信息和nodes embedding输入模型(LR,SVM,深度都可以)做一个多分类。
看法
本身word2vec和deepwalk这种生成词向量的算法都是无监督的,但是后面加上一些有监督的算法就可以合理对embedding的效果做出判断,近期看的论文总会提到link predict的方法,这和现在的节点分类提供类似的 ...
熵
工作了一年多才深度理解熵的各种关系,因此梳理一下形成这篇博客
问题
什么是信息熵,相对熵,交叉熵
KL散度到底是什么
为什么在机器学习中分类任务经常用交叉熵作为损失函数来衡量一个算法的区别
交叉熵和均方误差的区别和联系
我个人认为带着问题去思考会更有组与理解事情的本质,更容易聚焦
信息熵定义
公式:
信息熵表达了什么?
信息量和事件发生的概率有关,事件发生的概率越低,信息熵越大。
信息熵非负,表明信息量不为0,因此信息熵是个常数。
信息量可以叠加,两个事件独立的联合事件,其信息熵为两者之和。
相对熵定义
也称为KL散度,对于x有P(x)和P(y)两种分布,其公式为
\begin{align*}
D_{kl}(p||q) &=\sum_{i=1}^{n}p(x_{i})log(\frac{p(x_{i})}{q(x_{i})}) \\
&=\sum_{i=1}^{n}p(x_{i})log(p(x_{i})-\sum_{i=1}^{n}p(x_{i})log(q(x_{i}) \\
&=-H(x)+H(p,q)
\end{align*}前者是信息熵,后者就 ...
初识NLP
概述此文档为了更好的理解自然语言处理(natural language processing),自然语言处理(NLP)就是开发能够理解人类语言的应用程序或服务。接下来会讨论一些NLP在国内外的发展状况和实际应用的一些例子,了解当前最前沿的NLP应用并掌握一定的NLP技术是接下来自己需要做的。
NLP简述NLP是研究人与人交际中以及在人与计算机交际中的语言问题的一门学科。NLP主要有五个主要任务:分类、匹配、翻译、结构化预测、与序贯决策过程。NLP中的绝大多数问题皆可归入其中的一个,如下表所示。在这些任务中,单词、词组、语句、段落甚至文档通常被看作标记(字符串)序列而采取相似的处理,尽管它们的复杂度并不相同。事实上,语句是 NLP 中最常用的处理单元。
任务
描述
应用
分类
给每个string指定一个标签
文本分类、情感分析
匹配
匹配两个strings
信息检索、问答系统
翻译
翻译某种语言
机器翻译、自动语音识别
结构化预测
将每个string映射为一种结构
命名实体识别、中文分词、词性标注、句法分析
有序决策过程
对一个动态的过程做出反应
多伦对话 ...
多进程、多线程
这周接到1个需求,项目经理觉得我这边构造数据太过缓慢,由于数据量过大,以前数据构造完后将其导入MPP,利用copy_from速度还是很快的,一般为10W/s。现在换成Kafka消息队列,又由于python库自带的原因(这个是组里大神告诉我的),无法像java开发利用list导数据,因此我只能一条一条以json的形式将数据放入消息队列,一般为800条/s。原先构造5000W数据需要7H,经过优化后暂时需要3.5H,性能提升一倍。有点小开心,话不多说,石海同学开始将一下个人对于标题的理解。。。。
进一步优化利用多进程的JoinableQueue,一边一直产生数据,另一边一直消费数据,现在5000W数据大约需要1.5H,性能较最初提升了近五倍。
历史上古年代:在很久很久以前,当时主流的磁盘操作系统MS-DOS是只支持单任务操作的,就打个比方,如果我想在电脑上听音乐和看电影,是不能同时开启的,只能先听音乐后看电影,或者位置互换。
2002:横空出世的Intel Pentium 4HT处理器,提出了cpu多线程(SMT),其支持一个cpu进行多任务开启。
————你总不能 ...
Transomer学习
Transfomer拆分为了更好的学习当前NLP主流模型,如Bert,GPT2及Bert一系列的衍生物,Transfomer是这一系列的基础。因此本文的主要目的是记录个人基于一些博客和原论文对Transfomer模型进行拆分的结果。
目的:减少计算量并提高并行效率,同时不减弱最终的实验结果。
创新点:
Self-attention
Multi-Head Attention
背景知识seq2seq定义:seq2seq模型是采用一系列项目(单词、字母、图像特征等)并输出另一个项目序列的模型。在机器翻译中,序列是一系列单词,经过seq2seq后,输出同样是一系列单词。
接下来我们掀开这个model内部,该模型主要由一个Encoder和一个Decoder组成。
Encoder:处理输入序列的每个项目,捕捉载体中的信息(context)。
Decoder:处理完整序列后,Encoder将信息(context)传递至Decoder,并且开始逐项生产输出序列。
而context是一个向量,其大小基于等同于编码器中RNN的隐藏神经元。
在单词输入之前,我们需要将单词转化为词向量,其可以 ...
异常检测整理
前言定义:识别不正常情况与挖掘非逻辑数据的技术,也叫outliers。
前提:
异常数据只占少数
异常数据特征值和正常数据差别很大
应用领域:
CV领域:抖音发现违规视频
数据挖掘:信用卡盗刷,支付宝,异常金额支出。
模型
无监督学习、AutoEncoder、GAN、矩阵因子分解
半监督学习,强化学习
hybrid(混种)、特征提取+传统算法
单分类神经网路(MLM)
统计学方法3sigma/箱形图原理:远离3sigma(拉依达准则)数据概率低于0.01,认为这些数据为异常值
缺点:
要保证异常值较少
只能检测单维数据
要假定数据服从正态分布或近似
高斯概率密度异常检测算法(1999)原理:首先,该算法假设数据集服从高斯分布的,然后再分别计算训练集在空间中的重心, 和方差, 然后根据高斯概率密度估算每个点被分配到重心的概率,进而完成异常检测任务。(感觉和3sigma想法很像)
缺点:
不适用于高维特征数据集
要求数据大致服从高斯分布的数据集
无监督学习Isolation Forest(孤立森林)定义:孤立森林是用于异常检测的机器学习算法。这是一种无监督学习算法,通过 ...