> 文档中心 > [KO机器学习] Day5 特征工程:文本表示模型和Word2Vec

[KO机器学习] Day5 特征工程:文本表示模型和Word2Vec


场景描述

文本是一类非常重要的非结构化数据,如何表示文本数据一直是机器学习领域的一个重要研究方向。谷歌2013年提出的Word2Vec是目前最常用的词嵌入模型之一,Word2Vec 实际是一种浅层的神经网络模型,它有两种网络结构,分别是CBOW( Continues Bags Of Words)和 Skip-gram。

知识点

难度:★★☆☆☆  词袋模型(Bag of Words),TF-IDF(Term Frequency - Inverse Document Frequency),主题模型(Topic Model),词嵌入模型(Word Embedding)

难度:★★★☆☆  Word2Vec、隐迪利克雷模型(LDA)、CBOW、Skip-gram

有哪些文本表示模型?它们各自有什么优缺点?

1. 词袋模型 和 N - gram模型

最基础的文本表示模型是词袋模型。顾名思义,就是将每篇文章看成一袋子词,并忽略每个词出现的顺序。具体来说,就是将整段文本以词为单位切分开,然后每篇文章可以表示成一个长向量,向量中的每一维代表一个单词,而该维对应的权重则反应了这个词在原文章中的重要程度。常用TF-IDF来计算权重,公式为:

TF-IDF(t,d)=TF(t,d)\times IDF(t)

其中 TF(t,d) 为单词 t 在文档 d 中出现的频率,IDF( t )是逆文档频率,用来衡量单词 t 对表达语义所起的重要性,表示为

IDF(t)=log(文章总数 / 包含单词t的文章总数+1)

直观的解释是,如果一个单词在非常多的文章里面都出现,那么它可能是一个比较通用的词汇,对于区分某篇文章特殊语义的贡献较小,因此对权重做一定惩罚。

将文章进行单词级别的划分有时候并不是一种好的做法, 比如英文中的natural language processing(自然语言处理)一词,如果将 natural, language, processing这3个词拆分开来,所表达的含义与三个词连续出现时大相径庭。通常,可以将连续出现的n个词(n≤N) 组成的词组( N-gram)也作为一个单独的特征放到向量表示中去,构成 N-gram 模型。另外,同一个词可能有多种词性变化,却具有相似的含义。在实际应用中,一般会对单词进行词干抽取( Word Stemming)处理,即将不同词性的单词统一成为同一词千的形式。

2. 主题模型

主题模型用于从文本库中发现有代表性的主题(得到每个主题上面词的分布特性),并且能够计算出每篇文章的主题分布。

3. 词嵌入与深度学习模型

       词嵌入是一类将词向量化的模型的统称,核心思想是将每个词都映射成低维空间(通常K=50~ 300维)上的一个稠密向量 ( Dense Vector )。飞维空问的每一维也可以看作一个隐含的主题,只不过不像主题模型中的主题那样直观。

       由于词嵌入将每个词映射成一个K维的向量,如果一篇文档有 N个词,就可以用一个 N x K维的矩阵来表示这篇文档,但是这样的表示过于底层。在实际应用中,如果仅仅把这个矩阵作为原文本的表示特征输入到机器学习模型中,通常很难得到令人满意的结果。因此,还需要在此基础之上加工出更高层的特征。在传统的浅层机器学习模型中,一个好的工程往往可以带来算法效果的显著提升。而深度学习模型正好为我们提供了一种自动地进行特征工程的方式,模型中的每个隐层都可以认为对应着不同抽象层次的特征。从这个角度来讲,深度学习模型能够打败浅层模型也就顺理成章了。卷积神经网络和循环神经网络的结构在文本表示中取得了好的效果,主要是由于它们能够更好地对文本进行建模,抽取出一些高层的语义特征。与全连接的网络结构相比,卷积神经网络和循环神经网络一方面很好地抓住了文本的特性,另一方面又减少了网络中待学习的参数,提高了训练速度,并且降低了过拟合的风险。

Wrod2VC 是如何工作的?它和LDA有什么区别与联系? 

CBOW的目标是根据上下文出现的词语来预测当前词的生成概率,而Skip-gram是根据当前词来预测上下文中各词的生成概率。两种网络结构如下图所示

       其中w(t)是当前所关注的词,w(t-2)、w(t-1)、w(t+1)、w(t+2)是上下文中出现的词。这里前后滑动窗口大小均设为2。CBOW 和 Skip-gram 都可以表示成由输入层(Input )、映射层(Projection)和输出层(Output)组成的神经网络。
       输入层中的每个词由独热编码方式表示,即所有词均表示成一个N维向量,其中N为词汇表中单词的总数。在向量中,每个词都将与之对应的维度置为 1,其余维度的值均设为 0。
在映射层(又称隐含层)中,K个隐含单元 ( Hidden Units )的取值可以由 N维输入向量以及连接输入和隐含单元之间的NxK维杈重矩阵计算得到。在CBOW 中,还需要将各个输入词所计算出的隐含单元求和。
       同理,输出层向量的值可以通过隐含层向量(K维),以及连接隐含含层和输出层之间的KxN维权重矩阵计算得到。输出层也是一个N维向量,每维与词汇表中的一个单词相对应。最后,对输出层向量应用Softmax 激活函数,可以计算出每个单词的生成概率。Softmax 激活函数的定义为

P(y=Wn|x)=\frac{e^{Xn}}{\sum_{K=1}^{N}e^{Xk}}

 其中 X 代表 N维 的原始输出向量,Xn为在原始输出向量中,与单词 Wn 所对应维度的取值。

       接下来的任务就是训练神经网络的权重,使得语料库中所有单词的整体生成概率最大化。从输入层到隐含层需要一个维度为 N x K 的权重矩阵,从隐含层到输出层又需要一个维度为 K x N 的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。但是由于 Softmax 激活函数中存在归一化项的缘故,推导出来的迭代公式需要对词汇表中的所有单词进行遍历,使得每次迭代过程非常缓慢,由此产生了 Hierarchical Softmax 和 NegativeSampling 两种改进方法,有兴趣的读者可以参考 Word2vec 的原论文。训练得到维度为 NxK 和 KxN 的两个权重矩阵之后,可以选择其中一个作为 N 个词的 K维向量表示。

       谈到 Word2VecLDA 的区别和联系,首先,LDA 是利用文档中单词的共现关系来对单词按主题聚类,也可以理解为对 “文档 - 单词” 矩阵进行分解,得到 “文档-主题” 和 “主题-单词” 两个概率分布,而 Word2Vec 其实是对 “上下文-单词” 矩阵进行学习,其中上下文由周围的几个单词组成,由此得到的词向量表示更多地融入了上下文共现的特征。也就是说,如果两个单词所对应的 Word2Vec 向量相似度较高,那么它们很可能经常在同样的上下文中出现。需要说明的是,上述分析的是LDA 与 Word2Vec 的不同,不应该作为主题模型和词嵌入两类方法的主要差异。主题模型通过一定的结构调整可以基于“上下文 - 单词”矩阵进行主题推理。同样地,词嵌入方法也可以根据 “文档-单词”矩阵学习出词的隐含向量表示。主题模型和词嵌入两类方法最大的不同其实在于模型本身,主题模型是一种基于概率图模型的生成式模型,其似然函数可以写成若千条件概率连乘的形式,其中包括需要推测的隐含变量(即主题);而词嵌入模型一般表达为神经网络的形式,似然函数定义在网络的输出之上,需要通过学习网络的权重以得到单词的稠密向量表示。 

 

 

k歌软件