词袋模型(BOW, bag of words)
词集模型:单词构成的集合,每个单词只出现一次。
词袋模型:把每一个单词都进行统计,同时计算每个单词出现的次数。
在train_x中,总共有6篇文档,每一行代表一个样本即一篇文档。我们的目标是将train_x转化为可训练矩阵,即生成每个样本的词向量。可以对train_x分别建立词集模型,词袋模型来解决。
train_x = [["my", "dog", "has", "flea", "problems", "help", "please"],
["maybe", "not", "take", "him", "to", "dog", "park", "stupid"],
["my", "dalmation", "is", "so", "cute", "I", "love", "him"],
["stop", "posting", "stupid", "worthless", "garbage"],
["him", "licks", "ate", "my", "steak", "how", "to", "stop", "him"],
["quit", "buying", "worthless", "dog", "food", "stupid"]]
1. 词集模型
算法步骤:
1)整合所有的单词到一个集合中,假设最终生成的集合长度为wordSetLen = 31。
2)假设文档/样本数为sampleCnt = 6,则建立一个sampleCnt * wordSetLen = 6 * 31的矩阵,这个矩阵被填入有效值之后,就是最终的可训练矩阵m。
3)遍历矩阵m,填入0,1有效值。0代表当前列的单词没有出现在当前行的样本/文档中,1代表当前列的单词出现在当前行的样本/文档中。
4)最终生成一个6 * 31的可训练矩阵。
2. 词袋模型
词袋模型中,训练矩阵不仅仅只出现0,1还会出现其他数字,这些数字代表的是当前样本中单词出现的次数。
- # -*- coding: utf-8 -*-
- import numpy as np
- def load_data():
- """ 1. 导入train_x, train_y """
- train_x = [["my", "dog", "has", "flea", "problems", "help", "please"],
- ["maybe", "not", "take", "him", "to", "dog", "park", "stupid"],
- ["my", "dalmation", "is", "so", "cute", "I", "love", "him"],
- ["stop", "posting", "stupid", "worthless", "garbage"],
- ["him", "licks", "ate", "my", "steak", "how", "to", "stop", "him"],
- ["quit", "buying", "worthless", "dog", "food", "stupid"]]
- label = [0, 1, 0, 1, 0, 1]
- return train_x, label
- def setOfWord(train_x):
- """ 2. 所有单词不重复的汇总到一个列表
- train_x: 文档合集, 一个样本构成一个文档
- wordSet: 所有单词生成的集合的列表
- """
- wordList = []
- length = len(train_x)
- for sample in range(length):
- wordList.extend(train_x[sample])
- wordSet = list(set(wordList))
- return wordSet
- def create_wordVec(sample, wordSet, mode="wordSet"):
- """ 3. 将一个样本生成一个词向量 """
- length = len(wordSet)
- wordVec = [0] * length
- if mode == "wordSet":
- for i in range(length):
- if wordSet[i] in sample:
- wordVec[i] = 1
- elif mode == "wordBag":
- for i in range(length):
- for j in range(len(sample)):
- if sample[j] == wordSet[i]:
- wordVec[i] += 1
- else:
- raise(Exception("The mode must be wordSet or wordBag."))
- return wordVec
- def main(mode="wordSet"):
- train_x, label = load_data()
- wordSet = setOfWord(train_x)
- sampleCnt = len(train_x)
- train_matrix = []
- for i in range(sampleCnt):
- train_matrix.append(create_wordVec(train_x[i], wordSet, "wordBag"))
- return train_matrix
- if __name__ == "__main__":
- train_x, label = load_data()
- wordSet = setOfWord(train_x)
- train_matrix = main("wordSet")
词袋模型的提出是为了解决文档分类,主要应用在 NLP(Natural Language Process), IR(Information Retrival),CV(Computer Vision)等领域。
以计算机视觉领域为例进行讲解。
模型假设
一个文本或文档可以看做是一袋子单词,不考虑其语法和词序关系,每个词都是独立的。(这里要尤其注意,BoW不考虑词序的时间和空间上的信息)
示例
这样两个文本
John likes to watch movies. Mary likes too.
John also likes to watch football games.
对以上构造词典:
{
"John": 1,
"likes": 2,
"to": 3,
"watch": 4,
"movies": 5,
"also": 6,
"football": 7,
"games": 8,
"Mary": 9,
"too": 10
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
则之前的两个文本可以表示为
[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
[1, 1, 1, 1, 0, 1, 1, 1, 0, 0]
上面这种向量的表示方法,就是词袋模型了,其中每个分量表示该词在文本中出现的次数,可以看到词序信息已经丢失,每个文档看做一系列不相关的词的集合。
应用举例
在计算机视觉领域,图片分类是很典型的应用,在视觉分类系统中,由于图像的特征并非像文档中能够直接对单词进行赋值,一般直接对图像的像素进行特征表示,得到特征向量。因此需要四人步骤:特征检测-特征表示-词汇表生成-分类器设计,一般的特征表示大都采用局部不变特征表示方法(SIFT特征)进行特征表示。
例如,一个图片可以由若干个local features(或者叫做patch)表示,用K-means方法把相似的patch聚类,每个聚类中心叫做 codeword,类比于 NLP 中的 word;同样的,图片就类比文本文档。用每个图片得到的 codeword 构建词典,叫做 codebook,得到真正无冗余的特征表示-视觉词袋,类比 NLP 中的词典。随后结合视觉词袋和词频概念得到每个待分类图像的词袋直方图模型对图像进行表示,如下图,之后依次训练分类器,对新输入的图像进行分类。
词袋模型(BOW, bag of words)的更多相关文章
- 计算机视觉中的词袋模型(Bow,Bag-of-words)
计算机视觉中的词袋模型(Bow,Bag-of-words) Bag-of-words 读 'xw20084898的专栏'的blogBag-of-words model in computer visi ...
- 第十九节、基于传统图像处理的目标检测与识别(词袋模型BOW+SVM附代码)
在上一节.我们已经介绍了使用HOG和SVM实现目标检测和识别,这一节我们将介绍使用词袋模型BOW和SVM实现目标检测和识别. 一 词袋介绍 词袋模型(Bag-Of-Word)的概念最初不是针对计算机视 ...
- 词袋模型bow和词向量模型word2vec
在自然语言处理和文本分析的问题中,词袋(Bag of Words, BOW)和词向量(Word Embedding)是两种最常用的模型.更准确地说,词向量只能表征单个词,如果要表示文本,需要做一些额外 ...
- 视觉单词模型、词袋模型BoW
多用于图像检索.分类 3.2.1.4 视觉单词模型 视觉词袋(BoVW,Bag of Visual Words)模型,是“词袋”(BoW,Bag of Words)模型从自然语言处理与分析领域向图像处 ...
- 文本离散表示(一):词袋模型(bag of words)
一.文本表示 文本表示的意思是把字词处理成向量或矩阵,以便计算机能进行处理.文本表示是自然语言处理的开始环节. 文本表示按照细粒度划分,一般可分为字级别.词语级别和句子级别的文本表示.字级别(char ...
- NLP基础——词集模型(SOW)和词袋模型(BOW)
(1)词集模型(Set Of Words): 单词构成的集合,集合自然每个元素都只有一个,也即词集中的每个单词都只有一个. (2)词袋模型(Bag Of Words): 如果一个单词在文档中出现不止一 ...
- 机器学习---文本特征提取之词袋模型(Machine Learning Text Feature Extraction Bag of Words)
假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...
- 文本特征提取---词袋模型,TF-IDF模型,N-gram模型(Text Feature Extraction Bag of Words TF-IDF N-gram )
假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...
- NLP入门(一)词袋模型及句子相似度
本文作为笔者NLP入门系列文章第一篇,以后我们就要步入NLP时代. 本文将会介绍NLP中常见的词袋模型(Bag of Words)以及如何利用词袋模型来计算句子间的相似度(余弦相似度,cosi ...
- 文本向量化及词袋模型 - NLP学习(3-1)
分词(Tokenization) - NLP学习(1) N-grams模型.停顿词(stopwords)和标准化处理 - NLP学习(2) 之前我们都了解了如何对文本进行处理:(1)如用NLTK文 ...
随机推荐
- java_3选择与循环
1.三种执行顺序(流程控制语句) 在Java中,有三种执行结构,第一种:顺序结构.第二种:循环结构.第三种:选择结构. 2.顺序结构 自上而下,顺序执行. 3.循环结构 (1)while语句 初始化表 ...
- TabLayout+ViewPager的简单使用
1. build.gradle文件中加入 compile 'com.android.support:design:22.2.0' 2.写Xml文件,注意TabLayout的三个属性 app:tab ...
- select into tb_temp2 from tb_temp1 创建临时表实现上一个、下一个功能,使用完毕就删除临时表
好久没有写过Sql了,今天遇到一个问题,业务逻辑是: 一个商品可以属于多个分类,在显示商品详情的时候,要求可以点击“上一个”,“下一个” 查看和该商品在同一个分类下的其他商品,商品具有排序号. 这样我 ...
- Android开发日常-listVIiew嵌套webView回显阅读位置
详情页布局结构 需求是回显webview展示网页的阅读位置 方案1: 使用webview.getScrollY()获取滑动到的位置,用setScrollY()回显设置, 但是两个方法都出现了问题,g ...
- 12.Mysql存储过程和函数
12.存储过程和函数12.1 什么是存储过程和函数存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数简化应用开发人员的工作,减少数据在数据库和应用服务器之间的传输, ...
- PAT 1001 害死人不偿命的(3n+1)猜想 (15)(C++&JAVA&Python)
1001 害死人不偿命的(3n+1)猜想 (15)(15 分) 卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反 ...
- RabbitMQ消息队列(一):详细介绍
1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...
- BZOJ1925或洛谷2467 [SDOI2010]地精部落
BZOJ原题链接 洛谷原题链接 先讲下关于波动数列的\(3\)个性质. 性质\(1\):对于数列中的每一对\(i\)和\(i + 1\),若它们不相邻,那么交换这两个数形成的依旧是一个波动数列. 性质 ...
- PC 上的 LVM 灾难修复
LVM 介绍 LVM 简介 LVM 是逻辑盘卷管理(Logical Volume Manager)的简称,最早是 IBM 为 AIX 研发的存储管理机制.LVM 通过在硬盘和分区之间建立一个逻辑层,可 ...
- ui设计教程分享:关于Logo设计要素
1. 视觉上”一语双关 我最喜欢的一些Logo在视觉设计上”一语双关”,将两张图片.两张意象巧妙结合,合二为一. WinePlace 的Logo就是一个绝佳的案例 这个Logo看起来像图钉,暗喻着 ...