NLP

词袋模型

词袋模型(Bag of Words,简称BoW)。

以用一个装着这些词的袋子来表示,这种表示方式不考虑文法以及词的顺序。
词袋模型假设我们不考虑文本中词与词之间的上下文关系,仅仅只考虑所有词的权重。而权重与词在文本中出现的频率有关。

从词的角度进行文本数据挖掘是众多挖掘方式中的一种。

词袋模型的步骤:
1、分词(tokenizing):
2、统计修订词特征值(counting):
3、统计每个词在文本中出现的次数,我们就可以得到该文本基于词的特征,如果将各个文本样本的这些词与对应的词频放在一起,就是我们常说的向量化。
4、向量化完毕后一般也会使用TF-IDF进行特征的权重修正,因为,如果语料是有很多篇文本组成,那么一个词在一篇文本中出现的次数往往不够科学,要把所有文本一起考虑。
5、标准化(normalizing):将特征进行标准化,以便于挖掘。

词袋模型算法有哪些

Tfidf词频逆文档频率

LDA隐含狄利克雷分布 :从词语层面看,主题是一种词汇分布,并不涉及到词与词的顺序关系,也属于BOW(bag of words)的一种。

VSM向量空间模型: 单词向量空间模型

LSA潜在语义分析(Laten Semantic Analysis):话题向量空间模型,通过矩阵分解(SVD或者NMF),来发现文本与单词之间的基于话题的语义关系。

TextRank 算法

也可以看做一种词袋模型。

与pageRank算法

pageRank的思想是,每个页面的rank值是由指向他的页面的rank值所决定。
pageRank也称为随机游走算法,属于一种图算法。

image.png

PR(Vi)表示结点Vi的rank值,
In(Vi)表示结点Vi的前驱结点集合,
Out(Vj)表示结点Vj的后继结点集合,
d为damping factor用于做平滑。

一个节点i的PR值通过i的所有前驱节点的PR值求和得到,节点i的PR值可以分得前驱节点j出度数分之一的PR(j)值,换句话说j的出度越多,出度目标分得PR(j)越少。

TextRank与pageRank算法一致,pageRank是网页之间的关系,TextRank换成了词语之间的关系。

pageRank用来计算每个页面的PR值,也叫rank值或页面排名值。搜索结果的权重根据rank值决定。

例子:比如有页面A,只有页面B和C指向A,B页面只指向A,C页面同时仅指向A和D,那么PR(A)=PR(B)+P(C)/2。其它页面也按照这种方式计算。 如果有N个页面,就会有N个上例的计算等式。

公式:
PR(A) = “所有指向A页面集合{T0,T1....,Ti}的PR值PR(Ti)除于Ti的出度数量,然后求和”。

迭代求解:
变换成矩阵求解,把PR看成系数,使用迭代求解,求出每个页面的PR值,就可以得到每个页面的rank值。

概念

滑动窗口:
通俗的讲,一篇文档在某个词语位置左右截取固定词语长度的一段,这一段就是滑动窗口的一个实例。所有词语以此截取,每个位置词语都有自己的窗口,因此称之为滑动窗口。

共现关系 co-occurrence :
一般我们认为,在一篇文章中近邻出现的两个词语之间,一定具有某种关联。
我们可以先做分词,将文档中的词语抽取出来,然后统计某两个词语同时出现的出现次数,并把结果存在一个二维矩阵之中,可以作为权重矩阵。

与pageRank区别:
TextRank相比pageRank边是无向的,因为词语相邻即可,不考虑指向,而pageRank中的网页则不同。TextRank公式相比PageRank公式,每一个求和项中增加了两个词关系的权重,这个权重就是共现次数

公式

image.png
权重项Wji,用来表示两个节点之间的边连接有不同的重要程度。

tf-idf VS textrank

相同:

TextRank与TFIDF均严重依赖于分词结果。
归属于词袋模型。

不同:

TextRank有图构建的过程,效率相比更低。
TextRank的范围是一篇文章,而Tf-id范围是所有文章。

标注问题

NLP序列标注

本质上是对线性序列中每个元素根据上下文内容进行分类。

过程是对于一个一维线性输入序列(词语序列),每个元素打上标签集合中的某个标签。

常见应用:分词,词性标注,命名实体识别。

词性标注

如何使用隐马尔可夫模型进行词性标注建模:

状态集合:

词性。

状态转移概率矩阵:

词性转移矩阵,(举例,动词后面是名词的概率)。

image.png

观测生成概率矩阵:

