![f94703a281b985fedc74f4a6a91772e3.png](https://i-blog.csdnimg.cn/blog_migrate/5bf08f7492eb45c5d245da4ee86dde97.jpeg)
[深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心)
配合阅读:
[深度概念]·Attention机制概念学习笔记
[TensorFlow深度学习深入]实战三·分别使用DNN,CNN与RNN(LSTM)做文本情感分析
笔者在[深度概念]·Attention机制概念学习笔记博文中,讲解了Attention机制的概念与技术细节,本篇内容配合讲解,使用Keras实现Self-Attention文本分类,来让大家更加深入理解Attention机制。
作为对比,可以访问[TensorFlow深度学习深入]实战三·分别使用DNN,CNN与RNN(LSTM)做文本情感分析,查看不同网络区别与联系。
一、Self-Attention概念详解
Self-Attention详解
了解了模型大致原理,我们可以详细的看一下究竟Self-Attention结构是怎样的。其基本结构如下
![3a673e65dfa54b362d99fad82e8e70a2.png](https://i-blog.csdnimg.cn/blog_migrate/78d5125f8034ec0fac72608548b638e0.png)
对于self-attention来讲,Q(Query), K(Key), V(Value)三个矩阵均来自同一输入,首先我们要计算Q与K之间的点乘,然后为了防止其结果过大,会除以一个尺度标度
这里可能比较抽象,我们来看一个具体的例子(图片来源于https://jalammar.github.io/illustrated-transformer/,该博客讲解的极其清晰,强烈推荐),假如我们要翻译一个词组Thinking Machines,其中Thinking的输入的embedding vector用
![33eca225818ebb287393e5f46d807503.png](https://i-blog.csdnimg.cn/blog_migrate/8c64a119e7799fd3dfe4b1723a5ce62d.png)
当我们处理Thinking这个词时,我们需要计算句子中所有词与它的Attention Score,这就像将当前词作为搜索的query,去和句子中所有词(包含该词本身)的key去匹配,看看相关度有多高。我们用
![1462bb334af5392339b4f0aea79f1db6.png](https://i-blog.csdnimg.cn/blog_migrate/9424c17b08705ca755eae298e57288e2.jpeg)
显然,当前单词与其自身的attention score一般最大,其他单词根据与当前单词重要程度有相应的score。然后我们在用这些attention score与value vector相乘,得到加权的向量。