ベース技術:当社とチャットボットとの関わり
本章の構成は以下のようになっている。- 日本語版の積み木の世界、英日翻訳システム、後ろ向き推論・前向き推論システムをprolog言語により開発 prolog言語について、パソコンワールド誌で2年間の連載を持ち、その内容の一部を書籍化した 「Prologで学ぶAI手法」(啓学出版・絶版)Prologで学ぶAI手法 を著わすなど、第一人者として活躍していた。
- prologマシン向けエキスパートシステム、ベストセラー日英翻訳システムのルールコンパイラをprolog言語で開発 Prologマシン向けのアプリケーションを電力会社向けに開発。当時ベストセラーとなった日英翻訳システムのルールコンパイラ(文脈自由文法からC言語によるチャートパーサープログラムを生成)の開発をprolog言語で開発
- prolog言語によるロボット会話システムの開発 国内向けに1万台以上販売した、日本語会話機能のついたロボットの英語版展開に伴う英語chatbotの開発(ロボットの海外販売計画の中止に伴い中断)。
- prologによる算数文章題の解法提示チャットボットの開発 今回ChatGPTの推論部分として利用する
その頃の成果として、テリー・ウィノグラードの積み木の世界(SHRDLU(シュルドゥルー))を日本語化し公開。さらに英日翻訳システムのプロトタイプをprologで開発するなどした。
日本語版の積み木の世界、英日翻訳システム、後ろ向き推論・前向き推論システムをprolog言語により開発
本稿の著者は第五世代コンピュータプロジェクトの最中(さなか)である1985年に社会に出て前回のAIブームに深く関わってきた。16bit版全盛の頃で、32bitパソコンが出現する前に、32bit版のprolog言語(独自OS上のprolog専用マシン)を利用して、ルールベースのAIであるエキスパートシステムなどの研究開発を行っていた。
また、パソコンワールド誌に、16bitのPC98シリーズで動作するprolog言語(京都大学のProlog-KABA)上で様々なAIシステムを実現するプログラムを2年にわたって連載していた。
「高野真」名義で雑誌連載した内容を書籍化した「Prologで学ぶAI手法」(啓学出版・絶版)Prologで学ぶAI手法 は、現在ではpdf形式で、az-prologのホームページで公開している。
その後の第五世代コンピュータプロジェクトを含む第2次AIブームは収束し、2006年にジェフリー・ヒントン博士が深層学習に関する論文を発表するまでAIは冬の時代を迎えた。
ちなみにジェフリー・ヒントン博士は、第2次AIブームでもニューラルネットワーク研究を牽引しており、AI冬の時代にもコツコツと研究を続けて、現在は第3次AIブームに火を付けた「深層学習の父」と呼ばれている。
当社が関わってきた(設立前に社長がかかわったものを含む)チャットボットは3つある。それに加えて英日・日英翻訳システムにも深く関わってきた。
一つ目は「Prologで学ぶAI手法」にあるテリー・ウィノグラードの積み木の世界(SHRDLU(シュルドゥルー))を日本語化したものである。
二つ目は、国内販売されたロボットの持つ日本語チャット機能を、海外向けに英語化するプロジェクト。会話プロトコルの分析やチャットボット開発ツールの製作を行った。
三つめは小学校の文章題を解くチャットボットである。このチャットボットをChatGPTを利用して強化することが、本稿のテーマとなっている。
1986年~1988年 日本語 SHRDLU(積み木の世界)
アメリカのAI研究者ウィノグラードTerry Winograd(1946-)は、1978年から1980年にかけて「積み木の世界」で人間とコンピューターが対話するSHRDLUというシステムを構築した。来談者中心療法のセラピストのシミュレーションであるEliza(1968年)と双璧をなす初の本格的chatbotである。Elizaはテキストだけのやり取りだが、SHRDLUでの返答はテキストではなく、 ロボットあるいはアニメーションで、散らかった積み木を片づけたり積み上げたりする点が異なる。
本稿の著者は、SHRDLUの初の日本語化を1980年代にProlog言語上において行った。当初は「パソコンワールド誌」で「Prologで学ぶAI手法」の連載として、パソコン(PC9801/16bit/128KBメモリ)上のProlog処理系であるProlog-KABA上で構築した。
音声認識・音声合成はサポートしていないが、日本語キーボード入力による指示を解釈して、プランニング(計画)を行って、結果をロボットアームが積み木を動かすアニメーションで表示するというシステムである。
1988年に啓学出版から高野真名義で連載と同じ「Prologで学ぶAI手法」というタイトルで書籍化している。
今世紀に入って、「積み木の世界」の日本語版はprolog処理系にも移植され、また某商用ロボットが、音声の指示通りに積み木をロボットアームで操作するというデモンストレーションとしても採用された。
「Prologで学ぶAI手法」書籍データはここ
簡略化した積み木の世界(実際には積み木の形状、大きさも異なっている) | ||
---|---|---|
赤い積み木を青い積み木の上に乗せてちょーだい | ||
(1)赤い積み木の上の黄色い積み木をつかむ | (2)赤い積み木の上の黄色い積み木を空いている床に移動する | (3)赤い積み木の上の緑の積み木をつかむ |
(4)黄色い積み木の上に緑の積み木を移動する | (5)赤い積み木をつかむ | (6)赤い積み木を青い積み木の上に移動する |
1988年 英日翻訳システムをパソコンワールド誌で発表
積み木の世界では、入力された日本語を「文脈自由文法」ルールで解析していた。文脈自由文法では、ルールの数が百数十(小規模チャットボット)~数千(機械翻訳システムなど)におよぶ。 文の解析に失敗したときに、原因が辞書にあるのかルールにあるのかを特定するのが困難である。特にルールの数が数百~数千のオーダーになると、デバッグが「非常に」困難となる。筆者が開発した英日翻訳システムでは、HPSGという当時の最先端の言語理論に基づく辞書記述を行った。HPSGではルールの数が数個しかない。文の係受け情報は全て辞書に記述する。
文の解析に失敗したときに、数個しかないルールに問題がある可能性はほぼゼロである。解析に失敗した原因は、ほぼ100%失敗した文に使われているワードの辞書記述にある。
このようにHPSGは、メンテナンスが簡単であるという非常に強力な特長を持っていたが、日本に紹介されたばかりということもあり、それほどの反響は生まなかった。
連載では文の解析で生成された中間表現に対応する日本語文生成エンジンを組み合わせることで、英語から日本語に至る翻訳を完遂することができたが、パソコン雑誌への連載という制約から メモリ空間の狭い16ビットパソコン上のprologで動かす必要があった。最終的にインプリメントしたものは辞書が100語程度の実験的なシステムにとどまった。
現在は64bitで動作するprologがあるので、HPSGで実用システムを作ることも可能であろう。しかし、深層学習による大規模言語モデルが発表された現在では、一つ一つ辞書記述をしなければならないような 自然言語処理プロジェクトに意味があるとは思えない。
戻る
prologマシン向けエキスパートシステム、ベストセラー日英翻訳システムのルールコンパイラをprolog言語で開発
第五世代コンピュータ計画の一環として、第二次AIブームの真っ只中。パソコンといえば16bit版全盛の頃である。32bitパソコンであるwindows 95が発売される5年以上前に、32bit CPU上に独自OSとprologコンパイラを載せたprologマシンを開発し、prolog言語アプリケーションの開発を 行っていた。電力会社向けのルールベースのエキスパートシステムの開発や教育用のprologマシンを販売するなどの実績はあったが、第二次AIブームの終焉とともに prologマシン自体の開発や販売も終了した。
機械翻訳の会社において、ベストセラーとなった日英翻訳システムのルールコンパイラを開発した。
ルールコンパイラは、文脈自由文法で記述したルールと辞書を32bit prolog言語(32bitパソコンが出る以前のDOSエクステンダという32bit仮想環境ソフト上で実行)上でインタプリタ実行し、 動作確認後に、C言語のチャートパーサーを組み込んだソースとして出力するコンパイラである。prolog言語上でラピッドプロトタイピング、C言語によって高速実行するという2段階の 開発環境である。
その後20年ほどprolog言語からは遠ざかり社業としては文書画像認識専業となった。
戻る
prolog言語によるロボット会話システムの開発
2015年にprolog関連でお世話になった企業から、ロボット会話システムの開発に誘われる。開発言語は、ロボットのOS上で動作するprologだった。
当時word2vecやdoc2vecという、単語や文を多次元ベクトルに変換するプログラムが話題になっており、seq2seqという深層学習モデルによる翻訳やチャットボットが出始めた頃であった。
2015年時点では深層学習を利用したチャットボットは、まだ実用レベルに達していないという判断から、ルールベースのチャットボットやAIMLのようなマークアップツールによるチャットボット (ELIZAの仕組みに似ている)を参考にして開発を進めていた。
AIMLの"ML"はHTMLのMLと同じ"markup language"の略で、正規表現のようなマッチング文字列にマッチしたときに、どのように応答するかのルールを大量に記述してチャットボットとする
ユーザー | システム |
---|---|
*X見た | if(ako(X,サッカー)) 1:"見た見た どっち応援してた?" else 2:"見てないけどXに興味ある?" |
1:*Y* : if(member(Y,[カタール])) | "残念だったね" |
1:*Y* : if(member(Y,[エクアドル])) | "エクアドル強かったね" |
2:*ある* or *うん* | どんなところに? |
2:*ない* or まったく or *全然* | 興味ない人もいるよね。ところで平野レミが75才って知ってた? |
* | そうだね、ところでワールドカップとか興味ある? |
"*"は全ての文字列にマッチする(文字列無しにもマッチする)。 ako(X,Parent)はX is a kind of Parentならば真
member(Y,Listt)はYがListの要素の一つとマッチするならば真
数字の1,2はステータスを表している
上記のテンプレートマッチングルールがあると以下のようなチャットが成り立つ。
ユーザー | システム |
---|---|
ワールドカップ放送見た? | 見た見た どっち応援してた? |
開催国のカタール | 残念だったね |
ユーザー | システム |
---|---|
NHK杯見た? | 見てないけど。ところでサッカーに興味ある? |
ないけど | 興味ない人もいるよね。ところで平野レミが75才って知ってた? |
ユーザー | システム |
---|---|
昨日の朝ドラ面白かったね | そうだね。ところでワールドカップとか興味ある? |
プログラマーでなくてもチャットの対象ドメインに詳しい人が記述することができる。
システム側に、挨拶や天気に関するQAなどのルールが数万と用意されており、当たり障りの無い会話をするだけのルールは提供される。 そこに専門分野のルールを追加することで不自然な応答をできるだけ少なくすることができるようになっている。
AIMLのような誰でも利用できる簡単なツールから本格的な業務に利用できる有料システムまで幅広く存在する
戻る
prolog言語による算数文章題解決システムの開発
2017年に算数文章題チャットボットを開発。その時点では趣味で開発したもの。- 2017年に小学校の文章題を解析して解きかたを教えるプログラムのプロトタイプ作成 プロトタイプでできることをまとめた
- 2017年:Transformer誕生
- 2018年:GPT誕生
- 2020年:GPT-3誕生
- 2022年:"Chain of Thought"プロンプトエンジニアリングが注目
- 2022年:11月にChatGPTサービス開始
- 2023年:ChatGPTの推論・検索・計画の精度向上のための研究開始。算数文章題解決・解法提示システムを題材として開発。
バージョン 0.1 | |
受け入れ可能な文章題 | 回答 |
---|---|
鶴と亀が合計80匹います。足の数の和が200本であったとき、鶴と亀はそれぞれ何匹いますか? | 鶴は60羽、亀は20匹です |
ツルとカメが合わせて8匹、足の数が合わせて26本であるときツルとカメは何匹(何羽)いるか。ただしツルの足は2本、カメの足は4本である。 「ただし」以降の後半は構文解析に失敗しているが前半の部分解が得られるので問題ない |
ツルは3羽、カメは5匹です |
鶴と亀があわせて10匹おり、足は全部で28本ある。ここで、鶴は何匹? | 鶴は6羽です。(鶴は必ず「羽」が助数詞となる) |
カメとツルが合計12匹、足は28本あります。ツルとカメはそれぞれ何匹いるでしょうか | カメは2匹、ツルは10羽です。(鶴は必ず「羽」が助数詞となる) |
つるとかめが12匹います。足が30本だとすると鶴は何羽いるでしょうか | 鶴は9羽です。質問文の方の「鶴」が採用される。 |
バージョン 0.2 | |
生物全般の脚の数のデータベースを組み込む。相変わらず足の数の問題だけ。 | |
バージョン0.1+追加で受け入れ可能な文章題 | 回答 |
タコとイカが合計12匹います。足の数が104本であるとすると、タコとイカはそれぞれ何匹いますか? | タコは8匹、イカは4匹です。 |
テントウムシとクモが合計7匹います。足の数が44本であるとすると、クモ何匹いますか? | クモは1匹です。 |
バージョン 0.3 | |
足の数だけでなく、花びらの枚数、おしべの数に対応&解き方の解説に対応 | |
バージョン0.2+追加で受け入れ可能な文章題 | 回答 |
桜の花と大根の花が15輪あります。花びらの枚数が70枚とすると桜の花は何輪あるでしょうか? | 桜の花は10輪です。 |
どうしてそうなるのか教えてください | 全て大根の花だとすると大根は15輪で、花びらは60枚となります。 実際の花びらは70枚なので10枚足りません。 大根ー輪が桜一輪になるとすると、花びらが1枚増えます。 大根10輪が桜になると、足りない分の花びら10枚が満たされます。 したがって大根は15輪から10厘少なくなって5輪、桜は10輪となります。 |
バージョン 0.4(実際に作ったのはここまで) | |
金額、物の分配、点数の分配に拡張 | |
バージョン0.3+追加で受け入れ可能な文章題 | 回答 |
50円切手と80円切手を合計14枚買って1000円を支払いました。50円切手と80円切手をそれぞれ何枚買ったのでしょうか。 | 50円切手は4枚、80円切手は10枚です。 |
大人と子どもが合わせて8人います、大人には1人に20枚、子どもには1人に15枚の色紙を配ると色紙は全部で150枚になりました。おとなと子どもの人数を答えなさい | おとなは6人、子どもは2人です。 |
バージョン 0.5(中断) | |
歩数等カウント可能なもの全般の分配に拡張 | |
バージョン0.4+追加で受け入れ可能な文章題の予定 | |
コインを投げて、表が出たら3歩前へ進み、裏が出たら2歩もどる。コインを20回投げたところ最初の場所から30歩前へ進んでいた。表と裏はそれぞれ何回出たかを答えなさい。 家から図書館へ行くのに、はじめは毎分60メートルで進み、途中から毎分100メートルの速さで走ったところ20分かかった。歩いた道のりが走った道のりより400m多いとき、家から図書館への道のりを答えなさい。 A君の走る速さは分速120m、歩く速さは分速70mです。10分で1200m進むには何分間走ればいいですか? |