myfinderの技術や周辺的活動のblog

2008年12月14日日曜日

人工無脳(chatbot)を実装してみる -第三回-

第三回は、ユーザの入力を学習する機能を持たせてみます。

辞書を司るDictionaryクラスに、学習と保存のメソッドを追加しました。

def study(input)
# 入力がランダム辞書に含まれていれば追加しない
return if @random.include?(input)
@random.push(input)
end

def save
open('dicts/random.txt', 'w') do |f|
f.puts(@random)
end
end

果てしなくシンプルです。
studyを呼び出せば、Dictionaryクラスのインスタンス変数@randomにユーザの入力がストアされ、saveを呼び出すと、ストアされた内容をファイルに書き出します。
学習も保存も、基本的には外部からのアクションによって呼び出されるものになるので、Munohクラスから呼び出されるべきです。

#〜略〜
def dialogue(input)
#〜略〜
response = @responder.response(input, @emotion.mood)

# 入力を学習させる
# 応答を決める前に学習させると、オウム返しな返答をしてしまうので
# 先に返答を決めてから学習させる
@dictionary.study(input)

return response
end
#〜略〜
# Dictionaryクラスのメソッドへのつなぎ
# Munohクラスを利用する側からは、Munohクラスのオブジェクトを通してコールすべき
def save
@dictionary.save
end
#〜略〜

という風になる感じです。

オブジェクトが破棄されるときに自動的に書き出してくれたりするともっといいんだろうなと思いつつ、今日はここまで。

0 件のコメント: