词袋模型和transformer模型

二者简介

词袋模型

词袋模型(Bag-of-Words model,BOW)BoW(Bag of Words)词袋模型最初被用在文本分类中,将文档表示成特征矢量。它的基本思想是假定对于一个文本,忽略其词序和语法、句法,仅仅将其看做是一些词汇的集合,而文本中的每个词汇都是独立的。

transformer模型

被学界视为代替CNN等卷积模型的东西,可以通过输入->张量变换->输出,实现词袋模型句子识别的功能。且论文发表时是用的法语到英语的一对一翻译的应用。故拿来作比较。

二者原理

词袋模型

例如三个句子如下:

句子1:小孩喜欢吃零食。
句子2:小孩喜欢玩游戏,不喜欢运动。
句子3 :大人不喜欢吃零食,喜欢运动。

我们根据每个词出现的先后顺序,建立词袋

{“小孩”:1,“喜欢”:2,“吃”:3,“零食”:4,“玩”:5,“游戏”:6,“大人”:7,“不”:8,“运动”:9}

其中keys为词,values为词的索引,预料*有9个单词, 那么每个文本我们就可以使用一个9维的向量queries来表示。
将以上词袋每个词对应位置出现的次数,作为这个位置的值,可以构建每句话,那么上述文本可以表示为:

句子1:[1,1,1,1,0,0,0,0,0]
句子2:[1,2,0,0,1,1,0,1,1]
句子3:[0,2,1,1,0,0,1,1,1]

通过计算向量的余弦距离/汉明距离(两个句子向量二进制位数是否相等,1-9不等的累计+1)来计算两个文本间的相似度,便可得到相应的是否是同一个句子

transformer模型

同样的我们还是可以以上述的句子和词袋为模型,构建我们的transformer模型,其中q、v、k和词袋模型对应的一样,w为权值矩阵,唯一不同是,我们在词袋模型中构建的是单词为基础的模型,transformer构建的字母为基础的模型
词袋模型和transformer模型
如上图,我们输入TinKing 和Machines然后我们将其转换为一个张量(为了适应更高维的数据(通道*矩阵等等),矩阵为二维张量)下图为一三维矩阵
词袋模型和transformer模型
继续正题,然后我们就可以得到q、v、k三个向量,在对其进行一系列变换(trick 计算score=q*k, 再对score进行归一化,对归一化的score进行激活,然后再点乘v向量,相加得到最后的z
词袋模型和transformer模型
上图为全部过程的总览。算的的z我们叫做Attention
对多个句子可以计算得到一个整体的Attention
词袋模型和transformer模型
Transformer模型也没有捕捉顺序序列得功能,论文中在编码词向量时引入了位置编码(Position Embedding)的特征。具体地说,位置编码会在词向量中加入了单词的位置信息,这样Transformer就能区分不同位置的单词了。
词袋模型和transformer模型

拓展

SLAM应用

众所周知,词袋模型可以训练角点并在周围根据规则选取周围点,用这些角点特征构建词袋模型,这样可以记录历史帧的词袋向量,根据汉明距离计算二者是否相似,从而进行回环检测,这种transformer加入了序列信息,从而应该能更好的描绘两帧之间的相似度。可以用来做回环检测。

深度学习的应用

在深度学习上,拿各种输入构建相应的transformer/词袋模型,然后转换为tensor模式,用标准值/标注值构建残差,可以训得推理模型,进而构建深度学习框架。

参考

主要是参考了知乎文章

上一篇:Transformer block拆解


下一篇:End-to-End Object Detection with Transformers