[Word Embedding系列] one-hot 编码

徘徊边缘 提交于 2020-12-29 10:55:00

https://zhuanlan.zhihu.com/p/105357841


本系列文章包括:

1) one-hot编码

2)word2vec的skip-gram模型

3)word2vec的CBOW模型

4)相关编程实现

本文介绍one-hot编码。

一、前言

自然语言处理的目标在于希望计算机能够理解(NLU,Understanding)和生成(NLG,Generating)自然语言。

无论是NLU过程还是NLG过程,与计算机打交道,就需要转换为计算机能够识别的数字编码方式,one-hot编码是其中最简单的一种方法。

二、举例

给定一句话s = “I am a Chinese and I love China”

如何用one-hot来对每一个单词进行编码,为了简单,我们认为s构成了全体单词集合。

我们可以建立一个词汇表如下:

每个单词的one-hot编码获取步骤是:

1)建立一个|V|(代表词汇表总长度)的全零向量

2)将每个单词在词汇表对应的index维度置为1,其它元素保持不变,就能得到最终的one-hot向量

以s = “I am a Chinese and I love China”为例,下图给出了每个单词的one-hot表示:

得到了每个单词的embedding之后,就可以送入到机器学习或者深度学习模型中进行后续处理。

三、缺点

尽管one-hot编码是最简单有效的编码方法,它依然有下面几个缺点:

1)每个单词的one-hot编码维度是整个词汇表的大小,维度非常巨大,编码稀疏,会使得计算代价变大。

2)one-hot编码假设单词与单词之间是独立的,无法体现单词与单词的关系远近程度,例如,如果我们判断“Chinese”和“China”向量之间的相似性,得出的向量内积值为0 ([0,0,0,1,0,0,0]*[0,0,0,0,0,0,1]=0),与对“Chinese”和“and”之间的相似性没有任何区别,因为“Chinese”和“and”之间的one-hot向量内积也为0 ([0,0,0,1,0,0,0]*[0,0,0,0,1,0,0]=0).而明显“China”与“Chinese”的关系要近于“China”与“and”的,这在one-hot编码方式中无法体现。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!