词嵌入
-
什么是Embedding
Embedding在数学上表示一个maping, , 也就是一个映射函数。通俗的翻译可以认为是向量嵌入,就是把X所属空间的向量映射为到Y空间的多维向量,那么该多维向量相当于嵌入到Y所属空间中,一个萝卜一个坑。 -
为什么词嵌入
在NLP任务中,我们所遇到的最原始的输入,可能是语音片段(各种智障音箱),也可能是文字片段(智障小冰),要想通过算法完成分类等任务,必须先将输入转换为算法模型可以处理的形式:向量. -
什么是词嵌入
词嵌入(Word Embeding)是用向量来表述词的方式,我个人的理解是,将高维度的原始词向量进行降维处理,同时加入语义信息与上下文信息.这里的词,一般指对原始文本进行分词后得到的最小片段,最近两年的很多工作已经跳过了分词的过程,直接做字符级的嵌入,我们的系统在迭代过程中也做了这样的尝试,并且取得了不错的效果.
可以说,词嵌入是NLP任务中的基础工作,也是非常关键的一环,词嵌入的好坏直接影响算法模型的效果. -
近年主要工作
最原始的词嵌入方式是onehot,这种方式简单粗暴,并且在某些任务上取得了不错的效果.但是却有非常致命的缺点:只有统计学的意义,无法表征语义,比如沙雕永远不可能被理解为傻吊;此外当词典变大时,向量长度也随之变大,并且词嵌入的结果非常的稀疏,严重影响算法的准度与训练速度.
2001年, Bengio 等人正式提出神经网络语言模型( Neural Network Language Model ,NNLM),该模型在学习语言模型的同时,也得到了词向量。
词嵌入研究兴起的主力应该就是谷歌于2013年开源的word2vec了, 后面又出现了fasttext, glove等,去年出了两个影响力较大的与训练词嵌入模型:ELMo与BERT, 暂时没有非常有效的应用.此外,针对中文的词嵌入,还有腾讯AIlab与蚂蚁金融提出的基于文字图像的嵌入模型,实用性未知.
Word2Vec从提出至今,已经成为了深度学习在自然语言处理中的基础部件,大大小小、形形色色的DL模型在表示词、短语、句子、段落等文本要素时都需要用word2vec来做word-level的embedding。Word2Vec的作者Tomas Mikolov是一位产出多篇高质量paper的学者,从RNNLM、Word2Vec再到最近流行的FastText都与他息息相关。一个人对同一个问题的研究可能会持续很多年,而每一年的研究成果都可能会给同行带来新的启发,本期的PaperWeekly将会分享其中三篇代表作,分别是:
1、Efficient Estimation of Word Representation in Vector Space, 2013
2、Distributed Representations of Sentences and Documents, 2014
3、Enriching Word Vectors with Subword Information, 2016
word2vec原理
word2vec主要解决什么问题?
简而言之,如何在一个大型数据集上通过无监督学习快速、准确地学习出词表示.
word2vec是怎么做的?
利用训练语料使用cbow或者skip-gram构建一个单层的神经网络分类器,最终隐藏层的参数向量就是对应词的词向量。
这里从知乎上的一个回答里,得到两张图,可以比较好的解释其训练过程。
可以看出来,训练过程中只构建了最浅层的的神经网络,输入为one-hot后的向量,输出也为对应的词,实际上作者针对One-hot的问题使用了Hoffman树进行优化。
Cbow与skipgram
- cbow
cbow(continuous bag-of-words)也就是连续词袋模型。简而言之就是用语料中,某个词w左右的n个词去预测w.
所以使用模型描述就是 - skipgram
skipgram与cbow的思路正好相反,使用每个词去预测其上下文的概率.因此使用模型描述就是
简单的图对比二者
cbow与skipgram对比
那么,如何模型的输入与输出分别是什么?
输入是根据词典构建的一个初始化词向量, 输出是预测得到的词的词向量.作者使用了霍夫曼编码对softmax过程进行了优化,也就是后面即将提到的层次softmax.
下面介绍霍夫曼编码.
霍夫曼编码
霍夫曼编码实际上是信息论领域的一种无损压缩的可变长编码算法.这里有几个关键词: 无损压缩, 可变长.不难发现, 首先霍夫曼编码本质上是一种压缩算法,能对信息进行无损的压缩;其次是可变长, 体现在霍夫曼编码是以来源符号出现的频率来进行编码的,并且出现频率越高,编码的比特越少,这样使得最终对所有数据的编码长度之和最小.
- 霍夫曼编码的构建思路
通过霍夫曼树(最优二叉树)来逐步构建霍夫曼编码, 霍夫曼树是一种带权路径长度最短的二叉树,其中树的路径长度是从根到每一节点的路径长度之和.
二叉树的带权路径长度记为:
其中,为节点权值,为节点路径长度 - 霍夫曼算法[1]
根据霍夫曼树的定义,要使wpl值越小, 必须使权值越大的节点越靠近根节点,不难发现,其实这是一种贪心的思想.由此得到霍夫曼算法的步骤如下:
(1)根据给定的n个权值,构造n棵只有根节点的二叉树.
(2)在森林中选取两颗根节点权值最小的树作为左右子树,得到的新的树的根节点权值为其左右子树根节点权值之和.权值较小的树放左侧.
(3)在森林中删除(2)中选择的两棵树,同时加入新的树.
(4)重复(2)(3)直至只有一棵树.
示例:
霍夫曼编码示例
在word2vec中,使用左侧为1右侧为0,示例中的a就对应1,b对应01,c对应001,d对应000
Hierarchical Softmax
-
传统的NNLM
从传统的nnml(神经网络语言模型)说起,通常是简单只包含一个隐藏层的分类器,在计算过程中,由于需要计算每个词的softmax概率,因此输出层的计算量相当大[2].如图
传统的NNLM - word2vec的特点
word2vec的本质也是一种NNLM,但是作者在基本的NNLM之上,做了一些改进:[2]
(1)输入层到隐藏层的映射,没有使用线性变换+激活函数,而是采用简单的对所有输入词向量求和并取平均.
(2)从隐藏层到输出的softmax层,为了避免计算每个词的softmax概率,word2vec采用了霍夫曼树来代替从隐藏层到输出层的映射. - 一些分析
如上图,如果使用传统的NNLM,softmax层的计算复杂度为,而进行编码后需要预测的类别数的期望值为,因此计算复杂度至少降低为
参考文献
[1]简单爱_wxg.霍夫曼树[EB/OL].https://www.cnblogs.com/wxgblogs/p/5604853.html,2016-06-21.
[2]刘建平Pinard.word2vec原理(二) 基于Hierarchical Softmax的模型[EB/OL].https://www.cnblogs.com/pinard/p/7243513.html,2017-07-27.
网友评论