Attention Word Embedding 之二

  • 2020 年 12 月 25 日
  • AI

还是关于word2vec的attention改进,前面介绍了很多背景信息以及cbow的介绍就不翻译了,直接看核心的部分

将cbow的简单平均预测的公式修改为:

去掉ai(wi)的部分,即使原始的cbow,其中ai(wi)的公式就是标准的attention score的softmax的计算公式:

这篇文章的最核心的部分就是上述公式的理解,文中提到了:

当所有的K和s都固定在零,这个模型就还原成了常规的cbow了,s表示偏置倒是不难理解,问题是这个k是什么,和word的embedding向量w有什么关系,文中有提到

it simply requires retrieving one value from the lookup matrix K for each word and one value from the bias s for each word in the window.

它只需要从查找矩阵K中为每个单词检索一个值,并从偏差s中为窗口中的每个单词检索一个值以及:

这里我们就可以知道K是啥了,为了便于理解,假设词汇表中的词一共就13个,窗口为6,即b为2,那么K就是一个 10X4的注意力系数矩阵,大概长这样:

所以

这里的数据是随便瞎填的,所以前向传播的过程就是:

假设我们此时的中心词为word1,然后窗口为2,则取其上下文分别4个单词的embedding得到word1的上下文的4个单词的embeding分别为v1、v2、v3、v4,然后去K里查询word1得到了4个注意力系数a1、a2、a3、a4,然后a1*v1+a2*v2+a3*v3+a4*v4代替了原来的 (v1+v2+v3+v4)/4 的cbow的简单平均的做法,其它部分(样本准备啊,训练啥的)和cbow都一样。可以看到,这种attention的机制和:

马东什么:Attention Word Embedding 之一zhuanlan.zhihu.com图标

上一篇提到的完全是两种思路,我们根据文中的说法,在进行attention的计算的时候,完全没有使用到中心词word1的embedding:

可以看到,这里压根没有包含任何与中心词有关的变量表示,纯粹是上下文之间的一些计算,公式里面压根就没有中心词的embedding表示,所以k的值不可能是中心词的embedding和上下文词的embedding的计算结果。所以就是直接初始化:

这个K矩阵和另一个s矩阵。。。然后直接就这么简单直接地加权求和了。。。。k和s都是可训练的参数。。。。这个和之前nlp中提到的attention机制感觉就不是一个东西。。。没有所谓的q、v、k存在啊。。