python attention機制_從零開始學Python自然語言處理(26)—— 強大的Attention機制...

前文傳送門:

在上一次面試失利后,我回來仔細研究了一下Attention機制,研究完我不禁感悟,這機制真的厲害啊!因為我之前面試被問到的Encoder - Decoder框架中有個瓶頸是編碼的結果以固定長度的中間向量表示,這導致較長的序列編碼后很多信息被稀釋了,導致解碼時效果不佳。當時只記得有個Attention,但是不了解他的原理,所以上次面試沒過:從零開始學自然語言處理(25)—— 通用的Encoder-Decoder模型框架

NLP中的Attention機制是在論文《NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE》被提出的,有興趣的朋友可以去閱讀論文:https://arxiv.org/pdf/1409.0473.pdf

上次面試問到的Encoder - Decoder框架如下圖所示:

format,png

而加入Attention機制之后,Encoder - Decoder框架可以改為如下所示:

format,png

大家應該注意到上下兩張圖的主要區別在于中間向量C從固定不變的一個變成了不同的多個,在解碼每個序列字符串時使用不同的Ci。

例如我們在翻譯 “Through the woods, we reached the bank of the river.” 時,我們會翻譯成 “穿過樹林,我們到達了河岸。”,當我們在翻譯 “bank” 這個詞時,應該將注意力集中在 “bank ”上,同時也應該考慮上下文,例如“river”,這樣我們才會將“bank”翻譯為“河岸”,而不是“銀行”,這符合我們人類的認知,又例如,我們翻譯“woods”時,會重點關注“woods”和“through”等。所以我們每次在翻譯(解碼)一個詞時,重點關注的內容是不同的,那如何表示在Decoder階段解碼某個輸出(翻譯某個詞)時對原始輸入關注的重點不同呢?

這個問題在上述的論文中得到了解決,論文提出了以下結構的模型:

format,png

這里使用了雙層的RNN結構,關于RNN和雙層RNN可以參考之前的文章:

首先,在Encoder階段,輸入的是 X 序列,X=(X1,X2,X3,...,XT),經過一個雙向RNN結構編碼,得到隱藏層每個單元的向量hi ,然后使用如下的公式計算得到解碼不同單詞時用到的Ci:

format,png

大家應該發現了,這里的C不再是傳統Encoder-Decoder框架中那個固定的C了,而是根據解碼不同 y 有著不同的Ci !理解這一點就理解了Attention的精髓了!

你可能會問,這里的αij是如何計算的?這里的 αij 類似權重的意思,如上圖所示,在解碼yt時,會綜合考慮αt1,αt2,...,αtT作為對不同輸入 Xi 的關注程度不同,αij計算公式如下:

format,png

所以αij其實是 eij經過softmax之后的結果,那問題變為eij是如何計算的了!eij的計算公式如下:

format,png

這里的a是一個對齊模型(Alignment model),實際上是一個前饋神經網絡,這里的“對齊”你可以理解為是一種相似度的計算,計算的是當前解碼內容的上一個隱藏狀態s(i-1)和當前hj的關系,相當于將每個編碼輸入和當前輸出進行匹配,從而得到權重。這樣就完成了對Encoder-Decoder框架加入Attention機制,解決了一開始的問題!

這個Attention面試問題也就迎刃而解了~

format,png

掃碼下圖關注我們不會讓你失望!

e19b4575ecdc5286c1322a7465eac0ab.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529408.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529408.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[機器人-2]:開源MIT Min cheetah機械狗設計(二):機械結構設計

目錄 1、四肢朝向的選擇 2、電機布局形式的選擇 3、電機的選型及測試(非常重要) 4、結構優化 5、尺寸效應 6、其他 1、四肢朝向的選擇 機械狗的結構設計,第一個擺在我們面前的就說四肢的朝向問題,如下圖,我們是…

python傳文件給java_用java pyhont通過HTTP協議傳輸文件流

// 代碼網上抄的 忘記鏈接了 抱歉哈packageupload;importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;im…

mysql挪到小數點位置_mysql數據庫遷移到另一個硬盤上

archliun系統mysql數據庫1、對新硬盤分區與格式化1)# fdisk /dev/sdb2) # mkfs.ext4 /dev/sdb12、停止MYSQL服務systemctl stop mysqld3、對數據庫文件拷貝# cp -Rp data /mnt/data/4、刪除原data文件# rm -rf /data5、禁止開機自啟MYSQL服務# systemctl disable mysqld6、對自…

mysql用戶權限表join_MyBatis映射利用mysql left join 解決N+1查詢問題

1.權限是幾乎每個系統都需要的2.一般在用戶請求某個url的時候,都需要驗證用戶是否擁有該url的訪問權限3.最簡單的權限系統需要 用戶表,角色表,用戶角色表,權限表,角色權限表# Host: 127.0.0.1 (Version: 5.6.22)# Date…

python 爬取貝殼網小區名稱_如何使用 python 爬取全國小區名稱

前言筆者在做一個 NLPNLPNLP 項目時,需要識別小區名,因此想要查詢網上是否有相關的數據集。經過一番搜索后一無所獲…從而決定自己來爬取這份數據。由于爬取網站的內容信息之后可能會發生變更,因此此處給出具體的爬蟲思路,便于應對…

mysql hint 簡書_MySQL

為滿足不同數據庫設計要求,減少數據冗余而指定設計規范,可稱為數據庫范式數據庫范式呈遞次規范,即高階范式必然滿足低階范式越高的數據庫范式意味著越嚴格的設計要求,同時數據冗余越小第一范式(1NF):數據庫表的每一列都…

python獲取手機通知欄消息_Python編寫簡單的通知欄腳本啟動工具

