NLP进阶之(六)Word2Vec+FastText+Glove
1. WordEmbedding(seq2seq)
自上世纪90年代开始,特征空间模型就应用于分布式语言理解中,在当时,许多模型用连续型表征来表示词语,包括潜在语义分析(Latent Semantic Analysis)和潜在狄拉克雷分配(Latent Dirichlet Allocation)模型,这篇文章详细介绍了词向量方法在那个时期的发展。Bengio等人在2003年首先提出了词向量的概念,当时是将其余语言模型的参数一同训练得到。Collobert和Weston则第一次正式使用预训练的词向量。
词向量意义在于将语言数学化——词向量就是一种将自然语言数学化的方法。词向量方法是无监督式学习的少数几个成功应用之一。它的优势在于不需要人工标注语料,直接使用未标注的文本训练集作为输入。输出的词向量可以用于下游的业务处理。
一般来说,神经网络将词表中的词语作为输入,输出一个低维度的向量表示这个词语,然后用反向传播的方法不断优化参数,输出的低维向量是神经网络的第一层参数,这一层通常也称为Embedding Layer。
生成的词向量模型一般分为两种,一种是word2vec,这类模型的目的就是生成词向量,另一种模型是将词向量作为副产物产生,两者的区别在于计算量不同。若词表非常庞大,用深层结构模型训练词向量需要许多计算资源。这也是直到2013年词向量才开始被广泛用于NLP领域的原因。
1.1 Word2Vec
Word2Vec是词嵌入(word embedding)的一种,其中,Word2Vec提供了两套模型,第一种是Skip-gram,另一种是CBOW,其在语言数字化的过程中有以下几种变换:
- One-hot Encoding
- 分布式表示(Distributed Representation)
- 潜在语义分析(Latent Semantic Analysis, LSA)
- SVD分解
- 隐含狄利克雷分布(Latent Dirichlet Allocation, LDA)
- 神经网络、深度学习
- 潜在语义分析(Latent Semantic Analysis, LSA)
1.2 Skip-gram和CBOW
- Skip-gram 是用一个词作为输入,来预测其周围的上下文
- CBOW是拿一个词的上下文作为输入,来预测这个词本身,是一个CBOW模型。
目前基于迭代的方法获取词向量大多是基于语言模型训练得到的,对于一个不合理的句子,希望语言模型能够给予一个较大的概率,同理,对于一个不合理的句子,给与一个较小的概率评估,具体的形式化如下:
P ( w ( 1 ) , w ( 2 ) , … , w ( n ) ) = ∏ i = 2 n P ( w i ) P(w^{(1)},w^{(2)},\ldots, w^{(n)}) = \prod_{i=2}^n P(w^{i}) P(w(1),w(2),…,w(n))=i=2∏nP(wi)
P ( w ( 1 ) , w ( 2 ) , … , w ( n ) ) = ∏ i = 2 n P ( w i ∣ w i − 1 ) P(w^{(1)},w^{(2)},\ldots, w^{(n)}) = \prod_{i=2}^n P(w^{i}|w^{i-1}) P(w(1),w(2),…,w(n))=i=2∏nP(wi∣wi−1)
第一个公式,一元语言模型,假设当前词的概率只与自己有关,第二个公式:二元语言模型,假设当前词的概率和当前一个词有关。因此我们可以从训练集的构建上更好的理解和区别CBOW和Skip-gram的模型。 - 每个训练样本为一个二元组 ( x , y ) (x, y) (x,y),其中 x x x为特征, y y y为标签
- 假设上下文窗口的大小
context_window =5
,即: [ w t − 2 , w t − 1 , w t , w t + 1 , w t + 2 ] {[w_{t-2},w_{t-1},w_t,w_{t+1},w_{t+2}]} [wt−2,wt−1,wt,wt+1,wt+2],或者说skip_window=2
,有context_window = skip_window*2 + 1
CBOW
的训练样本为: ( [ w t − 2 , w t − 1 , w t + 1 , w t + 2 ] , w t ) {([w_{t-2},w_{t-1},w_{t+1},w_{t+2}],w_t)} ([wt−2,w