最近面试**公司,被问到word2vec和Glove的损失函数的区别,有点忘记了,回来后便看了一下。
参考博客资料:NLP中词向量对比:word2vec/glove/fastText/elmo/GPT/bert
该博客的目录:
想知道具体的解释,可以点进上方的链接!
一、文本表示和各词向量间的对比
1、文本表示哪些方法?
2、怎么从语言模型理解词向量?怎么理解分布式假设?
3、传统的词向量有什么问题?怎么解决?各种词向量的特点是什么?
4、word2vec和NNLM对比有什么区别?(word2vec vs NNLM)
5、word2vec和fastText对比有什么区别?(word2vec vs fastText)
6、glove和word2vec、 LSA对比有什么区别?(word2vec vs glove vs LSA)
7、 elmo、GPT、bert三者之间有什么区别?(elmo vs GPT vs bert)
二、深入解剖word2vec
1、word2vec的两种模型分别是什么?
2、word2vec的两种优化方法是什么?它们的目标函数怎样确定的?训练过程又是怎样的?
三、深入解剖Glove详解
1、GloVe构建过程是怎样的?
2、GloVe的训练过程是怎样的?
3、Glove损失函数是如何确定的?
四、深入解剖bert(与elmo和GPT比较)
1、为什么bert采取的是双向Transformer Encoder,而不叫decoder?
2、elmo、GPT和bert在单双向语言模型处理上的不同之处?
3、bert构建双向语言模型不是很简单吗?不也可以直接像elmo拼接Transformer decoder吗?
4、为什么要采取Marked LM,而不直接应用Transformer Encoder?
5、bert为什么并不总是用实际的[MASK]token替换被“masked”的词汇?
1、词的离散化表示:
词的独热表示(one -hot representation)是将每一个词写成一个N维的向量,其中只有一个分量为1,其他为零。N代表的是现有语料库的词汇表的大小。这种方法被称为词的离散化表示,单离散表示有很大的缺点:维数灾难,内存占用大,速度慢。 所以引出将词表示成一个定长的连续的稠密向量,词向量形式。
2、词向量表示
基于此,学者们提出了分布式的词表现形式,即词向量。它主要拥有以下优点:
- 预训练获得,习得一个好的词向量可以在多个任务中被继续使用
- 可以表示单词之间的联系和差异,让模型更好地“读”懂单词和句子
- 它是一个定长连续的稠密向量,占用资源少,计算速度快
直观理解:目前业界常用的是谷歌的300维词向量(即用一个300维的列向量来表示一个单词),它通常是通过神经网络训练而来的。若是将这些高维词进行降维处理并投影到坐标上,可以看到相近的词会倾向集中在一起,无关的词会远离,反映了词向量下单词的联系与差异。
词向量的缺点:
诚然,我们在上文已经看到词向量的种种优点了,但是词向量也仍然有着它的缺点。
- 可解释性较弱 ,我们没办法确切知道各个维度代表什么含义,这使它看起来有点黑箱。
- 多义词歧义问题。我们知道一个单词是可以有多重含义的,比如苹果,它既可以代表我们日常使用的苹果,也可以代表乔布斯老爷子的苹果公司。而这两重含义在我们的日常语料中都是大量存在的,而词向量在学习的过程中强行把这两种含义放在一个词向量里面,这就使得它变得有点“不伦不类”,谁都不像。
- 偏见问题 。这个其实本身并非是词向量的问题,而是人类的问题。词向量是通过人们的语料进行学习的,它在学习的时候是没有辨别能力的,所以它可能会学到人们的一些缺点,比如性别歧视、种族歧视和地域歧视等等。
3.Word2Vec向量表示:【CBOW 和 Skip-Gram表示】
这两种有着相似的思想,只是在实现方面有一些差异,且word2vec属于神经网络语言模型(NNLM)中的一个特例,