word2vec常见考点

目录

1、对比 Skip-gram 和 CBOW哪个速度更快    

(1) 训练速度上 CBOW 应该会更快一点。因为每次会更新 context(w) 的词向量,而 Skip-gram 只更新核心词的词向量。两者的预测时间复杂度分别是 O(V),O(KV)
(2) Skip-gram 对低频词效果比 CBOW好。因为是尝试用当前词去预测上下文,当前词是低频词还是高频词没有区别。但是 CBOW 相当于是完形填空,会选择最常见或者说概率最大的词来补全,因此不太会选择低频词。(想想老师学生的那个例子)Skip-gram 在大一点的数据集可以提取更多的信息。SG 总体比 CBOW 要好一些。

2、fasttext ngram的理解

文章中的n-gram出自Character-level Convolutional Networks for Text Classification[4],是word级别的。与我在word2vec中提到的phrases类似。

  • BOW (Bag-Of-Words):给你一个句子,统计每个词在其中出现的次数,这种表征方法就是BOW。
  • CBOW(Continuous BOW):在BOW前加了个C,是词的连续的分布式的表征(continuous distributed representation)。
  • n-gram (or word n-gram):“我写知乎”,bi-gram就是“我写”,“写知”和“知乎”。
  • character-level n-gram:(中文不太好讲word和character的区别),深入到字母级别,把一个词拆成字母串。Enriching Word Vectors with Subword Information中是character-level n-gram,这里不是。

引入word n-gram可以提升一些任务的表现,原因是标配版中只用word级别求平均值完全忽略了词序,而n-gram保留了小范围的部分词序,对于文本表征是有意义的,从这个角度也可以判断此处的n-gram应当是词级别而不是character级别的。

3、加入字符级别的n-gram如何保留local word order信息的?

n-gram向量是预先训练好的还是说也是随机嵌入矩阵然后再用one-hot来获取。也就是说每个词向量有两种,一个是普通的词向量,一个是用n-gram所表示的词向量。fasttext和word2vec一样,你可以把n-gram也当成一个个的词,然后结合真正的词一起做词典索引,最后转化为onehot形式,只不过n-gram的规模比词库的规模要大得多,所以需要先对n-gram做hash映射,将映射到相同值的不同n-gram公用相同的索引值,即在后面训练中,这些相同索引的n-gram也会共同使用同一个embedding

4、fasttext是什么样的?

word2vec的CBOW模型中将中心词替换为类别标签就得到了fastText。

  • CBOW中词袋的大小由window_size决定,而fastText中就是整个要分类的文本。
  • CBOW实际运行中用Hierarchical softmax,fastText用softmax或Hierarchical softmax,具体试类的数量决定。

5、Word2Vec中skip-gram是什么,Negative Sampling怎么做

Word2Vec通过学习文本然后用词向量的方式表征词的语义信息,然后使得语义相似的单词在嵌入式空间中的距离很近。而在Word2Vec模型中有Skip-Gram和CBOW两种模式,Skip-Gram是给定输入单词来预测上下文,而CBOW与之相反,是给定上下文来预测输入单词。Negative Sampling是对于给定的词,并生成其负采样词集合的一种策略,已知有一个词,这个词可以看做一个正例,而它的上下文词集可以看做是负例,但是负例的样本太多,而在语料库中,各个词出现的频率是不一样的,所以在采样时可以要求高频词选中的概率较大,低频词选中的概率较小,这样就转化为一个带权采样问题,大幅度提高了模型的性能。

6、FastText和Glovec原理

FastText是将句子中的每个词通过一个lookup层映射成词向量,对词向量叠加取平均作为句子的向量,然后直接用线性分类器进行分类,FastText中没有非线性的隐藏层,结构相对简单而且模型训练的更快。

Glovec融合了矩阵分解和全局统计信息的优势,统计语料库的词-词之间的共现矩阵,加快模型的训练速度而且又可以控制词的相对权重。

7、Word2Vec两个算法模型的原理是什么,网络结构怎么画?

Word2Vec有两种网络结构:CBOW和Skip-Gram,CBOW是用上下文预测当前单词,Skip-gram是用当前词预测上下文。

8、网络输入输出是什么?隐藏层的激活函数是什么?输出层的激活函数是什么?

网络的输入是One-Hot向量,通过W_{|V|*|N|}映射到N维的向量,隐藏层无激活函数,输出层有Softmax函数,输出通过W_{|N|*|V|}映射到|V空间,是个概率分布

9、目标函数/损失函数是什么?

cbow 哈夫曼损失函数估计:

cbow负采样目标函数估计:

skipgram 哈夫曼估计:

