为了进行自然语言处理(NLP),我们首先就是能把文字转化为数字表示。这时,我们就要用到词表征。词表征研究的是如何用一个向量表示一个词。比如我们之前说的one-hot encoding就是一种词表征。

One-Hot Encoding

one-hot encoding是把单词作为离散变量对待,单词之间是独立没有联系的。这种编码方式并不能表示词之间的更深层次的联系。比如“妈妈” 和 “母亲”,以及“妈妈” 和 “铅笔”,在 one-hot encoding里并不能看出“妈妈”和“母亲”的关系更强。

Word embedding 词嵌入

为了解决One-Hot Encoding把词之间的关系割裂的问题,我们引入word embedding这个概念。原来在one-hot encoding里我们一个向量的维度是由字典所含单词数决定的,虽然维度很多,但是对于一个单词来说,表征向量只有一个维度的信息有用。在word embedding里,你可以想象我们有比较少的维度,比如300个维度。但是每个词在每个维度的都是有信息量的。比如向量的300个维度分别代表这个词所表示的(重量,密度,体积,速度,性别,温度,年龄,颜色,时间,材质,是否是动词,是否是名词,是否是褒义词,是否可以食用,是否是玩具….)。然后我们根据每个词自身的含义,填写这300个维度的值。你可以想象,妈妈和母亲,可能在绝大多数的维度上的值都是一样的。你可以想象有一个300个维度的空间,你把每一个单词根据它在这300个维度的值,放到这个空间里。在这个空间里,“妈妈”和“母亲”一定比“妈妈”和“铅笔”离的近得多。

300个维度很难可视化,你可以用t-SNE 这样的算法,把高纬空间的值投射到2维空间。比如下边,使用了词嵌入后的一些单词,经过t-SNE转化后,我们可以看到不同的词之间的关系:

可以看到,描述同一种类的词,经过词嵌入后,他们之间的距离更近。这也意味着他们的词表征向量更相似。同时词向量所含元素更少,但是信息量更高。

词嵌入的好处

如果你已经有所有单词的word embedding的向量表示。你可以自己训练,或者从网上去下载别人生成的word embedding后的结果。
然后你有一个训练任务,就是根据用户留言判断用户性别。你的有标签的数据并不多。比如你只有1万条数据,其中大约5000条是标记为女性留言。另外5000条标记为男性留言。你的模型发现女性留言里出现水果名比较多,比如“今天早上我吃了一个苹果”。而男生留言里出现体育运动名比较多,“晚上我要去踢足球”。好了,假设你的模型比较简单。就是如果一句话里有“苹果”,就认为这个用户是女生。如果有“足球”就是男生。如果你用one-hot encoding,下边的两句话你的模型将无法判断:
“今天早上我吃了一个水蜜桃。”
“晚上我要去打篮球。”
但是如果我们用词嵌入呢?因为“水蜜桃”和“苹果”在词嵌入里,它们的表示肯定很多维度都一样。所以encoding后的向量也非常相似,对于你的模型输出也就类似。会输出这是一个女性留言。也就是说,你只用了少数有限的数据来训练你的模型,但是因为word embedding encoding你的模型拥有了泛化的能力。这也是一种迁移学习。

词之间的关系

词嵌入还有一个令人惊奇的特性就是,它可以做关系推断。比如,根据下表中我们把Man,Woman,King,Queen四个词在Gender,Royal,Age,Food四个维度上的embedding,我们得到了四个单词的word embedding 的编码。

Man的向量表示:[-1,0.01,0.03,0.09]
Woman的向量表示:[1,0.02,0.02,0.01]

King的向量表示:[-0.95,0.93,0.70,0.02]
Queen的向量表示:[0.97,0.95,0.69,0.01]

如果有一个人问你,如果男人对应女人,那么国王对应什么?你可能会回答,“王后”。这其中的关系我们明白,同样word embedding后的词之间也有这种隐含关系。
那就是 Man-Woman 约等于 King-Queen。 我们用Man的词向量减去Woman的词向量。得到表示它们之间的关系的向量[Man-Woman]。然后我们用King减去这个关系向量得到一个词向量[King-[Man-Woman]],然后在所有word embedding的词向量里,Queen是离[King-[Man-Woman]]最近的词向量。并且这不是偶然的,实验表明,它可以发现如下的相似性:
男人->女人 = 男孩->女孩
中国->北京 = 日本->东京
中国->人民币 = 美元->美国

看来词嵌入的好处不少,接下来我们就看看如何生成词嵌入的编码。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

%d 博主赞过: