Rasa的擴(kuò)展性
1. 如何使用自定義NLU組件和自定義策略
自定義NLU和自定義策略使用方式一致,但是絕大多數(shù)情況,開發(fā)者不需要使用自定義策略钾唬。重點介紹custom NLU
Rasa流水線(pipeline)配置中项郊,可以直接給出內(nèi)置組件的名字。
Rasa還支持動態(tài)載入其他包的組件:
例如:用戶有自定義組件SillyNLP盈蛮,其功能和現(xiàn)有的nlp_mitie一樣。該類位于somepackge包的this_model模塊內(nèi)技矮,用戶可以在pipeline配置中原本出現(xiàn)"nlp_mitie"地方抖誉,用該類的全局名字(fully qulified name)替換 —— "somepackge.this_model.SillyNLP"殊轴,配置文件還可以傳參。
2. 如何自定義要給NLU組件或策略
NLU組件和策略在DAG中都作為節(jié)點使用袒炉,他們都屬于圖組件(graph components)旁理。
自定義圖組件需要滿足以下三個要求:
實現(xiàn)GraphComponent接口
進(jìn)行組件注冊
使用類型注解(type annotation/ type hint)
① 實現(xiàn)GraphComponent接口
為了實現(xiàn)接口,組件必須繼承自Graph Component類(全路徑為rasa.engine.graph.GraphComponent)我磁,或者其子類(如Tokenizer子類)孽文。② 進(jìn)行組件注冊
注冊是為了讓Rasa系統(tǒng)了解組件的特性,如組件類型夺艰、組件是否需要訓(xùn)練等芋哭。這些信息覺得構(gòu)造DAG時如何處理每個組件。③使用類型注解(type annotation/ type hint)
Rasa利用類型注解來驗證模型的配置是否有效郁副。注:前向引用(forward reference)(python 前向引用)是不被允許的减牺。py3.7中可以使用 "from __ future__ import annotations" 來解決這一問題。
3. 自定義詞槽類型
定義一個詞槽類型關(guān)鍵步驟是將本詞槽轉(zhuǎn)換為Rasa系統(tǒng)可用的特性(機(jī)器學(xué)習(xí)的特性)存谎。
開發(fā)者需要繼承詞槽基類拔疚,隨后重寫(override)計算特征數(shù)量和計算特征值的方法。
開發(fā)者需要保證在配置不變的情況下(詞槽系統(tǒng)允許開發(fā)者根據(jù)詞槽配置輸出不同的維度愕贡,這就是feature_dimensionality是方法而不是屬性的原因)草雕,模型輸出的特征維度不變,否則訓(xùn)練和推理時維度不同會導(dǎo)致系統(tǒng)出錯固以。
4. 其他功能擴(kuò)展性
還可以自定義:
- 自定義數(shù)據(jù)導(dǎo)入方式(通過自定義 data importer的方式)
- 自定義tracker store
- 自定義connector