候補を列挙する対話システム�
電気通信大学 情報理工学域 I類(情報系)��助教������松吉 俊�
経営情報学実験: 計算言語学�
対話システム�
2�
¨ Dialogue system�¨ 自然言語等を用いて、人間と対話するソフトウェア�
¤ 文字、音声、身振り、目線�
¨ 対話の履歴(history)を用いて、�発話(utterance)を生成する�¤ 履歴を利用しない場合、「質問応答」�
¨ 自然言語文の生成(generate)を必要とする�難しいタスク�
本実験で利用するプログラム�
3�
¨ Python 3で記述�¨ ユーザーとシステムの1対1の対話�¨ ユーザーからの1つの入力に対して、�
システムが応答文を1つ返す�¨ 人間らしい対話を続けることはできない orz�
¨ 複数の意味が推測できるキーワードに敏感�¤ この特徴を活かして、限られた範囲ではあるが、�
人間らしい応答を返したい�
プログラムファイルの実行�
4�
¨ 教材ファイルを好きなディレクトリーにコピーする�
¨ プログラムを実行する�
cp -r /usr/local/class/CL/files/sample XXXX�
cd sample python main.py �
実行例�
5�
特徴�
6�
¨ ユーザーの発話に存在する名詞に反応する�¤ 特に、最初に発言されたものに反応する�¤ 複合名詞には対応していない�
¨ カギ括弧(「」)で囲われた文字列に最も反応する�¤ 複合名詞であっても、タイトルであっても扱える�
¨ キーワードが複数の意味を持つ場合、�それらの意味を候補として列挙する�¤ Wikipediaの「曖昧さ回避」ページを読み込んでいる�
¨ 何も入力しないでEnterを押すと、終了�
課題�
7�
¨ ユーザーが曖昧な語句を入力してきた時に、�人間らしい応答を返す��1. 候補の中から、番号を選んでもらう�2. 候補を1つずつ問い合わせる�3. 文脈の中でそれとなく確かめる�
一般的な対話システムの概略�
8�
入力理解�
出力生成�
対話管理�
内部状態 更新
行動選択
内部状態 確認
プログラムモジュールの構成�
9�
入力理解�
出力生成�
対話管理�
内部状態 更新
行動選択
内部状態 確認
understand_input.py�
manage_dialogue.py�
generate_output.py�
main.pyで、�対話の周回を実現�
知識データベース�
10�
¨ ambDic�¤ Wikipediaの「曖昧さ回避」ページから自動抽出�
¨ ptnDic�¤ 定型的な応答規則�
本日の課題�
11�
1. プログラムの動作確認�2. 定型的な応答規則の追加�3. ambDicの編集�4. プログラムファイルの中身の(大まかな)理解�5. 候補の番号を選んでもらった後、�
自然な会話を続ける機構の実装�
定型的な応答規則の追加�
12�
¨ すでにある規則を参考にしていくつか追加する�¤ 楽しい規則を追加する�
¨ データベース更新:�
上: 入力 (完全一致で判定)�下: 対応する応答�
ファイルの末尾に�追加する�
rm data/ptnD.pickle
ambDicの編集�
13�
¨ 例として使用したい項目を自由に編集する�¤ 新しい意味の追加�¤ 意味の順番の変更�¤ 新しい項目自体の追加�
<word>�キーワード�<senses>�意味1�意味2� :�
rm data/ambD.pickle
p データベース更新:�
main.py�
14�
¨ 対話の周回(ループ)�¨ 入力文字列の受け取り�¨ 対話履歴(= 内部状態)にユーザー発話を追加�¨ 出力文字列の表示�¨ 終了時に、ログファイル(h.log)に�
対話履歴を書き込む�
understand_input.py�
15�
¨ 入力文字列の形態素解析�¨ キーワード集合の抽出�¨ yes/noが読み取れるか判断�¨ 第1キーワードの選択�¨ 曖昧な場合、意味リストを取得�¨ 入力文字列に含まれる数字列の取得�
manage_dialogue.py�
16�
¨ 追加された発話に対して応答の決定�¤ 定型的な応答規則の適用�¤ yesが読み取れる発話に対する応答生成�¤ noが読み取れる発話に対する応答生成�¤ 候補の番号を選んでもらった後の応答生成�
generate_output.py�
17�
¨ 対話管理モジュールが応答を決定している場合、�それを返す�
¨ 曖昧な語句を含む発話の場合、�意味の候補を列挙する�
¨ 曖昧でないキーワードを含む発話の場合、�「好きなんですね。」と言う�
¨ キーワードが1つも取得できなかった場合、�「なるほど。」と言う�
来週までの宿題�
18�
¨ プログラムファイルの中身の理解�¨ 「候補を1つずつ問い合わせて確かめる」場合、�
自分ならどのように言うか? を文字にしてくる�¨ 「文脈の中でそれとなく確かめる」場合、�
自分ならどのように言うか?、�例を定めて文字にしてくる�
参考文献�
19�
¨ 奥村 監修、中野ら著: �『自然言語処理シリーズ7 対話システム』、�コロナ社、2015