“词袋模型”的理解目录•一、bag-of-words简介•二、bagofvisualwords(视觉词袋模型)•三、bag-of-visual-words模型建立步骤一、bag-of-words简介•Bag-of-words模型是信息检索领域常用的文档表示方法。在信息检索中,BOW模型假定对于一个文档,忽略它的单词顺序和语法、句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的,不依赖于其它单词是否出现。也就是说,文档中任意一个位置出现的任何单词,都不受该文档语意影响而独立选择的。•例如有如下两个文档:①Boblikestoplaybasketball,Jimlikestoo.②Bobalsolikestoplayfootballgames.基于这两个文本文档,构造一个词表:Vocabulary={1.“Bob”,2.“like”,3.“to”,4.“play”,5.“basketball”,6.“also”,7.“football”,8.“games”,9.“Jim”,10.“too”}。这个词表一共包含10个不同的单词,利用词表的索引号,上面两个文档可以用一个10维向量表示(向量中元素为词表中单词在文档中出现的频率):D=[1,2,3,4,5,6,7,8,9,10]①[1,2,1,1,1,0,0,0,1,1]②[1,1,1,1,0,1,1,1,0,0]以上向量也可以用单词的直方图表示:词表就相当于直方图的基,新来的要表述的文档向这个基上映射并不是所有的单词都用来构建词表:①相似的词:相似的单词用一个单词表示。例如“walk,walking,walks”都用“walk”表示。(聚类问题)②禁用的词:像a,an,the等冠词在各个文档中出现的频率都很高,不容易被区分,这类单词在建立词表的时候不被使用。(TF-IDF)TF-IDF(termfrequency–inversedocumentfrequency)是一种统计方法,用以评估一字词对于一个文件集中的其中一份文件的重要程度。主要思想是:如果某个单词在一篇文章中出现的频率(TF)高,并且在其他文章中很少出现(IDF),则认为这个单词具有很好的类别区分能力,适合用来分类。bag-of-words实现步骤1.词汇表的建立:大数据聚类,找到合适的聚类中心点——vocabulary2.样本的训练:对每个文档进行训练,得到每个文档的低维表示;3.新来样本的识别:对新来的样本先用词表中单词得到低维表示,然后用分类器进行分类预测。应用:假设一个巨大的文档集合,里面一共有M个文档,而文档里面的所有单词提取出来后,一起构成一个包含N个单词的词表,利用Bag-of-words模型,每个文档都可以被表示成为一个N维向量,计算机非常擅长于处理数值向量。这样,就可以利用计算机来完成海量文档的分类过程。二、bag-of-visual-words简介•考虑将Bag-of-words模型应用于图像表示,这就是视觉词袋模型。为了表示一幅图像,我们可以将图像看作文档,即若干个“视觉单词”的集合,同样的,视觉单词相互之间没有顺序。图1将Bag-of-words模型应用于图像表示由于图像中的单词不像文本文档中的那样是现成的,我们需要首先从图像中提取出相互独立的视觉单词,这通常需要经过三个步骤:(1)特征检测(2)特征表示(3)词汇表的生成图2从图像中提取出相互独立的视觉单词一个视觉单词SIFT算法是提取图像中局部不变特征的应用最广泛的算法,因此可以用SIFT算法从图像中提取不变特征点,作为视觉单词,并构造词汇表,用词汇表中的单词表示一幅图像。以下举例例讲解一下bag-of-visual-words模型的建立步骤。①利用SIFT算法,从每类图像中提取视觉单词,将所有的视觉单词集合在一起。以SIFT128维为例:假如现在有3张训练图片,对每一张训练图片都提取SIFT的128维特征,那么最终可以得到M=N1+N2+N3个128维的特征,Ni代表第i张图特征点的个数。②利用K-Means算法构造词汇表-vocabulary。K-Means算法是一种基于样本间相似性度量的间接聚类方法,此算法以K为参数,把M个对象分为K个簇,以使簇内具有较高的相似度,而簇间相似度较低。SIFT提取的视觉单词向量,根据距离的远近,可以利用K-Means算法将词义相近的词汇合并,作为词汇表中的基础词汇,假定我们将K设为4,那么词汇表的构造过程如图4所示:三、bag-of-visual-words模型建立步骤1=128sift特征点视觉单词图4:K-means算法:将M个特征向量聚类为4个经过聚类后,词汇表中单词数为4个。③利用视觉词袋量化图像特征,利用词频表示图像。利用SIFT算法,可以从每幅图像中提取很多个特征点,这些特征点都可以用词汇表中的单词近似代替,通过统计词汇表中每个单词在图像中出现的次数,可以将图像表示成为一个K=4维数值向量:人脸:[3,30,3,20]自行车:[20,3,3,2]吉他:[8,12,32,7]每幅图的直方图表示如下:总结一下这个过程就是:针对“人脸、自行车和吉他”这三个文档,抽取出一部分特征,构造一个词表,词表中包含4个视觉单词,即vocabulary={1:”自行车”2.“人脸”3.“吉他”4.“人脸类”},最终“人脸、自行车和吉他”这三个文档皆可以用一个4维向量表示,最后根据三个文档相应部分出现的次数画成对应的直方图。实际应用中,为了达到较好的效果,单词表中的词汇数量K往往非常庞大,并且目标类数目越多,对应的K值也越大,一般情况下,K的取值在几百到上千,在这里取K=4仅仅是为了方便说明。Bag-of-visual-vords模型建好后,对于新来的图像,同样①先提取SIFT特征。②用词表中的单词将图像表示成数值向量直方图。③通过分类器进行分类,看它属于哪一类图片。BOW难免会有出错的时候,识别率大概在60%-80%之间,一方面是数据量巨大的问题,另外一方面也是因为图像之间的相似度高。整体来讲,BOW的识别率还是在可以接受的范围。谢谢!