Aestetica

コンピュータ将棋Selene(セレネ)を作っています。名前は西海枝昌彦(さいかいし まさひこ)と読みます。

チャットボット開発中

なにをやっていたか。


去年の12月くらいから延々と地味にチャットボットを開発中です。

まずはチャットボットというものがなんだということですが、いわゆる人工知能の「おしゃべりプログラム」で、人間と会話してなにかをするプログラムのことを言います。

Softbankのペッパーくん、Amazon Echoとか、Google Homeもチャットボット製品で、「アレクサ、ドラゴンロケット、ドラゴンスクリュー、ドラゴンスープレックスだ!」とかいうやつです。

簡単に試せるものとしては、もしくはネット上にたくさんのレポートがあるものとしては、マイクロソフトが開発した女子高生AIの「りんな」があり、こちらはLINEで会話することができます。

現在は大きく分けて、Cycプロジェクト系とディープラーニング系があって、このCycプロジェクトというのはなんなのかというと、1984年スタートの自然言語処理プログラム。三段論法といった推論が可能なプログラム。

三段論法というと、非常に有名なソクラテスのものがあります。
①人は死ぬ。
ソクラテスは人だ。
ソクラテスは死ぬ。
というもの。

Cycプロジェクトでは、ここでいう①と②などの知識となるものを人が文章というか定義文を作ってガリガリ入力していき、様々な質問に関して③のような推論を行って返事をすることができます。
Cycと同じような仕組みで、かつ、非常に活躍しているのがIBMのWatosonというプログラム。IBMはWatsonを人工知能とは呼んでおらず、高機能な検索エンジン的な立ち位置と言っていますが、まわりは完全に人工知能ということで使用しています。

このへんは、「推論をすること」というよりも、推論の元となる知識をうまいこと格納して、関連する言葉をグルーピングできる仕組みを発明したほうがすごいのかも。

あとひとつはディープラーニング系で、文章を名詞とか動詞、形容詞といった品詞ごとに分解してRNNにつっこんでいき、品詞と品詞の関連と単語に対する関連も鬼のような量の相対評価で学習して、質問すると関係しそうな文章を引いてくる技術です。
こちらは明確に推論するということはできません。学習のさせ方によっては推論と同じような結果も出てくるかもしれませんが、人間が想像するような論理的な方式ではありません。


どちらの場合も、一問一答形式で、質問の文章に含まれる単語から連想される文章を引いてくる処理となります。
特に、最初のほうに書いた「りんな」はCycプロジェクト系ですが、質問に対する回答の用意しておいてある量が半端なく、さらに回答不能な質問に対する対応も幅広いです。

一問一答形式ということは、過去は気にせず、その場その場の質問に対して全力で答えていく感じなので話題には対応できません。
今は映画の話題なのに「去年なに見た?」とか聞いたとしても「なにを見ましたか?」とか言われてしまう。最近の「りんな」では、多少の対応はできているようだけど、すぐにわけわからん返事になります。
また、これらのチャットボットは多人数での会話ができません。

このへんの話題に対応することについては、ずうっーーーと以前にこのブログでも書いた「人工無能うずら」が既に対応できていて、うずらの会話内容をいろいろ見たりすると、グループで話されている話題が終わるまでは話題に関する発言をするか、たまに話は終わったのに発言するくらいで、話題認識は長め。
知識に関しては基本的には人と人との質問=回答を覚えておくスタイルだが、会話の軸となる部分については単語単位でグルーピングというか、結果的にグルーピングされているというか、オントロジーまでは見ていない。ように見える。


といったチャットボット、海外では「ローブナー賞」という学術寄りの大会が開かれています。ただまあ、Wikipediaを見るとAI界の力道山であるマービン・ミンスキーはあまり良く思ってなかったみたいだけど・・。

どうやって優秀かどうかを判定するのかというと、チューリングテストというものを行います。
これは、審査員の人が本物の人間なのかプログラムなのか知らない状況下でチャットをして、プログラムが審査員を騙して人間だと思わせれば勝ち!といったルール。
優勝したプログラムでは、会話内容から都度学習して文章を組み立てなおして回答するといったことを行っています。

このへんも、人間のマネをしたところで本当の知能じゃない!なんていう話もあって、なんなら知能なのか?というのも難しいです。論理的な推論を行って、単語の意味も知りつつ話せば知能なんでしょうけども。

日本でもやってほしいけどまだ無いようです(あったらすみません)。企業が先行してどうこうというよりも、どこかの大学が旗振りしてやらないとダメだと思うんですけど、どうなんでしょうか。


で、これらチャットボットを開発するには、まずは「自然言語処理」といって「自然言語=日本語などのうちらがふつーに話している言葉」を解析するようなプログラムを作らないといけなくて、これがまた大変難しいとか難しくないとかそんなことはどうでも良いくらい超難解という言葉すらも関係ないくらい難解というくらい、他の表現について思いもつかないくらい、
・・難解です。

英語と比べるとほんとにまあ、日本語ヤバイ。
日本語はSOV型といって、主語、目的語、動詞の順で並ぶ言語で、「私が-スイカを-持ち上げる」という感じです。
このSOV型の言語は、語順が変わったとしても意味が通じてしまうという、致命的にムズイ特性を持っていて、さらに単語と単語の間に何度見ても英語のようにスペースが見当たりません!ほんとに勘弁してほしい。今からでも変えてほしい。
これ、日本語を学んでいる外国人の方々は本当にすごいと思う。

この半年くらいは、あほの子のように日本語の文法を何回も勉強したり、形態素解析やPitman-Yor言語モデルなんかを見たりして、まずは難しさが確認できたところ。ヒエログラフも解析してみたりして、ある程度できちゃうのがアルゴリズムすげー!となるわけだけど、これらを本格的にやる以前に、ロンゴロンゴなどの未解読文字を解読しようとして、自作の「文字頻度を解析して単語認定するツール」を作って遊んでいたことがあるんだけど、今や、そんなものより精度の高いアルゴリズムがあるんですね。

深層格がどうこうとか、何度となく「Caseなんとか」というクラスを書いたわ!(笑)
この、「書いたわ!」の、「わ」も結構難しい問題というか日本語の面白いところで・・など、副作用として文章という文章が気になるようになってしまった。テレビでのテロップ見ても形態素解析して格を考える。やったー!

ある程度の推論はできるようになったけど、根本的に解決できていないので、各種問題はだんだんとやっていこうかなあ。と、1日に200回は思う日々。