词袋模型和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构建的字母为基础的模型
如上图,我们输入TinKing 和Machines然后我们将其转换为一个张量(为了适应更高维的数据(通道*矩阵等等),矩阵为二维张量)下图为一三维矩阵
继续正题,然后我们就可以得到q、v、k三个向量,在对其进行一系列变换(trick 计算score=q*k, 再对score进行归一化,对归一化的score进行激活,然后再点乘v向量,相加得到最后的z
)
上图为全部过程的总览。算的的z我们叫做Attention
对多个句子可以计算得到一个整体的Attention
Transformer模型也没有捕捉顺序序列得功能,论文中在编码词向量时引入了位置编码(Position Embedding)的特征。具体地说,位置编码会在词向量中加入了单词的位置信息,这样Transformer就能区分不同位置的单词了。
拓展
SLAM应用
众所周知,词袋模型可以训练角点并在周围根据规则选取周围点,用这些角点特征构建词袋模型,这样可以记录历史帧的词袋向量,根据汉明距离计算二者是否相似,从而进行回环检测,这种transformer加入了序列信息,从而应该能更好的描绘两帧之间的相似度。可以用来做回环检测。
深度学习的应用
在深度学习上,拿各种输入构建相应的transformer/词袋模型,然后转换为tensor模式,用标准值/标注值构建残差,可以训得推理模型,进而构建深度学习框架。
参考
主要是参考了知乎文章