rasa pipline (官網(wǎng)翻譯)

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)練自己的詞向量,步驟如下:

  1. 準(zhǔn)備大規(guī)模的干凈的語料

  2. 在你的語料庫上構(gòu)建并運(yùn)行MITIE Wordrep工具惹悄。根據(jù)您的數(shù)據(jù)集和工作站,這可能需要幾個小時/幾天的時間肩钠。您將需要128GB的RAM來運(yùn)行wordrep—是的泣港,要求空間確實很大,嘗試擴(kuò)展您的交換价匠。

  3. 將新的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_featuresfor user messages andtokens.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 tablesregexes 提取實體划煮。該組件檢查用戶消息是否包含某個查找表的條目或匹配某個正則表達(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,intentandintent_ranking

  • 要求 intent and intent_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教藻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末距帅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子括堤,更是在濱河造成了極大的恐慌碌秸,老刑警劉巖绍移,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異讥电,居然都是意外死亡蹂窖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門恩敌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞬测,“玉大人,你說我怎么就攤上這事纠炮≡绿耍” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵恢口,是天一觀的道長孝宗。 經(jīng)常有香客問我,道長弧蝇,這世上最難降的妖魔是什么碳褒? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮看疗,結(jié)果婚禮上沙峻,老公的妹妹穿的比我還像新娘。我一直安慰自己两芳,他們只是感情好摔寨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著怖辆,像睡著了一般是复。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竖螃,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天淑廊,我揣著相機(jī)與錄音,去河邊找鬼特咆。 笑死季惩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的腻格。 我是一名探鬼主播画拾,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菜职!你這毒婦竟也來了青抛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤酬核,失蹤者是張志新(化名)和其女友劉穎蜜另,沒想到半個月后适室,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚕钦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年亭病,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘶居。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡罪帖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邮屁,到底是詐尸還是另有隱情整袁,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布佑吝,位于F島的核電站坐昙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芋忿。R本人自食惡果不足惜炸客,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戈钢。 院中可真熱鬧痹仙,春花似錦、人聲如沸殉了。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽薪铜。三九已至众弓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間隔箍,已是汗流浹背谓娃。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜒滩,地道東北人滨达。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像帮掉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窒典,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容