Word Embedding
给定句子,模型预测其中的单词,学到的模型网络参数就是word embedding,每个单词都有其对应的word embedding。
Word2Vec有两种训练方法,一种叫CBOW,核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词;第二种叫做Skip-gram,和CBOW正好反过来,输入某个单词,要求网络预测它的上下文单词。
其实就是把单词用向量表示,包含句法(即词性)和语义(即意义)结构。
Word Embedding有什么缺陷?
无法区分一词多义,是所有出现的context、也就是不同意义的整合。不同的上下文信息都会编码到相同的word embedding空间。
Word Embedding本质上是个静态的方式,训练好之后每个单词的表达就固定住了。
解决方案是:ELMO,“Deep contextualized word representation”
ELMO的本质思想是:我事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分,不过这没关系。在我实际使用Word
Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据上下文单词的语义去调整单词的Word
Embedding表示,这样经过调整后的Word
Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以ELMO本身是个根据当前上下文对Word
Embedding动态调整的思路。
CBOW模型continuous bag of words
在CBOW建模中,我们试图通过给定几个上下文单词(中心词周围的单词)来预测中心词。
例如,选择一个 C = 2 C=2 C=2的上下文,预测中间的单词happy,则上下文包含中心单词前面的两个单词和之后的两个单词:
C C C个单词前:【我,是】
C C C个单词后:【因为,我】
换句话说:
c o n t e x t = [ I , a m , b e c a u s e , I