赞
踩
word2vec思路很简单,我觉得网上很多介绍都弄得太复杂、太细节化了,下面说说我的看法。
word2vec说白了就是一个映射:
w
o
r
d
→
F
v
e
c
(1)
\tag1 word \stackrel{F} \to vec
word→Fvec(1)
那么word、vec、F 如何定义呢?
神经网络模型(2) 无法实现标注其训练数据,如果知道如何标注,这个问题就不用研究了。因此,我们得探讨一个间接的方法来训练这个模型。
我们不妨利用一批实际文本做训练样本,这样做的好处是不需要人为标注。
我们假设一个 word 的意义取决于句子中该 word 所在句子中前后顺序排列的其他单词。如果两个 word 在大量的文献中,他们在句子中所处的前后位置关系很接近,我们认为这两个 word 的意义是相近的。
从训练数据,提取 word 很容易,主要问题聚焦在标签 label 如何生成。
对于一个 word,我们可以用它所在句子中的其他单词作为其标签。作为简化方案,选择 word 所在句子前后若干个单词,比如前后各取 3 个单词,组成一个词袋,来做其标签。这样的话,word 的标签 label 也是一个 m 维向量。
当然了,同一个 word 在不同的句子中,就会有不同的标签。这个没啥关系,通过大量的训练,我们总会得到 word 到 label 的分量的一个概率分布。意义相近的 word,其语境的概率分布也会相近。
把数学模型(1) 扩展一下:
w
o
r
d
→
F
v
e
c
→
G
l
a
b
e
l
(2)
\tag2 word \stackrel{F} \to vec \stackrel{G} \to label
word→Fvec→Glabel(2)
这样一来,经过大量语料训练之后,模型(2)就完成了。当然,也就顺便得到了模型(1)。目前我们一般不会直接用自己的语料训练词向量,而是使用别人在超大量语料库上训好的词向量,直接用这些现成的词向量进行下游任务。除了word2vec之外,比较常用的还有GloVe。至于ELMo和BERT,它的原理就跟w2v完全不同了,这个需要单独学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。