BoW学习笔记

本文深入介绍了BoW(词袋)模型在自然语言处理和计算机视觉领域的应用,涵盖文本表示、图像分类、目标识别等核心内容,同时提供了丰富的参考资料。

BoW(词袋)简介:(统计频率,无顺序)

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

应用于文本的BoW model:

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

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]

这两个向量共包含10个元素, 其中第i个元素表示字典中第i个单词在句子中出现的次数. 因此BoW模型可认为是一种统计直方图 (histogram). 在文本检索和处理应用中, 可以通过该模型很方便的计算词频.

这种表示有几个成功的应用程序,例如电子邮件过滤。

相关基础详细部分:

[翻译]词袋模型入门:https://blog.youkuaiyun.com/android_ruben/article/details/78238483

 

应用于计算机视觉中的BoW model:

图像可以类比为文档(document), 图像中的单词(words)可以定义为一个图像块(image patch)的特征向量. 那么图像的BoW模型即是 “图像中所有图像块的特征向量得到的直方图”.

建立BoW模型主要分为如下几个步骤:(与文本处理相似)

1. 特征提取

假设有N张图像, 第i张图像图像可由n(i)个image patch组成, 也即可以由n(i)个特征向量表达. 则总共能得到sum(n(i))个特征向量(即单词).

特征向量可以根据特征问题自行设计, 常用特征有Color histogram, SIFT, LBP等.

2. 生成字典/码本(codebook)

对上一步得到的特征向量进行聚类(可以使用K-means等聚类方法), 得到K个聚类中心, 用聚类中心构建码本。(通过聚类方法,生成词袋)

3. 根据码本生成直方图

对每张图片, 通过最近邻计算该图片的每个 “单词”应该属于codebook中的 “哪一类”单词, 从而得到该图片对应于该码本的BoW表示.

 