某个词性的条件下是某个词的概率(举例,P(like|N)=0.012)。

image.png

观测序列:

也就是我们要进行词性标注问题的已知句子。(举例, Flies like a flower)

解码问题:

已知观测序列,求最合理的隐状态序列。

观测序列是原始句子的一组词组成的有序列表,

隐状态序列是原始句子的每个词对应的词性。

说明:

从语料库中训练得到的词性转移概率矩阵和词语生成概率矩阵        

概率图模型

概率图模型(PGM/probabilistic graphical model)。

概率图模型(或简称图模型)在形式上是由图结构组成的。图的每个节点(node)都关联了一个随机变量,而图的边(edge)则被用于编码这些随机变量之间的关系。根据图是有向的还是无向的,我们可以将图的模式分为两大类——贝叶斯网络( Bayesian network)和马尔可夫网络(Markov networks)。

机器学习问题:
概率图模型解决的不是简单的是否以及分类问题。比如说,给定一个句子“I like machine learning”,然后标注每个词的词性(名词、代词、动词、形容词等)。正如这个简单例子所表现出的那样:我们不能通过单独处理每个词来解决这个任务——“learning”根据上下文的情况既可以是名词,也可以是动词。其它例子,比如从一种语言到另一种语言的翻译、文本转语音等。

概率与图

概率:描述事情的不确定性。

概率的加法乘法准则:
image.png
第一个式子告诉我们当知道多个变量的概率分布时如何计算单个变量的概率分布,互斥相加。
而第二个式子说明了两个变量之间概率的关系。譬如X,Y之间相互独立时概率可以相乘
该法则是基本的运算准则。

概率图:
本来不存在,是一个组合概念,由图论和概率论结合的产物。使得概率模型可视化便于观测关系和理解复杂的计算。

图用概率表示:
两个结点,a指向b,有向边用p(b|a)表示,并称a是b的父结点。
如果a没有父结点,没有输入的箭头,它直接对应于p(a)。

有向图模型(贝叶斯网络)

有向图模型也叫贝叶斯网络(Bayesiannetworks)或信念网络(BeliefNetworks)
贝叶斯网络是和有向图联合概率分布是等价的。

乘法定理链式法则:
2、3、n个事件同时发生的概率:
image.png
image.png
image.png

例子

image.png

所有结点只与他们的父节点有关系。
也就是不相邻的结点没有关系。
根据概率链式调用法则,逐步展开可以得到以下式子。
image.png

最后一步的长式子可以根据是否相互独立继续精简:

  1. E只与B有关,则 P(E | B, D, C, A) = P(E | B)
  2. B只和AC有关,则 P(B | D, C, A) = P(B | C, A)
  3. D只与C有关, 则 P(D | C, A) = P(D | C)
  4. C与A无关,则 P(C | A) = P(C)

最后精简的公式:
image.png

无向图模型(马尔可夫随机场)

无向图模型也叫马尔科夫随机场(MarkovRandomFields)或马尔科夫网络(MarkovNetwork)。
此处的问题是无向图联合概率分布求解的问题。

马尔科夫一些概念

团的定义:
图中节点x={x1,x2,...,xn}构成的一个子集,
如果自己的任意两点之间都存在边相连,
则这个子集中的所有节点构成了一个团。

最大团的定义:
子集中加入任意其他节点,都不能构成一个团,
称这样的子集构成了一个最大团。

势函数:
一个团对应一个势函数
势函数作用在团上,团是由结点(概率)组成的。
势函数的值与概率成正比。

独立定义:
局部马尔科夫性:

两个节点集A、B都与给定的第三个节点集C相互条件独立,
A、B节点之间的路径都被C中的节点分开。
每个步骤“停”时前后状态相互独立(马尔科夫模型(链)的性质)。
在已知 “现在”的条件下,“未来”与“过去”彼此独立的特性就被称为马尔科夫性。

全局马尔科夫性:
最大团与最大团之间的独立性。

隐马尔可夫模型

常见的两种问题

针对HMM不同的输出,我们可以定义如下两类问题:
HMM评估问题:

在给定模型中出现观察序列的可能性(概率值);  

HMM解码问题

通过观察序列找出最大可能的隐状态序列
    

LDA 隐含狄利克雷分布

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,
包含词、主题和文档三层结构。
所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择
某个词语”这样一个过程得到。

文档到主题服从多项式分布,主题到词服从多项式分布。

属于一种文本浅层语义分析主题模型。

