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)建并運行MITIE Wordrep工具。根據(jù)您的數(shù)據(jù)集和工作站,這可能需要幾個小時/幾天的時間。您將需要128GB的RAM來運行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

如果您使用多個實體提取器,我們建議每個提取器都以一組獨占的實體類型為目標(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 作為點的餐。如果遇到這種類型的重疊實體,添加額外的訓(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)您對每種提取器類型都具有獨占實體類型時,建議使用選項1。為了確保提取器不會相互干擾,對于每個regex/lookup實體類型只注釋一個示例句子,而不是更多。

    當(dāng)您希望使用正則表達(dá)式匹配作為統(tǒng)計提取器的附加信號,但又沒有單獨的實體類型時,選項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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容