文本表示即通过某种形式将文本字符串表示成计算机所能处理的数值向量。那么为什么要进行文本表示,根本原因是计算机不能直接对文本字符串进行处理,因此需要进行数值化或者向量化。不仅传统的机器学习算法需要这个过程,深度学习也需要这个过程,只不过这个过程可能直接包含在了深度学习网络中。同时,良好的文本表示形式也可以极大的提升算法效果。

文本表示(Representation)

文本是一种非结构化的数据信息,是不可以直接被计算的。

文本表示的作用就是将这些非结构化的信息转化为结构化的信息,这样就可以针对文本信息做计算,来完成我们日常所能见到的文本分类,情感判断等任务。文本表示的方法有很多种,下面只介绍 3 类常见的文本表示方式:

  1. 独热编码 | one-hot representation
  2. 整数编码
  3. 词嵌入 | word embedding

1. 独热编码 | one-hot representation

假如我们要计算的文本中一共出现了4个词:猫、狗、牛、羊。向量里每一个位置都代表一个词。所以用 one-hot 来表示就是:

猫:[1,0,0,0]

狗:[0,1,0,0]

牛:[0,0,1,0]

羊:[0,0,0,1]

但是在实际情况中,文本中很可能出现成千上万个不同的词,这时候向量就会非常长。其中99%以上都是 0。

one-hot 的缺点显而易见:

  • 无法表达词语之间的关系
  • 这种过于稀疏的向量,导致计算和存储的效率都不高

2. 整数编码

这种方式也非常好理解,用一种数字来代表一个词,同样采用上面的例子我们可以得到4个词的整数编码:

猫:1

狗:2

牛:3

羊:4

将句子里的每个词拼起来就是可以表示一句话的向量。整数编码的缺点如下:

  • 无法表达词语之间的关系
  • 对于模型解释而言,整数编码可能具有挑战性。

3. 词嵌入 (Word Embedding)

Word embedding 是自然语言处理中的重要环节,它是一些语言处理模型的统称,并不具体指某种算法或模型。Word embedding 的任务是把词转换成可以计算的向量。从概念上讲,它涉及从每个单词一维的空间到具有更低维度的连续向量空间的数学嵌入。

生成这种映射的方法包括神经网络,单词共生矩阵的降维,概率模型,可解释的知识库方法,和术语的显式表示单词出现的上下文。目前两种主流的 word embedding 算法是Word2vec和GloVe。

Word2vec

这是一种基于统计方法来获得词向量的方法,他是 2013 年由谷歌的 Mikolov 提出了一套新的词嵌入方法。

这种算法有2种训练模式:

  • 通过上下文来预测当前词
  • 通过当前词来预测上下文

GloVe

GloVe 是对 Word2vec 方法的扩展,它将全局统计和 Word2vec 的基于上下文的学习结合了起来。


参考文章:
词嵌入 | Word embedding
自然语言处理—-文本表示