参考:
①Word2vec知其然知其所以然或者花书实战篇
②知乎-word2vec
③B站视频-word2vec
④Efficient Estimation of Word Representations in Vector Space
⑤Distributed Representations of Words and Phrases and their Compositionality
⑥word2vec Parameter Learning Explained
Word2vec是一个将语料库中输入文本信息转换为向量格式的包,又名词嵌入。Word2vec由谷歌在2013年推出,其可以将每个词(Word)转换为向量(Vector)。
Note:
语言模型是计算一个句子是句子的概率的模型。
Note:
如何描述呢?—通过条件概率将句子分解到词的层面。
比如一个句子 s s s由 n n n个词 w 1 , w 2 , ⋯ , w n w_1,w_2,\cdots, w_n w1,w2,⋯,wn组成 s = { w 1 , w 2 , ⋯ , w n } s=\{w_1,w_2, \cdots,w_n\} s={w1,w2,⋯,wn},则语言模型可以描述为:
P ( s ) = P ( w 1 , w 2 , ⋯ , w n ) = P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) ⋅ P ( w 3 ∣ w 1 w 2 ) ⋯ P ( w n ∣ w 1 w 2 ⋯ w n − 1 ) . (1) P(s)= P(w_1,w_2, \cdots, w_n) = P(w_1)\cdot P(w_2|w_1)\cdot P(w_3|w_1w_2)\cdots P(w_n|w_1w_2\cdots w_{n-1}).\tag{1} P(s)=P(w1,w2,⋯,wn)=P(w1)⋅P(w2∣w1)⋅P(w3∣w1w2)⋯P(wn∣w1w2⋯wn−1).(1)
Note:
But 这样是有问题的!
因为语料再大也不可能包罗万象,因此某个词可能不在语料中,但却是可观存在的,那么计算过程中,就会有 p = 0 p=0 p=0,这样的话就会导致式(1)为0,这样显然是不对的。
那要如何解决呢?
添加平滑操作,就是给那些没有出现过的词或者词组一个比较小的概率。
拉普拉斯平滑(加1平滑):每个词在原来的次数基础上加1次。
But 这样还是有问题的!
因为假设语料库的词一共有 V = 1 k V=1k V=1k个,那么上述语言模型中每个条件概率 p p p都是需要训练的参数,即一句话的参数可能到达 V + V 2 + V 3 + V n V+V^2+V^3+V^n V+V2+V3+Vn个。
那要如何解决呢?
使用K阶层马尔科夫假设(RL是是使用一阶马尔科夫假设,即2-gram)。 K K K越大,则模型精度越高,但是参数空间也就越大。
K具体有以下几种取法:
举个例子:
语言模型评价指标:困惑度
:
给定一个真实的句子 s s s:
P e r p l e x i t y ( P P ( s ) ) = P ( w 1 , w 2 , ⋯ , w n ) − 1 n = 1 P ( w 1 , w 2 , ⋯ , w n ) N . Perplexity(PP(s))=P(w_1,w_2,\cdots,w_n)^{-\frac{1}{n}}=\sqrt[N]{\frac{1}{P(w_1,w_2,\cdots,w_n)}}. Perplexity(PP(s))=P(w1,w2,⋯,wn)−n1=NP(w1,w2,⋯,wn)1.
如今比较著名的Word2vec模型就是CBOW和Skip-Gram模型,为了篇幅,我将此这篇Word2vec的论文笔记放在下面:CBOW&Skip-Gram。Word2vec的2个模型由于计算复杂度较高,在后续的发展中,出现了层次Softmax以及负采样的方式进行优化,为了篇幅,我将此文章的论文笔记放在下面:Word2Vec进阶。
Seq2Seq,又称Encoder-Decoder结构,一般是一种基于RNN结构的将不定长的输入系列转换为不定长的输出序列的模型。
具体请看我的另一篇NLP之Seq2Seq。
Transformer模型是目前GPT、BERT这种大规模预训练模型的基础,他抛弃了传统CNN和RNN结构的神经网络,采用将注意力模块堆积的方式形成的一种模型。
具体请看我的另一篇Transformer。