(三)RASA NLU語言模型
作者簡(jiǎn)介
原文:https://zhuanlan.zhihu.com/p/331791105
轉(zhuǎn)載者:楊夕
面筋地址:https://github.com/km1994/NLP-Interview-Notes
個(gè)人筆記:https://github.com/km1994/nlp_paper_study

什么時(shí)候要用語言模型?我們前面講過,RASA整體就是pipeline結(jié)構(gòu),NLU,DST,DPL一系列處理下來,執(zhí)行一個(gè)動(dòng)作。而NLU模塊也是一個(gè)可細(xì)分pipeline結(jié)構(gòu),過程是Tokenize->Featurize->NER Extract->Intent Classify。熟悉Word2Vec的知友知道,如果要獲取句子的word2vec特征,首先要有個(gè)分詞器,然后要有個(gè)word2vec模型。同理,如果Rasa NLU里面引用預(yù)訓(xùn)練的語言模型,那就需要提前加載,如果Tokenize使用空格分詞或者結(jié)巴分詞,特征向量使用One-hot編碼或者CountVectorsFeaturizer編碼,那就不在需要語言模型了。
RASA里面的語言模型有:
MITIENLP
mitie 基于dlib庫開發(fā),dlib是一個(gè)c++高性能機(jī)器學(xué)習(xí)庫。所以對(duì)性能有要求的信息抽取場(chǎng)景,可以考慮使用mitie。mitie現(xiàn)有的資料比較少,github最近更新也是五六年前了。
從mitie代碼中看到它的NER使用structural_sequence_labeling_trainer.實(shí)現(xiàn)的細(xì)節(jié)見
https://www.aaai.org/Papers/ICML/2003/ICML03-004.pdf
文中指出,MITIE的NER是HMM 和SVM相結(jié)合做的。相比單純的HMM,這種方法是基于最大margin 標(biāo)準(zhǔn)。這相比純CRF或者最大熵的HMM有很多優(yōu)勢(shì):
1)可以通過核函數(shù)學(xué)習(xí)非線性的判斷關(guān)系
2)可以處理overlapping features.
但畢竟是基于傳統(tǒng)機(jī)器學(xué)習(xí)的方式,相對(duì)于BERT這種海量語料預(yù)訓(xùn)練模型來說,效果還是稍差一點(diǎn),這個(gè)可以使用RASA的NLU評(píng)估工具跑分試一下[NLU pipelines評(píng)估]。但MITIE有無可比擬的速度優(yōu)勢(shì),在算力敏感的情況下自己權(quán)衡選擇,RASA已經(jīng)不做官方推薦了。
使用前先下載mitie模型
github.com/mit-nlp/MITI
RASA配置使用MITIENLP
pipeline: - name: "MitieNLP" model: "data/total_word_feature_extractor.dat"另外,MITIE沒有預(yù)訓(xùn)練的中文模型,如果想開發(fā)中文機(jī)器人,需要自己訓(xùn)練語言模型。具體參考用Rasa NLU構(gòu)建自己的中文NLU系統(tǒng)。
SpaCyNLP
spaCy是一個(gè)用Python和Cython編寫的高級(jí)自然語言處理的庫。它跟蹤最新的研究成果,并將其應(yīng)用到實(shí)際產(chǎn)品。spaCy帶有預(yù)訓(xùn)練的統(tǒng)計(jì)模型和單詞向量,目前支持60多種語言。它用于標(biāo)記任務(wù),解析任務(wù)和命名實(shí)體識(shí)別任務(wù)的卷積神經(jīng)網(wǎng)絡(luò)模型,在非??焖俚那闆r下,達(dá)到比較好的效果,并且易于在產(chǎn)品中集成應(yīng)用。在github上接近18k的stars,并且更新比較活躍。最新發(fā)布的spaCy3.0也集成了Transformer相關(guān)模型。
使用spaCy時(shí),文本字符串的第一步是將其傳遞給NLP對(duì)象。NLP對(duì)象本質(zhì)上是由幾個(gè)文本預(yù)處理操作組成的管道,輸入文本字符串通過管道后,最終輸出文檔,完成各種功能。

上圖示意了這個(gè)過程,在nlp對(duì)象中,要引入預(yù)訓(xùn)練spacy的語言模型。
spacy的中文模型的下載地址:
https://github.com/explosion/spacy-models也可以在命令行中輸入:
python -m spacy download zh_core_web_smRASA中模型加載方式
pipeline:
- name: "SpacyNLP"
model: "zh_core_web_sm"下表顯示了SpaCy在各個(gè)任務(wù)中的得分

以前還有一個(gè)HFTransformersNLP,里面主要包含一些BERT,GTP等比較新的Transformer模型,現(xiàn)在已經(jīng)在LanguageModelFeaturizer中實(shí)現(xiàn)了,不在需要在pipeline里面配置HFTransformersNLP語言模型。
