1、不能体现词的含义进行编码(one-hot)
2、单词按照含义进行编码成向量的方式称为word embedding
Word Embedding:Word2Vec(CBOW/Skip-gram)—>Glove
-
使用Word Embedding:句子中每个单词以Onehot形式作为输入,然后乘以学好的Word
Embedding矩阵Q,就直接取出单词对应的Word Embedding了 -
Word2Vec
CBOW模型的训练输入是某一个特征词的上下文(context)相关的词对应的词向量,而输出就是这特定的一个词(目标单词target)的词向量。核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词;
skip-gram模型和CBOW模型相反,目标单词现在在输入层,上下文单词在输出层
3、从Word Embedding到Bert模型
- Word Embedding:Word2Vec(CBOW/Skip-gram)—>Glove
!!!无法解决词的多义问题
缺点:
Word Embedding在对bank这个单词进行编码的时候,是区分不开这两个含义的,因为它们尽管上下文环境中出现的单词不同,但是在用语言模型训练的时候,不论什么上下文的句子经过word2vec,都是预测相同的单词bank,而同一个单词占的是同一行的参数空间,这导致两种不同的上下文信息都会编码到相同的word embedding空间里去。所以word embedding无法区分多义词的不同语义,这就是它的一个比较严重的问题。
**解决:**引入ELMO
- ELMO:
实际使用Word Embedding的时候,单词已经具备了特定的上下文了,这个时候我可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义,自然也就解决了多义词的问题了。所以ELMO本身是个根据当前上下文对Word Embedding动态调整的思路。
缺点:
一个非常明显的缺点在特征抽取器选择方面,ELMO使用了LSTM而不是新贵Transformer,很多研究已经证明了Transformer提取特征的能力是要远强于LSTM的
**解决:**引入GPT
- GPT:
与ELMO主要不同在于两点:首先,特征抽取器不是用的RNN,而是用的Transformer,上面提到过它的特征抽取能力要强于RNN,这个选择很明显是很明智的;其次,GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,
缺点:
采用单向语言模型
所谓“单向”的含义是指:语言模型训练的任务目标是根据 [公式] 单词的上下文去正确预测单词 [公式] , [公式] 之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。ELMO在做语言模型预训练的时候,预测单词 [公式] 同时使用了上文和下文,而GPT则只采用Context-before这个单词的上文来进行预测,而抛开了下文。这个选择现在看不是个太好的选择,原因很简单,它没有把单词的下文融合进来,这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。如果预训练时候不把单词的下文嵌入到Word Embedding中,是很吃亏的,白白丢掉了很多信息。
**解决:**引入Bert
- Bert:
Bert采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,当然另外一点是语言模型的数据规模要比GPT大。所以这里Bert的预训练过程不必多讲了。
缺点:
对领域内有标签数据的过分依赖:虽然有了预训练+精调的两段式框架,但还是少不了一定量的领域标注数据,否则很难取得不错的效果,而标注数据的成本又是很高的。
对于领域数据分布的过拟合:在精调阶段,因为领域数据有限,模型只能拟合训练数据分布,如果数据较少的话就可能造成过拟合,致使模型的泛华能力下降,更加无法应用到其他领域。
**解决:**引入GPT-3
**解决:**引入XLNet
- XLNet:
XLNet引入了自回归语言模型以及自编码语言模型的提法