词袋模型(bag of words,BOW)

前言

词袋模型是自然语言处理中在建模文本时常用的文本表示方法。

简单例子

维基百科上的给出如下的例子:
John likes to watch movies. Mary likes too.
John also likes to watch football games.
将上面的两句话中看作一个文档集,列出文档中出现的所有单词(忽略大小写与标点符号):
“John” “likes” "to “watch” “movies” “also” “football” "games "Mary“ “too”
将其构建为如下一个词典 (dictionary):
{“John”: 1, “likes”: 2,“to”: 3, “watch”: 4, “movies”: 5,“also”: 6, “football”: 7, “games”: 8,“Mary”: 9, “too”: 10}
这是一个包含15个单词预料库中10个单词的词汇。
因为我们知道词汇表有10个单词,所以我们可以使用10的固定长度文档表示,在向量中有一个位置来对每个单词进行评分。最简单的评分方法是将单词的存在标记为布尔值,0表示缺席,1表示存在。使用我们词汇表中上面列出的单词的任意排序,我们浏览第一个文档(John likes to watch movies. Mary likes too.)并将其转换为二进制向量。
转换如下:
“John”: 1
“likes”: 2
“to”: 1
“watch”: 1
“movies”: 1
“also”: 0
“football”: 0
“games”:0
“Mary”: 1
“too”: 1
那么这个二进制向量,就是这样:
1,2,1,1,1,0,0,0,1,1
这个向量共包含10个元素, 其中第i个元素表示字典中第i个单词在句子中出现的次数。
另外一个文本可以表示为:1, 1, 1, 1, 0, 1, 1, 1, 0, 0

本demo实现的是基于bow原理对图片进行分类,并实现对选取得测试集进行查找 BoW(Bag of Words)模型最初被用在文本分类中,将文档表示成特征矢量。它的基本思想是假定对于一个文本,忽略其序和语法、句法,仅仅将其看做是一些汇的集合,而文本中的每个汇都是独立的。简单说就是讲每篇文档都看成一个子(因为里面装的都是汇,所以称为Bag of words即因此而来),然后看这个子里装的都是些什么汇,将其分类。如果文档中猪、马、牛、羊、山谷、土地、拖拉机这样的汇多些,而银行、大厦、汽车、公园这样的汇少些,我们就倾向于判断它是一篇描绘乡村的文档,而不是描述城镇的。 serachFeatures.py中,前面主要是一些通过parse使得可以在敲命令行的时候可以向里面传递参数,后面就是提取SIFT特征,然后聚类,计算TF和IDF,得到单直方图后再做一下L2归一化。一般在一幅图像中提取的到SIFT特征点是非常多的,而如果图像库很大的话,SIFT特征点会非常非常的多,直接聚类是非常困难的(内存不够,计算速度非常慢),所以,为了解决这个问题,可以以牺牲检索精度为代价,在聚类的时候先对SIFT做降采样处理。最后对一些在在线查询时会用到的变量保存下来。对于某个图像库,我们可以在命令行里通过下面命令生成BoF。 query.py只能每次查找一张图片,并返回与之匹配度(递减)最接近的6张图片
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值