1. Bag-of-words模型

Bag-of-words模型也叫做“词袋”, Bag-of-words模型是信息检索领域常用的文档表示方法。在信息检索中,BOW模型假定对于一个文档,忽略它的单词顺序和语法、句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的,不依赖于其它单词是否出现。也就是说,文档中任意一个位置出现的任何单词,都不受该文档语意影响而独立选择的。例如有如下两个文档:

1:Bob likes to play basketball, Jim likes too.

2:Bob also likes to play football games.

基于这两个文本文档,构造一个词典:

Dictionary =

{1:”Bob”, 2. “like”, 3. “to”, 4. “play”, 5. “basketball”, 6. “also”, 7. “football”, 8. “games”, 9. “Jim”, 10. “too”}。

这个词典一共包含10个不同的单词,利用词典的索引号,上面两个文档每一个都可以用一个10维向量表示(用整数数字0~n(n为正整数)表示某个单词在文档中出现的次数):

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

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

向量中每个元素表示词典中相关元素在文档中出现的次数(下文中,将用单词的直方图表示)。不过,在构造文档向量的过程中可以看到,我们并没有表达单词在原来句子中出现的次序(这是本Bag-of-words模型的缺点之一,不过瑕不掩瑜甚至在此处无关紧要)。

2. Bag-of-words模型的应用

自然语言处理中应用

现在想象在一个巨大的文档集合D,里面一共有M个文档,而文档里面的所有单词提取出来后,一起构成一个包含N个单词的词典,利用Bag-of-words模型,每个文档都可以被表示成为一个N维向量,计算机非常擅长于处理数值向量。这样,就可以利用计算机来完成海量文档的分类过程。

视觉领域的应用

现在Computer Vision中的Bag of words来表示图像的特征描述也是很流行的。大体思想是这样的,假设有5类图像,每一类中有10幅图像,这样首先对每一幅图像划分成patch(可以是刚性分割也可以是像SIFT基于关键点检测的),这样,每一个图像就由很多个patch表示,每一个patch用一个特征向量来表示,咱就假设用Sift表示的,一幅图像可能会有成百上千个patch,每一个patch特征向量的维数128。
      接下来就要进行构建Bag of words模型了,假设Dictionary词典的Size为100,即有100个词。那么咱们可以用K-means算法对所有的patch进行聚类,k=100,我们知道,等k-means收敛时,我们也得到了每一个cluster最后的质心,那么这100个质心(维数128)就是词典里德100 个词了,词典构建完毕。
      词典构建完了怎么用呢?是这样的,先初始化一个100个bin的初始值为0的直方图h。每一幅图像不是有很多patch么?我们就再次计算这些patch和和每一个质心的距离,看看每一个patch离哪一个质心最近,那么直方图h中相对应的bin就加1,然后计算完这幅图像所有的 patches之后,就得到了一个bin=100的直方图,然后进行归一化,用这个100维的向量来表示这幅图像。对所有图像计算完成之后,就可以进行分类聚类训练预测之类的了。

3. CBOW(Continuous Bag-of-Word)

3.1 One-word context

假设我们vocabulary size 为 V,hidden layer 神经元个数为 N,假设我们只有一个上下文单词,则根据这个上下文单词预测目标词,类似于一个bigram model,如下图所示:

里面的详细推到请看这里

层次softmax (hierarchical softmax)理解_BGoodHabit的博客-CSDN博客_层次softmax​

3.2 Multi-word context

上面介绍了只有一个上下文词的情况,当多个上下文词的情况的时候,只需要将多个上下文词的向量求平均作为输入就行,如下图所示:

其中

h=\frac{1}{C}W^T(x_1+x_2,...,x_C)

前向传递和反向传播请看自然语言处理:词向量之连续词袋模型(The Continuous Bag-of-Words Model,CBOW)_guangyacyb的博客-CSDN博客_连续词袋模型

4. BOW 和CBOW区别

https://arxiv.org/pdf/1301.3781.pdf

为什么作者认为它也是一种词袋模型是因为它与词的顺序无关。上下文相关词求平均映射到隐藏层的时候和上下文中词的顺序无关。

CBOW用的是连续上下文的分布表征。

5. CBOW代码

CBOW模型包含三层:输入层,投影层,输出层。与NNML相比,去掉了隐藏层。

CBOW是根据上下文预测中心词,有点类似于完形填空。上下文的多少是个超参数,可以自己调整。

在构建数据集时,根据CBOW的特点,一般是将上下文当作输入,中心词当作标签。

import torch
from torch import nn, optim
from torch.autograd import Variable
import torch.nn.functional as FCONTEXT_SIZE = 2
raw_text = "We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells.".split(' ')vocab = set(raw_text)
word_to_idx = {word: i for i, word in enumerate(vocab)}data = []
for i in range(CONTEXT_SIZE, len(raw_text)-CONTEXT_SIZE):context = [raw_text[i-2], raw_text[i-1], raw_text[i+1], raw_text[i+2]]target = raw_text[i]data.append((context, target))class CBOW(nn.Module):def __init__(self, n_word, n_dim, context_size):super(CBOW, self).__init__()self.embedding = nn.Embedding(n_word, n_dim)self.linear1 = nn.Linear(2*context_size*n_dim, 128)self.linear2 = nn.Linear(128, n_word)def forward(self, x):x = self.embedding(x)x = x.view(1, -1)x = self.linear1(x)x = F.relu(x, inplace=True)x = self.linear2(x)x = F.log_softmax(x)return xmodel = CBOW(len(word_to_idx), 100, CONTEXT_SIZE)
if torch.cuda.is_available():model = model.cuda()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=1e-3)for epoch in range(40):print('epoch {}'.format(epoch))print('*'*10)running_loss = 0for word in data:context, target = wordcontext = Variable(torch.LongTensor([word_to_idx[i] for i in context]))target = Variable(torch.LongTensor([word_to_idx[target]]))if torch.cuda.is_available():context = context.cuda()target = target.cuda()out = model(context)loss = criterion(out, target)running_loss += loss.dataoptimizer.zero_grad()loss.backward()optimizer.step()print('loss: {:.6f}'.format(running_loss / len(data)))

