自然語言處理中的Attention機制

2021-10-24 19:32:02 字數 1878 閱讀 6302

attention機制也就是注意力機制,在自然語言處理中,就是對於乙個語言序列的不同的部分給予不同的注意力,在數學上一般表現為權重,也就是對乙個語言序列的各個元素加權。

對attention機制給乙個通用的定義:給定一組向量集合values,以及乙個向量query,attention機制是一種根據該query計算values的加權求和的機制。這個定義**於cs224n。

所謂attention就是這個value集和中的每個向量的權值的大小,attention機制就是用一種方式來計算出這個權值。

attention在seq2seq模型中的計算方法大致如下:

將文字資訊輸入encoder模型中,每一步均會產生乙個hidden state:

將encoding最後乙個hidden state作為decoder中hidden state的初始值,輸入到decoder中。

在decoder中每乙個timestep均會產生乙個hidden state:

decoder的上乙個timestep產生的hidden state:分別做點積,得到的標量叫做encoder中的每個hidden state的attention score。

然後對attention score做softmax得到乙個概率分布叫做attention distribution

根據attention distribution對encoder中的每個hidden state加權平均得到context vector。

然後將context vector輸入decoder最後輸出**的詞。

上圖中大概展示了attention機制中是如何計算出attention score 。

上圖展示了如何計算attention distribution:

上圖展示了如何計算attention output,也就是context vector:

soft attention也就是global attention,soft attention和hard attention相對應,global attention和local attention相對應。soft attention在求出attention distribution之後將概率分布和encoder的hidden state相乘求和,也就是求加權平均。hard attention就是將attention distribution中概率最大的一項置為一,其餘置為0。也就是將所有的attention集中在概率最大的乙個hidden state,其他的直接忽略。local attention是soft和hard的結合體,先求hard attention,找到attention score最高的那個hidden state,然後以這個為中心,選取他周圍的幾個做soft attention。

有幾個方向重新設計attention:

改變attention score/distribution的計算方式

改變加權平均hidden state的計算方式

上面介紹的soft attention/global attention、hard attention、local attention就是在改變加權平均hidden state的計算方式。通過改變計算attention score的計算方式,也可以設計出很多新的attention機制。例如對將點乘改為concat、改為線性組合、加入激勵函式等。

同樣可以改變計算attention distribution的計算方式,例如直接對attention score歸一化等:

自然語言處理

自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...

自然語言處理

前言 自然語言處理 natural language processing 是計算科學領域與人工智慧領域中的乙個重要方向。它研究能實現人與計算機之間用自然語言進行有效通訊的各種理論和方法。自然語言處理是一門融語言學 電腦科學 數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言...

自然語言處理

一 字串操作 去空格及特殊符號 s hello,world 預設把左右空格去掉 print s.strip print s.lstrip hello,print s.rstrip 查詢字元 0 為未找到 sstr1 strchr sstr2 tr 找到返回目標子串開始下標 npos sstr1.in...