今天看了@皮果提的word2vec中的数学原理详解,受益匪浅,终于搞清楚了一直以来零零散散看的语言模型、n-gram、词向量、word2vec、CRF之间的关系,并且对word2vec的理解深入了一个level,用本篇博文来对要点总结,详细了解请移步原博文word2vec中的数学原理详解。
一、语言模型与n-gram、词向量、word2vec、HMM、CRF之间的关系
- 语言模型一般是指统计语言模型,是用来计算一个句子的概率的概率模型:
- 语言模型通常基于语料库来构建,通过Bayes公式来链式分解成多个语言模型参数的乘积:
- 链式分解后的语言模型参数可以通过n-gram模型、决策树、最大熵模型、最大熵马尔科夫链、条件随机场、神经概率语言模型等方法来计算得到。
> n-gram假设一个词的出现概率仅与它之前的n-1个词有关系,将概率值计算好存储下来,下次计算只需要找到相关的概率参数连乘
> 神经概率语言模型构造含参数的(对数)似然函数,并将其最大化来得到相应的训练好的参数,不同的神经网络方法就不同在对于似然函数构造的不同
神经概率语言模型相比于n-gram的优势在于:1.在用的时候不需要存储相关的概率参数,直接计算似然函数即可;2.词语之间的相似性可以通过词向量体现;3.自带平滑化功能,不需要像n-gram那样额外平滑处理。 - 在训练语言模型的过程中通常会得到副产品——词向量。
- 词向量有one-hot representation和distributed representation两种,其中distributed representation由Hinton在1986年提出,与one-hot representation相比的优势在于:短向量、在词向量空间中有距离的概念能够引入相似性。
- 词向量可以由LSA、LDA、神经网络算法等得到,其中基于神经网络的方法由百度IDL的徐伟提出、最经典的是Bengio在2003年的论文"A Neural Probabilistic Language Model"(这也是word2vec的前身)、现在最常用的是谷歌Tomas Mikolov团队的word2vec。word2vec是目前最常用的一种词向量,但并不是唯一的一种词向量。
二、word2vec
word2vec由谷歌Tomas Mikolov团队在“Exploiting Similarities among Languages for Machine Translation"中提出,是目前最常用的一种词向量,但并不是唯一的一种词向量。word2vec有CBoW(Continuous Bag-of-Words Model)和Skip-gram(Continous Skip-gram Model)两种模型,其中CBoW是两边推中间、Skip-gram是中间推两边
;每种模型又可由Hierarchical Softmax和Negative Sampling两种结构导出,其中Hierarchical Softmax采用Huffman树将Bengio输出层的softmax计算简化为多层二分类、Negative Sampling采用随机负采样来得到负样本(也即不想要预测得到的词)进行训练。
1. Bengio在2003年的论文"A Neural Probabilistic Language Model"(word2vec的前身)
2. CBoW + Hierarchical Softmax
其中,
3. Skip-gram + Hierarchical Softmax
其中,
4. CBoW + Negative Sampling
5. Skip-gram + Negative Sampling
三、fastText
fastText是由Facebook开源的工具包,网址在:https://fasttext.cc/,代码在:https://github.com/facebookresearch/fastText。fastText主要有两个功能(摘自https://jepsonwong.github.io/2018/05/02/fastText/):
- 训练词向量,相对于word2vec来说,增加了subwords特性。subwords其实就是一个词的character-level的n-gram。比如单词”hello”,长度至少为3的char-level的ngram有”hel”,”ell”,”llo”,”hell”,”ello”以及本身”hello”。
- 文本分类,一层word embedding的隐层+输出层。