深度学习:NLP之词嵌入(Word Embedding)

文章目录

  • 词嵌入简介
  • 学习算法
    • 朴素算法
    • Word2vec skip-gram模型
    • 负采样法
  • 应用
    • 情感分类

词嵌入简介

在RNN中,我们了解到一种用向量表示单词方法——独热表示法。用一个与词典等长的列向量,只有与该单词在字典中的索引位置对应的地方值为1,其余值皆为0.这样的作法带来了一个弊端,那就是所有词的向量都是相互正交的,网络没有近义词或者同义词的概念。而如果我们能用更高维的特征来描述这些词汇,如形容词、颜色、动物……或者更抽象的属性作为特征值,使得我们对单词的表示更本质,网络就可以建立同义词、反义词这样的概念,实现一个更智能的网络。
深度学习:NLP之词嵌入(Word Embedding)_第1张图片
利用词嵌入,我们可以更好地迁移NLP的学习问题,用海量数据训练词嵌入得到嵌入向量,然后用这些向量进行数据量更小的NLP学习问题。

同时,因为嵌入向量能更本质的描述一个单词的属性,它能够进行类比推理,比如我们发现单词man和woman的嵌入向量之差跟king和queen之间的向量之差是非常相近的。同理它也可以类比一些别的关系,比如国家与首都,原型与比较级等。
深度学习:NLP之词嵌入(Word Embedding)_第2张图片
在词嵌入的训练中,我们要学习的是一个嵌入矩阵 E E E,这是一个嵌入向量与词典结合的矩阵,行坐标为嵌入向量的不同特征,而列坐标为单词在词典中的索引。将嵌入矩阵与独热向量 o o o相乘,就可以得到单词的嵌入向量 e e e
深度学习:NLP之词嵌入(Word Embedding)_第3张图片

学习算法

朴素算法

最直观的思路是,将矩阵 E E E当作神经网络的参数进行学习。对于每个单词,我们用它的独热向量与 E E E相乘,得到一系列嵌入向量 e e e,将这些嵌入向量输入到一个全连通层,再接入一个softmax层,以此来预测下一个单词的概率。更一般的,为了固定输入个数,我们可以约定只考虑该单词前k个位置(也可以包含后k个位置)。
深度学习:NLP之词嵌入(Word Embedding)_第4张图片

Word2vec skip-gram模型

在朴素模型中,我们固定地选取某个范围的上下文来学习嵌入矩阵 E E E,skip-gram模型中,我们的选择会更加随机。我们随机选择一个单词作为语境 c c c,再从 c c c的附近随机选择一个要预测的目标 t t t。虽然这个预测本身看起来很不靠谱,毕竟已知信息太少了,但是它在学习嵌入矩阵方面出人意料地有效。

深度学习:NLP之词嵌入(Word Embedding)_第5张图片
具体地讲,我们从 o c o_c oc出发,与 E E E相乘得到 e c e_c ec,将其传入softmax层(注意该层的参数 θ t \theta_t θt是与预测目标 t t t绑定的),得到关于目标单词的预测 y ^ \hat{y} y^,计算其损失函数并反向传播修正参数。

这个模型每次只输入一个单词,并预测一个单词,但是通过softmax函数的损失函数优化出来的嵌入矩阵 E E E非常不错。不过skip-gram的主要瓶颈在于计算softmax函数是分母要遍历整个字典,计算量非常大。一种解决方法是使用分层softmax函数,用类似二叉树的方法通过多个二元分类器达成多元分类的效果,这样时间复杂度就是log级别的,而且启发式构造的二元分类器(将高频单词放在深度较浅的叶子)效率会更高。

还有要注意的一点就是,如果完全从文段中随机采样,像a,the,of这样的单词出现的频率会远高于其他实意单词,可能需要一些启发式方法来平衡训练中不同词汇的占比。

负采样法

从文段中选取一对比较靠近的词汇作为正样本,然后从词典中随机挑选 k k k个词汇构成负样本(即使随机到的词汇可以作为上下文的合理选项时也无妨)。对于小样本,负样本的个数在5-20之间,大样本情况下负样本只需要2-5个。
深度学习:NLP之词嵌入(Word Embedding)_第6张图片
将这些样本用于训练时,我们同样从 o c o_c oc出发,与 E E E相乘得到 e c e_c ec,但我们不再将其传入softmax层,而是只训练被挑选进样本的 k + 1 k+1 k+1个词的二元分类器,如juice的分类器就只输出预测单词为juice的概率。这样我们就从每次遍历整个词典简化到了每次只训练 k + 1 k+1 k+1个二元分类器。

深度学习:NLP之词嵌入(Word Embedding)_第7张图片
还有一个需要注意的点是,负样本应该如何选取,很多研究者运用的方法是按照词汇出现频率的 3 4 \frac{3}{4} 43次方的占比来采样。

应用

情感分类

通过一段文字来评估作者的情感是积极或消极的,比如把社交媒体上用户的每条评论转换成一个具体的分数:
深度学习:NLP之词嵌入(Word Embedding)_第8张图片
情感分类问题的一个难点是,训练集的规模可能比较小,但是通过词嵌入可以在小数据情形下完成该任务。

一种比较简单的实现是,求出所有单词的嵌入向量,然后对这些嵌入向量求平均,输入到一个softmax分类器中,得到一个评分。
深度学习:NLP之词嵌入(Word Embedding)_第9张图片
但是这样的算法无法联系上下文,对于一些表达比较委婉或者阴阳怪气的评论,就无法正常识别。所以我们可以把RNN添加进来,用多对一模型来综合考虑整个句子。
深度学习:NLP之词嵌入(Word Embedding)_第10张图片

你可能感兴趣的:(深度学习与神经网络,自然语言处理,深度学习,人工智能)