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编码方式中无法体现。
来源:oschina
链接:https://my.oschina.net/u/4351216/blog/3201338