赞
踩
在自然语言处理中,面临的首要问题是如何让模型认识我们的文本信息,比如向模型中输入‘我爱北京天安门’,那模型是如何认识文本的?词,是自然语言处理中基本单位,将数据输入到模型中,尽可能的让模型明白其中的含义,那就面临一个问题:如何表示一个词?
词向量:词向量(Word embedding),又叫Word嵌入式自然语言处理(NLP)中的一组语言建模和特征学习技术的统称,其中来自词汇表的单词或短语被映射到实数的向量。 从概念上讲,它涉及从每个单词一维的空间到具有更低维度的连续向量空间的数学嵌入。
具体来讲就是将词映射成向量的形式,将自然语言转换为向量之间的计算。
在自然语言处理任务中,对于词向量有两种表示方式。第一种:one-hot representation;
第二种:distribution representation。
one-hot 表示方法是把每个词表示为一个长向量。这个向量的维度是词表大小,向量中只有一个维度的值为1,其余维度为0,这个维度就代表了当前的词。
假设用 one-hot对句子进行表示,对句子分词之后,我们可以得到['我‘,’爱‘,’北京‘,’天安门‘],可以用one hot(独热编码)对单词进行编码。具体为:
“我”可以表示为[1,0,0,0]
"爱"可以表示为[0,1,0,0]
'北京'可以表示为[0,0,1,0]
'天安门'可以表示为[0,0,0,1]
通过上述案例我们可以看出,每个单词用一个向量进行编码。用one hot 会存在一下几个问题:
(1)每个向量之间的内积为0,也就是每个向量是互相正交的。原本上下文中存在语义关系的词汇,经过独热编码后,模型无法识别出每个词之间的关系,首先在向量表示层面就失去了原本的语义关系。
(2)维度爆炸。向量的维度和文本中的词语数量相关,例子中的单词数量为4,所以我们的向量表示为1*4。但是在自然语言处理中,往往需要大量的数据,如果词库中存在10万的单词量,那每个单词的向量就表现为10万维。向量的维度过高,会导致模型的训练难度增加,难以收敛。
(3)向量稀疏。通过例子我们可以发现,使用one hot 时,除了当前单词位置的值为1之外,其余位置的值都为0,这样就会带来向量值稀疏的问题,其实还是向量之间(单词)之间没有语义上的联系。
词嵌入(word embedding)将词表示为一种分布式表现的形式。分布式表示将词转化为一个定长(可指定)、稠密并且互相存在语义关系的向量。此处的存在语义关系可以理解为:分布相似的词,是具有相同的语义的。
以Word2Vec为例,介绍分布式表示。
Word2Vec是从大量文本语料中以无监督的方式学习语义知识的一种模型,它被大量地用在自然语言处理(NLP)中。Word2Vec通过学习文本来用词向量的方式表征词的语义信息,即通过一个嵌入空间使得语义上相似的单词在该空间内距离很近。Embedding其实就是一个映射,将单词从原先所属的空间映射到新的多维空间中,也就是把原先词所在空间嵌入到一个新的空间中去。man和woman属于语义上很相近的词,当这两个词映射到新的空间后,得到的嵌入向量(embedded vector)就很接近。如图为woman和man的向量相似度。
“一个词的意思,应该由和他一起出现的周围词来表现,”Word2vec包含两个经典模型:CBOW(Continuous Bag-of-Words)和Skip-gram。通过这两种模型得到词的词向量,两种模型的计算方式存在差异。
2-2-2-1 CBOW
通过上下文词,推理中心词。在上下文已知的情况下,预测中心词出现的概率。使用上下文的词向量推理中心词,中心词的语义就被传递到上下文的词向量中。
具体流程为:
(1)构建神经网络,输入为句子中的某个词(中心词),输出为其他所有词出现在中心词周围的概率。在输出时,输出的词既有和中心词相邻的词或者是在中心词上下文中附近出现过的词(相关词),也会有不相关的各种词。
(2)在训练时,我们希望输出的词就是围绕在中心词周围的词,也就是输出词的概率乘积越大(极大似然)就说明输出词和中心词越相关。在训练网络时,网络的参数矩阵就是输入文本的特征,也就是我们想要得到的词向量。
(3)所以,通过梯度下降法使得输出词的概率乘积尽可能地大,最终在不断的更新下,就得到了所有词的词向量。
示意图如下:
在设定窗口大小为2时,对模型的输入就是中心词两侧的上下文词[爱 北京 天安门 上]去预测[天安门]的输出概率。
2-2-2-2 Skip-Gram
与CBOW的训练方式相反,Skip-Gram是通过中心词来预测上下文词。在中心词已知的情况下,预测上下文词出现的概率。具体流程训练流程与CBOW一致。
在设定窗口大小为2时,对模型的输入就是中心词[天安门]去预测中心词两侧的上下文词[爱 北京 天安门 上]的输出概率。
使用W2v生成的词向量也会存在局限性。W2v默认为在分布上相似的词,意思是接近的,有相同上下文词意思相近,比如'好人'和‘坏人’这两个词向量的相似度就很相近。其实在使用时并不一直如此。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。