Natural Language Processing相关概念理解

NLP一般流程

文本预处理->词向量与文本表示->特征选择与特征抽取->分类算法

词向量与文本表示

词袋模型(BOW)

将所有词汇放进一个袋子里,假设有n个词,则每个句子表示为一个长度为n的词频向量,词频即对应词在句子里出现的次数,如果没有出现就是0。这种方法句子里的语义信息被完全遗失了。

word based encodings

另一种思路是表示句子,这样就可以把词在句子中的位置关系考虑进去,例如 “我 喜欢 猫”和 “我 喜欢 狗”分别表示为(0 1 2)和(0 1 3),这里的数字不再是词频,而是对应单词被分配的编码,如果词重复了,显然在数组中对应的数字也会重复。

padding

句子长度不同时,需要将他们转化为统一长度的向量输入到神经网络中训练,这时就要padding,设置一个长度n,如果句子长度小于n,就在数组左侧或右侧填充0,如果句子长了,就把左侧或右侧多余的部分忽略,具体方位由自己选择。

词向量模型(word embedding)

考虑词与词之间的位置关系。原本用随机分配的数字代表每一个词,词与词之间是完全独立的,而embedding使得每一个词成为了一个n维空间中的向量,如果两个词的含义相近,那么相应的向量距离也就进,这样就考虑到了词的含义。

word2Vec :底层采用基于CBOW和Skip-Gram算法的神经网络模型。

CBOW模型:

CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。由于CBOW使用的是词袋模型,因此上下文的几个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

这样我们这个CBOW的例子里,我们的输入是上下文选定的词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有4个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某4个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。

Skip-Gram模型:

Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。

这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前几的词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的4个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前4的softmax概率对应的神经元所对应的词即可。

词向量模型突出特点:

在词向量模型中,词向量与词向量之间有这非常特殊的特性。例如现在存在国王、男生、女人、皇后四个词向量,那么一个完善的词向量模型,就存在“国王-男人+女人=皇后”这样的关系。

参考:词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍

留下评论