LDA是怎么看待词汇文章和主题?

LDA通过词汇的概率分布来反映主题。

一个词的出现不一定会反应某篇文章一定就是某个主题,而是在某称程
度上反应了某个主题的可能性。其实就是从概率角度来看待词语
和主题的相关度。LDA把词汇的概率分布汇总成一个主题结论。
具体是这样的,体育主题表示为:

{科比:0.3,篮球:0.3,足球:0.3,奥巴马:0.03,希拉
里:0.03,克林顿:0.04}

每个文档都会对应一个主题分布。

LDA认为,文章和主题之间并不一定是一一对应的,也就是说,文章可
以有多个主题,一个主题也可以在多篇文章之中。

数学知识

Gamma函数,二项分布,Gamma分布,Beta/Dirichlet分布/共轭,
随机模拟,马氏链以及平稳分布,MCMC(Markov Chain Monte Carlo) ⁄Gibbs Sampling。

这些数据知识对于一般工程人员比较难以理解,建议专门抽时间进行系统学习并且各个击破。
不建议贸然进入,否则很容易挫败。

召回算法

推荐算法的三大类:
基于内容(包含LDA),
基于用户行为
LMF

基于热度的推荐:

热度特征,在冷启动很有效,冷启动的概念是说系统里面并没有你的相关画像数据,比如游客登录了头条,会怎么推荐呢,可以通过热度特征,即根据当前社会热点呀、文章阅读量高低排名呀等一些能代表普遍群体感受的指标进行推送选择

基于关联规则:
Apriori
FP-growth

协同过滤

基于用户行为的推荐,属于近邻算法。
可以解决越推越窄的问题。

基于用户的协同推荐

(User-based Collaborative Filtering)
两个关键点:

找到相似用户,
计算相似用户对物品的平均评分。

当一个用户A需要个性化推荐 时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。

步骤:

1、找出用户u相似的用户集合

通过行为的相似度计算用户相似度。

某个用户v跟u用户的相似度 = 两个用户兴趣物品集合交集 / 两个用户兴趣物品集合并集

2、给用户u推荐物品
通过前一步的结果可以找到跟用户u相似的前K个用户,
这一步要在这儿K个用户里喜欢的物品里寻找用户u喜欢的物品。

推荐物品之前我们要先预测用户u对物品i的评分。

把用户u与K个相似用户的相似度作为权重,K个用户分别对物品i的评分作为被乘数,
然后把以上乘法表达式作为求和项,得出的就是u对i的加权评分,可以代表用户u对物品i的感兴趣程度。

算法代表的意思:与某个用户相似的用户都是这么评分的,那么他们对某个物品的加权平均分就应该是我给这个物品的评分。

注意两点:
用户u对物品i是要预测的,用户u没有对物品i直接评价过。
K个相似用户中不是所有用户都对物品i进行过评分。

如何降低求用户相似度时的时间复杂度?

适合新闻网站:
某中兴趣的新闻不常用,而相似的用户总是存在。
技术上item新闻更新很快,维护一张item表有难度。
UserCF给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品。
UserCF的推荐结果着重于反映和用户兴趣相似的小群体的热点。
UserCF的推荐更社会化,反映了用户所在的小型兴趣群体中物品的热门程度。

基于项目的协同推荐

(Item-Based Collaborative Filtering)
关键点:
找到相似物品,
计算用户对相似物品的平均评分。

步骤

1、计算物品的相似度
所有用户对两个物品的评分向量是桥梁。

通过计算用户评分向量之间的相似度。

2、预测某个用户u对物品j的评分
通过前一步的结果可以找到跟物品j相似的前K个物品,
这一步要用用户对这K个物品的评分去预测对物品j的评分。

把物品j与K个物品的相似度作为权重,用户对这个K个物品的评分作为乘数,
然后把以上乘法表达式作为求和项,得出的就是u对j的加权评分,可以代表用户u对物品j的感兴趣程度。

算法代表的意思:某用户对对某个物品的评分,可以使用用户对与该物品相似的其它物品的加权平均评分计算。

注意两点:
要预测用户u对物品j的评价,用户u没有对物品i直接评价过。
用户u不是对K个相似物品全都进行过评分,计算前要与u用户的评价物品集合求交集。

适用用于电商推荐:用户兴趣一般不会变化很快。
ItemCF给用户推荐那些和他之前喜欢的物品类似的物品。
ItemCF 的推荐结果着重于维系用户的历史兴趣。
ItemCF的推荐更加个性化,反映了用户自己的兴趣传承。

