⚠️ 本博客只记录了 Attention 中有意思的部分
1 词向量
为了方便计算机处理,我们需要将每个单词表示为一个向量。比如,单词 “orange” 可能被表示为:
V e c o r a n g e = [ 0.12 , 0.42 , − 0.57 , . . . , 0.64 ] \mathrm{Vec}_{\mathrm{orange}}=[0.12,0.42,-0.57,...,0.64] Vecorange=[0.12,0.42,−0.57,...,0.64]
而单词 “banana” 可能被表示为:
V e c b a n a n a = [ 0.14 , 0.41 , − 0.59 , . . . , 0.69 ] \mathrm{Vec}_{\mathrm{banana}}=[0.14,0.41,-0.59,...,0.69] Vecbanana=[0.14,0.41,−0.59,...,0.69]
由于 “orange” 和 “banana” 都是水果,即在语义上相似,因此其向量在向量空间中的距离较近。
2 通过自注意力机制调整词向量
一个单词在不同语境中可能表达不同的意思,比如单词 “apple”:
- 在 “an apple and an orange” 中表示的是一种水果
- 在 “an apple phone” 中表示的是一种手机品牌
如果我们用同一词向量去表示 “apple”,那么就忽略了语义信息。
个人理解:我们通常用 Word2Vec 把单词逐个转换为词向量,而该过程并没有关注上下文语境。不管是作为水果的 “apple”,还是作为手机品牌的 “apple”,都会被表示为同一词向量。
而自注意力机制将会关注上下文语境,试图为当前单词寻找一种更好的编码方式。
假设经过 Word2Vec:
- “orange” 的词向量为 (0, 3)
- “phone” 的词向量为 (4, 0)
- “apple” 的词向量为 (2, 2)
针对 “an apple and an orange”:
- “apple” 和 “orange” 的余弦相似度为 0.71
- “apple” 和 “apple” 的余弦相似度为 1
计算相似度的方法可以是点积,也可以是余弦相似度。
通过自注意力机制调整 “apple” 的词向量:
e 0.71 e 0.71 + e 1 ∗ ( 0 , 3 ) + e 1 e 0.71 + e 1 ∗ ( 2 , 2 ) = ( 1.14 , 2.43 ) \frac{e^{0.71}}{e^{0.71}+e^{1}}*(0,3)+\frac{e^{1}}{e^{0.71}+e^{1}}*(2,2)=(1.14,2.43) e0.71+e1