参考一个很全的总结:
预训练语言模型的前世今生 - 从Word Embedding到BERT
词向量
主要针对预训练语言模型(一)中的one-hot和词向量
C
(
ω
i
)
C(\omega_i)
C(ωi)。
one-hot不再赘述,只说缺点:当使用余弦相似度计算向量之间的相似度时,发现不同的词相似度都是为0,无法提现词之间的相似性问题。
C
(
ω
i
)
C(\omega_i)
C(ωi) 就是我们常说的Word Embedding,仍然是这个图:
这是一个
V
×
m
V\times m
V×m 的矩阵
Q
Q
Q ,可以通过学习获得。
举个例子,第四个词的词向量就可以这么算:
[
0
0
0
1
0
]
[
17
24
1
23
5
7
4
6
13
10
12
19
11
18
25
]
=
[
10
12
19
]
\left[ \begin{matrix} 0 & 0 & 0 & 1 &0 \end{matrix} \right] \left[ \begin{matrix} 17 & 24 & 1\\ 23 & 5 & 7\\ 4 & 6 & 13\\10 & 12 & 19 \\ 11 & 18 & 25 \end{matrix} \right]=\left[ \begin{matrix} 10 & 12 & 19 \end{matrix} \right]
[00010]⎣⎢⎢⎢⎢⎡1723410112456121817131925⎦⎥⎥⎥⎥⎤=[101219]
这样再计算向量相似度时结果就不再是0,也可以在一定程度上描述两个向量之间的相似度。
看一些结果:
Word2Vec模型
Word2Vec有两种训练方法,是两个浅层的神经网络,如下图所示:
- CBOW:其思想与完形填空类似,将某个词抠除,通过上下文内容去预测被抠掉的词语;
- Skip-Gram:与CBOW恰好相反,输入某个单词,通过网络预测上下文词语。
与NNLM对比:NNLM是输入上文去预测下文单词,有显著差异。另一方面,NNLM是一个语言模型,而Word2Vec的任务则是单纯学习Word Embedding。
这里再贴一个Word2Vec的细节,回头慢慢看:Word2Vec 中的数学原理详解