词袋模型(bag of words)是常用的语言模型,将文档看作文档中所有词的集合,而忽略词的顺序。尽管丢失了词的顺序这一属性, 但这个模型仍然能够有效用于一些自然处理任务中,如文本分类。

N-gram模型是对词袋模型的扩展,N为一个数字,以N=2为例,2-gram模型将文档看作文档中所有相邻两个词这些词对的集合, 也忽略这些词对在文档中出现的顺序。词袋模型是当N=1时的特例。

例子

对于如下文档:

The brown fox jump up the rog.

对应的词袋模型为:

(The, brown, fox, jump, up, the, rog)

对应的2-gram模型为:

((The, brown), (brown, fox), (fox, jump), (jump, up), (up, the), (the, rog))

文档表示

将文档表示成词袋模型后,就可以进行定量的分析。一种简单的方式是判断这个文档中是否出现词汇表中某一个词,因此可以将文档表示成一个由0和1组成的向量。

如果语言的词汇表如下:

(a, boy, the, cute, likes, dog, little, girl)

则文档与向量表示的对应关系如下.

文档 向量表示
a little girl [1, 0, 0, 0, 0, 0, 1, 1]
the body likes the dog [0, 1, 1, 0, 1, 1, 0, 0]

其中向量中的每个元素表示这个文档中是否包含某个词. 如第一向量, 最后一个 1 表示它包含 girl这个词.

进一步的可以考虑词语频率(term frequency, TF)的影响,相当于是在前一个表示的模型新增了词语频率这一信息。 词的频率此时可以作为某种度量的权重.

文档 向量表示
a little girl [1, 0, 0, 0, 0, 0, 1, 1]
the body likes the dog [0, 1, 2, 0, 1, 1, 0, 0]

第二个向量的第三元素值为2,表示 the 在这个文档中出现了两次.

有些词出现的频率非常高,可能在每一篇文档中都会出现,因此引入文档频率(doc frequency, DF), 也即一个词在所有文档中出现的频率。 如果这个频率很高,那么这个词可能是一个停止词, 需要将其移除, 因为它对文档分类没有帮助。

与语言模型的关系

词袋模型是语音模型的一种简化形式。语言模型是给定一个词汇表,然后求所有的词的序列的概率。 词袋模型则是将这个词的序列的范围大大缩小,词的序列只包含由单个词所组成的序列,则每个序列的概率则等于词频率。

语言模型的详细介绍见这里.

在信息检索中的应用

信息检索要解决的问题是:给定一组关键字, 在所有的文档集合中, 返回与关键字相关的所有文档, 并对所有文档根据相关性进行排序.

基本的处理方法为: 首先将所有文档表示为词袋模型,表示为一个向量,然后查询搜索关键字是否包含在这个向量里, 这样便可以计算出所有与给定关键字相关的文档. 排序文档时,可能根据词频-逆文档频率(TF-IDF)进行排序.

在文本分类的应用

使用词袋模型的向量表示将每个文档表示为数学的形式,然后再输入到具体机器学习算法中.