BOW可视化(此部分为转载引用:http://www.cnblogs.com/zyly/p/9796600.html

  • 假设我们有三个目标类,分别是人脸、自行车和吉他。首先从图像中提取出相互独立的视觉词汇(假设使用SIFT方法):

通过观察会发现,同一类目标的不同实例之间虽然存在差异,但我们仍然可以找到它们之间的一些共同的地方,比如说人脸,虽然说不同人的脸差别比较大,但眼睛,嘴,鼻子等一些比较细小的部位,却观察不到太大差别,我们可以把这些不同实例之间共同的部位提取出来,作为识别这一类目标的视觉词汇。

  • 将所有的视觉词汇集合在一起:

  • 利用K-means算法构造词汇字典。K-means算法是一种基于样本间相似性度量的间接聚类方法,此算法以kk为参数,把nn个对象分为kk个簇,以使簇内具有较高的相似度,而簇间相似度较低。SIFT算法提取的视觉词汇向量之间根据距离的远近,可以利用K-Means算法将词义相近的词汇合并,作为词汇字典中的基础词汇,假定我们将kk设为4,那么词汇字典的构建过程如下:

  • 利用词汇字典的中词汇表示图像。利用SIFT算法,可以从每幅图像中提取很多个特征点,这些特征点都可以用词汇字典中的词汇近似代替,通过统计词汇字典中每个词汇在图像中出现的次数,可以将图像表示成为一个$k=4$维数值向量:

上图中,我们从人脸、自行车和吉他三个目标类图像中提取出的不同视觉词汇,而构造的词汇字典中,会把词义相近的视觉词汇合并为同一类,经过合并,词汇表中只包含了四个视觉词汇,分别按索引值标记为1,2,3,4。通过观察可以看到,它们分别属于自行车、人脸、吉他、人脸类。统计这些词汇在不同目标类中出现的次数可以得到每幅图像的直方图表示(我们假定存在误差,实际情况亦不外如此):

人脸:  [3,30,3,20]
自行车:[20,3,3,2]
吉他:  [8,12,32,7]

其实这个过程非常简单,就是针对人脸、自行车和吉他这三个文档,抽取出相似的部分(或者词义相近的视觉词汇合并为同一类),构造一个字典,字典中包含4个视觉单词,即:

dic = {1:'自行车',
       2:'人脸', 
       3:'吉他', 
       4:'人脸类'}

最终人脸、自行车和吉他这三个文档皆可以用一个4维向量表示,最后根据三个文档相应部分出现的次数绘制对应的直方图。
需要说明的是,以上过程只是针对三个目标类非常简单的一个示例,实际应用中,为了达到较好的效果,单词表中的词汇数量kk往往非常庞大,并且目标类数目越多,对应的kk值也越大,一般情况下,kk的取值在几百到上千,在这里取k=4k=4仅仅是为了方便说明。

 

超级全的讲解,包括目标识别、目标检测(有图有代码):

第十九节、基于传统图像处理的目标检测与识别(词袋模型BOW+SVM附代码)http://www.cnblogs.com/zyly/p/9796600.html

简介BoW实现图像分类,与提取所有特征的算法相比较,举了狗狗眼睛的例子:

BoW实现图像分类报告:https://www.jianshu.com/p/8f68bdfac93c

简介BoW用于图像检索的流程

BoW用于图像检索的一般化流程:BoW用于图像检索的一般化流程

算法解析(过程步骤很细):

计算机视觉课程作业 基于词袋模型的图像分类算法:https://blog.youkuaiyun.com/baidu_28563321/article/details/46348439

MATLAB实现:

视觉词袋模型BOW学习笔记及matlab编程实现:https://blog.youkuaiyun.com/gdengden/article/details/80702007

本文参考:

https://www.cnblogs.com/scnucs/p/3161961.html

BoW(词袋)模型详细介绍:https://blog.youkuaiyun.com/u010213393/article/details/40987945(有代码下载链接)

### 深度学习与自然语言处理中的文本向量化 #### ### 1. 文本向量化的基础概念 在自然语言处理(NLP)领域,文本向量化是将文本数据转换为数值形式的过程,以便机器能够理解和处理这些数据。早期的方法包括独热编码(One-Hot Encoding),但这种方法会导致维度灾难,即当词汇表规模较大时,生成的向量维度会非常高,计算和存储成本显著增加[^1]。 为了解决这一问题,研究者提出了词嵌入(Word Embedding)技术,它将高维的独热向量映射到低维的稠密向量空间中。这种低维表示不仅减少了维度,还能够捕捉词语之间的语义关系[^2]。 #### ### 2. 常见的文本向量化方法 以下是几种常见的文本向量化方法及其特点: - **独热编码**:每个词用一个唯一的向量表示,向量的长度等于词汇表的大小,仅有一个位置为1,其余位置为0。虽然简单直接,但存在维度灾难的问题。 - **词袋模型(Bag of Words, BoW)**:统计文档中每个词的出现频率,并将其作为特征向量。BoW 忽略了词序信息,可能丢失上下文含义[^4]。 - **TF-IDF**:基于词频(Term Frequency, TF)和逆文档频率(Inverse Document Frequency, IDF)来衡量词的重要性。相比 BoW,TF-IDF 更加注重区分性特征[^4]。 - **词嵌入(Word Embedding)**:通过训练神经网络模型得到的低维稠密向量表示,能够有效捕捉词语间的语义关系。常用的词嵌入方法包括 Word2Vec、GloVe 和 FastText 等[^3]。 #### ### 3. 基于深度学习的文本向量化方法 随着深度学习的发展,越来越多的模型被应用于文本向量化任务中。以下是一些典型的深度学习模型: - **循环神经网络(RNN)**:RNN 能够处理序列数据,适用于建模句子或文档等具有顺序结构的文本数据。然而,标准 RNN 存在梯度消失和梯度爆炸的问题。 - **长短时记忆网络(LSTM)**:LSTM 是一种改进版的 RNN,通过引入门控机制解决了长期依赖问题,能够更好地捕捉长距离依赖关系。 - **卷积神经网络(CNN)**:尽管 CNN 最初用于图像处理,但在 NLP 中也表现出色。通过滑动窗口提取局部特征,CNN 可以快速捕获短语级别的模式[^1]。 - **Transformer 模型**:Transformer 使用自注意力机制(Self-Attention Mechanism)代替传统的 RNN 结构,能够在并行化训练的同时有效建模全局上下文信息。BERT、GPT 等预训练模型均基于 Transformer 架构[^3]。 #### ### 4. 实现文本向量化的代码示例 以下是一个使用 `gensim` 库实现 Word2Vec 的代码示例: ```python from gensim.models import Word2Vec # 示例句子 sentences = [["我", "喜欢", "自然", "语言", "处理"], ["深度", "学习", "很", "有用"]] # 训练 Word2Vec 模型 model = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4) # 获取词向量 vector = model.wv["自然"] print(vector) ``` #### ### 5. 预训练模型的应用 近年来,预训练模型如 BERT、GPT 等在 NLP 领域取得了显著成果。这些模型通过在大规模语料库上进行无监督学习,获得了丰富的语言知识。在具体任务中,可以通过微调预训练模型来快速适应特定场景,从而减少对标注数据的需求[^3]。 以下是一个使用 Hugging Face 的 `transformers` 库加载并微调 BERT 模型的示例: ```python from transformers import BertTokenizer, TFBertForSequenceClassification import tensorflow as tf # 示例文本和标签 texts = ["我喜欢这部电影", "这部电影很无聊"] labels = [1, 0] # 加载 tokenizer 和预训练模型 tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = TFBertForSequenceClassification.from_pretrained('bert-base-chinese') # 对文本进行编码 inputs = tokenizer(texts, return_tensors="tf", padding=True, truncation=True, max_length=128) # 创建数据集 dataset = tf.data.Dataset.from_tensor_slices((dict(inputs), labels)).batch(2) # 编译模型 model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=5e-5), loss=model.compute_loss, metrics=['accuracy']) # 训练模型 model.fit(dataset, epochs=3) ``` ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值