fc2ブログ

感情クラスの実装・・・・人工無能への道パート2「もっと頭の良い人工無能への道」

人工知能の基礎 (Computer Science Library)人工知能の基礎 (Computer Science Library)
(2008/11)
小林 一郎

商品詳細を見る

さて、例によって、平日で仕事があるにも関わらず(のんきだね~~・・・・でも、仕事は普通に忙しいっす)早朝3時40分に起床!
なぜかというと、昨日完成した人工無能(名前はまだ無い)のバージョンアップを行うためだ。
今日は2時間かけて感情クラスの実装を行った。
昨日完成したのはいわゆる、「パターンレスポンダー」、つまりこう言ったら、こう返す、みたいな。
で、今回のは、それに感情が伴ってくる。
つまり感情が変化するのだ。

言葉に値をつけて、それが会話ロボットの感情に影響する。
例えば、「君って、頭いいね。」と私が言うと、無能プログラムがそれに反応する。無能プログラムの中では、感情が(+5)になるのだ。感情が(+5)のときは「ちょっとハッピー状態」なので、会話の内容がちょっとハッピーな感じに変わる。

会話例

>私 こんにちは
>無能 うひゃ~~。
>私 何食べたの?
>無能 何食べようかな。
>私 まだ食べてないの?
>無能 もうだめ・・・。
>私 おなかがすいてるの?
>無能 あーーあ、ねむい・・・。
>私 眠いのね。
>無能 はあぁ。。。。

(あまりダイナミックな感情の変化は見られませんが、長時間会話を続けていると感情は変化していきます。あまり死ねとかウザいとかいって罵倒し続けると、きちんと)F○○K YOUと返してきます。

↑で、上の会話が今日の早朝にプロンプトで試行したときのもの。会話がかみ合ってるのか、かみ合ってないのか微妙ですが。昨日のときのように、攻撃的な発言はおさまってきました。そのかわりになんだか脱力感がありますが・・・。

では、感情クラスのソース。

class Emotion
MOOD_MIN = -15
MOOD_MAX = 15
MOOD_RECOVERY = 0.5

def initialize(dictionary)
@dictionary = dictionary
@mood = 0
end

def update(input)
@dictionary.pattern.each do |ptn_item|
if ptn_item.match(input)
adjust_mood(ptn_item.modify)
break
end
end

if @mood < 0
@mood += MOOD_RECOVERY
elsif @mood > 0
@mood -= MOOD_RECOVERY
end
end

def adjust_mood(val)
@mood += val
if @mood > MOOD_MAX
@mood = MOOD_MAX
elsif @mood < MOOD_MIN
@mood = MOOD_MIN
end
end

attr_reader :mood
end


def select_random(ary)
return ary[rand(ary.size)]
end

このスレッドテーマが人工無能への道から、もっと頭の良い人工無能への道へ変わりました。
一応、人工無能は完成しているので、もっと頭の良い、人工無能へ、ということです。
スポンサーサイト



コメント

非公開コメント

顔射

かわいい顔にたっぷりぶっかけ

http://1goodwill.biz/