RasaのPipelineとPolicyの設定: よりスマートなチャットボットを構築するためのガイド

RasaのPipelineとPoliciesは、ユーザー入力を処理し、インテントを分類し、エンティティを抽出し、次に最適なアクションを決定するための核となる仕組みです。カスタマーサポート、バーチャルアシスタント、またはその他の会話型AIを構築する場合、これらの仕組みを理解することで、より効率的でスマートなボットを設計できます。

このブログでは、Pipelineの構成要素Policyの役割について説明し、さらにすべてがどのように連携しているかを示すMermaid.jsの図を提供します。


Rasa Pipelineとは?

RasaのPipelineは、ユーザー入力を処理して、インテント分類やエンティティ認識に備える一連のプロセスです。これらの構成要素は、テキストを構造化された形式に変換します。

Pipelineを、ユーザーのテキストを処理するための一連のベルトコンベアのように考えてみてください。各コンポーネントが順番に特定のタスクを実行し、最終的な結果を生成します。


Pipelineの主要コンポーネント

1. Tokenizer (トークナイザー)

  • ユーザーのテキストを小さな単位(トークン)に分割します。日本語のようなスペースがない言語では、トークナイザーが重要です。

例:

- name: "custom_components.japanese_tokenizer.JapaneseTokenizer"
  model: "mecab"  # MeCabなどの日本語トークナイザーを指定

2. Featurizers (特徴量生成)

  • トークンを数値ベクトルに変換します。この数値データが機械学習モデルの入力として使用されます。
  • 主なコンポーネント:
    • CountVectorsFeaturizer: 単語や文字n-gramを生成。
    • RegexFeaturizer: 正規表現パターンで特徴量を抽出。

例:

- name: CountVectorsFeaturizer
  analyzer: "char_wb"
  min_ngram: 2
  max_ngram: 4

3. Entity Extractors (エンティティ抽出)

  • ユーザー入力から特定のデータ(名前、場所、日時など)を抽出します。
  • 主なコンポーネント:
    • DucklingEntityExtractor: 日時や数値などの構造化データを抽出。
    • RegexEntityExtractor: 正規表現を使用してエンティティを抽出。

例:

- name: DucklingEntityExtractor
  dimensions: ["time", "number"]

4. Intent Classifier (インテント分類器)

  • ユーザーの発話のインテントを分類し、エンティティも同時に抽出します。

例:

- name: DIETClassifier
  epochs: 100
  entity_recognition: True

5. Fallback Mechanism (フォールバックメカニズム)

  • 低い信頼スコアの予測を処理するため、フォールバックアクションを使用します。

例:

- name: FallbackClassifier
  threshold: 0.3

Policies: 対話フローの制御

Pipelineがユーザー入力を処理する一方で、Policyは対話の中で次のアクションを決定します。Policyは、ルールに従うべきか、過去のトレーニングデータを参照するべきか、あるいは文脈に基づいて一般化するべきかを判断します。

Rasaでよく使われるPolicy

1. RulePolicy

  • 予測可能なフローやFAQを処理します。

例:

- name: RulePolicy
  core_fallback_threshold: 0.4
  enable_fallback_prediction: True

2. MemoizationPolicy

  • トレーニングストーリーから正確に一致する会話パスを記憶します。

3. TEDPolicy

  • トレーニングデータ以外の会話において、次のアクションを一般化して予測します。

例:

- name: TEDPolicy
  max_history: 5
  epochs: 100

4. FallbackPolicy

  • 信頼スコアが低い場合にフォールバックアクションを実行します。

PipelineとPoliciesの動作: ビジュアル図

以下は、PipelineとPoliciesがどのように連携して動作するかを示したMermaid.jsの図です。(図内のテキストは英語のままです)

graph TD
    A[User Input] -->|Raw Text| B[Tokenizer]
    B -->|Tokens| C[Featurizers]
    C -->|Features| D[Entity Extractors]
    C -->|Features| E[Intent Classifier]
    D -->|Entities| F[DIETClassifier]
    E -->|Intent| F[DIETClassifier]
    F -->|Predictions| G[Policy Decision]

    G -->|Follows Rules| H[RulePolicy]
    G -->|Known Paths| I[MemoizationPolicy]
    G -->|Generalized| J[TEDPolicy]
    G -->|Fallback| K[FallbackPolicy]

    H --> L[Bot Action]
    I --> L
    J --> L
    K --> L
    L --> M[Bot Response]

    %% Additional Notes
    subgraph Rasa Pipeline
        B
        C
        D
        E
        F
    end

    subgraph Rasa Policies
        H
        I
        J
        K
    end

日本語向けPipelineの例

日本語の特徴に対応するPipelineの例を以下に示します。日本語特有のトークナイゼーションと特徴量生成を組み込んでいます。

language: ja

pipeline:
  - name: "custom_components.japanese_tokenizer.JapaneseTokenizer"
    model: "mecab"
  - name: RegexFeaturizer
  - name: CountVectorsFeaturizer
    analyzer: "char_wb"
    min_ngram: 2
    max_ngram: 4
  - name: DucklingEntityExtractor
    dimensions: ["time", "number", "amount-of-money"]
  - name: DIETClassifier
    epochs: 100
    entity_recognition: True
  - name: FallbackClassifier
    threshold: 0.3

最適化のポイント

1.シンプルに始める

  • 必要最小限のコンポーネント(Tokenizer、Featurizers、DIETClassifier)から始めます。
  • 後からLanguageModelFeaturizerやカスタムコンポーネントを追加します。

2.データを検証する

  • rasa data validateを使用して、トレーニングデータの一貫性を確認します。

3.パフォーマンスを監視する

  • rasa testを使用してボットのパフォーマンスを評価し、必要に応じて調整します。

まとめ

RasaのPipelineとPolicyをマスターすることで、ユーザー入力を効率的に処理し、インテリジェントな応答を生成するチャットボットを構築できます。最適化されたPipelineと明確なPolicyを組み合わせることで、さまざまなシナリオに対応できるボットを作成できます。

まずは簡単な構成から始め、繰り返しテストを行い、ユースケースに応じて調整することで、最高の結果を達成してください。

質問があればぜひコメントでお知らせください! 😊

Related Posts

Articles

Our Products


Related Posts

Articles

Our Products


Get in Touch with us

Speak to Us or Whatsapp(+66) 83001 0222

Chat with Us on LINEiiitum1984

Our HeadquartersChanthaburi, Thailand