前言
2018年底了,rasa對話系統(tǒng)踩坑記系列文章最后一篇,剛好是十,也算是十全十美??此葡駵悢?shù)的,但這篇絕對也是滿滿的干貨??催^我前面幾篇文章的同學(xué)都知道,我?guī)缀醪涣泄降?,因?em>markdown寫公式好麻煩的說,而且我覺得講清楚好難。所以我一直美化自己是攻城獅,喜歡實戰(zhàn),喜歡解決問題,可能也是因為從開發(fā)轉(zhuǎn)做nlp的緣故。正所謂:
no bb, show me the code, show me the result.
自定義rasa-core transformer policy
廢話不多說,看這個二級標題就知道這篇要講的是rasa-core的自定義policy,也是我認為剩下的幾個rasa系列重要的點了。前面講過了自定義rasa-nlu的好些個組件,也結(jié)合過最新火熱的bert,由于懶所以自己另外發(fā)布了rasa-nlu-gao包。
rasa-core官方提供的核心policy有兩個,分別是keras-policy和embedding-policy,在rasa對話系統(tǒng)踩坑記(六)對這兩個進行過比較,但是總覺得還有好多提升的空間。keras-policy寫的太簡單啦,根本不能滿足復(fù)雜業(yè)務(wù)的需求。embedding-policy訓(xùn)練太慢啦,畢竟LSTM的緣故,而且輸入還要求是all stories。所以就想到了將transformer這個明星納入policy的家庭。(不要問我為什么不給官網(wǎng)提pr,太磨嘰了,放個圣誕節(jié),作者一個禮拜沒上線。后面如果添加更多的policy,我會考慮發(fā)布個rasa-core-gao)
代碼傳送門:rasa_chatbot_cn
- 運行結(jié)果的命令:
python bot.py train-dialogue-transformer
- 對比policy的命令:
make compare-policy
- 可視化對比結(jié)果的命令:
make evaluate-policy
keras-policy、embedding-policy和transformer-policy測試對比
這個我只是簡單的跑了下,參數(shù)還沒怎么好好調(diào)試,歡迎各位入坑。
transformer-policy注意的點
寫自定義policy也踩了不少坑,這里有幾點需要尤其注意:
- 核心的方法當然是
model_architecture
,這個方法需要寫入自定義的model。 -
load方法,這里為啥我需要將load方法重新寫一遍,主要是這里在
load_model
的時候需要傳入custom_objects
參數(shù)。一開始我沒傳入custom_objects
參數(shù),一直報錯一直找不到原因,后面無意中發(fā)現(xiàn)了這個參數(shù)才知道keras自定義model需要將類傳入該參數(shù)中。 -
attention_keras.py
這個python文件定義了Attention is All You Need中的兩個類,一個是Position_Embedding,一個是Self Attention,具體公式可參閱論文。 -
AttentionPolicy
類中的模型,主要是在Position_Embedding、Self Attention之后連接了個全局池化、Dropout層以及最后的全連接層softmax,特征的提取用位置編碼和全局attention取代了LSTM,使得模型訓(xùn)練起來很快,比embedding-policy效果高的不是一點。 - 當然關(guān)于transformer-policy還可以進一步優(yōu)化,提取完特征在分類器那邊可以做的再細化點。還是需要多compare policy,綜合對比后再選擇適合自己的policy。
總結(jié)
關(guān)于transformer-policy就說到這兒,后續(xù)會根據(jù)項目需要加入更多更實用的policy,但應(yīng)該不會再寫這方面的踩坑文章了。然后就是對這一個系列的rasa踩坑文章的總結(jié)了。我接觸rasa-nlu和rasa-core是在8月份,當時是因為項目需要,期間踩了太多坑。越用越覺得rasa很贊,靈活性很高。但無奈網(wǎng)上rasa的文章太少,文檔不及時,項目代碼千篇一律,一個模子里刻出來的。期間不停地翻看源碼,有了更多的收獲和認識,所以就萌發(fā)了寫點東西的想法,這樣既能幫助別人又可以當做自己的記錄筆記,挺好的。中間還認識了不少朋友,能幫助到大家真的很開心,我會繼續(xù)努力的。
最后祝大家新的一年順利、充實,每天都有進步,元旦快樂。: )
參考
Attention is All You Need
attention_keras
liveportrait
novelling