何がRasa 2.0で新しい-あなた自身のchatbotをビルド


The following post is a simplified version of my original article that was published on Medium.



導入
Rasaオープンソースは、テキストを構築するために使用されているフレームワークとボイスベースのチャットボードです.最近、2020年10月に最初の公式バージョン2.0をリリースしました.新しいバージョンは、トレーニングデータ形式、構成ファイル、およびモデルを処理する方法を統一することを目指します.結果として、以前のバージョンと比較してかなり大きな変化があります.
この記事では、Rasa 1.10と最新バージョン2.0の主な違いのいくつかに深く潜り込みます.それをチェックして、古いRASAサーバの移行を実行する前に努力する価値があるかどうかを確認してください.

フォルダとファイル階層
フォルダーとファイルの構造は、前のバージョンと同じです.
  • アクション.PYはもはやルートディレクトリにありません.
  • アクションのアクションと呼ばれる新しいフォルダがあります.Pyが存在する.
  • ルールと呼ばれる追加ファイルがあります.データフォルダ内のYML.

  • 構成
    バージョン2.0が付属していますdefault configurations パイプラインとポリシーの両方.これは、より多くの新しいユーザーに便利です.それを言って、あなたはまだそれをカスタマイズすることができますし、形式は、以前のバージョンとまったく同じです.
    内蔵のほとんどtokenizers 次のプロパティーで標準化されました.
  • intent_tokenization_flag — フラグを設定するかどうか
  • intent_split_symbol — 意図を分割する記号
  • token_pattern — トークンを検出する正規表現
  • これらのキーは、マルチ意図の分類に使用されます.それは現在、唯一のDietClassifierで動作します.
    次のコードスニペットを見てくださいWhiteSpaceTokenizer :
    pipeline:
    - name: "WhitespaceTokenizer"
      "intent_tokenization_flag": False
      "intent_split_symbol": "_"
      "token_pattern": None
    
    それに財産case_sensitive Tokenizersからfeaturizersに移動されています.次のコンポーネントを使用しない限り、このプロパティを安全に無視できます.
  • KeywordIntentClassifier
  • スペーシング
  • RegexFeaturizer

  • 政策
    新しい政策の追加があるRulePolicy . それは常に固定された動作を持っている会話のために便利です.それはストーリーとわずかに異なり、より良いパフォーマンスのためのストーリーと一緒に使用する必要があります.する必要がありますRulePolicy あなたのconfig.yml ルールとフォームを使用するには.次の機能を実装するときに非常に便利です.
  • FAQのような1ターン相互作用
  • フォールバック行動
  • フォーム内の不要な動作の処理
  • さらに、以下の方針は賛成しましたRulePolicy . あなたはまだ使用して同じ機能を実装することができますRulePolicy とそれぞれのクラシファイア.
  • マッピングポリシー
  • フォールバック政策
  • 二段階フォールバック政策
  • フォームポリシー

  • 輸入業者
    デフォルトではRasaFileImporter . これで、他の形式でのトレーニングデータをロードする独自のデータパーサーを作成することができます.あなたのトレーニングデータが異なるリソースからあるならば、これは役に立ちます.
    さらに、実験的な特徴があるMultiProjectImporter これにより、複数のRasaプロジェクトからデータセットを1つに結合できます.たとえば、プロジェクトを次のサブプロジェクトにモジュール化できます.
  • レストランボット
  • ルーム予約ボット
  • チャットチャット
  • そして、本格的なchatbotを作成するには、後でそれらを組み合わせる.

    ドメイン
    ドメインのデータ構造.YMLは同じバージョンのままです.すべてのトレーニングデータファイルを指定する必要があります.省略された場合、Rasaはデフォルトでバージョン2.0として読み込みます.
    version: "2.0"
    
    intents:
      - greet
      - goodbye
      - affirm
      - deny
      - mood_great
      - mood_unhappy
      - bot_challenge
    

    国立天文台
    NLUトレーニングデータのために、バージョン2.0のための新しい構造は以下の通りです:
    version: "2.0"nlu:
    - intent: greet
      examples: |
        - Hey
        - Hi
        - hello- intent: goodbye
      examples: |
        - Goodbye
        - bye bye
    

    メタデータ
    実際には、任意のキー値のペアを含む追加のメタデータを宣言することができます.メタデータは、カスタムコンポーネントによってアクセスできます.たとえば、次のように宣言できます.
    nlu:
    - intent: greet
      metadata:
        sentiment: neutral
      examples:
      - text: |
          hi
      - text: |
          hello
    
    上記の例では、メタデータは意図したレベルで宣言されます.その結果、すべての例はメタデータを含む.各例で個別にメタデータを宣言できます.
    nlu:
    - intent: greet
      examples:
      - text: |
          hi
        metadata:
          sentiment: neutral
      - text: |
          hello
    

    検索意図
    古いバージョンでは、検索意図は、意図をより小さな目的に分類することができる実験的な特徴です.それはあなたの話のオーバーヘッドを減らすように小さな話のために構築するときにこれは多くのことができます.主な意図とその目的を分離するために/記号を使用する必要があります.以下の例を見てみましょう.
    nlu:
    - intent: chitchat/ask_name
      examples: |
        - What is your name?
        - May I know your name?- intent: chitchat/ask_weather
      examples: |
        - What is the weather?
        - May I know the current weather outside?
    
    通常の意図とは異なり、答えは応答の中に配置する必要があります.ドメインの代わりにYML.京大理ファイルはデータフォルダーの下に配置され、ドメインとまったく同じ形式になります.京大理これは、複数のバリエーションを持つことができ、異なるペイロードを指定することを意味します.
    responses:
      utter_chitchat/ask_name:
        - text: "I don't have a name!"
      utter_chitchat/ask_weather:
        - text: "It is sunny"
        - text: "It is raining heavily outside"
    

    実体
    エンティティの書式は、以前のバージョンと同じです.あなたがそれに気づいていないならば、役割とグループラベルは同じ実体の特定の概念を区別するのに用いられることができます.次の例を考えます.
    Book me a flight from [Malaysia]{"entity": "country"} to [Singapore]{"entity": "country"}.
    
    人間の視点から、実体の両方が国を参照しても、第二国が出発先を参照している間、最初の国は出発を参照します.この実験機能を使ってラベルを付けることができます.
    Book me a flight from [Malaysia]{"entity": "country", "role": "departure"} to [Singapore]{"entity": "country", "role": "destination"}.
    

    ストーリー
    あなたは、単一のファイルとしてNLUと一緒に物語を組み合わせることができますが、それは非常にそれらを分離することをお勧めします.新しい形式は古いバージョンに比べて、より詳細なものですが、意図と動作を区別するのに役立ちます.結果として、あなたのストーリーを構築するときに、不要な間違いをする可能性が低いです.
    version: "2.0"stories: - story: happy path
       steps:
       - intent: greet
       - action: utter_greet
       - intent: goodbye
       - action: utter_bye
    
    NLUと同様に、ストーリーに関連する関連情報を格納するストーリー内のメタデータを定義できます.メタデータは、トレーニングで使用されず、あなたの物語のパフォーマンスに影響を与えません.

    フォーム
    フォームは現在、Rasa SDKの代わりにトレーニングデータの一部です.フォームが必要RulePolicy , これは既にデフォルトで設定中です.まず、次のように定義します.
    forms:
      your_form:
        age:
        - type: from_entity
          entity: age
    
    次に、Rasaがループし、呼び出しを行うアクションとActiveRoundループフィールドを指定できますutter_ask_{form_name}_{slot_name} or utter_ask_{slot_name} エンティティの年齢が満たされるまで.あなたの応答でそれらを定義する必要があります.
    stories:
     - story: form asking for age
       steps:
       - intent: intent_ask_age
       - action: your_form
       - active_loop: your_form
    

    規則
    規則は常に一定の経路を持つ会話の小さな部分を記述する.同じ答えが返される1ターンの相互作用として考えることができます.話とは異なり、ルールは一般化されません、そして、大部分はFAQに答えます.それはトリガー経由の使用に似ていますMappingPolicy インdomain.yml Rasa 1.0用.ボットは常にユーザーがgreeetときにいつでもAutRangGreetで対応する必要がありますとしましょう.以下の規則を簡単に定義できます.
    rules: - rule: Say `hello` whenever users greet the bot
       steps:
       - intent: greet
       - action: utter_greet
    
    この投稿を読んでくれてありがとう!

    参考文献
  • Chatbots and What’s New in Rasa 2.0
  • What’s Ahead in Rasa OpenSource 2.0
  • Rasa Documentation