神经网络深度学习word2vec的学习笔记
一、文本向量化概念
在自然语言处理的过程中,文本向量化是文本重要的一种表示方式,顾名思义,就是将不同的文本以向量的方式表示。这样表示原因在于不论是英文还是中文,词语都是表达文本处理的最基本单元。当然还有将文章段落或者句子作为处理单元进行处理的,例如由word2vec拓展而来的doc2vec或者str2vec,其基本思想是类似的。
二、词袋模型和One-hot模型
将一个文章或句子进行分词处理,例如,I am who I am 这一句由这个词典可以表示{ "I":1 , "am":2, "who":3},这样句子可以由3维的向量表示[2,2,1]。再比如句子 who am I,就可以用[1,1,1]表示。向量的每一维表示落入字典每一个单词的个数,就像一个一个的词袋,装进对应落入词袋的词。
词袋模型虽然容易实现,但有以下几个缺点:
1、维度灾难,若字典含有10000个不同的单词,那么就必须用一个10000维的向量来表示句子,若句子只有几个单词,那么该向量大部分元素都是零。
2、无法保留语序。
3、存在语义鸿沟问题。
One-hot模型算是词袋模型的分解,一句话里每个单词用一个词向量表示,比如who am I就表示成[0,0,1],[0,1,0],[1,0,0]。显然维数更多,和词袋模型类似的问题。
三、分布假说
前面说到,词袋模型不包含语义信息,为了解决这个问题,人们提出了分布假说(distributional hypothesis):
核心思想是:上下文相似的词语,其语义也相似。
所以构建词向量模型的时候,我们需要考虑句子的上下文,而灵活的对上下文进行建模是神经网络的优点,word2vec应运而生。
四、word2vec模型(都是神经网络模型)
1、神经网络语言模型NNLM(老旧)
三层模型,输入、隐藏、输出层。基本概念就是还是使用贝叶斯公式(最大后验概率),去求当输入为长度为n的文本序列到
时,
最大概率是什么。
也就是说,输出层输出的向量的维度V,V等于词表的大小,向量每个元素是词表中对应单词是的概率。
输入层的操作则是将到
的每一个词向量拼接(由词袋模型生成的词向量),维度是n。
中间隐藏层的维度是我们自己来定的,我们可以将其定为h。
NNLM模型意在构建一个语言概率模型,其运行机理相当于用一个长度为n的窗口去滑动语料库训练,预测时用同样长度的窗口来预测。NNLM训练模型的中间产物,也就是隐藏层的参数,就可以作为这个单词的词向量了。(所以一开始是个中间产物)
2.C&W模型(老旧)
和NNLM不同的一点,输出层不是维度为V的概率分布,而是一个Score,打分。这个分怎么打呢,就是输入层中的某个词语替换成语料库里的其它词语(大概率肯定是错误的词语),目标函数是max(0,1-score(正样本w,c)+score(负样本w,c))这样正样本的期望得分比负样本要高1分。
C&W模型的目标词在输入层,而NNLM的目标词在输出层。
这两者产生的词向量都是中间隐藏层这个副产物。
3.CBOW模型(流行)和Skip-gram模型
输入是将输入的n个词向量求平均,而不是直接拼接。去除了隐藏层,输出层就直接是词向量了。(方便)
输入的n个词肯定是包含了目标词的上下文。这样就能推断出上下文的语义了。
目标函数和NNLM类似的。
Skip-gram之后再研究