iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
自我挑戰組

30天初步了解自然語言處理-自學筆記系列 第 22

[Day22] NLP會用到的模型(五)-self-attention

一. self-attention的編碼方式

昨天說明了注意力主要是要明確算出input與output之間相關的資訊量,那怎麼算呢,這邊我會說明現在最常使用的self-attention的方法。

self-attention其實就是會將每個詞會將其他詞的資訊考慮進去,也就是在對某一個詞的做編碼時,將整個句子的上下文語境考慮進去,以李孟的這篇文章[1]提到的例子來說明:
句子1: 胖虎叫大雄去買漫畫,回來慢了就打他
句子2: 妹妹說胖虎是「胖子」,他聽了很不開心
https://ithelp.ithome.com.tw/upload/images/20210921/201404264FbYvR1ezt.png

這2個他代表的人不同,第一個句子他應該要接收較多的'大雄'這個資訊,第二個句子他應該要接收較多的'胖虎'這個資訊,藉由這樣去計算每個詞與每個詞之間的相關程度,最後就可以encdoe出一個適合這個句子的編碼囉~~

二. 計算方式

目的: 得到一個可以代表句子文章且考慮上下文的編碼向量
這邊我會用這個網站[2]的圖來解說~這網站寫的其實非常詳細了,各位也可以詳讀全,需要有三個矩陣來計算: Queries、Keys與Values,假設現在有一個句子叫做'Thinking Machines':
https://ithelp.ithome.com.tw/upload/images/20210921/20140426rViX4YZGFn.png

那要怎麼利用這三個矩陣來得到Queries, Keys, Values及其意義:
• 利用訓練三個矩陣WQ、WK及WV
• Q: query,需要查詢的問題,ex: 第一個詞(q1)想知道他在這個句子所佔的資訊為何
• K: key,等著被查的答案群,q會跟所有k做計算
• V: value,實際的特徵訊息
如下圖,我們將thinking(x1)與machines(x2)疊起來,隨機產生三個矩陣(WQ、WK及WV,這三個矩陣是在train的時候會調整的):
https://ithelp.ithome.com.tw/upload/images/20210921/20140426uLKiNNuE6x.png

計算流程:

  1. 每個q會與每個k計算一個分數
  2. Scale dot-product attention: 第一點的值除以 根號dk 用來控制內積因隨維度增大而變大的問題
  3. 利用softmax對數值進行normalize
  4. 第三點得出的值與v相乘得出詞的編碼向量
  5. 將第四點的每一個v相加,得到的就是這個詞在整個句子的編碼向量
    如下圖的z就是經過上述計算完後的句子編碼向量:
    https://ithelp.ithome.com.tw/upload/images/20210921/20140426KgJcVHZZ6Z.png

--

以上大致就是self-attention的計算方式,transformer與bert裡面都是這個東西而已XD

參考資訊
[1] https://leemeng.tw/attack_on_bert_transfer_learning_in_nlp.html
[2] https://jalammar.github.io/illustrated-transformer/


上一篇
[Day21] NLP會用到的模型(四)-Seq2Seq
下一篇
[Day23] NLP會用到的模型(六)-transformer架構
系列文
30天初步了解自然語言處理-自學筆記30

尚未有邦友留言

立即登入留言