编码

任何信息在计算机内的存储方式都是数字,更加具体的说是0-1的二进制码。为了能够让生活中的语言能够存储于计算机中,我们会给所有的字符(包括字母字符,汉子等所有的其他语言文字)一个编码方式,比如小写字母a在计算机中编码的十进制是97,大写字母A的编码是65。只要每个字符的编码能够区别于其他的字符就行。当然为了处理更加复杂的问题,比如单词,词语。同样需要用“数字”去表示它们。这里的数字就是指向量。

one-hot 表示

one-hot词表示方式是构造与词字典相同长度的向量,所有的词按照一定次序,向量的某个维度不为0,表示该位置的词。也就是说词向量的表示其中一位不为0,其余的都是零。
例如:
字典只有5个词
V = {“don’t”, “hate”, “I”, “it”, “love”}
e.g. : hate=[0,1,0,0,0], it=[0,0,0,1,0]

对于一句话可以有两种表示方式:一种是将对于的词向量拼接起来,还有一种是计算句子中每个词出现的频数。
D=”I love it”
sequential 表示方式:[00100 | 00001 | 00010]
bag of words(BOW)表示方式:[00111]

seq的表示方式具有词序的信息,长度是随着句子的长度增长而 增长,而bow表示方式没有词序信息,但是长度固定。

对于one-hot的表示方式存在以下的三点缺点:

  • 每个词的向量长度等于词汇表的长度,英语常见单词50000,中文的更加多,常见的词汇至少500000。对于seq的表示方式将是无法接受的。
  • 虽然BOW的长度固定,但是BOW的表示方式没有词序。
  • 这种表示方式丧失了词的语义信息。

word2vec (Distributed representation)

word2vec就是一种word 的低维表示方式,或者称为distributed representation.[1],[2]
这两篇Paper都是Google 的 Tomas Mikolov 2013年的工作,并公布了代码。他提出了两个模型CBOW和Skip-gram。其实更早做word 的distributed representation的是 bengio 2003 年的paper “A Neural Probabilistic Language Model”[3]

word2vec方法有两个重要的特点,一个是速度快,另一个是具有语义信息,如果两个词的含义比较接近的话,它们在向量空间也比较接近;并且能够得到如下的类似于”A-B = C-D”,比如“中国- 北京 = 法国-巴黎”,即北京市中国的首都,巴黎是法国的首都。word2vec得到的向量是低维的,一般维度在50-200维,相比于one-hot的几万维甚至几十万维大大降低了存储效率。word2vec的出现也为后来的自然语言理解的研究提供了极大的便利。

参考

[1].Distributed Representations of Words and Phrases and their Compositionality
[2].Efficient Estimation of Word Representations in Vector Space
[3].A Neural Probabilistic Language Model