word embedding范围非常广泛,内容很多,所以先从基础的背景知识讲起。这个系列准备分为四部分:
一、背景知识
二、word2vec
三、fasttext
四、Wsabie和TagSpace
词向量
最初的词向量是one-hot形式的向量,即只有单词所在的那一维是1,其他维都是0,向量长度和词汇表大小一样。缺点显而易见,容易造成维度灾难,并且对词语之间的语义关系起不到任何表达作用。所以考虑用稠密的实数向量来对词语进行表示。
于是后来就有人提出用稠密实数向量来表示词语,如下图所示:
这样可以被计算机理解,如果能找到比较好的映射方法,那么能够很好地表示语义相关性。学习出来的wordembedding每一维度不会像图中所示一样具有特定的意思。
如果将词向量降维成2维画散点图,有
可以看到,虽然是不同的语言体系,可是相同语义的词语分布形式是基本一致的。
2.统计语言模型
一个文本W的概率为P(W),W表示由T个词wi按顺序构成的一个句子:
利用贝叶斯公式可以被分解为下式,,w的上下标意思是从下标位置的词到上标位置的词组成的文本
利用大数定理可以将概率近似为词语出现的频率
利用最大似然可以将目标函数设为下式,
context(w)表示模型定义词语w的相关语料,比如ngram就是w的前序文本,word2vec是上下文。
在实际中经常采用最大对数似然,也就是:
3.神经网络语言模型NNLM
图中是NNLM的结构图,输入层(input+projection layer)、隐藏层和输出层。
它的输入是词的context中的词初始化的词向量,输出y每一维是词汇表中每个词的未归一化的log概率而不是词向量。
网络每一层的计算和输出如公式所示
目标函数是让词w的概率最大化
利用梯度上升来求解
这里需要更新的参数是
梯度上升过程中,将词向量也视为参数,进行更新。于是训练后能同时得到词向量和网络中的权重。
它的缺点很明显,从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率。
下一篇中要介绍的word2vec方法就比较机智的提出了两种替代隐层的方法,大大降低了计算量。
本篇有哪里讲得不太清楚欢迎交流~
领取专属 10元无门槛券
私享最新 技术干货