skipgram负采样估计:

10、层次哈夫曼树的节点表示?

叶节点表示一个单词,每个内部节点有一个输出向量权重矩阵

11、Word2Vec如何获取词向量?

从源码的角度来看,我们是对每个词都初始化了一个词向量作为输入,这个词向量是会随着模型训练而更新的,词向量的维度就是我们想要的维度,比如说200维。

以Skip-gram为例,我们的输入的中心词的词向量其实不是One-hot编码,而是随机初始化的一个词向量,它会随着模型训练而更新。

需要注意的一个细节点是,每个单词都会对应两个词向量,一个是作为中心词的时候的词向量,一个是作为背景词的时候的词向量。大家一般选择第一种。

这一点需要注意区别Glove中的中心词向量和背景词向量。Glove中的中心词向量和背景词向量从理论上来说是等价的,只不过由于初始化的不同,最终结果会略有不同。

12、推导一下Word2Vec参数如何更新?

13、Word2Vec的两个模型哪个效果好哪个速度快?为什么?

skipgram比cbow训练速度更快,每次更新2c个词,cbow比skipgram预测更快,cbow只用预测一个词,skipgram预测c个词。cbow训练从上下文的质心出发,会损失一些信息。skipgram每个单词都会被训练到,不会有信息的损失,因而skipgram的效果相对而言比cbow好。

14、Word2Vec加速训练的方法有哪些?

为了更新向量参数,我们需要先计算误差,然后通过反向传播更新参数,在计算误差时,我们需要遍历所有的单词表,当词库较大时,计算代价非常昂贵。一般有如下三种方式进行更新:

  • Hierarchical Softmax:通过Hierarchical Softmax将复杂度从 O(n) 降为 O(log n);

  • Sub-Sampling Frequent Words:通过采样函数一定概率过滤高频单词;

高频词被过滤的概率p(w_{i})=(\sqrt{\frac{f(w_{i})}{Sample}}+1)\frac{Sample}{f(w_{i})} sample为控制采样参数,一般取0.001,值越小保留的概率越低。单词保留的概率与频率成反比,正好可以过滤掉停用词。

  • Negative Sampling:直接通过采样的方式减少负样本。

15、介绍下Negative Sampling,对词频低的和词频高的单词有什么影响?为什么?

Negative Sampling的思想是以一定概率的选取负样本,使得每次迭代时只需修改一小部分参数,这是典型Categorical Distribution Sampling分布问题——给定一些变量及其概率,随机采样是的其满足变量出现的概率。

负采样概率:p(w_{i})=\frac{f(w_{i}))^{\frac{3}{4}}}{\sum_{j=0}^{n}(f(w_{j})^{\frac{3}{4}})}        3/4是经验所得,之所以这么做可能是为提高一点低频词被采集到的概率。

基于负采样的技术,我们更新的权重只是采样集合,减少了训练量,同时效果上来说,中心词一般来说只和上下文有关,更新其他词的权重并不重要,所以在降低计算量的同时,效果并没有变差。

具体过程为创建两个线段,第一个线段为词表的长度,每个词的长度和频率正比。

第二个线段均分M个,然后随机取整数,整数落在第二个线段那里,然后取第一个线段对应的词,如果碰到是自己,那么就跳过。

16、Word2Vec和隐狄利克雷模型(LDA)有什么区别与联系?

 1、在方法模型上,他们两者是不同的,但是产生的结果从语义上来说,都是相当于近义词的聚类,只不过LDA是基于隐含主题的,WORD2VEC是基于词的上下文的,或者说LDA关注doc和word的共现,而word2vec真正关注的是word和context的共现。

  2、主题模型通过一定的结构调整可以基于”上下文-单词“矩阵进行主题推理。同样的,词嵌入方法也可以根据”文档-单词“矩阵学习出词的隐含向量表示。

  3、加入LDA的结果作为word embeddings的输入,可以增强文章分类效果

17、介绍下Hierarchical Softmax的计算过程,怎么把 Huffman 放到网络中的?参数是如何更新的?对词频低的和词频高的单词有什么影响?为什么?

Hierarchical Softmax利用了Huffman树依据词频建树,词频大的节点离根节点较近,词频低的节点离根节点较远,距离远参数数量就多,在训练的过程中,低频词的路径上的参数能够得到更多的训练,所以效果会更好。

18、Word2Vec有哪些参数,有没有什么调参的建议?

  • Skip-Gram 的速度比CBOW慢一点,小数据集中对低频次的效果更好;
  • Sub-Sampling Frequent Words可以同时提高算法的速度和精度,Sample 建议取值为[10^(-5),10^(-3)] ;
  • Hierarchical Softmax对低词频的更友好;
  • Negative Sampling对高词频更友好;
  • 向量维度一般越高越好,但也不绝对;
  • Window Size,Skip-Gram一般10左右,CBOW一般为5左右。

