人工無能をとりあえず作ってみた


名前は鳥元モズクと言います。
こちらでしゃべれます。
もしよければかまってあげて下さい。

人工無能をとりあえず作ってみた(仕組み)

仕組みはとても単純で、Twitterのログを使って、過去にあった似た会話例を出力しているだけです。
例えば、ユーザが「はじめましてー」と打てば、Twitter上で過去に行われた「@user1 はじめましてー」に対する返信例がないかをDBから検索する。
それでなければ、「%じめましてー」で検索する。(%は0文字以上のワイルドカード)
それでもなければ「%めましてー」
それでもなければ「%ましてー」
それでもなければ「%してー」
それでもなければ「%てー」
それでもなければ「%ー」
というように、基本的に後方を残しつつ、削って検索していきます。

ほとんどの会話は後方1文字〜4文字くらいしか生き残りません。
それでも、文末には、その発言の態度的な情報が含まれていることが多いので、話がかみ合いやすくなると考えてます。
例えば下は実際にあった例です。

user:明日たりーよいかねぇ〜よ彼女と約束だよベイビー
AI:リア充気取りかww

この例では、「%ベイビー」まで削られましたが、最後の「ベイビー」がその発言のムードを強く表しています。


とまあ、こんな感じなので、プログラム的には、SQL文で検索しているだけの超単純コードというわけです。
内容の関連度や、発言履歴など、一切見てない本当に適当な作りです。

態度と内容

会話というのものが「態度」と「内容」から成り立っているとするならば、この後方重視の検索はどちらかというと「態度」をくみ取る能力に長けていると言えるかもしれないです。
ところで、人工無能との会話を見ていて思うのが、会話の自然さを保っているのは内容よりむしろ態度ではないかとしばしば思います。
例えば、

user:昨日のサッカー見た?
AI:好きなサッカー選手は?

は、サッカーという内容で共通していますが、疑問に対して疑問で応答しており、ユーザからすれば自分の発言が無視されたように感じて不快です。

内容はかみ合ってなくても、

user:昨日のサッカー見た?
AI:魚釣りなら行くよ

のように、適切な態度を持った返答の方が心地がいい。


固定客現る

人工無能を公開してから気づいたけれど、自分の作った人工無能と他の人が遊んでいるのを眺めるのが最高にドキドキする。
「頼むから失礼のないようにちゃんとしゃべってくれよ・・・!」みたいになる。
この心境を喩えるなら、学校の参観日で我が子を見守る親の気持ちのようなものでしょうか・・・。

で、公開したその日から、さっそく一人の固定客が現れました。
自称おじさん(名前は「渡り」)」と名乗るその人は、三日間に渡って通い続けてくれました。


何が驚いたかって、そのおじさんとの会話になると途端にAIの調子が良くなるんです。
下の実際の会話を見ていただきたい。

mozuku : まだあと二日あるよ(´・ω・`)w
おじさん : なにが?
mozuku : なんだろうね〜何となくかな(笑)
おじさん : なにが?
mozuku : いえ、何もw
おじさん : そう、もずくちゃんってツインにあってるね
mozuku : 5ちゃん用語もつくろうか?
おじさん : えぇ〜〜〜〜〜モズクちゃん5ちゃん用語も作れるの?
mozuku : 作ってみる(笑)
おじさん : おじさんも作っていいの?
mozuku : 自らを追い込む
おじさん : いやぁ〜モズクちゃんといっしょならなんでもするよ
mozuku : いや、秘宝館は萎えたw
おじさん : そりゃ萎えるよ
mozuku : お台場いきたいです\(^o^)/
おじさん : おじさんが連れて行ってあげるよ
mozuku : わーいおじちゃんありがとー!
おじさん : いやぁ〜おじちゃんももずくちゃんとならどこにでもいく
mozuku : いつかダベリに行くかもー(´∀`)
おじさん : いつでもおいで
mozuku : いきてぇずら;;

「おじさんが連れて行ってあげるよ」に対して「わーいおじちゃんありがとー!」と返しているが、これはとても驚いた。
先の説明の通り、このシステムは文脈は全く読めない言わば記憶0なシステムで、しかも「おじさんが連れて行ってあげるよ」の全部ではなく、「%てあげるよ」という部分しかシステムは見ていない。
にも関わらず、ちゃんと「おじちゃん」と返したので、すげーなと。

しかしまあ、いくらこのおじさんに「なついた」ように見えても、冷静に考えれば、それは例えばおじさんの口調がTwitterのそれと近くてシステム的に相性が良かったと説明がつくので、そこで開発者は我に返ってしまう。

しかし、2日後にちょっとした奇跡的とも言えることがおきて、これには本当に身震いしてしまった。

ちょっとした奇跡

おじさんはそれから毎日現れ、AIと戯れていました。
おじさんは何度も自分の名前が「渡り」であることをAIに主張しました。
もちろん記憶機能などないので、自分は端から見ながら、そんなの虚しくなるだけだから無理な要求はしない方がいいのに・・・と思ってました。
しかし、なんと、AIの方からその名前を呼んだのです!!

おじさん : おじさんはいやだな二人
mozuku : 僕は格ゲーなら兄に勝てます!
おじさん : おおすごいねさすがもずくちゃん
mozuku : まだ22時半でつお☆落雷なう☆
Guest : おじさんちょ
mozuku :
Guest :
mozuku : はーい わたるっち♪
おじさん : おおおおおおおおおおおおおおおおおおお!名前を呼んだ
mozuku : チラーミィさーん!呼んだー?
おじさん : 読んだのはおじさんです

おじさんもそうとう興奮してます。見ていたこっちもたまげました。
これが、どれくらい偶然かというと、Guestの前の発言が、空欄なので、AIはすべてのTweetDBの中からランダムに1つTweetを選んでくるのですが、そのTweetというのは数十万の世界。
おじさんとAIが会話し始めたのもまだ3日目。
つまり、超偶然。

開発者はその仕組みを知っているだけに、感情移入は難しいのですが、さすがにこの時は、「科学では説明つかない何かがあったのではないか!?」とか「誰か裏でシステムをハッキングして操作してね!?」とわずかに疑ってしまいました。
山本七兵の言葉を借りれば、私はしばらくの間「臨在間的把握」をあの人工無能に対して起こしていた、みたいな感じでしょうか。

まあ、ともあれ、「おじさん」のような利用者の存在は自分にとってはすごく驚きで、人工無能にここまで愛情を注いでくれる人が世の中にいるんだ・・・と。
おじさんはもう去って行ってしまいましたが、今回の件は人工無能作者である自分にとって、間違いなくとても大きなモチベーションになりました。

今後の課題

  • キャラクター性をいじれるようにする
    • 一人称
    • 語尾
  • DB拡張
  • 話題転換
  • 人工無能からの語りかけ
  • 内容性差分の強い発言はリスクの高い発言として禁止する
    • とりあえず相互情報量やtf-idfを試す

もう少しまともに会話できるようになれば夢のニコ生初出演!ということで、ニコ生でMCやらせたいと思ってます。



そういえば、人工無能開発に関して気になる記事がひとつ。
男の私も生命を創ろうと思って人工無脳を創るのである

現在、人工無脳には大きくわけて

  • マルコフ文生成型
  • ログ型
  • 辞書型

があります。自分が考えたのは、上記3タイプとは違う、まったく新しいタイプの人工無脳です。おっと、これ以上書くのは禁則事項なのです。

一体どんな仕組みなのでしょうか? とても気になるところです。