基于模型的协同过滤

(model based)

具体基于模型的方法有:
用矩阵分解做协同过滤(由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而用户物品评分矩阵是一个典型的稀疏矩阵,所以主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为$UΣV^T$的形式,而变是两个低秩矩阵$P^TQ$的乘积形式。)
用关联算法做协同过滤(Apriori算法、FP Tree算法)
用聚类算法做协同过滤(针对基于用户或者基于模型,Kmeans,DBSCAN)
用分类算法做协同过滤(设定评分阈值,高于推荐,低于不推荐,逻辑回归和朴素贝叶斯,解释性很强)
用回归算法做协同过滤(Ridge回归,回归树)
用神经网络做协同过滤(限制玻尔兹曼机RBM)

传统SVD:
传统奇异值分解svd
通过求奇异矩阵来求解。
分解成三个矩阵相乘。
SVD计算复杂度很高,所以很难在实际系统上有所应用。

分解成两个小矩阵:
只需要分解成两个低秩矩阵,又称隐式分解模型LFM。
是通过优化算法求解。

分解成两个隐式矩阵
LFM,Latent factor model

111.png

p(u,k) 度量了用户u的兴趣和第k个隐类的关系。
q(i,k) 度量了第k个隐类和物品i之间的关系。
步骤:
1、准备用户—物品集 K={(u, i)}
主要是负样本的采样
2、 优化损失函数(随机梯度下降法)
image.png
后两项是正则化项,

参数:
隐特征的个数F;
学习速率alpha;
正则化参数lambda;
负样本/正样本比例 ratio
参数影响:
固定前三个参数,ration对性能影响最大,
ration增加推荐物品的流行度不断增加, 说明ratio参数控制了推荐算法发掘长尾的能力。

隐性反馈数据集:

在选取用户对物品的负反馈数据上:
    对每个用户,要保证正负样本的平衡(数目相似)。
    对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。

加入偏置的LFM

image.png

3个偏置项目的含义:
1、评分系统有些 固有属性和用户物品无关,
2、用户也有些属性和物品无关
3、物品也有些属性和用户无关。

μ:训练集中所有记录的评分的全局平均数。它可以表示网站本身对用户评分的影响。
b(u): 用户偏置项。这一项表示了用户的评分习惯中和物品没有关系的那种因素。
b(i): 物品偏置项。这一项表示了物品接受的评分中和用户没有什么关系的因素。

其它LFM

考虑邻域影响的:
又称为svd++
显式地考虑用户的历史行为对用户评分预测的影响。
image.png

考虑时间的:
time-svd++

算法辨析

基于内容推荐与基于项目的协同过滤区别

1、数据维度方面

后者侧重使用用户对于商品的历史行为记录,即用户-商品二维矩阵。
用户/商品表示可以看做特殊的基于内容的表示,只不过是把用户的具体内容属性换为了用户的历史行为特征。

2、核心思想

协同是集体智慧,寻找隐含的模式。
基于内容是某个属性进行匹配。

3、训练参数

协同是用户-商品评分二维矩阵当做输入。
基于内容侧重将用户或者商品的特征信息作为输入特征。

4、推荐算法好坏的决定因素

协同依赖行为数据多少。
前者更多依赖特征工程+属性完整+领域知识。

基于用户和项目的协同过滤的区别

基于用户的协同过滤从用户相似的角度出发。
基于项目的协同过滤从物品相似的角度出发。

基于用户的协同过滤使用的是相似用户对同一个物品的加权平均。
基于项目的协同过滤使用的是该用户对相似物品的加权平均。

二者都是使用行为数据来求用户或者物品的相似度。
在进行预测时二者本质上是一种回归。

协同过滤场景区别:

协同过滤与LFM隐含语义模型区别

理论基础:
LFM具有是一种学习方法,通过优化一个设定的指标 建立最优的模型。
邻域的方法更多的是一种基于统计的方法,并没有学习过程。

离线计算的空间复杂度:
协同过滤:
用户表: O(MM) 物品表:O(NN)
LMF:
存储空间:F*(M+N)

LMF更节省内存。
时间计算复杂度:
在一般情况下,LFM的时间复杂度要 稍微高于UserCF和ItemCF,这主要是因为该算法需要多次迭代。
但没有本质区别。

在线实时推荐:
对比的是用户有一个新的行为发生(喜欢了某个物品)的前提下。两种算法能否及时作出反应。

LFM通过公式可知道,用户新行为不能及时计算进去,需要维护一个推荐列表。