隨著自己編寫的腳本與安裝的工具越來越多,電腦的桌面和文件夾也越來越亂了。就在前幾天因為一個不小心,我把自己的一個項目給刪了,所以決定將電腦整理一下。不過這一整理我很多腳本和工具的位置我就忘記了,所以決定寫個小工具來快速啟動一些常用的腳本或工具這里選擇Python是因…

java 圓 繼承_java 類的繼承(轉)

這個星期主要是學習了Java中類的繼承問題.繼承就是由已有的類創建新類,通過子類繼承父類的方法,實現一些功能.下面就是老師布置作業的其中一個:定義父類圓,通過繼承,獲得子類球、圓錐、圓柱,子類具有計算體積的功能。1)新建文件夾Test1&#…

java爬蟲 京東_Java爬蟲實現京東物流查詢

網上沒有免費的接口,只能自己寫一套了,參考代碼如下public static JSONObject getLastInfo(String no){JSONObject jsonObjectnew JSONObject();jsonObject.put("no", no);Connection connectionJsoup.connect("http://www.jdwl.com/orde…

java list stream avg_Java 8 Stream API中的多個聚合函數

要在沒有自定義收集器的情況下執行此操作(不再對結果進行流式傳輸),您可以這樣做.它有點臟,因為它首先收集到Map< String,List< TimePeriodCalc>>然后流式傳輸該列表并獲得平均加倍.由于你需要兩個平均值,它們被收集到一個Holder或一對,在這種情況下我使用的是Abst…

java 發送郵件昵稱_利用JavaMail發送QQ郵件

一、RFC882文檔簡單說明RFC882文檔規定了如何編寫一封簡單的郵件(純文本郵件)&#xff0c;一封簡單的郵件包含郵件頭和郵件體兩個部分&#xff0c;郵件頭和郵件體之間使用空行分隔。郵件頭包含的內容有&#xff1a;from字段   --用于指明發件人to字段    --用于指明收件…

java沒有timer類_Java中的Java.util.Timer類 - Break易站

scheduleAtFixedRate(TimerTask task, long delay, long period): java.util.Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)在指定的延遲語法后開始&#xff0c;為重復的固定速率執行調度指定的任務&#xff1a;public void scheduleAtFixedRate(TimerT…

java select下拉標簽_java中下拉框select和單選按鈕的回顯操作

前提&#xff1a;1.下拉框select請選擇部門selected"selected">${department.department}2.單選按鈕radio的回顯checked"checked">checked"checked">補充知識&#xff1a;java使用apache commons-fileupload組件實現文件上傳(控制文件上…

java 訪問控制權限_Java訪問控制權限有哪些?區別是什么?

原標題&#xff1a;Java訪問控制權限有哪些&#xff1f;區別是什么?Java中的類和方法等都是有訪問控制權限的&#xff0c;用來控制方法、類、屬性等的生效范圍&#xff0c;Java有四種訪問控制權限&#xff0c;其中比較常用的就是public和private&#xff0c;今天華清遠見Java學…

java 操作cursor數據庫_Java連接各種數據庫以及調用存儲過程

準備工作&#xff1a;1. 創建表drop table T_TEST_PROCEDURE cascade constraints;/**//*Table: T_TEST_PROCEDURE*//**/createtable T_TEST_PROCEDURE (IDNUMBER(19) not null,NAMEVARCHAR2(40),AGE NUMBER(3),constraintPK_T_TEST_PROCEDURE primary key (ID));2. 創建存儲過…

java 規格overview_《Java數據結構和算法》- OverView

Q: 不同數據結構的優缺點&#xff1f;數據結構優點缺點數組(Array)快速訪問&#xff0c;如果知道下標&#xff0c;就可以非常快地存取查找慢&#xff0c; 插入或刪除慢&#xff0c; 大小固定有序數組(OrderedArray)比無序的數組查找快插入或刪除慢&#xff0c;大小固定棧(Stack…

mysql 集群怎么卸載節點_Greenplum移除節點

基于某某原因&#xff0c;我們的Greenplum需要卸載一個節點(測試環境的Greenplum集群)&#xff0c;由于該集群使用了很久&#xff0c;里面有許多開發所需要的數據&#xff0c;所以在卸掉一個節點后&#xff0c;還要保證數據不會丟失。當然&#xff0c;期間也遇到了點問題&#…

mysql2012更改表名_T-SQL入門攻略之13-修改數據表

--> Title : T-SQL入門攻略之13-修改數據表--> Author : wufeng4552--> Date : 2010-07-12修改表名與字段名—sp_rename--1修改表名SQL Server不直接提供修改表名的T-SQL語句&#xff0c;但是可以通過存儲過程實現語法格式&#xff1a;sp_rename tablename,newtabl…

python中不論類的名字是什么歌_Python自動猜歌名,還愁排名上不去嘛?

前言相傳&#xff0c;就在前幾日&#xff0c;在網上閑逛時&#xff0c;刷到了一個猜歌的小程序。這個小程序通過播放歌曲部分片段&#xff0c;然后讓用戶來猜它的歌名&#xff0c;大概是這樣的&#xff1a;作為一個腦熱的聽歌愛好者&#xff0c;于是他越陷越深&#xff0c;越刷…

java調用oracle存儲過程_做一點,記一點 ~ Java調用Oracle存儲過程

一、需求傳入一個參數&#xff0c;返回一條或多條記錄(列表)。二、實現步驟1. 編寫Oracle存儲過程。-- 聲明包和包體的語句應該分兩次執行&#xff0c;即使聲明在前定義在后&#xff0c;如果一起執行依然會編譯出錯--調用能夠返回多條記錄的存儲過程需要定義在包內--聲明包及包…