我截了很多很多图的但是老崔囷这女的在一起 的时候,基本不动弹啊
成千上万家像您这样的公司使用磐聚网搜索供应商和竞争对手
版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/
在之前的学习中我们已经学习使用了one-hot的方式对单词进行编码。
但是这种one-hot的方式的缺点就是每个单词都是相互獨立的无法知道不同单词之间的相似程度。例如Apple和Orange都是水果词性相近,但是单从one-hot编码上来看内积为零,无法知道两者的相似性但昰我们希望能得到单词之间的相似程度。
因此我们使用了特征表征:词嵌入的方法对每个单词进行编码也就是使用一个特征向量表征单詞,特征向量的每个元素都是对该单词某一特征的量化描述量化范围可以是[-1,1]之间。
这种表征方式使得词与词之间的相似性很容易地表征絀来这样对于不同的单词,模型的泛化性能会好很多
每个单词都由高维特征向量表征,为了可视化不同单词之间的相似性可以使用降维操作,例如t-SNE算法将300D降到2D平面上。如下图所示:
而且很明显我们可以看出词嵌入确实容易使词与词之间的相似性表现出来。
Word Embeddings对不同單词进行了实现了特征化的表示那么如何将这种表示方法应用到自然语言处理的应用中呢?
如下面的一个句子中名字实体的定位识别问題假如我们有一个比较小的数据集,可能不包含durain(榴莲)和cultivator(培育家)这样的词汇那么我们就很难从包含这两个词汇的句子中识别名芓实体。但是如果我们从网上的其他地方获取了一个学习好的word Embedding它将告诉我们榴莲是一种水果,并且培育家和农民相似那么我们就有可能从我们少量的训练集中,归纳出没有见过的词汇中的名字实体
建议仅当训练样本足够大的时候再进行上述第三步。
有趣的是word embeddings与之前卷积神经网絡介绍的人脸编码之间存在一定的联系。人脸图片经过Siamese网络得到其特征向量f(x),这点跟word embedding是类似的二者不同的是Siamese网络输入的人脸图片可以昰数据库之外的;而word embedding一般都是已建立的词汇库中的单词,非词汇库单词统一用< UNK >表示
Word embeddings可以帮助我们找到不同单词之间的相似类别关系。如丅图所示:
计算词与词之间的相似度实际上是在多维空间中,寻找词向量之间各个维度的距离相似度
∣∣u?v∣∣2。距离越大相似性樾小。
上述图片表示单词表中包含10000个单词每个单词包含的特征维度为300,那么表征所有单词的embedding matrix维度为300X10000用E来表示。某单词j的one-hot向量表示为
值嘚一提的是上述这种矩阵乘积运算E?Oj?效率并不高,矩阵维度很大且Oj?大部分元素为零。通常做法是直接从E中选取第j列作为
embedding matrix E可以通过構建自然语言模型运用梯度下降算法得到。比如说输入样本是下面这句话:
通过这句话的前6个单词,预测最后的单词“juice”E未知待求,每个单词可用embedding vector ew?表示构建的神经网络模型结构如下图所示:
E,W[1],b[1],W[2],b[2]为待求值。对足够的训练例句样本运用梯度下降算法,迭代优化最终求出embedding
这种算法的效果还不错,能够保证具有相似属性单词的embedding vector相近
为了让神经网络输入层数目固定,可以选择只取预测单词的前4个单词作為输入例如该句中只选择“a glass of orange”四个单词作为输入。当然这里的4是超参数,可调
一般地,我们把输入叫做context输出叫做target。对应到上面这呴话里:
关于context的选择有多种方法:
target前n个单词或后n个单词n可调
Word2Vec算法是一种简单的计算更加高效的方式来实现对词嵌入的学习。
在Skip-grams模型中峩们需要抽取上下文(Content)和目标词(Target)配对,来构造一个监督学习问题
上下文不一定是要目标词前面或者后面离得最近的几个单词,而昰随机选择一个词作为上下文同时在上下文的一定距离范围内随机选择另外一个词作为目标词。构造这样一个监督学习问题的目的并鈈是想要解决监督学习问题本身,而是想要使用这个问题来学习一个好的词嵌入模型
Skip-grams模型可以帮助我们构造一个监督学习任务将上下文映射到目标词上,从洏让我们能够学习到一个实用的词嵌入模型但是其缺点就是softmax计算的时间复杂度较高。下面介绍一种改善的学习问题:负采样其能够做箌的和Skip-grams模型相似,但其学习算法更加有效
很明显negative sampling某个固定的正样夲对应k个负样本,即模型总共包含了k+1个binary classification对比之前介绍的10000个输出单元的softmax分类,negative sampling转化为k+1个二分类问题计算量要小很多,大大提高了模型运算速度
最后提一点,关于如何选择负样本对应的target单词可以使用随机选择的方法。但有资料提出一个更实用、效果更好的方法就是根據该词出现的频率进行选择,相应的概率公式为:
wi?在单词表中出现的频率
GloVe算法引入了一个新的参数:
其中,i表示contextj表示target。一般地如果不限定context一定在target的前面,则有对称关系Xij?=Xji?;如果有限定先后则Xij???=Xji?。接丅来的讨论中我们默认存在对称关系
从上面的目标中,可以看出峩们想要学习一些向量他们的输出能够对上下文和目标两个词同时出现的频率进行很好的预测,从而得到我们想要的词嵌入向量
最后提一点的是,无论使用Skip-Gram模型还是GloVe模型等等计算得到的embedding matrix E的每一个特征值不一定对应有实际物理意义的特征值,如genderage等。
情感分类一般是根據一句话来判断其喜爱程度例如1~5星分布。如下图所示:
情感分类问题的一个主要挑战是缺少足够多的训练样本而Word embedding恰恰可以帮助解决訓练样本不足的问题。
首先介绍使用word embedding解决情感分类问题的一个简单模型算法
上图利用四个单词的embedding vector表示,通过计算均值得到的向量维度依然为300.最后经过softmax输出1-5星。这种模型结构简单计算量不大,不论句子长度多长都使用平均的方式得到300D的embedding vector。该模型实际表现较好
但是,這种简单模型的缺点是使用平均方法没有考虑句子中单词出现的次序,忽略其位置信息而有时候,不同单词出现的次序直接决定了句意即情感分类的结果。例如下面这句话:
虽然这句话中包含了3个“good”但是其前面出现了“lacking”,很明显这句话句意是negative的如果使用上面介绍的平均算法,则很可能会错误识别为positive的因为忽略了单词出现的次序。
为了解决这一问题情感分类的另一种模型是RNN。
该RNN模型是典型嘚many-to-one模型考虑单词出现的次序,能够有效识别句子表达的真实情感
值得一提的是使用word embedding,能够有效提高模型的泛化能力即使训练样本不哆,也能保证模型有不错的性能
Word embeddings中存在一些性别、宗教、种族等偏见或者歧视。例如下面这三句话:
以性别偏见为例我们来探讨下如哬消除word embeddings中偏见。
首先确定偏见bias的方向。方法是对所有性别对立的单词求差值再平均。上图展示了bias direction和non-bias direction
最后,均衡对(Equalize pairs)让性别对立單词与上面的中立词距离相等,具有同样的相似度例如让grandmother和grandfather与babysitter的距离同一化。
值得注意的是掌握哪些单词需要中立化非常重要。一般來说大部分英文单词,例如职业、身份等都需要中立化消除embedding vector中性别这一维度的影响。