19、Word2Vec有哪些局限性?

  Word2Vec作为一个简单易用的算法,其也包含了很多局限性:

  • Word2Vec只考虑到上下文信息,而忽略的全局信息;
  • Word2Vec只考虑了上下文的共现性,而忽略的了彼此之间的顺序性;

20、W2V 使用霍夫曼树或者负采样优化后,和原模型是等价的吗,还是近似的 ?

 w2v使用霍夫曼树或者负采样都是近似,目的是为了模型训练加速。

21、w2v、层次softmax、负采样复杂度对比?

我们的目标函数中,最核心的一个部分就是在给定中心词的条件下生成正确背景词的概率,我们要最大化这个东西,公式如下:

仔细看,在分母涉及到了一个V,这里的V就是我们的词典大小。也就是说,为了计算这个条件概率,我们需要对整个词典进行操作,复杂度就是O(|V|)

所以,负采样和霍夫曼就是针对这一个计算开销大的地方进行了优化。当然W2V为了减少计算量,还是去掉了隐层。比如CBOW直接是输入向量求和平均然后接霍夫曼树。比如Skip-gram直接是中心词的词向量接霍夫曼树。

我们先说负采样。负采样的本质在于生成K个噪声。它的本质是基于中心词生成正确的背景词概率为1,生成噪声词概率为0,这个是我们的优化方向。公式如下:

仔细看这个公式,V已经消失,取而代之的是K,也就是我们的噪声词的数量,换句话讲,我们的复杂度被K这个大小限制住了,降低为了O(|K|)

然后我们再来看层序Softmax。它的核心本质是在一条路径上不停的做二分类,概率连乘就会得到我们的条件概率。公式如下:

注意看,这个公式中,V也已经消失了,被霍夫曼树中到达背景词的路径限制住了,这也就是上个文章中说到的,复杂度变成了二叉树的高度: O(log|V|) 

22、Word2vec训练参数的选定?

首先根据具体任务,选一个领域相似的语料,在这个条件下,语料越大越好。然后下载一个 word2vec 的新版(14年9月更新),语料小(小于一亿词,约 500MB 的文本文件)的时候用 Skip-gram 模型,语料大的时候用 CBOW 模型。最后记得设置迭代次数为三五十次,维度至少选 50,就可以了。(引自 《How to Generate a Good Word Embedding》)

23、词向量表示的好处

1、相比于onehot,词向量可以通过向量的乘积来表示

2、相比于ngram,神经网络的词向量自带平滑功能

3、相比于one-hot,词向量表示不会出现维度灾难

24、word2vec负采样为什么是一种负采样?

word2vec负采样是一种带权负采样

高频词、低频次被概率不一样,实际上,高频词被采样的概率更大,故需带权负采样。

25、负采样具体实现?

1)词映射到线段长度

2)词映射到剖分点,实现随机采样

26、负采样采样到的词是中心词本身,怎么办?

跳过去

27、word2vec通过近似计算sigmiod函数提速,及为啥能提速?

28、word2vec词典存储方式

词典是通过hash来存储的,初始时,声明一个vocab_hash_size(3*10^7)来度量词典的大小,通过线性开放地址探测法来解决冲突

29、word2vec低频次处理提速方式是什么样的?

通过min_count参数直接过滤掉在语料库中出现次数小于min_count的词

30、word2vec高频词提速方式是什么样的?

31、word2vec滑动窗口设定

wrd2vec是按行训练的,每次训练一行,一行的最大句子长度默认为1000

32、word2vec自适应学习率

参考文献

fastText(一):从词嵌入到句嵌入 – 知乎(fasttext ngram解析)

https://blog.csdn.net/Wisimer/article/details/104688095 (skip-gram 与cbow比较)

https://www.cnblogs.com/zhangyang520/p/10969975.html (word2vec流程)

【Paper】Word2Vec:词嵌入的一枚银弹   (word2vec11个问题)

Word2Vec详解-公式推导以及代码 – 知乎

Word2Vec详解-公式推导以及代码_kejizuiqianfang的博客-CSDN博客

nlp自然语言处理面试题_努力努力再努力_越努力越幸运的博客-CSDN博客_自然语言处理面试题

Word2vec-负采样/霍夫曼之后模型是否等价-绝对干货

Word2Vec和LDA的区别与联系

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年11月28日
下一篇 2023年11月28日

相关推荐