其它

分布式语义(distributed representation, representing words by their context)

分布式语义的意思是:一个词语的含义是由它周围的词来决定的(a word's meaning is given by the words that frequently appear close-by)。

分布式的意思也意味着,一个dense vector的每一位可以表示多个特征、一个特征也可以由很多位来表示。

我们将每个词语都表示成一个dense vector,使得周围词(context word)相近的两个词的dense vector也相似。这样就可以衡量词语的相似性了。

一个好的word representation 能够把握住词语的syntactic(句法,如主谓宾)与semantic(词语的语义含义)信息,例如,一个优秀的词语表示可以做到:

参考资料

一篇给力的Bag-of-words模型入门介绍文章~_love模式识别-CSDN博客_bag-of-words

词袋BOW与CBOW的区别相关推荐

  1. (01)ORB-SLAM2源码无死角解析-(31) ORB特征匹配→词袋BoW:BRIEF描述子转BoW向量

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  2. tf-idf词向量和bow_使用词袋Bow和TF IDF进行多标签分类

    tf-idf词向量和bow 1.加载数据 (1. Load the data) For this study, we are using Kaggle data for Toxic Comment C ...

  3. SLAM笔记(七)回环检测中的词袋BOW

    1.词频 (摘自阮一峰博客,参见附录参考) 如果某个词很重要,它应该在这篇文章中多次出现.于是,我们进行"词频"(Term Frequency,缩写为TF)统计.考虑到文章有长短之 ...

  4. sklearn TfidfVectorizer、CountVectorizer词袋、 TfidfTransformer词频模型区别及词表、idf获取、cosine计算、bm25相关性

    #搜索query与docs,词表.idf获取.cosine计算 import pandas as pd import numpy as np from sklearn.feature_extracti ...

  5. NLP之BoWNLTK:自然语言处理中常用的技术——词袋法Bow、NLTK库

    NLP之BoW&NLTK:自然语言处理中常用的技术--词袋法Bow.NLTK库 目录 输出结果 实现代码 输出结果 [[0 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 1 0 ...

  6. 词袋 图像检索 matlab,词袋模型BoW图像检索Python实战

    前几天把HABI哈希图像检索工具包更新到V2.0版本后,小白菜又重新回头来用Python搞BoW词袋模型,一方面主要是练练Python,另一方面也是为了CBIR群开讲的关于图像检索群活动第二期而准备的 ...

  7. BoW(词袋Bag of words)

    Bag-of-words词袋模型最初被用在信息检索领域.例如检索一篇文档,只需考虑文档中出现单词的频率,而不用考虑语法语序等.在图像领域,如果把一幅图像当作文档,图像中的图像块的特征向量视为文档内的词 ...

  8. 特征缩放的效果:从词袋到 TF-IDF

    特征缩放的效果:从词袋到 TF-IDF 转载:github 译者:@gin 校对者:@HeYun 字袋易于生成,但远非完美.假设我们平等的统计所有单词,有些不需要的词也会被强调.在第三章提过一个例子, ...

  9. ORB词袋特征提取和匹配

    一.预备知识点 Bag-of-Words ORB特征提取与匹配 5. Bag of Word 作用: 加速匹配 和 回环 在跟踪线程里面 一进来就要对每帧进行词袋的提取 词袋模型是由Node和Word ...

最新文章

  1. 一种基于FPGA 的1080p 高清多摄像头全景视频拼接的泊车(机)
  2. 对WIFI通信的一些理解(经常更新修改)
  3. Windows 8.1 新增控件之 CommandBar
  4. java在画布上画出变量_急..JAVA 在画布上画拖动滚动条可扩大缩小的长方形
  5. ctf的php,CTF中常见的PHP漏洞
  6. 完美运动框架封装函数startMove
  7. 在线JSON压缩工具
  8. 我所期待的易语言2007
  9. Python3 可变对象VS不可变对象、 对象的赋值、深拷贝VS浅拷贝
  10. Microsoft Access 2016安装教程
  11. 拆解iPhone6S---ESM
  12. 【STM32】MDK(keil5)编译后Program Size: Code=5230 RO-data=346 RW-data=52 ZI-data=1845代表什么意思--STM32选型
  13. sql 2000简体中文企业版下载(含SP3 SP4 下载地址)
  14. Android WIFI连接开发 WIFI工具类
  15. abab的四字成语_以abab的四字成语
  16. 测试用例之QA有话说
  17. 阿里巴巴与星巴克合作 AR场景识别首次大规模商用
  18. An工具介绍之宽度工具、变形工具与套索工具
  19. 物联网小试一下——使用阿里云控制Arduino套件灯的开关
  20. 转:企业最稀缺和最具价值的人力资源到底是什么?

热门文章

  1. 双缓冲(double buffering)的原理和使用
  2. java 静态方法 调用非静态方法_java静态方法调用非静态方法
  3. 能源动力专业学计算机课程吗,能源与动力工程课程有哪些
  4. 复习笔记2-计算机软件及使用
  5. 《科研伦理与学术规范》网课第五章课后习题答案
  6. 人生箴言收藏-自我勉励
  7. vue如何加入百度联盟广告
  8. win7 64 系统中打开或关闭windows功能空白
  9. python绘图函数教程_Python绘图函数的完整集合,python,画图,大全
  10. 关于Transformer你不可不知的几个点