在NLP任务中我们要把文字表示成计算机能够运算的数字或向量。主要分为两类:一类是离散表示,另一类是分布式表示。
离散表示有三种方法:
① One-hot编码
在一个语料库中,给每个字、词编码一个索引,根据索引进行one-hot表示。
假定给定词典:[我们,去,爬山,今天,你们,昨天,跑步]
每个单词的表示为:
我们:[1,0,0,0,0,0,0]
爬山:[0,0,1,0,0,0,0]
注意:把每个词表示为一个长向量,长度是词典长度,不同词的向量表示互相正交(正交是两向量的内积等于0),无法表达单词与单词之间的相似程度。词向量只能反映某个词是否在句子中出现过,无法衡量不同词的重要程度。
② Boolean Representation
一段文本只考虑用一个装着这些词的袋子来表示,只在乎这个词在语料库中有没有出现过。不考虑文法以及词的顺序。
假定给定词典:[我们,又,去,爬山,今天,你们,昨天,跑步]
表示“我们 今天 去 爬山”句子为:[1,0,1,1,1,0,0,0]
③ Count-based Representation
一段文本只考虑用一个装着这些词的袋子来表示,不考虑文法以及词的顺序,只关注每次词出现的次数。
假定给定词典:[我们,又,去,爬山,今天,你们,昨天,跑步]
表示“你们 又 去 爬山 又 去 跑步”句子为:[0,2,2,1,0,1,0,1]
注意:② ③ 可以统称为词袋表示,忽略词的位置信息,词的位置不一样语义会有很大的差别。
分布式表示
word embedding指的是将词转化为一种分布式表示,又称词向量。它可以表示词之间存在的相似关系,词向量能够包含更多信息,并且每一维都有特定的含义。
怎么学习词向量?后续章节将会继续给出