中国語用のミルク ティー ウェイター チャットボット。rasa をまだ知らない場合は、以下のmini rasa tutorial
を参照してください。
またはrasaの公式ドキュメントを読んでください
まず、bert_chinese_model をダウンロードして解凍する必要があります: chinese_L-12_H-768_A-12
git clone https://github.com/BI4O/rasa_milktea_chatbot.git
cd rasa_milktea_chatbot
pip install -r requirements.txt -i https://pypi.tuan.tsinghua.edu.cn/simple
bertサーバーを起動します
bert-serving-start -model_dir path/to/chinese_L-12_H-768_A-12/ -num_worker=1
ミルクティーにジャンプ
cd milktea
アクションサーバーを起動する
rasa run actions
モデルをトレーニングする
rasa train
チャットボットに話しかける
rasa shell
3 つの異なる製品を注文でき、さらに自分でモデルを追加できます
3つのサイズをお選びください
- 新しいプロジェクトを作成する
- NLU トレーニング データの表示
- モデル構成を定義し、最初のストーリーを作成する
- このストーリーストーリーのスコープドメインを定義します
- トレーニングモデル
- 作成したヘルパーをテストする
パスは新しい空のフォルダーを指しますcd path/to/a/blank/folder
このフォルダーに新しい rasa プロジェクトを作成しますrasa init --no-prompt
フォルダー内に次のファイルが生成されます。
__init__.py | 位置決めに使用される空のファイル |
---|---|
アクション.py | アクションを定義するために使用されます (カスタム スクリプト コード) |
config.yml | NLU とコア モデルを構成する |
認証情報.yml | 他のサーバーへの接続に関する詳細 (一般的には使用されません) |
データ/nlu.md | 私のカスタム NLU トレーニング データ |
データ/ストーリー.md | 私のカスタムストーリーストーリー |
ドメイン.yml | ヘルパーのドメインは domian です |
エンドポイント.yml | FBメッセージなどに接続されたトラック(一般的には使用されません) |
モデル/<タイムスタンプ>.tar.gz | モデルとそのパラメータ ファイル |
cat data/nlu.md
以下のように表示されます
# # intent:order
- [奶茶](type)
- [咖啡](type)
- 我想要一杯[奶茶](type)
- 要杯[奶茶](type)
- 有[奶茶](type)吗
- 有[奶茶](type)卖吗
- 想要一杯[咖啡](type)
- 要杯[咖啡](type)
- 有[咖啡](type)吗
- 我想要一杯[卡布奇诺](type)
- 要杯[卡布奇诺](type)
- [卡布奇诺](type)
# # intent:inform_size
- [中](size)
- [中](size)的
- [中](size)杯
- [中](size)杯吧
- 要[中](size)杯
- [大](size)
- [大](size)的
- [大](size)杯
- [大](size)杯吧
- 要[大](size)杯
- [特大](size)
- [特大](size)的
- [特大](size)杯
- [特大](size)杯吧
- 要[特大](size)杯
Intent は意図を表し、## で始まり改行で終わる必要があります。たとえば、ここには 2 つの意図が示されています。1. 注文する、2. ミルク ティーの仕様を知らせる、顧客が使用する可能性のあるすべてのレトリックをここに配置し、nlu モデルでミルク ティーの内容を理解する方法を学習するために使用します。人は言います。
[value](entity)
エンティティはエンティティを表し、値はエンティティの特定の値を表します。トレーニング後、nlu モデルは次のような変数をコア モデルに返すことができます: {"type":"奶茶","size":"大"}
。これにより、コア モデルは 2 つのパラメーターtype
とsize
に基づいて応答できます。
config.yml
モデルが使用する以前の NLU モジュールとコア要素を定義します。また、全員が https://github.com/GaoQ1 / にアクセスすることを強くお勧めします。 rasa_nlu_gq書かれたストーリーを見る
cat data/stories.md
# # order naicha
- order{ " type " : "奶茶" }
- slot{ " type " : "奶茶" }
- utter_ask_size
- inform_size{ " size " : "大" }
- slot{ " size " : "大" }
- utter_affirm
- confirm
- action_charge
- utter_goodbye
物語の構成
##
の始まりはストーリーの名前、つまりわかりやすい名前を示します##
で始まります*
で始まるものはユーザー インintent{"entity1": "value", "entity2": "value"}
-
先頭はロボットが実行する動作を示します。ユーザー情報
アクションアクション
アクションには2種類ある
utter_xxx は、domain.yml に記述するだけで、返信したい単語を直接返すことができます。
action_xxx は、domain.yml で指定するだけでなく、aciton.py ファイルにも追加する必要があります。たとえば、カスタム アクションaction_HelloWorld
を作成するとします。
まず、このカスタム アクションを acitons の下のdomain.yml に追加します。
actions:
- aciton_HelloWorld
次に、acitons.py ファイルに新しいクラスを追加します
class YourCustomAction ( Action ):
def name ( self ):
# 这个返回的值必须和stories.md和domain.yml中说明的一致
return "action_HelloWorld"
def run ( self , dispatcher , tracker , domain ):
# 定义这个动作要执行的你想要的操作
# 比如我想在对话中返回给用户的是HellowWorld!
dispatcher . utter_message ( 'HelloWorld!' )
return []
cat domain.yml
intents:
- greet:
triggers: utter_greet
- goodbye:
triggers: utter_goodbye
- confirm
- deny
- order
- thanks
- inform_size
- unknown_intent
actions:
- utter_greet
- utter_ask_order_what
- utter_ask_size
entities:
- type
- size
slots:
type:
type: text
size:
type: text
templates:
utter_greet:
- text: "你好"
utter_ask_order_what:
- text: "想要喝点什么? "
utter_ask_size:
- text: "想要什么规格的呢?我们有中/大/特大杯"
で
この場合、私たちのアクションは、単にユーザーに応答として単語を送信することだけです。これらの単純なアクションはすべて、 utter_
で始まるアクションです。実際、アシスタントはテンプレート内のステートメントを選択して応答する必要があります。さらに多くのアクションを定義することもできます。その他のアクションについては、 Custom Actions
を参照してください。
次のコマンドを使用して、ドメイン/ストーリー/NLU の差異を自動的に確認し、モデルを再トレーニングします。トレーニングされたモデルには、新しいモデルrasa train
としてタイムスタンプが付けられます。
rasa shell