协同过滤可以几乎实时的查询。

推荐解释:
cf更好的解释语义。

基础模型

逻辑回归

逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,
用于估计某种事物的可能性。

注意,这里用的是“可能性”,而非数学上的“概率”,
logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。

假设函数:
image.png

假设函数图形描述:

关键坐标,(0,0.5);
正无穷趋近于1,负无穷趋近于0;

假设函数解读:

x 是输入,theta为我们要求取的参数。

逻辑回归推导过程

1、假设函数(“概率”函数)
在线性回归函数基础上增加一层sigmoid函数,表示可能性。

此公式是对事件发生可能性的假设,仅仅是对所有特征对应概率的一个通用表达。

2、概率分布函数
把上面的“概率”函数套用入伯努利分布公式

伯努利公式中底是概率,幂是随机变量,因变量得到的也是概率。

伯努利公式如下:
image.png

上面公式x代表随机变量,取值(1,0)

套用之后的公式如下:
image.png

上面公式中y对应伯努利公式中的随机变量x。(h theta) 对应伯努利公式中的概率。
概率分布是对事件发生概率的描述:即在特定的特征和超参数下事件发生的概率。

3、似然函数
使用该步骤的前提是:概率分布函数的参数可以用似然函数进行求解。

似然函数使用的是“集体智慧”,
把所有已知样本发生的概率相乘,就可以得到所有样本同时发生的概率。

公式如下:
image.png

m代表样本个数,i代表每个样本。

4、损失函数

为了得出损失函数并且处于计算方便的目的:

似然函数取对数,再取反即为我们的损失函数。

公式如下:
image.png

逻辑回归与线性回归区别

逻辑回归(Logistic Regression)与线性回归(Linear Regression)都是一种广义线性模型(generalized linear model)。

逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布。

去除Sigmoid映射函数的话,逻辑回归算法就是一个线性回归。

逻辑回归是以线性回归为理论支持的,但是逻辑回归通过Sigmoid函数引入了非线性因素,因此可以轻松处理0/1分类问题。

多分类回归

假设函数:
image.png

随机变量Y的取值是(1,2, ... K) ,
该公式表示样本在每一个分类取值{1,2,...k}的占比,exp是以e为底的对数。

似然函数:
image.png

每个样本在k类别下所有的概率乘积,然后m个样本的乘积再乘积。

集成模型

前向分步算法

(forward stagewise algorithm)

是boost算法中用的方法。

加法模型(假设函数):
image.png

弱分类器线性组合。
b表示基分类器,
beta基分类器的参数。

损失函数:
image.png

此问题比较复杂,
我们分隔成一系列的子问题求解。
从前往后,每一步学习一个基函数及其系数

梯度提升树GBTD

核心思想概述

上一轮的强学习器(模型):
image.png

上一轮的损失函数:
image.png

样本标签与强学习器的差值

本轮的弱学习器:
image.png

本轮的损失函数:
image.png

与上一轮损失函数不同的是,强学习器增加了本轮的弱学习器。

模型损失函数的负梯度:
残差与损失函数负梯度近似
损失函数:
image.png

T表示本轮的残差。

此处的m表示第m个模型,与前一节中的t对应。

f作为自变量。

损失函数的参数更新:
image.png

弱分类器定义:
image.png

大概推出负梯度是残差的近似。

参考
一文读懂机器学习概率图模型
条件概率分布与机器学习
PageRank算法原理与实现
浅入浅出:PageRank算法
(九)通俗易懂理解——TF-IDF与TextRank (pageRank vs TextRank)
LDA(Latent Dirichlet Allocation)主题模型
LDA数学八卦
协同过滤算法与基于内容推荐算法的不同
推荐系统 - 4 - LMF基于隐变量的推荐、PCA(主成分分析) 实现
逻辑回归原理小结
详解概率图模型——概述
概率图模型简单介绍
概率论的链式法则
PRML读书会第八章 Graphical Models(图的联合概率分解)
条件随机场入门(一) 概率无向图模型(全局局部独立性)
图论之极大团(maximal clique)
自然语言处理之序列标注问题
自然语言处理NLP(4)——序列标注a:隐马尔科夫模型(HMM)
梯度提升树(GBDT)原理小结(刘建平Pinard)
前向分步算法
GBDT的负梯度为什么近似于提升树的残差
利用 SVD 实现协同过滤推荐算法
SVD++推荐系统

肖圣贤
31 声望5 粉丝

学习让我充实