语料小(小于一亿词,约 500MB 的文本文件)的时候用 Skip-gram 模型,语料大的时候用 CBOW 模型。
负采样的本质在于生成K个噪声。它的本质是基于中心词生成正确的背景词概率为1,生成噪声词概率为0,这个是我们的优化方向。
负采样和霍夫曼都是讲Softmax转化为二分类的问题从而降低了复杂度。负采样是针对是不是背景词做二分类,霍夫曼是在对是不是正确路径上的节点做二分类。
fastText 在使用负采样的skip-gram模型基础上,讲每个中心词视为子词(subword)的集合,并学习子词的词向量。
第一个是Bag of Tricks for Efficient TextClassification(201607)。它解决的问题是使用Fasttext进行文本分类
第二个是Enriching Word Vectors with Subword Information(201607) 。它解决的是使用Fasttext训练词向量。
Fasttext用在文本分类,模型架构使用的是CBOW的变种
这里和Word2vec的CBOW有两个区别:
第一,使用类别标签替换了中心词。
第二,使用句子中所有单词作为输入,而不再是单单的针对滑动窗口中的单词。
fasttext 训练词向量的时候一般是使用Skip-gram模型的变种。在用作文本分类的时候,一般是使用CBOW的变种。
1、有没有使用自己的数据训练过Word2vec,详细说一下过程。包括但是不限于:语料如何获取,清理以及语料的大小,超参数的选择及其原因,词表以及维度大小,训练时长等等细节点。
Word2vec模型是如何获得词向量的?聊一聊你对词嵌入的理解?如何理解分布式假设?
如何评估训练出来的词向量的好坏
Word2vec模型如何做到增量训练
大致聊一下 word2vec这个模型的细节,包括但不限于:两种模型以及两种优化方法(大致聊一下就可以,下面会详细问)
解释一下 hierarchical softmax 的流程(CBOW and Skip-gram)
基于6,可以展开问一下模型如何获取输入层,有没有隐层,输出层是什么情况。
基于6,可以展开问输出层为何选择霍夫曼树,它有什么优点,为何不选择其他的二叉树
基于6,可以问该模型的复杂度是多少,目标函数分别是什么,如何做到更新梯度(尤其是如何更新输入向量的梯度)
基于6,可以展开问一下 hierarchical softmax 这个模型 有什么缺点
聊一下负采样模型优点(为什么使用负采样技术)
如何对输入进行负采样(负采样的具体实施细节是什么)
负采样模型对应的目标函数分别是什么(CBOW and Skip-gram)
CBOW和skip-gram相较而言,彼此相对适合哪些场景
有没有使用Word2vec计算过句子的相似度,效果如何,有什么细节可以分享出来
详细聊一下Glove细节,它是如何进行训练的?有什么优点?什么场景下适合使用?与Word2vec相比,有什么区别(比如损失函数)?
详细聊一下Fasttext细节,每一层都代表了什么?它与Wod2vec的区别在哪里?什么情况下适合使用Fasttext这个模型?
ELMO的原理是什么?以及它的两个阶段分别如何应用?(第一阶段如何预训练,第二阶段如何在下游任务使用)
ELMO的损失函数是什么?它是一个双向语言模型吗?为什么?
ELMO的优缺点分别是什么?为什么可以做到一词多义的效果?
引文:
https://zhuanlan.zhihu.com/p/56382372
一、文本表示和各词向量间的对比
1、文本表示哪些方法?
2、怎么从语言模型理解词向量?怎么理解分布式假设?
one-hot是可认为是最为简单的词向量,但存在维度灾难和语义鸿沟等问题
通过构建共现矩阵并利用SVD求解构建词向量,则计算复杂度高
分布式假设,用一句话可以表达:相同上下文语境的词有似含义
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的两种模型分别是什么?
skip-gram和CBOW
2、word2vec的两种优化方法是什么?它们的目标函数怎样确定的?训练过程又是怎样的?
hierarchical softmax 和negative sampling
三、深入解剖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”的词汇?