トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

雑談対話システム

Last-modified: 2014-07-08 (火) 08:50:38
Top / 雑談対話システム

雑談対話・自由対話システム

柴田, 冨浦 & 西口, 2009. 提案のシステムを作ってみる

  • 注:このプログラムは2009年に作成したもので、2014年現在、Yahooウェブ検索APIの仕様が変わったためそのままでは動きません。

柴田, 冨浦 & 西口, 2009. システム概要

  1. 候補文コーパス作成
    1. コーパスのジャンルを決める(例:「映画」)
    2. メインテーマを決める(例:「ゴッドファーザー」)
    3. YahooAPIを使ってWebページを収集する(クエリ:「映画 ゴッドファーザー」)。このとき、HTMLのタイトルにメインテーマを含むもののみを対象にする。
    4. 各文を切り出して、メインテーマ、文書ID(URL)、文ID(その文書の何番目の文か)を付加して書き出す。
  2. センタリング理論:ある文の話題の中心となる語を選ぶ規則
    1. ゼロ代名詞のときの、前の文の「~が」「~は」の名詞。以下の ii,iii,iv がないとき、その文はゼロ代名詞であると判断している。
    2. 「~は」の名詞
    3. 「~が」の名詞
    4. 「~を」の名詞
  3. 対話処理
    1. まず、ユーザに話させる(「映画の話をしましょう」などとジャンル名を言って、ユーザにメインテーマを決めさせる)
    2. ユーザ発話の話題の中心語を調べる(なければ i に戻る)。ユーザ発話がゼロ代名詞だった場合、直前のシステム発話の中心語が中心語になる。
    3. ユーザ発話と同じ中心語の文を選び、後述する方法で一つの文を決め、返答する。ここで、一度使った文はもう使わない。システムが「へー」を返した場合、「へー」前後のユーザ発話をまとめて一つの発話と判断して、次の返答文を計算する。
    4. 以上を繰り返す。
  4. 意味的整合度
    1. ユーザ発話の内容語(名詞、動詞、形容詞、形容動詞)ωと、システム発話の内容語ω'の意味的整合度は、
      r(ω,ω') = logP(ω'|ω) - logP_D(ω') で決まる(論文のp.512、式(1))。
      • P(ω'|ω) は、ωを含む文があらわれたとき、その次の文がω'を含む確率で、最尤推定によって求める
      • P_D(ω') は、文書集合Dの中で、ω'を含む割合 df(ω')/|D| ここで、Dはウェブページ単位
    2. ωを含む文の数が4以下なら、r(ω,ω')= -∞ として扱う(論文のp.512、右段上)。
  5. 候補文選択:ユーザ発話文に対して「意味的整合度」が高く、「(ユーザにとって)有意味である」ものが良い、とのこと
    1. 候補文コーパスの中から、前のユーザ発話の中心語と同じ中心語をもつ文を選ぶ。
      • 「~が」「~は」「~を」の~がユーザ発話の中心語と同じ文、またそれに2回まで後続する文で、ゼロ代名詞の文
    2. ユーザ発話文と上記の候補文に対して、「中心語以外の内容語」の各組について意味的整合度を求める。
      • このとき、内容語が3に満たない候補文は除外する。*2
    3. 意味的整合度の値が大きかった上位3組を合計し、これを「ユーザ発話文と候補文の間の意味的整合度」とする。
    4. 文書間の意味的整合度が最も高く、かつその値が -2.5 以上の文が、候補文に選ばれる。
      • 条件を満たす文がなかった場合、メインテーマを中心語にして候補文選択をやりなおす。
      • それでも条件を満たす文がなかった場合、システム発話は「へー」となる。
    5. 選ばれた文をゼロ代名詞化する。
    6. 選ばれた文の冒頭に接続詞があった場合、「ちなみに」「それにしても」「そういえば」「例えば」「そりゃ」「本当は」を除いて除去する

実装

  • プログラム*3 file20091210_OpenDialogSystem_v0.6.zip
    • HariboteDialogSystem.java はSenもコーパスも使わないハリボテです(常に「へーそうですか」を返します)。
      • 入出力部分だけ本プログラムと同じにしてあります。詳しい使い方はソースコードをお読み下さい。
    • 注:2014年現在、MakeCorpus.java でWebコーパスを作ることはできません。
  • Webコーパスサンプル fileweb_corpus.zip
    • 個人サイトのテキスト、URLを含みます。もしも問題がございましたら、すぐにリンクを削除いたしますのでお知らせ下さい*4
    • ユーザの入力した内容語を含む文が必要なので、十分に多くのテキストをクローリングして保持しておく必要があります。この量では全然足りないと思われます。

使い方

  1. Senの実行環境をインストール
    • はじめに、Senで形態素解析/インストール/Windows を参考に、Senの実行環境をインストールしておきます。ここで、sen.jar と commons-logging.jar にクラスパスを通しておく必要があります。*5
    • また、話題にしたいメインテーマの名詞(アーティスト名など)は、全てSenの辞書に登録しておきます。
    • SenSample.java の System.setProperty("sen.home","c:/sen"); の行(二箇所あります)の、「c:/sen」のところを、自分の環境で sen をインストールしたディレクトリのパスに書き換えておきます。
  2. HTMLパーサーをインストール
  3. Webから情報を収集してコーパスを作ります。
    • はじめに、メインテーマリストファイル(例えば mainTheme_zoids.txt)をつくり、話題にしたいメインテーマの一覧(そのメインテーマで話題になりそうな名詞の一覧)を1行1語で列挙しておきます。
    • クローリングを開始します。
      java MakeCorpus ゾイド ./corpus ./mainTheme_zoids.txt UTF-8 300
      • 第一引数はジャンル名
      • 第二引数はコーパスファイルの出力先ディレクトリ名
      • 第三引数はメインテーマリストファイル
      • 第四引数はメインテーマリストファイルの文字コード(UTF-8にしておいてください)
      • 第五引数は検索結果を何件まで取得するか
  4. 対話を試します。(柴田, 冨浦 & 西口, 2009. の仕様を一部省略してしまったので、応答の不自然さが残ります。*6
java DialogSystem ゾイド ./mainTheme_zoids.txt ./output.txt
>> システム : ゾイドの話をしましょう。 (1)()

java DialogSystem ゾイド ./mainTheme_zoids.txt ./output.txt アイアンコングが好きでした。
>> システム : 隣町の祭りでLBアイアンコングが叩き売りされてたので入手 (2)(アイアンコング)()

java DialogSystem ゾイド ./mainTheme_zoids.txt ./output.txt 今も売っているんですね。
>> システム : 強力なゾイドは気性が荒いせいで操縦が難しい機種が多いが、アイアンコングは比較的性質がおとなしく、加えて複座型にし、パイロットと射撃手を分担することにより、操縦は容易である (2)(アイアンコング)(アイアンコング)
  • 第一引数はジャンル名
  • 第二引数はメインテーマリストファイル
  • 第三引数はシステム発話文を書き出すファイル名
  • outputSystemSpeak.txt にシステムの発話文が書き出されます。
  • log.txt に対話のログが書き出されます。
  • その他、システムの内部処理用に以下が書き出されます。
    • used.txt は対話に使った候補文のリストです。
    • theme.txt は今回のメインテーマです。
    • center.txt は直前の対話の中心語です。
    • cache.txt は意味的整合度の計算過程で出力した候補文一覧です。
  • 以上です。未実装・独自解釈で作った点はコード中にメモしてあります。

*1 早大菊池先生のご指摘による。
*2 ユーザ発話の内容語が3に満たない場合、どうするかはよく分からなかった。
*3 2010/12/16 早稲田の学内から使いたい場合は、SenSample.java と MakeCorpus.java のインターネット接続部分で、プロキシを通す必要がある。proxy_java.txtを参照(内部限定公開)
*4 連絡先 : m-kouki@moegi.早稲田.jp (半角英数に書き換えてください)
*5 eclipseではクラス名を右クリックして「ビルド・パス」>「外部アーカイブの追加」、Linuxではこんな感じ、Windowsではこんな感じ
*6 例えば、柴田, 冨浦 & 西口, 2009.では候補文の文体の整形や、前の文と同じ主語は代名詞に置き換えたりしているのですが、本ページのプログラムでは(制作時間の都合で)行っていません(引用元のウェブサイトのテキストをそのまま表示します)。

添付ファイル: file20091210_OpenDialogSystem_v0.6.zip 1002件 [詳細] fileweb_corpus.zip 1568件 [詳細]