BoW词袋模型

自然语言处理(NLP)

Posted by TkiChus on February 11, 2019

简单词袋模型

BoW模型:

Bag-of-words model (BoW model) 最早出现在自然语言处理(Natural Language Processing)和信息检索(Information Retrieval)领域.。该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的。BoW使用一组无序的单词(words)来表达一段文字或一个文档.。近年来,BoW模型被广泛应用于计算机视觉中。

基于文本的BoW模型的一个简单例子如下:

首先给出两个简单的文本文档如下:

        John likes to watch movies. Mary likes too.

        John also likes to watch football games.

基于上述两个文档中出现的单词,构建如下一个词典 (dictionary):

       {“John”: 1, “likes”: 2,”to”: 3, “watch”: 4, “movies”: 5,”also”: 6, “football”: 7, “games”: 8,”Mary”: 9, “too”: 10}

上面的词典中包含10个单词, 每个单词有唯一的索引, 那么每个文本我们可以使用一个10维的向量来表示。如下:

       [1, 2, 1, 1, 1, 0, 0, 0, 1, 1]

       [1, 1,1, 1, 0, 1, 1, 1, 0, 0]

该向量与原来文本中单词出现的顺序没有关系,而是词典中每个单词在文本中出现的频率。

BoW模型应用于图像的表示:(图象更加直观的说明问题)

为了表示一副图像,我们可以将图像看做文档,即若干个视觉词汇 的集合,同样的,视觉词汇相互之间没有顺序。

下面的是经过分解后的 视觉词汇

视觉词典的生成流程

由于图像中的词汇不像文本文档中那样现成,我们需要提取出相互独立的视觉词汇,通常有三个步骤:

1.特征检测

2.特征表示

3.单词本的生成

下图是提取出的相互独立的视觉词汇:(利用sift方法,每一个图片提取出来的特征不是只有一个,是很多的特征向量,也就是特征集,下面是三张图片的特征,这些特征实际是向量,向量表示的就是图片上这些可视化的部分)

通过观察我们会发现, 同一类目标的不同实例之间虽然存在差异,但是他们之间还是有很多共同的地方,比如说自行车,后轮的轮胎和前轮的轮胎的部分,他是相似的,像脚蹬和车架之间就存在很大差异,我们可以把这些不同实例之间共同的部位提取出来,作为识别这一类目标的词汇。

构建BoW单词本的步骤:

利用K-Means算法构造单词表,用K-Means对第二部中提取的N个SIFT特征进行聚类,K-Means算法基于样本件相似性度量的间接聚类方法,此算法以K为参数,把N个对象分为K个簇, 以使得簇内具有较高的相似度,而簇间相似度较低。聚类中心有K个(在BoW模型中聚类中心我们称之为视觉词),码本(单词本)的长度为K,计算每一副图像的每一个SIFT特征到这K个视觉词的距离,并将其映射到距离最近的视觉词中(即将该视觉词的对应词频率加1)[离那个最近,我们就认为他们是一类,离眼睛近我们就认为他是眼睛的一种]。完成这一步之后,每一副图像就变成了一个与视觉词序列相对应的词频矢量。

假定我们将K设为4, 那么单词表的构造如下所示:

l利用K-Means聚类,生成的类其实是相似的特征(各种各样的眼睛,但是说到底还是眼睛)

接下来利用单词表中的词汇表示图像,使用SIFT算法, 可以从每副图像中提取很多个特征点,这些特征点都可以用单词表中的单词近似替代,通过统计单词表中每个单词在图像中出现的次数,可以将图像便是为一个K = 4维数值的向量。将这些特征映射到为单词本(码本)矢量, 码本矢量归一化,最后计算其域训练码本的距离, 对应最近距离的训练图像认为与测试图像匹配。

下图就是经过匹配的结果图:

下图说明聚类之后有4个类,这样每个图的SIFT特征,就可以归为这四个类,这样就可以有一个词袋模型的向量出来了。

我们从人脸,自行车和小提琴三个目标类图像中提取到的不同的视觉词汇,而构造的词汇表中,会把近义词的视觉词汇进行合并为同一类,经过合并, 词汇表中只包含了四类视觉单词,分别按照索引值标记为1, 2, 3, 4、通过观察可以看到,他们分别属于 自行车,人脸,小提琴,人脸类。统计这些词汇在不同目标类中出先的次数可以得到每副图像的直方图表示, 可以很明显的看出分类结果。

其实这个过程也比较加单那,就是针对人脸,自行车和小提琴这三个文档,抽取出相似的部分(或者词义相近的视觉词汇合并为同一类),构造一个词典,此单中包含四个视觉单词,Dictionary = {1:”自行车”, 2. “人脸”, 3. “吉他”, 4. “人脸类”}, 最终人脸,自行车和小提琴这三个文档都可以使用一个四维向量表示,最终根据三个文档相应部分出现的次数化成上面的直方图。一般情况下,K值取值都在几百甚至几千几万,这里取4是为了方便说明一些。

~~小结一下:

  • 1.利用SIFT算法从不同类别的图像中提取视觉词汇向量,这些向量代表的是图像中局部不变的特征点。
  • 2.将所有特征点向量集合到一块,利用K-Means算法和兴词义相近的视觉词汇,构造一个包含K个词汇的单词表
  • 3.统计单词表中的每个单词在图像中出现的次数,从而将图像表示为一个K维数值向量