2021-8-30
一. Language Models語言模型
如果你想使用預(yù)訓(xùn)練的語言模型詞向量渴频,那么可以使用下面的配置加載詞向量
MitieNLP
簡介 MITIE initializer
輸出 Nothing
要求 Nothing
-
描述
初始化MITIE框架芽丹,每個MITIE的組件都依賴于這個部分,因此MitieNLP應(yīng)該放在pipline處理的開始卜朗。
-
配置
這部分的處理需要一個語言模型文件拔第,在配置中要顯示配置出來。
pipeline: - name: "MitieNLP" # language model to load model: "data/total_word_feature_extractor.dat"
如果想了解更多的信息场钉,請前往安裝MITIE
同樣楼肪,你也可以使用MITIE訓(xùn)練自己的詞向量,步驟如下:
準(zhǔn)備大規(guī)模的干凈的語料
在你的語料庫上構(gòu)建并運(yùn)行MITIE Wordrep工具惹悄。根據(jù)您的數(shù)據(jù)集和工作站,這可能需要幾個小時/幾天的時間肩钠。您將需要128GB的RAM來運(yùn)行wordrep—是的泣港,要求空間確實很大,嘗試擴(kuò)展您的交換价匠。
-
將新的total_word_feature_extractor.dat路徑設(shè)置為配置文件中MitieNLP組件的模型參數(shù)当纱。
訓(xùn)練MITIE詞向量的完整示例, 請查看用Rasa NLU 構(gòu)建自己的中文NLU系統(tǒng)。使用中文維基百科訓(xùn)練的模型踩窖。
二. Tokenizers分詞
分詞器將文本分割成字符坡氯。如果你想將意圖拆分為多個標(biāo)簽,例如用于預(yù)測多個意圖或建模層次意圖結(jié)構(gòu)洋腮,使用以下標(biāo)志與任何標(biāo)記賦予器:
- Intent_tokenization_flag表示是否將意圖標(biāo)簽進(jìn)行分詞處理箫柳。將其設(shè)置為True,則意圖標(biāo)簽也會被分詞處理啥供。
- Intent_split_symbol設(shè)置分隔符字符串來分割意圖標(biāo)簽悯恍,默認(rèn)為下劃線(_)。
JiebaTokenizer結(jié)巴分詞
簡介 中文的分詞器
輸出
tokens
for user messages, responses (if present), and intents (if specified)要求 Nothing
-
描述
中文的分詞器伙狐。
Note
如果要使用改分詞器涮毫,請安裝 pip3 install jieba
三. Featurizers特征化
文本特征器分為兩類:稀疏特征器和密集特征器。稀疏特征器是返回帶有許多缺失值的特征向量的特征器贷屎,例如零罢防。由于這些特征向量通常會占用大量的內(nèi)存,我們將它們存儲為稀疏特征唉侄。稀疏特征只存儲非零值及其在向量中的位置咒吐。因此,我們節(jié)省了大量的內(nèi)存,并能夠在更大的數(shù)據(jù)集上進(jìn)行訓(xùn)練渤滞。
所有的特征器都可以返回兩種不同的特征:序列特征和句子特征贬墩。
序列特征是一個(單詞數(shù)量x特征維數(shù))大小的矩陣。矩陣包含序列中每個單詞的特征向量妄呕。這允許我們訓(xùn)練序列模型陶舞。
句子特征由(1 ×特征維數(shù))大小矩陣表示。它包含了完整語句的特征向量绪励。句子特征可用于任何詞袋模型肿孵。因此,相應(yīng)的分類器可以決定使用哪種特征疏魏。注意:序列特征和句子特征的特征維數(shù)不一定相同停做。
RegexFeaturizer
簡介 使用正則表達(dá)式創(chuàng)建用戶消息的向量表示形式。
輸出 sparse_features
for user messages and
tokens.pattern要求 tokens
類型 稀疏特征
-
描述
創(chuàng)建實體提取和意圖分類的特征大莫。在訓(xùn)練期間蛉腌,regexfeatuizer會創(chuàng)建一個在訓(xùn)練數(shù)據(jù)格式中定義的正則表達(dá)式列表。對于每個regex只厘,將設(shè)置一個特性來標(biāo)記該表達(dá)式是否在用戶消息中找到烙丛。所有的特征隨后將被輸入意圖分類器/實體提取器以簡化分類(假設(shè)分類器在訓(xùn)練階段已經(jīng)學(xué)習(xí)了,這個集合特征表明了一個特定的意圖/實體)羔味。實體提取的正則表達(dá)式特性目前只支持CRFEntityExtractor和DIETClassifier組件!
-
配置
通過添加case_sensitive: False選項使特性器不區(qū)分大小寫河咽,默認(rèn)為case_sensitive: True。
要正確處理不使用空格分隔單詞的語言赋元,比如中文果港,用戶需要添加use_word_boundaries: False選項爸黄,默認(rèn)為use_word_boundaries: True膀藐。
pipeline: - name: "RegexFeaturizer" # Text will be processed with case sensitive as default "case_sensitive": True # use match word boundaries for lookup table "use_word_boundaries": True
四. Entity Extractors 實體抽取
從用戶信息中抽取實體睦焕,比如人命,地名坪仇。
Note
如果您使用多個實體提取器杂腰,我們建議每個提取器都以一組獨(dú)占的實體類型為目標(biāo)。例如椅文,使用Duckling提取日期和時間喂很,使用DIETClassifier提取人名。否則皆刺,如果多個提取器針對相同的實體類型少辣,很可能會多次提取實體。
例如羡蛾,如果您使用兩個或多個通用提取器漓帅,如MitieEntityExtractor、DIETClassifier或CRFEntityExtractor,那么您的訓(xùn)練數(shù)據(jù)中的實體類型將被所有這些提取器找到并提取忙干。如果您用實體類型填充的槽是文本類型的器予,那么pipline中的最后一個提取器將獲勝。如果槽的類型是list捐迫,那么所有結(jié)果都將添加到列表中乾翔,包括重復(fù)的結(jié)果。
即使提取器關(guān)注不同的實體類型施戴,也會發(fā)生另一種不太明顯的重復(fù)/重疊提取情況反浓。想象一下,一個送餐機(jī)器人和一個用戶信息赞哗,比如“I would like to order the Monday special”雷则。假設(shè),如果您的時間提取器的性能不是很好肪笋,它可能會在這里提取Monday 作為訂單的時間月劈,而您的其他提取器可能會提取Monday special 作為點(diǎn)的餐。如果遇到這種類型的重疊實體藤乙,添加額外的訓(xùn)練數(shù)據(jù)以改進(jìn)提取器可能是有意義的艺栈。如果這還不夠,您可以添加一個自定義組件湾盒,根據(jù)您自己的邏輯解決實體提取中的沖突。
MitieEntityExtractor
簡介 MITIE entity extraction (using a MITIE NER trainer)
輸出 entities
要求 MitieNLP and
tokens
-
輸出示例
{ "entities": [{ "value": "New York City", "start": 20, "end": 33, "confidence": null, "entity": "city", "extractor": "MitieEntityExtractor" }] }
-
描述
MitieEntityExtractor使用MITIE實體提取來查找消息中的實體诅妹。底層分類器使用多類線性支持向量機(jī)罚勾,具有稀疏線性核和自定義特征。MITIE組件不提供實體置信度值吭狡。
Note
此實體提取器內(nèi)部會自己進(jìn)行特征提取尖殃,不需要依賴任何 featurizer特征化處理。
-
配置
pipeline: - name: "MitieEntityExtractor"
RegexEntityExtractor正則實體提取器
簡介 使用在訓(xùn)練數(shù)據(jù)中定義的查找表和/或正則表達(dá)式提取實體
輸出 entities
要求 Nothing
-
描述
該組件使用訓(xùn)練數(shù)據(jù)中定義的 lookup tables和 regexes 提取實體划煮。該組件檢查用戶消息是否包含某個查找表的條目或匹配某個正則表達(dá)式送丰。如果找到匹配,則將值提取為實體弛秋。
該組件只使用名稱等于訓(xùn)練數(shù)據(jù)中定義的實體之一的正則表達(dá)式特性器躏。確保每個實體至少標(biāo)注一個示例。
Note
當(dāng)您將此提取器與MitieEntityExtractor蟹略、CRFEntityExtractor或DIETClassifier組合使用時登失,可能會導(dǎo)致多個實體提取。特別是如果許多訓(xùn)練句子都有實體注釋挖炬,您也為這些實體類型定義了正則表達(dá)式揽浙。有關(guān)多次提取的更多信息,請參閱實體提取器部分開始處的大信息框。
如果您似乎同時需要這個RegexEntityExtractor和前面提到的另一個統(tǒng)計提取器馅巷,我們建議您考慮以下兩個選項之一膛虫。
當(dāng)您對每種提取器類型都具有獨(dú)占實體類型時,建議使用選項1钓猬。為了確保提取器不會相互干擾稍刀,對于每個regex/lookup實體類型只注釋一個示例句子,而不是更多逗噩。
當(dāng)您希望使用正則表達(dá)式匹配作為統(tǒng)計提取器的附加信號掉丽,但又沒有單獨(dú)的實體類型時,選項2是有用的异雁。在這種情況下捶障,您將希望
1)在管道中的提取器之前添加regexfeataturizer
2)在訓(xùn)練數(shù)據(jù)中注釋所有的實體示例
3)從管道中刪除RegexEntityExtractor。這樣纲刀,您的統(tǒng)計提取器將收到關(guān)于存在正則表達(dá)式匹配的附加信號项炼,并將能夠從統(tǒng)計上確定何時依賴這些匹配,何時不依賴示绊。
-
配置
通過添加case_sensitive: True選項使實體提取器區(qū)分大小寫锭部,默認(rèn)為case_sensitive: False。
要正確處理不使用空格分隔單詞的語言面褐,比如中文拌禾,用戶需要添加use_word_boundaries: False選項,默認(rèn)為use_word_boundaries: True展哭。
pipeline: - name: "MitieIntentClassifier"
pipeline:
- name: RegexEntityExtractor
# text will be processed with case insensitive as default
case_sensitive: False
# use lookup tables to extract entities
use_lookup_tables: True
# use regexes to extract entities
use_regexes: True
# use match word boundaries for lookup table
"use_word_boundaries": True
EntitySynonymMapper
簡介 將同義的實體值映射到相同的值
輸出 修改實體抽取器抽取出的實體
要求 An extractor from Entity Extractors
-
描述
如果訓(xùn)練數(shù)據(jù)包含定義的同義詞湃窍,則該組件將確保檢測到的實體值將被映射到相同的值。例如匪傍,如果您的訓(xùn)練數(shù)據(jù)包含以下示例:
[ { "text": "I moved to New York City", "intent": "inform_relocation", "entities": [{ "value": "nyc", "start": 11, "end": 24, "entity": "city", }] }, { "text": "I got a new flat in NYC.", "intent": "inform_relocation", "entities": [{ "value": "nyc", "start": 20, "end": 23, "entity": "city", }] } ]
該組件允許您將實體New York City和NYC映射到NYC您市。實體提取將返回nyc,即使消息包含NYC役衡。當(dāng)該組件更改現(xiàn)有實體時茵休,它將自己附加到該實體的處理器列表中。
-
配置
pipeline: - name: "EntitySynonymMapper"
五. Intent Classifiers 意圖分類器
意圖分類器會把用戶輸入信息手蝎,識別為domain.yml文件中定義的意圖
MitieIntentClassifier
簡介 MITIE intent classifier (using a text categorizer)
輸出 intent
要求
tokens
for user message and MitieNLP-
輸出示例
{ "intent": {"name": "greet", "confidence": 0.98343} }
-
描述
此分類器使用MITIE來進(jìn)行意圖分類榕莺,內(nèi)置分類器使用稀疏線性核的的線性SVM多分類器(詳情請見 MITIE trainer code中 ,參考
train_text_categorizer_classifier
函數(shù))Note
此分類器內(nèi)部會提取特征棵介,不需要依賴任何 featurizer特征化處理
-
配置
pipeline: - name: "MitieIntentClassifier"
SklearnIntentClassifier
簡介 Sklearn intent classifier
輸出 intent 和 intent_ranking
要求
dense_features
for user messages-
輸出示例
{ "intent": {"name": "greet", "confidence": 0.78343}, "intent_ranking": [ { "confidence": 0.1485910906220309, "name": "goodbye" }, { "confidence": 0.08161531595656784, "name": "restaurant_search" } ] }
-
描述
Sklearn意圖分類器會訓(xùn)練一個線性SVM帽撑,其中SVM使用grid search進(jìn)行優(yōu)化,并且可以提供其它意圖的置信度鞍时。SklearnIntentClassifier需要在pipline中進(jìn)行一個稠密特征化的處理亏拉。該稠密特征作為分類器的輸入扣蜻。如果想知道更多關(guān)于此算法的資料,請參閱 GridSearchCV 文檔及塘。
-
配置
在訓(xùn)練SVM過程中莽使,通過超參數(shù)搜索來尋找最好的參數(shù)集合。在配置文件中可以指定參數(shù)搜索集合笙僚,如下所示:
pipeline: - name: "SklearnIntentClassifier" # Specifies the list of regularization values to # cross-validate over for C-SVM. # This is used with the ``kernel`` hyperparameter in GridSearchCV. C: [1, 2, 5, 10, 20, 100] # Specifies the kernel to use with C-SVM. # This is used with the ``C`` hyperparameter in GridSearchCV. kernels: ["linear"] # Gamma parameter of the C-SVM. "gamma": [0.1] # We try to find a good number of cross folds to use during # intent training, this specifies the max number of folds. "max_cross_validation_folds": 5 # Scoring function used for evaluating the hyper parameters. # This can be a name or a function. "scoring_function": "f1_weighted"
KeywordIntentClassifier
簡介 簡單的關(guān)鍵字匹配意圖分類器芳肌,用來識別簡短的意圖
輸出 intent
要求 Nothing
-
輸出示例
{ "intent": {"name": "greet", "confidence": 1.0} }
-
描述
這個分類器通過搜索用戶輸入數(shù)據(jù)的關(guān)鍵字來進(jìn)行分類,當(dāng)整個關(guān)鍵詞和用戶輸入信息必須一個字不差肋层,完全匹配時才會識別為相應(yīng)的意圖(多一個字都無法識別)亿笤。關(guān)鍵字定義為nlu.yml 中的意圖對應(yīng)示例句子。即整個example 是一個關(guān)鍵字栋猖,而不是其中的某個詞匯净薛。
NOTE
該分類器用于小的項目或冷啟動階段。如果你已經(jīng)有部分NLU訓(xùn)練數(shù)據(jù)蒲拉,可以參閱建議的piplines進(jìn)行配置肃拜,Tuning Your Model.
-
配置
在訓(xùn)練SVM過程中,通過超參數(shù)搜索來尋找最好的參數(shù)集合雌团。在配置文件中可以指定參數(shù)搜索集合燃领,如下所示:
pipeline: - name: "KeywordIntentClassifier" case_sensitive: True
<img src="/Users/chenfan/Documents/mdPic/image-20210708174605132.png" alt="image-20210708174605132" style="zoom: 33%;" />
FallbackClassifier
簡介 如果NLU意圖分類得分不明確,則使用意圖nlu_fallback對消息進(jìn)行分類锦援。置信度被設(shè)置為與回退閾值相同猛蔽。如果輸入句子所有的意圖置信度都比較低,那么就會把該句子識別為意圖:nlu_fallback
輸出 entities
,
intentand
intent_ranking要求
intent
andintent_ranking
output from a previous intent classifier-
輸出示例
{ "intent": {"name": "nlu_fallback", "confidence": 0.7183846840434321}, "intent_ranking": [ { "confidence": 0.7183846840434321, "name": "nlu_fallback" }, { "confidence": 0.28161531595656784, "name": "restaurant_search" } ], "entities": [{ "end": 53, "entity": "time", "start": 48, "value": "2017-04-10T00:00:00.000+02:00", "confidence": 1.0, "extractor": "DIETClassifier" }] }
-
描述
FallbackClassifier使用intent nlu_fallback對用戶消息進(jìn)行分類灵寺,以防之前的意圖分類器無法對置信度大于或等于FallbackClassifier的閾值的意圖進(jìn)行分類枢舶。當(dāng)兩個排名靠前的意圖的置信度得分比二義性閾值更接近時,它還可以預(yù)測回退意圖替久。
您可以使用FallbackClassifier來實現(xiàn)一個Fallback Action,該Action處理帶有不確定NLU預(yù)測的消息躏尉。
rules: - rule: Ask the user to rephrase in case of low NLU confidence steps: - intent: nlu_fallback - action: utter_please_rephrase
-
配置
pipeline: - name: "FallbackClassifier" threshold: 0.3
FallbackClassifier只會在沒有其他意圖被預(yù)測的置信度大于或等于閾值的情況下添加它對nlu_fallback意圖的預(yù)測蚯根。
threshold: 該參數(shù)設(shè)置預(yù)測nlu_fallback意圖的閾值。如果前一個意圖分類器預(yù)測的意圖的置信度不大于或等于閾值胀糜,那么FallbackClassifier將添加一個置信度為1.0的nlu_fallback意圖預(yù)測颅拦。
ambiguity_threshold: 如果您配置了一個ambiguity_threshold, FallbackClassifier也會預(yù)測nlu_fallback意圖,以防兩個排名最高的意圖的置信分?jǐn)?shù)的差異小于ambiguity_threshold教藻。