カシオ FX-502P のシミュレーション(1)

Casio FX-502P simulation (1)


2021/10/07
藤田昭人


たいへんご無沙汰してました。

実は8月から生活パターンが激変しまして、 体力的辛さから毎日を過ごすのに 一杯いっぱいの日々を送ってました。 必然的にブログは放ったらかしに…
2ヵ月経てようやく慣れて来たので、 もろもろ溜まっている宿題も 少しずつ返していくつもりです。


カシオ FX-502P って覚えておられますか?

唐突感MAXですが… *1

カシオ FX-502P は1978年に発売された 往年のプログラム電卓です。 僕と同世代の方々なら覚えて いらっしゃるかもしれませんね。 1970年代の日本の熾烈な 電卓戦争を勝ちに抜いた2社、 シャープとカシオは、この時期 アメリカ市場を視野に入れてか、 アメリカのテキサス・インスツルメンツヒューレット・パッカードが製品化していた プログラム電卓をリリースし始めます。

ポケコン」と銘打って 簡易BASICを搭載したシャープに対し、 次の写真でもわかるように (おそらくHPの製品を模倣した?) アセンブリ言語を各ボタンに割り付けて、 電卓なのに数字キーがかすむくらいにやたらボタンの多い むっちゃ硬派なプログラム電卓を出荷したカシオ。

f:id:Akito_Fujita:20211003144915j:plain
FX-501P

製品の外見からも両社のアプローチが 対極的だった事を今もよく覚えています *2。 僕も、この硬派なルックスにやられて 当時としては大枚の1万数千円を叩いて 買ってしまったクチです😁

実は、これが僕が初めて自腹で買った 「プログラミングできるマシン」 だったのですが、結局のところ 当時のコンピュータ月刊誌に よく掲載されていたゲームなどを打ち込んで 遊ぶ以外の使い方はしていませんでした😁 *3


FX-502P のレジスタ構造

懐かしいゲーム本が見つかったところで FX-502P のゲームを実行してみたいと考えたものの、 かつて使っていた実機も付属のマニュアルも 最早手元には残っていなかったので、 FX-502P のシュミレータを作ること考えました。

残念なことにカシオのサイトでは FX-[567]02P は「無かった」ことになってまして、 散々ググってみたのですが、 結局日本語のマニュアルは見つかりませんでした。 ですが、英語のマニュアルは残ってるんですねぇ *4。 それも元は日本文だったものを 直訳しただけの素っ気ないマニュアルが。正直 「日本の製品なのに日本語のマニュアルが 残ってないのはどういうこと?」 って思ってしまいましたが…

マニュアルに記載されている FX-502P のレジスタ構造を次に転載します。

f:id:Akito_Fujita:20211005000124p:plain
FX-502P のレジスタ構造

ついでに FX-602P のレジスタ構造も…

f:id:Akito_Fujita:20211005000234p:plain
FX-602P のレジスタ構造

図に登場するメモリ・レジスタは 一般的な電卓にもある機能、 Minで書き込み、M+やM-で計算、 MRで計算結果を呼び出す…あの機能です。 FX-502P のメモリ・レジスタは 0〜9とFの11本が2セット (FX-501Pは1セットだけ) 用意されています*5

FX-502Pのプログラムでは メモリ・レジスタは変数の領域と考えます。 つまりFX-502P は最大で 11個の変数が使えます。


FX-502P のオペコード

もちろん学生の頃にも FX-502Pのマニュアルは 読んだはずなのですが… その後、OSカーネルプログラマとして経験を積んだ今、 改めてマニュアルを眺めてみると、 FX-502Pが 独自仕様の8ビットマイコン であったことがよく理解できました。

Wikipedia によれば…

FX-502Pシリーズは 7セグメント表示のみであるため、 それぞれのプログラムステップは、 0 - 9とC、E、F、Pを組み合わせた 2桁のコードで表示される。

とのこと。元は電卓ですから (キーに割り付けられている キーコード(の一部)が オペコードと等価な) 独自の命令セット が定義されているようです*6。 またまた FX-502P の情報は なかなか見つけられなかったのですが、 しつこく探してみると次のページを見つけました。

www.arithmomuseum.com

このページにあるオペコード表を しっかり追ってみると、 先の「0 - 9とC、E、F、Pを 組み合わせた 2桁のコード」 という記述の意味が概ねわかります。 (正直 "P" という文字が 割り振られた理由までは わかりかねますが、 単純に "D" と読み替えれば よくある8ビットのオペコードと 代わりありません)

8ビットマイコンのオペコードとしてみた場合、 FX-502P の命令セットは 上位4ビットが "C" 以上の領域に 押し込められたスパースで、 Z80 のような1〜4バイトの 可変バイト長の命令セットです。 なんだか歪な印象を持ちますが、 これも電卓のキー配置の物理的限界 (6つのキー列が5段+ 5つのキー列が4段=50キー) に起因しているのでしょう。 FX-502Pを使ったことのある方は ご存知のように、INV キー (invert、裏面って意味でしょうね) を使って全体では99個のキーを 物理的に確保してます。 もちろんエレガントな配置は言えませんが、 その反面、キー毎に命令が 割り当てられていて プログラムが入力が効率的 (GOTOであってもワンプッシュ) というメリットがあります。


バイトコードエンジンを書いてみる

レジスタ構造と命令セット (オペコード)がわかったところで、 FX-502P のバイトコードエンジンを (C言語で)書いてみました。 ソースコードは次に置いてあります。

github.com

このエンジンはオペコードのテーブルに 各命令のハンドラを貼り付けただけの 比較的単純な作りです。 今のところ Wikipedia の FX-502P のページにある 次のサンプルコードが実行できます (つまりサンプルコードで使ってる命令しか ハンドラを書いてないって意味ですからね)。

f:id:Akito_Fujita:20211006101616p:plain
サンプルコード

このプログラムはXレジスタにセットしている 数値の階乗計算をします。 参考までに等価なコードを(無理矢理) Cで書くと次のようになります。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
  int m0;
  int x = 5;

  m0 = x;                       // Min 0
  x = 1;                        // 1
  printf("x: %d\n", x);
  for (; m0 > 0; m0--) {        // INV DSZ GOTO 0
    x *= m0;                    // *
    printf("x: %d\n", x);
  }
  printf("x = %d\n", x);        // =

  exit(0);
}

要点は INV DSZ (Decrement and Skip on Zero)命令で 続く GOTO 0 との組み合わせて、 C言語の for ループを実現しています。 なお、ループカウンターとして 暗黙的に M0 レジスタを使って いるので注意が必要です (これがFX-502Pの仕様なんですよ)。


さいごに

という訳で…

バイトコードエンジンの枠組だけはできました。 プログラムの挙動を確認するために、 トレース機能を付けたところデバックは随分楽になり、 学生の頃に感じた「頭がこんがらがる」印象は 無くなりました (その後、40年間あまりプログラマを 生業にして来たので、 ロジックを追っかけることに慣れた という意味合いもありますが)。

これ、納期が定まっていれば、 一気に畳みかけてひと通り動くところまで 持っていくのでしょうが…

他にも BookBot など 優先度の高い課題を 抱えているので、 今手元にある英文マニュアルで 紹介されている他の例題を皮切りに 今後も FX-502P のプログラムを見つけては ハンドラを追加・修正する作業を マイペースで進めていきたいと思っています。

最後に…

かつて FX-502P がカシオの 電卓ラインナップに登っていた頃、 パブリックドメインのプログラムのリストを 多数収録した プログラミング・ライブラリが書籍として 出回っていたようなのですが、 今となっては古過ぎて古書としても 入手ができないようです。 もし、お手持ちの方がいらっしゃれば、 プログラムリストの写真等を 送ってもらえると嬉しいです。

ともあれ…

僕的に FX-502P は日本が誇るべき 技術資産なんじゃないかと思うのですが、 今回関連情報の収集をしてみて 「日本語で解説したマニュアルやプログラムリストが 残っていない現状は由々しき事態」かと 考えるようになった次第です (カシオはあまり関心がないようです)。 今回紹介したバイトコードエンジンが ひと通り動くようになったら、 日本語でのドキュメントを書きたいなと 考えているところです。

以上


*1:今はコレしかネタがないとも言います😁

*2:そのFX-502P についてググってみると、 その後継機種である FX-602P に関する 英語のページが頻繁に登場します。

f:id:Akito_Fujita:20211003145423p:plain
FX-602P

FX-502P が7セグメントの液晶表示 であったのに対し、FX-602P は ディスプレイがドットマトリクスに変更され ASCII テキストが表示できるようになっていました。 今回調べてみたところ カシオのプログラム電卓は 海外各国にも輸出されていたようで、 海外ではASCIIが使える FX-602Pの方が好まれたのでしょう。

FX-602P を紹介する次のホームページは 同機を支持する熱烈なメッセージから始まります。

fx-602p.krischik.com

Welcome to the FX-602P homepage - where the best programmable calculator ever (from the company who do not which to be named) found it's new home. True, many calculators do have more functions but when it comes to a small form factor, light weight usability and programmability without a manual by your side then the FX-602P is king.

FX-602Pのホームページへようこそ! 史上最強のプログラム電卓 (会社の名前は伏せておきますが) の新しいホームページを用意しました。 確かに、多くの電卓が より多くの機能を持っています。 が、しかし、小型で軽量な使い勝手と、 マニュアルなしでプログラムできるという点で、 FX-602Pは王者です。

カシオの海外法人の対応が 素っ気なかったのか 皮肉混じりではありますが、 製品には最大限の賛辞が送られてます。 「HPの電卓よりも?」 と感じられる方もいらっしゃるでしょう。 このホームページを読んでいくと、 「入力したプログラムを保存できない TIは間抜けな仕様だし、 バカ高い外部メモリカートリッジにしか プログラムを保存できないHP」 にも恨み言を並べてます。

そもそも1978年といえば、 1ドルが270〜240円だった訳で、 FX-502Pは「機能はほぼ等価なのにバカ安い」 プログラム電卓だったといえるでしょう (今に置き換えれば iPhone クローンの Xiaomi(シャオミ) の スマホみたいな感じでしょうか?)。

このあたり、当時の 「またまたアメリカの後追い」 と捉えていた僕ら日本人の シニカルな印象との違いに 今となっては苦笑してしまいます。

*3:その後すっかり忘れてしまっていた FX-502P。 思い出したのは、長年開かずの段ボール箱を開いたところ、 中から次の本が出てきたからでした。

f:id:Akito_Fujita:20211003222520p:plain

学生の頃、 物理の授業中に散々遊んだ 「ポケット・インベーダー」 を思い出してしまいまして…

*4:おそらく海外で人気のあったであろう FX-602Pのマニュアル は綺麗にスキャンされた PDF が見つかりました。 さらに、しぶとくFX-502Pのマニュアルを探したところ "CASIO FX-502P CALCULATOR MANUAL" も見つかりました。でもスキャンが雑で文字が判別しづらい。

*5:ちなみにこの2つの図を見比べると FX-602P は FX-502P の上位互換のように見えます。 FX-602P のメモリ・レジスタは 0〜9とFの11本が8セット 内蔵されていたようです。

*6:後継機種の FX-602P については 脚注で紹介した FX-602P ホームページで 次のように丁寧に説明されてます。

Token Codes - FX-602P

前述のようにASCIIテキストを表示できるように 機能拡張されたため、FX-502Pを踏襲しつつも 命令セットの体系は大きく改変されてるようです。

ローブナー賞コンテストの実際

Turing Test Contest in Practice


2021/07/20
藤田昭人


前回 の記事は 前々回 よりもさらに多くの方々に読んでいただけたようで…ありがとうございます。

本稿ではチューリングテスト・コンテストの 実例として、 前回も少しふれたローブナー賞について もう少し掘り下げて紹介したいと思います。


Loebner Prize 2009

実は個人的な関心から ローブナー賞についてはいろいろ調べて来たのですが、 コンテストの実際の様子を語るなら Loebner Prize 2009 がもっとも都合が良さげかと思います。

というのも、その理由のひとつは 古くからあるチャットボット専門サイトの chatbots.org が制作したコンテストのダイジェストビデオが 残ってるからです。 全編で10分程度の短い映像ですし、 英語で滔々と語るシーンも皆無なので 日本人の僕たちにも比較的見やすい(😁) ビデオです*1

www.youtube.com

この映像を見る前に 思い出しておいて欲しいのは チューリングテストに関するルール、 テストを実行するための役回りについてです。

テストの主役はもちろん チャットボット(Chatbots) です。Loebner Prize 2009では 次の3つのチャットボットが ファイナルステージに勝ち上がりました。

チャットボット 開発者 所属
Do Much More David Levy Intelligent Toys Ltd.
Cleverbot Rollo Carpenter Icongno Ltd. and Existor Ltd.
Chip Vivant Mohan Embar  

しかし僕的に引っかかるのは 「ファイナルというからには 予選もあったのか?」 という疑問でして、 「ローブナー賞の予選」 なるものの情報を 探しまくったのですが… 見つかりませんでした。 これ、どう理解すれば良いのかなぁ?

前回 もチラッとふれましたが、 チューリングテストでは 「機械のフリをする人間」の コンフェデレイト(Confederate) も参加します。 Loebner Prize 2009では 次の4人のコンフェデレイトが 暗躍しました(笑)。

コンフェデレイト 所属
Brian Christian Knopf Doubleday Purblishing
Dave Marks Sandia National Labs
Olga Martirosian Meraka Institute
Doug Peters Nuance Communications Inc.

なお コンフェデレイトについては 後ほど詳しく紹介します。

最後に「もっとも人間に近い対話者を判定する」 ジャッジ(Judge) です。前回は「10人」と説明しましたが Loebner Prize 2009では ジャッジは次の4人だけだったようです。

ジャッジ 所属
Prof Alan Garnham University of Sussex
Prof John Carroll University of Sussex
Prof Shalom Lappin King's College London
Mr Jon Bentley The Gadget Show

たった4人のジャッジとなると 「30%以上が人間と判定する」 というチューリングテストの条件は 1人で満たされず、実際には2人以上、 つまり50%以上という条件になってしまいますねぇ。

ちなみに4人のうち3人までは教授なんですが、 残る4番目のジョン・ベントレーは イギリスのテレビ番組(5チャンネル) The Gadget Show のキャスターだそうです。 この番組は一般向けにテクノロジーを紹介する 番組なんだそうですが、番組のテイストは YouTube のアーカイブ からご覧ください。実は 「ひょっとしたら Loebner Prize 2009 を 紹介する回があるかも?」 と思ったもので調べてみたのですが… 見つけられませんでした。

さて…

チューリングテストが 「ジャッジの30%以上が 同一のコンピュータを 『もっとも人間らしい』と 評価した場合」 をクリアの条件としていることは 前回 紹介しましたが、 ローブナー賞ではそれ以外に 2つの賞が設けられています。

1つはその年でもっとも優秀な チャットボットに与えられる The Most Human Computer (もっとも人間らしいコンピュータ) で、Loebner Prize 2009で 選ばれたのは Do Much More でした*2

もう1つはその年でもっとも優秀な コンフェデレイトに与えられる The Most Human Human (もっとも人間らしい人間) で、Loebner Prize 2009で 選ばれたのは ブライアン・クリスチャン でした。


ブライアン・クリスチャンのレポート

僕が Loebner Prize 2009 に注目すべきと考える もうひとつの理由は、 このコンテストに コンフェデレイトとして参加した ブライアン・クリスチャン が、その経験を元に執筆した書籍 "The Most Human Human" (邦題『機械より人間らしくなれるか』) を出版しているからです*3

やはり、 コンテストの当時者による打ち明け話は、 いろんな意味で大いに参考になります。

本稿では書籍のプレビュー版に位置付けられそうな クリスチャンが月刊誌 Atlantic に寄稿した記事 "Mind vs. Machine" をサマライズします。

www.theatlantic.com

そもそも クリスチャンがローブナー賞に参加した動機は、 前年の2008年の結果に 「人類の尊厳が脅かされかねない」 と感じたからのようです。

however, at the 2008 contest, the top-scoring computer program missed that mark by just a single vote. When I read the news, I realized instantly that the 2009 test in Brighton could be the decisive one. I’d never attended the event, but I felt I had to go -- and not just as a spectator, but aspart of the human defense. A steely voice had risen up inside me, seemingly out of nowhere: Not on my watch. I determined to become a confederate.

しかし、2008年のコンテストでは、トップスコアを獲得したコンピュータプログラムが、わずか1票の差でその座を逃してしまったのです。 このニュースを読んだとき、私は即座に「2009年のブライトンでのテストが決定的なものになるかもしれない」と思いました。 これまで一度も参加したことはありませんでしたが、単なる観客としてではなく、人類を守るために参加しなければならないと思いました。 心の中でどこからともなく厳しい声が聞こえてきました。 私はコンフェデレイトになることを決意しました。

1996年〜1997年、IBMの ディープ・ブルー の挑戦を受けてたった ガルリ・カスパロフ を敬愛する彼は、自らをカスパロフになぞらえて 「人類の尊厳を守る」 との、いささかロマンチックな考えに突き動かされていたと言います*4

コンフェデレイトとして Loebner Prize 2009 に参加することが許されて以降、 クリスチャンはチャットボットの挑戦を退けるための綿密な準備を始めますが、 この記事ではその準備作業の中の幾つかを披露しています。 チューリングテストの哲学的・心理学的な考察の後、 チャットボットの基礎である ジョセフ・ワイゼンバウムELIZAリチャード・ウォレスA.L.I.C.E. の紹介から始まる一連のレクチャが展開しますが、 ここでは僕が気になったトピックを2、3上げておきます。


●ジャッジの2種類のタイプ:「おしゃべり」と「尋問者」

クリスチャンによれば、 ジャッジは「おしゃべり」と「尋問者」の2種類のタイプに分類できるそうです。

I had learned from reading past Loebner Prize transcripts that judges come in two types: the small-talkers and the interrogators. The latter go straight in with word problems, spatial-reasoning questions, deliberate misspellings. ・・・ The downside to the give-’em-the-third-degree approach is that it doesn’t leave much room to express yourself, personality-wise.

The small-talk approach has the advantage of making it easier to get a sense of who a person is -- if you are indeed talking to a person. And this style of conversation comes more naturally to layperson judges. ・・・ The downside is that these conversations are, in some sense, uniform -- familiar in a way that allows a programmer to anticipate a number of the questions.

私はローブナー賞の過去の記録を読んで、ジャッジには「おしゃべり」と「尋問者」の2つのタイプがあることを知りました。 後者は、単語の問題、空間的推論の問題、意図的なミススペルを真っ向から指摘してきます。 ・・・ 「厳しく詰問する」アプローチの欠点は、自己表現の余地があまり残されていないことです。

(前者の)「おしゃべり」方式には、実際に人と話している場合に、その人が誰であるかを簡単に把握できるという利点があります。 このような会話スタイルは素人の審査員にはより自然に生まれます。 ・・・ 欠点は、これらの会話はある意味で画一的であり、 プログラマーが多くの質問を予想できる慣れ親しんだものであるということです。

過去、ローブナー賞では「おしゃべり」タイプが暗黙的に推奨されてきたそうですが、 このタイプの欠点に挙げられている「ある意味で画一的」とは挨拶などの 定型的な会話、例えばジャッジが「今日は暑いねぇ」と話しかけてきた時、 チャットボットの開発者は「そうですね、暑いですね」 といった無難な返事を容易に想像できることを指摘しています。 こういった会話で人間らしさを演出するのは難しいとクリスチャンは考察しています。


●「ライブタイピング」への対応

ローブナー賞では、何かキーを叩く度に相手のターミナルにその反応が表示される 「ライブタイピング」機能が採用されていました。 そこで意図的に、間を取ったり、削除キーを連打して入力を消したり、 あるいはタイプミスを挿入したりして、人間らしいケアレスミスをシミュレートする テクニックを用いるチャットボットが初期の頃から存在しました。

クリスチャンは「ライブタイピング」の機能を使って 人間らしさを演出するために次のような戦略を考え出しました。

I would treat the Turing Test’s strange and unfamiliar textual medium more like spoken English, and less like the written language. I would attempt to disrupt the turn-taking “wait and parse” pattern that computers understand, and create a single, flowing duet of verbal behavior, emphasizing timing.

私は、チューリングテストの奇妙で馴染みのないテキスト媒体を、 書き言葉のようにではなく、 話し言葉のように扱うことにしました。 コンピュータが理解する話者交替の「待って、解析する」パターンを破壊し、 タイミングを重視した、ひとつの流れるような言葉のキャッチボールによる二重奏を作り出すのです。

つまり「相手の反応を待たずにどんどん発言をしていく」という戦略で、 クリスチャンは「チャットボットには真似できない」と考えていたようですが、 非同期プログラミングが一般化した今日では この戦略をチャットボットも採用できるのではないか?と僕は思います。


●コンフェデレイトの策略

クリスチャンは「どんどん発言していく」戦略に「ライブタイピング」機能の活用に加えて 更に新たな意義を見出していたようです。

The humans in a Turing Test are strangers, limited to a medium that is slow and has no vocal tonality, and without much time. A five-second Turing Test would be an easy win for the machines: the judges, barely able to even say “hello,” simply wouldn’t be able to get enough data from their respondents to make any kind of judgment. A five-hour test would be an easy win for the humans. The Loebner Prize organizers have tried different time limits since the contest’s inception, but in recent years they’ve mostly adhered to Turing’s original prescription of five minutes: around the point when conversation starts to get interesting.

A big part of what I needed to do as a confederate was simply to make as much engagement happen in those minutes as I physically and mentally could. Rather than adopt the terseness of a deponent, I offered the prolixity of a writer. In other words, I talked a lot.

チューリング・テストに参加する人間は、 見知らぬ人であり、ゆっくりとした声色のないメディアに限定されており、時間もありません。 5秒のチューリングテストは、機械にとっては楽勝です。 「こんにちは」と言うことすらできないジャッジは、 何らかの判断を下すのに十分なデータを回答者から得ることができないからです。 5時間のテストは、人間にとっては簡単に勝てるでしょう。 ローブナー賞の主催者は、コンテストが始まって以来、さまざまな制限時間を試してきましたが、 「会話が面白くなってきた頃」というチューリングの言葉を守って、 近年では、チューリングの最初の処方箋である5分にほぼ固執しています。

コンフェデレイトとして私がやるべきことの大部分は、 この数分間に肉体的にも精神的にも可能な限り多くのイベントを起こすことでした。 証言者のように淡々とするのではなく、作家のように諄々と話す。 言い換えれば、私はたくさん話しました。

つまり「ジャッジに対してできるだけ多くの情報を与える」ことで 「ジャッジが対話相手の人物像を想像することを助ける」と考察しています。 クリスチャンはこのアプローチに従ったジャッジに対する自身の応答に自信を持っていたようですが、 隣にいたダグ・ピータースの次の会話を覗いた時に打ちのめされたと語っています。

Judge: Hey Bro, I’m from TO.
Confederate: cool
Confederate: leafs suck
Confederate: ;-)
Judge: I am just back from a sabbatical in the CS Dept. at U of T.
Confederate: nice!
Judge: I remember when they were a great team.
Judge: That carbon date me, eh?
Confederate: well, the habs were a great team once, too …
Confederate: *sigh*
Judge: YEH, THEY SUCK TOO.
Confederate: (I’m from Montreal, if you didn’t guess)

Judge: よぉ兄弟、私はTOから来たんだ
Confederate: クール
Confederate: リーフス最低
Confederate: ;-)
Judge: 僕はT大学のCS学部でのサバティカルから戻ってきたところだ
Confederate: いいね!
Judge: 素晴らしいチームだったことを覚えてるよ
Judge: 僕には大昔のことだけどね(笑)
Confederate: まあ、ハブスもかつては素晴らしいチームだったけど...
Confederate: *ため息*
Judge: ええ、奴らも最低だ。
Confederate: (想像していなかっただろうけど、僕はモントリオールから来たんだよ)

訳注: ここではカナダのホッケーチームのトロント・メープルリーフス(leafs)と
モントリオール・カナディアンズ(habs)の話をしている。
両チームは伝統的なライバル関係にある。

ジャッジが共感できる話題を見つけた場合、 コンフェデレイトはより人間らしい対応ができると クリスチャンは考えていたようですが、 これもある面では「定型的な会話」になるんじゃないか?と僕は思いました。 例えば、相手が阪神タイガースのファンだとわかった場合 「バース、掛布、岡田」と発言すれば 会話相手は更に饒舌になるように思いますから。

ともあれ…

クリスチャンのコンフェデレイトに関する考察は非常に興味深い内容で、 チャットボットの開発者も1度コンフェデレイトを経験すると 解決すべき課題が具体的にイメージできるようになると思いました。


ローブナー賞とは?

クリスチャンの記事に時折挟み込まれるローブナー賞の様子は、 微笑ましいものです。例えば…

Ridiculous Canadians and their ice hockey, I’m thinking. Then I’m thinking how ridiculous it is that I’m even allowing myself to get this worked up about some silly award. Then I’m thinking how ridiculous it is to fly 5,000 miles just to have a few minutes’ worth of IM conversations. Then I’m thinking how maybe it’ll be great to be the runner-up; I can compete again in 2010, in Los Angeles, with the home-field cultural advantage, and finally prove --

“And the results here show also the identification of the humans,” Jackson announces, “and from the ranking list we can see that ‘Confederate 1,’ which is Brian Christian, was the most human.”

And he hands me the certificate for the Most Human Human award.

「愚かなカナダ人と彼らのアイスホッケー…」と私は考えていました。 そして、バカげた賞のことでこんなにも自分に言い聞かせているなんて、 なんて馬鹿げているんだろうと思ってしまいました。 それから、たった数分のインスタント・メッセージでの会話のために 5000マイルもの距離を飛んで来ることがどれほど馬鹿げているかを考えていました。 さらに、準優勝というのは素晴らしいことかもしれないとも考えました。 2010年にロサンゼルスで、ホームフィールドの文化的優位性を生かして再び出場し、 最終的には次のように証明することができて…

「そしてここでの結果は、人間の識別も示しています」とジャクソンは発表します。 「そしてランキングリストから、ブライアン・クリスチャンである ‘Confederate 1’ が最も人間的であったことがわかります」

そして、彼は "Most Human Human" の賞状を手渡してくれました。

実は、クリスチャンが記述している この感動的なシーンは前述のビデオにも登場します。 が、彼が言うほどには感動的ではない、 いや、もっと率直に語ると「非常にそっけないシーン」に見えます。 きっと、これは彼の心象風景だったのでしょう。

「オタクのオタクによるオタクのためのコンテスト」

これがローブナー賞の真実のように僕には思えます。 そしてビデオでは、このコンテストの創設者である ヒュー・ローブナー への感謝が繰り返し語られます。 一部では「売名行為」と揶揄されているローブナーですが、 さまざまな批判や妨害に耐え、 時には私財を注ぎ込んでまで、 この毎年開催されるコンテストを 長らく維持・運営してきた彼への深い感謝が感じられます。 米国人である彼が始めたにも関わらず、 ローブナー賞は英国人のためのコンテストです。 それが日本人である我々には見えにくい ローブナー賞のもうひとつの顔なのかも知れません。

ビデオやクリスチャンのレポートから感じるコンテストへの情熱は、以前読んだ スティーブン・レヴィ の名著 『ハッカーズ』 に登場する ホームブリュー・コンピュータ・クラブ を彷彿させるものです。 オールドファンの方々はご記憶のことと思いますが、 Apple を設立した「もう一人のスティーブ」こと スティーブ・ウォズニアック が毎回クラブに持ち込んでいた マイクロプロセッサによるホームコンピュータ(のボード)こそが 後の Apple の最初のベストセラーである Apple II となります。また開発したBASICインタープリターを 使ってビジネスを始めた ビル・ゲイツ を最初に酷評したのも、このクラブでした。

僕は、 こういった純粋で無垢で情熱的な衝動を (かつての)ローブナー賞にも感じてしまうのです。


ローブナー賞の現在

もっとも、このローブナー賞の「古き良き時代」は Loebner Prize 2009 の時点で終わりに向けて走り出していたように見えます。 クリスチャンは The Most Human Human の受賞には喜びつつも、 その際に感じた戸惑いについて次のように語っています。

I DIDN’T KNOW how to feel, exactly. It seemed strange to treat the award as meaningless or trivial, but did winning really represent something about me as a person? More than anything, I felt that together, my fellow confederates and I had avenged the mistakes of 2008 in dramatic fashion. That year, the 12 judges decided five times that computer programs were more human than confederates. In three of those instances, the judge was fooled by a program named Elbot, which was the handiwork of a company called Artificial Solutions, one of many new businesses leveraging chatbot technology. One more deception, and Elbot would have tricked 33percent of that year’s dozen judges -- surpassing Turing’s 30 percent mark, and making history. After Elbot’s victory at the Loebner Prize and the publicity that followed, the company seemingly decided to prioritize the Elbot software’s more commercial applications; at any rate, it had not entered the ’09 contest as the returning champion.

正直なところ、どのように感じればいいのかわかりませんでした。 この賞を無意味なもの、つまらないものとして扱うのはおかしいと思いましたが、 「受賞は私という人間の何かを表しているのか?」(と考えてしましました。) 何よりも、コンフェデレイトの仲間たちと一緒に、2008年の失敗を劇的な形で取り返せたと感じました。 前年、12人の審査員は、コンピュータプログラムの方がコンフェデレイトよりも人間らしいという判断を5回下しました。 そのうち3回は、Elbot というプログラムに騙されました。 このプログラムは、チャットボット技術を活用した数多くの新興企業のひとつである Artificial Solutions 社が開発したものです。 もし、もう一回騙せていたら、Elbot はチューリングの30%を超え、歴史に名を残すことになったのです。 Elbot がローブナー賞を受賞し、世間の注目を集めた後、同社は Elbot の開発を優先したようです。 いずれにしても、2009年のコンテストには、返り咲きのチャンピオンとして参加していません。

つまり、クリスチャンにコンフェデレイトとしての参加を 決意させたチャットボットと彼が対決することはなかったのです。

これはまた、ローブナー賞でのビジネス指向の台頭を示す出来事でもありました。 ローブナー賞で The Most Human Computer を獲得したチャットボットの多くは、 その後、何らかの形でビジネス化へと踏み出していきました。 これはかつてのホームブリュー・コンピュータ・クラブでも起こった現象です。

ヒュー・ローブナーは アラン・チューリング・イヤー (2012)の前年を最後にローブナー賞の運営からは退き、 Turing Centenary Advisory Committee(TCAC: チューリング100周年記念諮問委員会) のメンバーとなりました。そして2016年12月に亡くなりました。

2014年以降、ローブナー賞は ブレッチリーパークAISB (世界最古の人工知能学会) が運営を引き継いでいます。 2019年にはルールが変更され、 ジャッジもコンフェデレイトも廃止されました。 代わりに、チャットボットは一般の人々によって審査されています。

以上

*1:ローブナー賞コンテストの様子を収めた もうひとつの映像は次の Loebner Prize 2007 のビデオです。

www.youtube.com

噂のヒュー・ローブナーの自宅で 開催されたコンテストだったことが 映像からも窺い知れます。

*2:Loebner Prize 2009での Do Much More の 会話ログは次で公開されています。

2009 Loebner Prize Competition Transcripts

案外、たわいもない会話のような…😀

*3:ブライアン・クリスチャンの書籍は 次のリンクで辿れます。

www.penguinrandomhouse.com

ちなみにこの書籍がベストセラーになったため、 クリスチャンは一躍ノンフィクション作家の 仲間入りを果たしました。

なお日本語訳は草思社のサイトで確認できます。

www.soshisha.com

ちなみに文庫版 も刊行されています。 一般教養としてのAIを ギュッとまとめられているので、 おすすめの一冊です。

*4:哲学の学位を持ち、詩作による美術修士も取得しているクリスチャンには、 それが自然なことに思えたのでしょう😀

チューリングテストのアナロジー

Turing Test Analogy


2021/07/12
藤田昭人


前回 は久方ぶりに読み物的記事を書いたのですが、 予想外に多くの方々に読んでいただけたようで…ありがとうございます。図らずも 「チューリングテストは案外認知度が高い」 と再確認できた次第。ですが、僕的には 正直言うと勢いだけで書いた記事だったので、 読み返してみるとあまりに散漫な内容だったなぁと 反省しているところです。

そこで…

前稿の後半部分の 「チューリングテストの今日的な意義」 にフォーカスして、 幾つかのテーマを書きたいと考えています。 本稿ではまず 「男性のフリをする女性」と 「女性のフリをする男性」 の話から。


「男性 vs 女性」の模倣ゲーム

前回、この話は 「チューリングの論文の冒頭で語られている」 と説明しましたが、そのくだりを 新山 祐介さんが翻訳された "Computing Machinery and Intelligence"(計算する機械と知性) から引用します。

次のような問いについて考えてみよう:

「機械は考えることができるだろうか?」

まず始めに「機械」とか「考える」という用語の 意味を定義しないと いけない。 この定義は、なるべくその言葉の ふつうの使いかたを 反映するように 作られてしまうかもしれない。 しかしこういった態度は危険だ。 もし「機械」や「考える」という 単語の意味がそれらの一般的な用法を 調べて明らかになるのなら、 つぎのような結論になってしまうのは 避けられないからだ。 つまり、 「機械は考えることができるか」 という問いの意味とそれに対する答えは、 ギャラップ社の世論調査のような 統計的調査によって求められるべきだ、 ということになる。 そんなのはバカらしい。 ここで私はこんな定義をするかわりに、 この問いを別の、 これとかなり似てはいるがそれほど曖昧でない 言葉で言いかえてみよう。

ここまでは論文の本来のテーマ 「知能機械」について語られてます。 が、その後、論文は突拍子も無い方向に展開します。

この問いの新しい形式は私たちが 「模倣ゲーム」 と呼ぶゲームによって表わされる。 これは男性 (A) と女性 (B)、 および性別は問わない一人の質問者 (C) の 3人によって行われる。 まず質問者はほかの 2人とは別の部屋に入る。 質問者にとってのこのゲームの目的は、 この 2人のうちどちらが男性で どちらが女性かを言い当てることだ。 質問者は彼らを X と Y という名前で 呼び、 ゲームの終わりに 「X が A で、 Y が B」あるいは 「X が B で、 Y が A」のどちらなのか 当てるのである。 質問者は A と B に次のような質問をすることが 許されている:

C: X さんの髪の長さを教えてもらえますか?

ここで、実は X が A であるとしよう。 すると A は答えなければならない。 このゲームでの A の目的は、 C が間違った判断をするようしむけることである。 彼の答は、たとえば次のようなものになる:

「私の髪はみじかくて、 長いところでも 9インチぐらいです」

声の高さで質問者に悟られてしまわないように、 答は紙に書くのがよい。 タイプライターによってタイプすればさらによい。 理想的な環境は 2つの部屋のテレタイプでつないで 通信させることだ。 あるいは質問と回答を、 仲介者を通してくりかえすようにしてもよい。 このゲームでの B の目的は、 質問者を助けることだ。 彼女のもっともよい 戦略は、 おそらく本当のことを正直に答えることだろう。 彼女は「女のほうは私です、 彼の言うことを聞いてはいけません!」 などとつけ加えることもできるが、 これは何の役にも立たない。 なぜなら 男の方も同じようなことが言えるからだ。

このように「チューリングテスト」の事を チューリング自身は「模倣ゲーム」 と呼んでいました。 チューリングの伝記映画 のタイトルにもなりましたので 耳馴染みのある方もいらっしゃるでしょう。 でも、この「模倣」の意味を正しく 理解している方は案外少なかったかも。 これが 「男性のフリをする女性」と 「女性のフリをする男性」が 繰り広げる騙し合いのゲームだったことを チューリングは論文の冒頭で語っています。

ところが…

ではここでひとつ問いを立ててみよう。 「このゲームで機械が A の役をうけもったら 何が起こるだろうか?」 こうすると、 ちょうど男性と女性によって このゲームが行われているときと同じくらい、 質問者は判断を 誤るだろうか? この問いは私たちの最初の問い 「機械は考えることができるか」 を置き換えるものになる。

…と、またまた唐突に 「人間 vs 機械」 の話に戻ります。

論文ではその後「男性 vs 女性」の話は登場しません。 話題はストアド方式によるデジタルコンピュータの仕組みへと移ります。 それ故、冒頭の話はコンピュータが一般的ではなかった当時 「人間 vs 機械」 の問題を読者にリアルに認識してもらうための アナロジーと理解されてきました*1


現在の技術を使ったチューリングテスト

チューリングの論文が発表されてから 70年あまり経過した今日、 論文ではチューリングが説明に苦労したコンピュータは 一般的なデバイスとして広く普及してますし、 デジタルコミュニケーションも格段に進歩して 音声付き映像によるテレコミュニケーションも 日常的なツールとして利用されています。

調べてみると「人間 vs アンドロイド」による 総合的チューリング・テスト という提案があるそうで、 今ではそのようなテストが 実現可能であることに疑いを持つ人も あまりいないのではないかと思います。

では「男性 vs 女性」のテストの方はどうでしょうか?

是非はともかく 「男性のフリをする女性」と 「女性のフリをする男性」 というテーマの方もロボットやAI以上に 格段に進歩した言える(言わざる得ない) 現状があるように思います。 次は前回も登場した「ジェンダーレスボーイ」 井出上漠くんの映像です*2

www.youtube.com

この映像は5分間程度で チューリングテストでの 1回のセッションに概ね一致します。仮に あなたがこの映像の背景を全く知らないまま、 この5分間の映像を最後まで見たとします。

あなたは「彼」だと思いますか?
それとも「彼女」だと思いますか?

モルモット扱いをして 漠くんには申し訳ないのですが…

現在のデジタルコミュニケーションの技術を使って チューリングテストを行うと こんな感じになるのではないか? と僕は考えてます。 チューリングテストでは JUDGE(審査員)が一人当たり5分間会話しますが、 JUDGEがこのようにSNSのDMを使って質問をし、 質問に答えてる様子を映像を見ながら 「男性 or 女性」(あるいは「人間 or 機械) を審査するという形式なら、 SNSを使って比較的簡単に チューリングテストの環境を構築できそうです。

この映像では「どうしてそんなに声が高いの?」という フォロワーからの質問に漠くんは一生懸命答えてますが、 チューリングテスト的観点でよく見ると、 身振り手振りを交えながら質問に答えてる、 特に手を忙しなく動かしていることが確認できます。 それが話者の人間らしさ(女性らしさ)の 演出に大きく寄与しているように思えますが、 そう言った細かな仕草なども考慮するとなると、 もしこういった形式で「人間 vs 機械」のチューリングテスト、 つまり前述の「総合的チューリング・テスト」を実施した場合、 クリアできるアンドロイドが登場するには まだまだ時間が必要な気がしますね。


チューリングテストの今日的な解釈

漠くんの映像を手がかりに、 チューリングテストに 現在のデジタルコミュニケーション技術を活用すると 対話のリアリティが格段に向上することを 擬似的に確認してもらった訳ですが、 これはチューリングテストのもう一つの 隠されたテストを顕在化させるように思います。 すなわち…

あなたはこのような存在を人間社会が受け入れることができると思いますか?

…と問いかけられているように思えてくる訳です。 おそらく今後アンドロイドの性能がさらに向上し、 振る舞いにドンドン人間らしさを 帯びてくるにしたがって、 この即答できそうにない質問を 強く問い詰められているように 感じるのではないかと僕は想像しています。

言うならば「機械は思考できるか?」が チューリングテストの表の問いならば 「思考する機械を人間は受け入れられるか?」 は裏の問いになる訳で、各々の問いは チューリングテストの必要条件と十分条件に 相当するのではないかと思います。

もちろん必要条件が成立しなければ 十分条件には意味はないのですが、 必要条件が成立したと言う伝聞も相まって 現実の出来事として遭遇する予感があるので 十分条件が気になり出した… 例えば 前回 もふれましたが、SNSが広く普及している今日、 知らず知らずのうちに チャットボットと会話しているといった状況は 誰にでも起こり得ることです。

このような 「チューリングテストのような日常」 を意識するようになると、誰もが 十分条件について考えざる得ない のではないでしょうか? 現在の我々の日常を鑑みると チューリングテストの意味や理解について 修正を迫られているように僕は考えています。


クリアの条件

最後にチューリングテストのクリアの条件について…

本稿の冒頭で引用した 1950年にチューリングが発表した論文は、 チューリングテストの手順を詳細に語る文献 としてよく知られていますが、 チューリング自身が想定した 「テストへの反論」 に対する丁寧な考察は書かれているものの、 チューリング自身が考える 「クリアの条件」 には言及がありません。

ですが…

チューリングテストのコンテスト界隈では 「論文の発表後、 チューリング自身が クリアの条件について語った」 と言われています。 例えば前述の 「総合的チューリング・テスト」 を提案している ジョス・デ・ムルチューリング自身が言及したとされる チューリングテストのクリアの条件について 次のように説明してます。

このテストにパスするために, 知性的機械 -- それはコンピューター・プログラムによって動かされている -- は, 少なくとも 30% の質問者を,5 分間自身が人間であると騙すことができなければならない。 チューリングは,こ のテストを機械がパスできるためには 50 年かかるだろうと予測した。 すなわち,2000 年である。 この予測はそれほど外れていなかった。 2014 年に,最初のコンピューター・プログラムがテス トをパスした。

このチューリングの言及は、 1952年にBBCのラジオ番組(?)として放送された 学識経験者同士の対談番組での発言に由来しているようですが*3、世のチューリングテストに基づく 多くのコンテストでは このクリア条件に基づいて ルールが定められているようです。

例えば、最古のチューリングテストに 基づくコンテストであるローブナー賞では、 4台のコンピュータ (人間のフリをする機械、チャットボット)と 4人のコンフェデレイト (機械のフリをする人間、共犯者)からなる 都合8名の覆面対話者に対し、 10名のジャッジ(審査員)が 1名あたり5分間会話をし、 その後5分間でジャッジは各人ごと 対話者のランキングを修正します。 全てのジャッシが全ての覆面対話者と会話しますので 全体では80分あまりの時間を要します。

このようにして作成された 10人分の対話者ランキングに基づいて 対話者の審査を行う訳ですが、 ジャッジの30%以上、 つまり3名以上が同一のコンピュータを 「もっとも人間らしい」 と評価した場合、 このコンピュータはチューリングテストを クリアしたと認定されます。

ジャッジの主観的な評価に基づいているので、 ローブナー賞の審査には 是非の議論がついて回って来ました。 しかし「質問者の30%以上」と言ったのは チューリング自身と言われていますので、 その責任をローブナー賞に求めるのは 無理があるのかも知れません。

なお「テストをクリアするのに 50年間を要する」とは、正確には 「2000年ごろにはクリアできるだろう」 とのチューリングの発言に基づき、 論文が発表された1950年から 計算されたようです。

ちなみに「2014年にパスした」とは 前回 紹介した2014年のレディング大学が 独自に企画したチューリングテストの実験のことです。 この実験でもローブナー賞と 概ね同様のルールが採用されたと思われます。

したがって…

チューリングテストの必要条件が 成立するまでに64年間を要したことになります。 では、十分条件が成立するまでには どれくらいの時間を要するのでしょうか? 前述のように「質問者の30%以上」に対する 懐疑論が存在するので、 ローブナー賞などのコンテストでの実績に 基づく予想は難しそうなのですが…

十分条件を「思考する機械が 社会的認知を得て市民権を獲得する」と理解すると、 チューリングは予想外のヒントを 提供してくれてるかも知れません。

すなわち…

彼が当時違法とされた 同性愛で逮捕されたのは1952年、 同性愛の違法性が否定され 彼の名誉が回復されたのは2014年ですから、 彼の事例では社会的認知が覆るのに 要する時間は62年間ということになります。 もっともこの事例は、 チューリングが残した業績を高く評価し、 彼の名誉回復のために 尽力した方々が多数存在したからで、 おそらく「ベストケースの場合」との 但し書き付くのでしょうが…

少なくとも…

どうやら本稿で書いた諸々が全て陳腐化するまでに 100年待たされることはなさそうです😁

以上

*1:おそらくチューリングの論文の 主な読者である理工学の学生や研究者は 「人間 vs 機械」 の話題に関心はあっても (文学部の学生に比べて) 「男性 vs 女性」 の話題には無関心、 あるいは避けているのが一般的でしょうから、 「男性 vs 女性」 の話は記憶から抜け落ちてしまうのだろう… などと僕は自分勝手に想像しています😀

*2:この映像はおそらくインスタグラムかYouTubeの 彼のフォロワーに対する ライブ配信を録画したものでしょう。 この種の彼の映像はYouTubeで幾つも見つけることができます。

*3:いずれ事実関係を詳しく調べてみたいと考えてますが…

僕が想像するに、この発言はテレビ番組あたりで 無茶振り質問を食らった大学の先生が、 苦し紛れに返答する「直感的には…」から始まる 発言だったのではないかと思っています。

それが「30%」や「5分間」「50年」などの 数字に対する明確なエビデンスが示されてない理由で、 それ故、論文等の文献には残されてないのではないかと 想像しています。

チューリングテストについて改めて思うこと

A new thought about the Turing Test


2021/07/01
藤田昭人


唐突ですが…

久しぶりに読み物を書きたくなって 本稿を書いてます。

テーマは「チューリングテスト」です。

エッセイなどというオシャレな文章ではありませんが、
ちょっとした暇つぶしにはなるかとは思います😁


2014年のチューリングテストへの批判記事

本稿を書きたくなったのは、次の記事を見かけた事がきっかけでした。

www.itmedia.co.jp

3年前の2018年07月26日に公開された記事だったのですが、 タイトルの「4年前の『AIがチューリングテスト合格』騒動は何だったのか?」が 妙に挑発的に感じられたので覗いてみたところ…

この記事が問題にしているのは、 2014年6月8日に英国レディング大学で実施されたチューリングテストの実験でした。 「チャットボット Eugene Goostman がチューリングテストをクリアした」 との報道には僕にも記憶があります。 しかし、この記事は「チューリングテスト合格は本当?」と テストの正当性に疑惑を提示する文言が並んでます*1

確かに、このレディング大学のイベントに限らず、 チューリングテストに基づくコンテストには その正当性に疑義を突きつけられる事例もあるのですが…

2014年といえば アラン・チューリング法 が成立し、英国王室よりアラン・チューリングを始めとする 過去の同性愛を理由に逮捕・投獄された方々への恩赦が正式に発表された年です。 チューリング生誕100周年を祝った2012年の アラン・チューリング・イヤー に続き、英国がチューリングの名誉回復に祝ってお祭り騒ぎに沸いてる年に 開かれたチューリング関連のイベントに対し 後出しのように疑義を提示するというのは何とも無粋な感じですよね?*2

記事では、レディング大学のイベントを一通り腐した後、 アラン・チューリング自身が語った論文 "Computing Machinery and Intelligence" を持ち出してきます*3。 記事の著者としては「原典に当たれば、自ずと答えが見えるだろう」という思惑だったのでしょう。 が、残念なことに彼の思惑は大きく空振りだったようです。 著者が残したこの記事の結論は次のような1文でした。

私が感じたのは「思考する行為」と「思考しているフリの行為」の違いは何かという問題提起です。

この、尻切れトンボのような幕切れに僕は大笑いしてしまいました。
著者に申し訳ないですが、どうにも苦し紛れの一言のように僕には感じられて…
どうやらこの記事の著者は「チューリングテスト」を甘くみていたようですね*4

まぁ、その場は記事を笑い飛ばして終わったのですが(失礼)

数日後、この記事のある部分からちょっと想起されることがありました。 それが次のくだりです。

人間の頭の中はのぞけません。 その人の思想、信条を無理にでも知ろうとする行為は、自由に反します。法に触れる可能性もあるでしょう。 「思考しているフリ」をして「思考している!」と主張されれば、一体どうやってそれを証明できるでしょうか。

思考だけではなく、愛も、憎しみも、敬意も、軽蔑も、実際に目に見えないものをどうやって証明するのか。 同じように「そうではないこと」をどうやって証明するのか。非常に難しいと言えます。

「お前は私を愛していない」とレッテル張りされれば最後、どう反証しても目に見えませんから言葉で説明する他ありません。 その言葉を信じられなければどうしようもありません。

このくだりを改めて読んで想起されたのは「第2次AIブームの終焉」でした。 そこで、この文章だけを拝借して、僕なりの記事を書いてみたくなったという訳です*5


第2次AIブームの終焉

「第2次AIブームの終焉」と書くと非常にわかりづらいのですが、 僕を含めた現在50歳以上の情報系の面々には、 これは特に拘りのある問題ではないかと思います。端的に述べると 「いったい、いつから機械学習はAIの研究分野になったんだ!!」 ということです。

第2次AIブームが終わったのは概ね1990年前後だったと記憶してますが、 それまでAIは「思考のメカニズムを解き明かす」研究分野だと説明されていました。 当時、機械学習は既に存在していましたが、 それは単に「人間の振る舞いを模倣するだけ」と説明され 「AIではない」と指導教官や先輩に 嗜められる学生や若手エンジニアが多かったのです。 なので現在のAIブームが起こった時、 その中身が機械学習だと聞いて 「それってAIじゃないのでは?」 と反論する方々も多かったのではないでしょうか?

こういう思いを抱えているのは僕らだけではないようです。 例えば、今日のモダンなチャットボットの実装基盤のひとつである A.L.I.C.E. の開発者 リチャード・ウォレス はインタビューに次のように答えています。

At first, he said, he had tried to follow some of the more grandiose theories of traditional A.I., but he found them sterile. "You read a book with a title like 'Consciousness Explained,'" he said, "and you expect to find some kind of instruction manual, something that you can use to build a consciousness. But of course it's nothing of the kind." (Daniel Dennett wrote "Consciousness Explained.")

最初は、伝統的なAIの壮大な理論のいくつかに従おうとしたが、それは不毛だと思ったという。 彼が言うには「もし "Consciousness Explained" のようなタイトルの本を読んだとしたら、 ある種の手順書や意識を構築するために使用できる何かを期待するでしょう。 しかし、もちろんそのようなものは何もありません」 ということだ。 ("Consciousness Explained"『意識の説明』はダニエル・デネットの著作)

Artificial stupidity, Part 2 から引用

つまり、前述の記事のくだりは、第2次AIブームまでの 「思考のメカニズムを解き明かす」AI研究の 限界を指摘する素朴だけど痛烈な批判だと僕には思えます。

そこで、第2次AIブームの終焉の始まりを明確に示す出来事を調べてみたのですが…

それまでのAI研究に引導を渡したのは当時の DARPA/ISTO のディレクタだった ジェイコブ・T・シュワルツ だったそうです。

mathshistory.st-andrews.ac.uk

DARPA のディレクタと言えば ARPANET の構築や Internet の実現に辣腕を振るった ボブ・カーン が有名ですが、 シュワルツはその2代あとのディレクタです。 彼が引導を渡した経緯について調べてみたところ、 「AIの歴史」を語った歴史的名著 "Machines Who Think: A Personal Inquiry Into the History and Prospects of Artificial Intelligence" に次のような記述があることを見つけました。

Schwartz believed that DARPA was using a swimming model — setting a goal, and paddling toward it regardless of currents or storms. DARPA should instead be using a surfer model — waiting for the big wave, which would allow its relatively modest funds to surf gracefully and successfully toward that same goal. As a consequence, he eviscerated Strategic Computing, a swimmer model in his view (though Kahn’s original vision certainly seemed to be premised on catching the wave that was beginning to swell). Schwartz thought that in the long run, AI was possible and promising, but its wave had yet to rise, so a number of sites working on AI and robotics found their funding cut suddenly and brutally. Schwartz’s own interests lay in new architectures, which he favored as the swelling wave, and so he funded the revival of connectionism and machine intelligence, based on new findings in neural modeling.

シュワルツは、DARPA がスイマー・モデルを使っていると考えていた。 つまり、目標を設定して、流れや嵐に関係なく、その目標に向かってパドリングしているのだ。 しかし、DARPA はサーファー・モデルを使うべきだ。 大きな波を待っていれば、比較的少ない資金でも同じ目標に向かって優雅に成功することができる。 その結果、シュワルツは Strategic Computing を廃止した。 彼の考えでは、Strategic Computing はスイマー・モデルだった(ただし、カーンの当初の構想は、うねり始めた波を捕まえることを前提にしていたようだ)。 シュワルツは、長い目で見ればAIは可能で有望だが、その波はまだ高まっていないと考えていた。 そのため、AIやロボット工学に取り組んでいる多くのサイトでは、突然、残酷にも資金が削減された。 シュワルツは、自分の興味が新しいアーキテクチャにあり、それが波のように押し寄せてくることを好ましく思っていたので、ニューラル・モデルの新しい知見をもとにコネクショニズムや機械知能を復活させるための資金を提供した。

ここで登場する Strategic Computing とは第2次AIブームの際、DARPA がAI研究のために設立した組織です。 シュワルツはこの組織が助成する研究チームを切り替えることで、 旧来のAI研究に引導を渡したようです。またここで語られている 「ニューラル・モデルの新しい知見に基づくコネクショニズムや機械知能」 にはその後、今日の機械学習などへと発展する研究プロジェクトが含まれていました。

結局、我々の世代が習ったAI研究が「徒労とまでは言わないが、 いつなったら完成するのか全く見通せない代物」だったということは、 その後の歴史が示すとおりです。 前述のリチャード・ウォレスは、 別のインタビューでAIについて次のように語っています。

"The smarter people are, the more complex they think the human brain is," he says. "It's like anthropocentrism, but on an intellectual level. 'I have a great brain, therefore everybody else does -- and a computer must, too.'" Wallace says with a laugh. "And unfortunately most people don't."

「頭の良い人ほど人間の脳は複雑だと思っています」と彼は言う。 「人間中心主義に似ていますが、それは知的レベルの問題です」。 「僕は頭がいいから、ほかのみんなもそうする。コンピュータもそうしなければならない」とウォレスは笑う。 「残念ながらほとんどの人はそうではありません」

"Approximating Life" , July 7, 2002, Section 6 から引用

しかし、真の天才であるアラン・チューリングは、 彼の周囲にいる秀才たちが「問題を複雑に考えすぎて失敗する」ことに 気づいていたかも知れません。 そう考えると「チューリングテスト」の 「知能があると判定する基準」 を属人性のある曖昧な形に留めたことに、 不思議と納得できるような気がするのです。


チューリングテストの今日的な解釈

次はおそらくアラン・チューリングが全く想像できなかったであろう話、
今日のSNSにまつわる話です。

例えば、Twitter。僕も Twitter を日々利用しているのですが、 タイムラインを眺めているとモデルや女優と見紛うような美人の呟きが流れて来ることがあります。 もちろん面識のない女性です。そこでプロフィールを見てみるとごく普通の一般人のように見えます。 その時、僕が考えるのは…

  • 最新のコスメを駆使した「作られた可愛い」の人だろうか?
  • いや、最新アプリを使いこなした「画像合成美人」だろうか?
  • いやいや、どこから顔写真を盗んできたネカマかもしれない?
  • ひょっとして、これチャットボット何じゃないの?

…とまぁ、その美しさをシンプルに讃える訳ではなくて、 猜疑心をどこまでも肥大していってしまうことを告白します😀

今どきのSNSとチューリングテストの関係を端的に示す事例をもうひとつ…

最近TVCMでも見かけるようになった「ジェンダー・レス」ボーイの井手上漠くん(ちゃん付けした方が良いのかな?) 今どきの若者の彼は SNSも積極的に活用していて、例えば インスタグラムのアカウント も公開してます。 で、芸能人になったこともあってか フォローしておくと律儀に毎日のように 写真や動画をアップしていることがわかります。 これまた、タイムラインに唐突に現れるのですが… その写真を目にした瞬間 「この美人、誰?女性?男性?」 と一瞬混乱状態に陥ることも告白しておきます😀

「それとチューリングテストに何の関係があるんだ?」と突っ込まれそうですが…

チューリングテストの論文を思い出してください。 この論文は「人間 vs 機械」の比較テストについて 述べているのですが、 その冒頭で読者の理解を促すため 「男性 vs 女性」の事例について言及しています。 テレタイプ越しに「男性のフリをする女性」と 「女性のフリをする男性」が登場する話です。 不意に井手上漠くんの写真を突きつけられると、 ひとしきり混乱した後、 僕はいつもこのチューリングの語りを 思い出してしまうのです。 「彼なのだろうか?彼女なのだろうか?」と…

僕の、というか現在の多くの人々のこの日常は、 1950年に知能機械の可能性を探るためにチューリングが考え出したテストの舞台装置が、 今日の僕たちの日常になってしまっていることを意味しています。 さらにもっと言ってしまうと、 こういったデジタルコミュニケーションが推奨されるコロナ禍の今、 このようなコミュニケーションがさらに加速させるような圧力があります。

もちろん、 社会のこのような変化への是非について 皆さん色々な意見があると思いますが、 僕にとって重要なことは 今日の状況が僕たちのチューリングテストへの 理解や解釈を一変させてしまう…それが容易に想像できる状況に 今、僕らはいるという事実に、 僕はちょっと驚いてしまうのです。

それから気がかりなことがもうひとつ…

改めて考えると、僕たちは日常的に「フリ」をします。 「嘘をつく」だとか「他者を欺く」といった悪意あることはそんなに頻繁ではないでしょうが、 「見なかったフリをする」だとか「気づかなったフリをする」ことは案外多い。 また気まずい状況を笑に変えるためのジョークでは「誰かのフリをする」こともあります。 「優しい嘘」なんて言葉があるくらいですしね*6

SNSはこういった人間の「フリ」をする癖を助長させます。 例えば、Twitter では別にアカウントを取得して 別のキャラクターを演じたりすることがありますが、 これも日常的で些細な「フリ」の延長上にある行動だと思います。 ですが問題は、 こうやって生まれた「フリ」の発言も含む SNSのビッグデータ機械学習に使われることです。 学習する際に「正直」な発言と「フリ」の発言は 容易には区別できません。

もちろんSNS各社はトレンド分析などで、 このようなデータを使っているでしょうし、 そこから得られたデータの正しさに関する傾向も 常時把握しているのでしょうが…

彼らのデータの正確性を向上させるための基本戦略は「収集データを増やす」ことだけのように思います。 もし、僕にSNS各社のエンジニアに 質問できる機会があれば 是非この質問をブツけてみたいのですが、 きっと答えは 「正確性を向上するためいろんな補正をしています」 だとか 「それは社外秘なのでお答えできません」 だとか…

またまた「問題を複雑に考えすぎて失敗する」のような匂いがしてきませんか?

この問題を抜本的に解決する方策の1つに 「全部フリで発言された」と解釈することで、 これは多くのチューリングテストに基づく コンテストで用いられている方法のように思います。 つまり、チャットボットが 「人間のフリ」をするのに対し、 人間は「チャットボットのフリ」をする。 それで、どちらが(あるいはどれが) 一番、ジャッジを騙せたか?を競うのが 一般的なチューリングテストに基づくコンテストなんです*7。 もちろん、これが解決策になり得るのは 知能レベルを競うだけで (一般に素直に発言するよりも、フリをする方が知能が必要です)、 周囲はゲーム感覚で見てることができる チューリングテストに基づくコンテストの 場合だけであることは 言うまでもないのですが…

ともあれ…

SNSにより「フリをするコミュニケーション」 がコモディティ化している今日、 そのコミュニケーションにより 発言者の知能を評価するチューリングテストには 新たな役割が課せられるかも知れないなぁ… などと僕は考えています。


「思考する機械」の実像とは?

最後に、SNSのお陰で(あるいはせいで)僕らの身近なところに チューリングテストの世界が存在するようになった現在について考えたいと思います。

例えば、Twitter には相当数のチャットボットが存在します。 名前に bot と付いた明示したチャットボットもありますが、 そうではない存在を隠して「思考するフリをする」チャットボットも 多数紛れ込んでいるのではないかと僕は何年も前から想像してきました。 最初にそのように疑った時には何か薄気味悪い感じがしたかも知れません。 でも今はその時に感じた事も思い出せないくらい慣れっこになっています。 何故なら人間もチャットボットと同じぐらい「フリ」をするから。

この「思考するフリをする機械」はSNSだけの話ではないようです。 例えば、将棋AIを対戦したことのあるプロの棋士によると 「将棋AIと対戦しているとAIに意思や感情があるように錯覚することがある」 と言います。「指手で会話する」という感覚は僕には全く理解できないのですが、 仮にチャットボットでも「思考するフリ」をどんどん高度化していくと、 対話相手の人間にはそこに人格が存在するかのように 感じられるようになるのかも知れません。

これは漫画『攻殻機動隊』に登場する 「ゴースト」みたいなものなんじゃないかな?と思ったりします。 この作品の英語タイトルが "Ghost in the Shell" というぐらいなので、 「ゴースト」はこの作品シリーズで一貫するコンセプトだと思うのですが、 作品をご存知ない方のために少し紹介しておくと、主人公の 草薙素子は身体のほとんど 義体化 (機械化)してしまっているサイボーグであるにもかかわらず、 人間だった時の自我や意思(のようなもの)が残っていること感じ、 その理由を追い求めている…といった話です*8

この「ゴースト」というコンセプトは「チューリングテスト」を 非常にわかりやすくしてくれるのではないか?と僕が考えています。 例えば、僕自身が自分の自我をどのように感じ取っているのか?といったことを考えてみます。 もっとも自我を客観的に意識できる時といえば、 友人の誰かから意見を求められて答えたときに その友人から「それ、君らしいコメントだね」との返事が返ってくる。 それを聞いて「僕はそういう風な人間なんだ」と再確認することができます。 つまり人間は誰もが自分の自我を直接客観的に感じることはできない訳で、 その思考パターンなどを感じる他者からのリアクションを得て 自分の自我の形を間接的に把握してるのだ…と思ったりします。

この考えに立つと「チューリングテスト」は 非常に良くできたテストであるような気がしてなりません。 「ひょっとしたらチューリングは他にも何か書き残してるかも?」 と思うくらいです。

それが Turing Bot を作ろうと考えたもうひとつの理由かも知れません😀

僕的にはオチがつきました。 おあとが宜しいようで…

*1:記事の中で登場するレディング大学のプレスリリースは次で閲覧できます。

www.reading.ac.uk

ちなみに、記事中でも指摘されている 「It's not a "supercomputer," it's a chatbot.」には対応済みで、 ちゃんと chatbot に直されていました。

*2:その記事をあげつらっている僕も大人気ないですけどね😀

*3:この論文の原文は以下で読めます。

academic.oup.com

ですが非常に良くできた日本語訳も公開されています。

www.unixuser.org

日本語がネイティブの方にはこちらがお勧めです。

*4:実はこのブログでも「チューリングテスト」については かなりしつこく書いています。

次の記事は、かの Springer が出版している丸々一冊「チューリングテスト」の論文集で、 コンピュータサイエンティストだけでなく、心理学者、社会学者、歴史学者、果ては哲学者まで、 「チューリングテスト」で知られる錚々たるメンバーが寄稿しています。 僕は気になる記事だけ拾い読みした状態ですが、 それでも「チューリングテスト」が 難解な試験であることには納得しました。

akito-fujita.hatenablog.com

それから「チューリングテスト」に基づく 最古のコンテストであるローブナー賞については 2度書いてます。

akito-fujita.hatenablog.com

akito-fujita.hatenablog.com

ローブナー賞もなかなか興味深い裏事情があるようで…

ご参考まで。

*5:おかげで進めていた実装は棚上げになってしまいました。 待っておられる方はすいません。

*6:なので、件の記事で著者が 「人をだますのに集中したことに納得がいきません」 と強弁してることに笑っちゃいました。

僕たち自身は普段から嘘を連発にしてるのに、 チャットボットにはそれを許さないってこと?

…と思えたもんで😀

*7:件の記事の著者には、これ、納得してもらえるでしょうかねぇ?

*8:この作品の最初の 原作漫画 には欄外に大量の注釈があるのですが、 その中には「チューリング」との表記も見つけられます。

きっとこの作品もまた「チューリングテスト」にインスパイアされた作品なのでしょう。

Turing Bot(2)Wikipediaページからの埋め込み抽出

Embedded extraction from Wikipedia pages


2021/06/23
藤田昭人


前回wikipedia-tokens.txtwikipedia-papers.txt の 生成を試みましたが、本稿では残る wikipedia-embeddings.txt の生成を試みます。


もうひとつの難物、Word2Vec学習済みデータ

wiki-xml-to-txt.py の2つの入力データはいずれも、 2GBを超えるビッグデータです。 先の記事では、 Python でも手に余るほど巨大な Wikipedia のバックアップデータを取り込むためのCプログラム wikiPageSelector を作成しましたが、 Word2Vecの学習済みデータから wikipedia-embeddings.txt を作成する場合も同じアプローチを選択せざるえませんでした。

ターゲットである GoogleNews-vectors-negative300.bin は総データサイズは約3.4GB。

$ ls -l
total 7123392
-rw-r--r--@ 1 fujita  staff  3644258522  6  1 00:08 GoogleNews-vectors-negative300.bin
$ 

中身を調べてみると、 1単語を表現する300次元のベクトルで 300万の単語を収蔵したファイルになります。 Word2Vecの学習済みデータもまた巨大にであることは 以前紹介した しましたが、扱えるファイルサイズの上限が2Gの JavaScript では手の出しようがありません。


Cプログラム make_embeddings

…ということで埋め込みを抽出するための C言語を使ったプログラム make_embeddings を作成しました*1ソースコードは下記に置きましたので、 参考にしてください。

github.com

Word2Vecの紹介記事 で説明したように学習済みWord2Vecデータはバイナリ形式でファイルに出力します。 wiki-xml-to-txt.py ではこのバイナリ形式を読むために(たぶんあまり一般的ではない)コードが実装されていたので、 そのコードは追わずに、前述の紹介記事で使用した distance コマンドのソースの一部を流用することにしました*2

$  ./make_embeddings wikipedia-tokens.txt GoogleNews-vectors-negative300.bin > wikipedia-embeddings.txt
$ head -2 wikipedia-embeddings.txt
25889 300
0 -0.004532 -0.022022 0.049640 -0.037960 -0.028227 0.030660 0.127507 -0.078840 0.008273 -0.048180 -0.031633 -0.075433 0.037230 0.069107 -0.114854 0.031025 0.088087 0.108040 -0.124587 -0.020927 -0.100254 0.024090 0.059617 0.013870 0.055967 -0.067160 -0.054507 -0.029443 -0.103174 0.041123 -0.061320 0.023117 0.028105 0.016425 0.036987 -0.015817 0.021413 0.025672 -0.077380 -0.000806 -0.014296 -0.046963 0.039663 -0.098793 -0.103174 -0.038690 -0.057670 -0.047450 -0.007057 0.075433 0.086627 -0.011558 0.075920 -0.053047 0.027375 0.071540 -0.054507 0.006935 0.054993 -0.049397 -0.091980 0.022508 -0.047207 0.007756 -0.014235 0.066673 0.021048 0.000121 -0.067160 0.090033 -0.042827 -0.029930 0.065213 0.055237 -0.079327 0.019223 0.027983 0.139187 0.071053 0.023603 0.083707 0.041123 0.069593 0.065213 -0.027740 -0.073000 -0.079327 0.154760 -0.011437 -0.022265 0.167414 -0.014113 0.046233 0.009794 -0.027618 -0.073000 0.008517 0.103660 -0.032120 -0.073487 -0.056453 -0.037230 -0.010585 0.061077 0.072027 0.034553 -0.023847 -0.089060 -0.073000 0.024577 0.017763 -0.059617 0.001589 0.010220 -0.068133 -0.120207 -0.004775 0.015817 0.029200 0.042340 -0.107067 0.115827 -0.029565 0.063753 -0.057427 -0.100254 0.043800 -0.027497 0.015026 0.013201 0.006722 -0.066187 -0.016060 -0.039907 -0.007361 -0.061077 0.026888 0.075433 0.045017 0.033580 -0.017277 -0.014478 0.002661 -0.036013 0.004380 0.063753 -0.011437 -0.119720 0.014539 0.026280 0.033580 0.133347 -0.059617 0.114854 0.032363 0.011802 -0.020562 0.000631 -0.016790 0.021778 0.020683 0.041123 0.036743 0.023360 0.029078 -0.005019 0.001452 -0.025185 0.148920 -0.028105 0.016547 0.047207 0.041610 -0.058887 -0.011619 -0.010828 0.106094 0.039907 -0.024820 0.099280 0.027740 -0.026037 0.019710 0.030173 0.062293 0.006753 -0.034553 0.073487 0.018737 0.074460 -0.033580 -0.078353 -0.092953 0.060833 -0.052803 -0.003285 0.090033 0.055237 -0.085653 -0.005019 0.044287 -0.085653 0.032120 -0.025672 -0.033093 0.041610 0.029930 0.019953 -0.024333 0.001795 -0.013140 -0.009186 0.007057 0.005749 0.022630 -0.031390 0.050127 0.037230 -0.006175 0.014600 0.101714 -0.061807 -0.064240 -0.030295 0.094900 -0.077867 -0.002403 0.115340 0.009247 0.033337 0.001384 0.023603 -0.054020 -0.073973 0.028105 -0.035040 0.009308 -0.047207 0.020318 -0.021170 0.029808 0.018980 -0.068620 0.016912 0.079813 0.049153 -0.019710 -0.064240 0.094900 -0.013992 -0.052560 0.005232 0.041367 -0.015817 0.090033 -0.057183 0.030782 0.001080 -0.017642 -0.099767 -0.039663 -0.049397 0.014783 0.021535 0.050127 0.151840 0.134320 -0.045260 -0.044287 0.096847 0.117287 -0.103660 0.016060 0.009368 -0.069107 -0.012958 0.007848 -0.014296 0.039177 -0.057427 -0.090520 0.082247 -0.057670 -0.058400 0.085167 0.062780 -0.006235 -0.016425 0.026037 0.013566 -0.096360 0.014904 -0.046477 0.026767 -0.058643 0.034797 0.052803 0.072027 0.090033 -0.043313
$ 

処理内容を簡単に説明しておくと…

  • 第1引数で指定した wikipedia-tokens.txt から全てのトークンとIDを取り込む
    • 単語総数は25889
  • 第2引数で指定した学習済みWord2Vecデータ(GoogleNews-vectors-negative300.bin)を走査し、トークンが一致するエントリーを見つける
  • 見つかったエントリについてトークンをIDに置き換え、ベクトルと共に表示
    • ベクトルの各数値の桁数はfloatの書式%fのデフォルトを使っているので%8.6fで表示される(好みに合わせて調整を)

今回の出力はオリジナルの仕様に則ったテキストファイルにしました。 というのも、よく考えたらこのファイルは改造版 fastWMD コマンドで読み込むから。 前回紹介した JSON フォーマットの出力ファイルもテキストファイルに直します。


まとめ

以上、本稿では wikipedia-embeddings.txt の生成を試みました。

これで Turing Bot のための WMD 実装の外堀は埋まった格好ですが、
改めて Word Mover's Distance の処理を俯瞰しておくと、 以下の4項目になります。

  1. 対象文章をトークン化する(前回
  2. トークン毎に埋め込み(分散表現)を抽出(今回)
    • 既存の学習済みWord2Vecデータを抽出
  3. トークン毎の埋め込み(分散表現)を合成し対象文章の埋め込み(分散表現)を生成する
  4. 比較する2つの文章の埋め込み(分散表現)で最適輸送問題を解き最小距離を算出する

これまで1、2、4については触れてきましたが、 実は3については全く触れていませんでした。 fastWMD の実装では Tools::getTripletsDocuments で実装されているようですが、次回は 改造版 fastWMD コマンドの作業を進めながら 3についても解説する予定です。

以上

*1:PythonJavaScript などのスクリプト言語で プログラミングを始めた若い方々にはピンと来ないかもしれませんが、 マシンの物理メモリを目一杯搭載しても16MBだった 30年前にプログラミングを始めた我々の世代にとって、 ストリームを扱うプログラミングこそが一般的でした。

当時はパイプが使える Unix の上で Cでプログラミングするのが大変便利だったのですが、 30年経過した今でもCがリーサルウェポンになる世界に住んでいるとは なんだか感慨深いです。

*2:プログラマの立場からコメントすると、 distanceソースコードはかなりまどろっこしいです😀

Turing Bot(1)Wikipediaページからのトークン抽出

Turing Bot (1) Extracting tokens from Wikipedia pages


2021/06/17
藤田昭人


本稿から数回は Turing Bot のための道具立てを紹介します。

これまで紹介してきた fastWMD は PythonC++ で実装されてますが、 このコードを参考に JavaScript に書き直して行きたいと思います。 初回の本稿では wikipedia-tokens.txtwikipedia-papers.txt の生成を試みます。


Alan Turing 関連のページデータを抽出する

まず Wikipedia のバックアップ・ダンプ・ファイルから Alan Turing 関連のページを抽出します。 抽出には 以前紹介した wikiPageSelector を使いますが、 任意の単独のページのみを抽出できるように修正しました。 第1引数に URL を指定すると該当するページのみを抽出します。 例えば Alan Turing のページを抽出する場合は次のコマンドラインになります。

$ ./wikiPageSelector http://en.wikipedia.org/wiki/Alan_Turing ~/Wikipedia/enwiki-20210520-pages-articles-multistream.xml > Alan_Turing-20210520.xml
・・・
$ 

なお、この要領で1ページのみ抽出した xmlwiki-xml-to-txt.py の入力にするとコケます。ちょっと調べてみたところ それが Python の挙動のようです。ご注意を。

ちなみにこのコマンド、今の仕様では実行時間は バックアップ・ダンプ・ファイルのサイズに依存します。 実行終了まで最低でも2時間程度待たされるので、 まだまだ改善の余地がありそうです。


ページ本文を抽出する

次に、バックアップ・ダンプ・ファイルから切り取った ページ選択した xml ファイルから、ページ本文を抽出します。 実はいろいろ思案をしたのですが*1Wikipedia バックアップからのデータ抽出では定評のある wikiextractor を利用することにしました。

github.com

これまた、当初はソースからインストールしようと 試みたのですがズッコケました。調べてみると いろいろトラブルが報告されているようで、 結局、次のように pip コマンドを使って 安易にインストールするのがお手軽のようです。

$ pip install wikiextractor
・・・
$ 

通常 wikiextractor を使う場合、 元の bzip2 で圧縮されたバックアップから 直接データを抽出することが多いと思いますが、 次のとおり非圧縮の xml ファイルでも問題なく動きます。 素敵なことに --json オプションを指定すると JSON フォーマットで出力してくれます。

$ wikiextractor --json -o extracted Alan_Turing-dump-20210420.xml
INFO: Preprocessing 'Alan_Turing-dump-20210420.xml' to collect template definitions: this may take some time.
INFO: Loaded 0 templates in 0.0s
INFO: Starting page extraction from Alan_Turing-dump-20210420.xml.
INFO: Using 7 extract processes.
INFO: Finished 7-process extraction of 1 articles in 0.1s (16.3 art/s)
$ 

この例では -o オプションで出力先を指定しますが、 指定した名前の ディレクト が生成され、 その下にデータファイルが格納されます。 覗いてみると…

$ ls -l extracted/AA/
total 88
-rw-r--r--  1 fujita  staff  44042  6 13 15:06 wiki_00
$ head extracted/AA/wiki_00
{"id": "1208", "revid": "20355744", "url": "https://en.wikipedia.org/wiki?curid=1208", "title": "Alan Turing", "text": "Alan Mathison Turing (; 23 June 1912\u00a0\u2013 7 June 1954) was an English mathematician, computer scientist, logician, cryptanalyst, philosopher, and theoretical biologist. Turing was highl<中略>listed buildings and landscape, and by extension the conservation area.\""}
$ 

この extracted/AA/wiki_00 が JSON ファイルです。

ちなみに、wiki-xml-to-txt.py と wikiextractor はいずれも ページ本文に頻繁に登場している MediaWikiマークアップ記法を 削除してくれますが、削除の仕様が微妙に異なります。 したがって、生成されるデータが異なり 厳密には一致しないことに注意してください。 本稿では当面 wikiextractor が生成するデータを採用します。


tokens と papers を生成する

次に、このJSONファイルから wikipedia-tokens.txtwikipedia-papers.txtを生成する 次の make_tokens なるJavaScriptのコードを書いてみました。

github.com

このプログラムは wiki-xml-to-txt.py の関数 preprocess_contentJavaScriptで次のように再現しています。

const entities = require("entities");
const stopwords = require('nltk-stopwords')
var english = stopwords.load('english');

function RemovePunctuation(rawString)
{
  var punctuation = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ –';
  var rawLetters = rawString.split('');
  var cleanLetters = rawLetters.filter(function(letter) {
    return punctuation.indexOf(letter) === -1;
  });
  var cleanString = cleanLetters.join('');
  return(cleanString);
}

function RemoveNumber(rawString)
{
  var number = '0123456789';
  var rawLetters = rawString.split('');
  var cleanLetters = rawLetters.filter(function(letter) {
    return number.indexOf(letter) === -1;
  });
  var cleanString = cleanLetters.join('');
  return(cleanString);
}

function preprocess_content(text)
{
  text = entities.decodeHTML(text);
  text = RemovePunctuation(text);
  text = RemoveNumber(text);
  text = stopwords.remove(text, english);
  return(text);
}

関数 preprocess_content を見てもらえればわかるように…

  • HTMLのエンティティをデコードする
  • 句読点を削除する
  • 数字を削除する
  • ストップワードを削除する

を行なっています。これは自然言語処理では一般的な前処理です。詳細は 自然言語処理における前処理の種類とその威力 で説明されているので参考にしてください。

なお例外は、wiki-xml-to-txt.py では行なっている 複数改行コードの削除は割愛しています。 というのも Turing Bot では Wikipedia ページを 各文節ごと独立して扱う考えで、 改行コード(\n)は文節間の区切り文字として 扱っているからです。 これは Wikipedia ページを「1つの文章」として扱う トリプレットとは異なる仕様です。

実装コードを動かすには JavaScript のパッケージ entitiesnltk-stopwords が必要です。 以下の手順で実行してみてください。 ちなみに Alan_Turing.json は 先ほど wikiextractor で生成したJSONファイルをコピーしたものです。

$ npm install entities nltk-stopwords

added 2 packages, and audited 3 packages in 2s

1 package is looking for funding
  run `npm fund` for details

found 0 vulnerabilities
$ node make_tokens.js Alan_Turing.json
$ ls
Alan_Turing.json    make_tokens.js      package.json
README-ja.md        node_modules        wikipedia-papers.json
README.md       package-lock.json   wikipedia-tokens.json
$ 

無事 wikipedia-papers.jsonwikipedia-tokens.json が 生成されたようです。


生成されたデータファイルを可視化する

生成された wikipedia-papers.jsonwikipedia-tokens.json の検証を兼ねて、 可視化するプログラム show_paper.js を作りました。 第1引数に wikipedia-tokens.json を 第2引数に wikipedia-papers.json を 指定すると元の文章を再現して表示してくれます。 次は Alan Turing のページの冒頭の1段落を表示した例です。

$ node show_paper.js wikipedia-tokens.json wikipedia-papers.json | head -1
Alan Mathison Turing June June English mathematician computer scientist logician cryptanalyst philosopher theoretical biologist Turing highly influential development theoretical computer science providing formalisation concepts algorithm computation Turing machine considered model generalpurpose computer Turing widely considered father theoretical computer science artificial intelligence
$ 

対応する Alan Turing のページ の冒頭は以下のとおりです。

Alan Mathison Turing OBE FRS (/ˈtjʊərɪŋ/; 23 June 1912 – 7 June 1954) was an English mathematician, computer scientist, logician, cryptanalyst, philosopher, and theoretical biologist.[6][7] Turing was highly influential in the development of theoretical computer science, providing a formalisation of the concepts of algorithm and computation with the Turing machine, which can be considered a model of a general-purpose computer.[8][9][10] Turing is widely considered to be the father of theoretical computer science and artificial intelligence.[11]

前処理で削除された情報が確認できますね。


まとめ

本稿では wikipedia-tokens.jsonwikipedia-papers.json の生成を試みました。

今回のコード実装の最中に思ったのは 「スクリプト言語には予想外のところで裏切られる」 でした。PythonJavaScript も いわゆるスクリプト言語、 つまりインタープリターなので、 時として期待に反した 不可思議な振る舞いをすることがあります*2。 今回も思うとおりに動いてくれないので、 何度か全面書き直しに追い込まれました (具体的な事例は割愛しますが…)。

とはいえ…

スクリプト言語のモダンな機能は抗し難い魅力があります。 特に文字列処理を多用する自然言語処理をC言語で書きたいとは 僕もあまり思わないのですが…

次回予定している wikipedia-embeddings.txt の生成では そうも行きそうにありません。

以上

*1:当初は xml2json を自前で実装しようとしたのですが、 Wikipedia のバックアップ・ダンプ・ファイルに含まれている データを漏れなく json に反映しようとすると、 むっちゃ時間がかかりそうだったので、 止む無く断念しました。

*2:都度コードを解釈する インタープリターは コンパイラーのように 「全ての記述が書かれている」 ことが仮定できません。 「次に何が記述されるか予測できない」 故に不思議な挙動をすることがあります。 まぁ、それがその言語の仕様ってことなんでしょう。

WMDを利用した応答文生成の実験

Aiming for a Turing Bot


2021/06/07
藤田昭人


前回 まででWMDの実装について ひと通り把握できた訳ですが、 本稿からは数回にわけて WMDを利用した対話システムの応答文生成について考えていきます*1


WMDによる応答文生成の基本的なアイデア

そもそも僕がWMDに着目したのは 「対話システムにおいて 人間が発する質問文への応答文を 既存の書籍や文献の中から見つけ出す」 ことを考えたからでした。

これは以前紹介した BookBot の記事 でも書いたように 「書籍自身が書いてあることを かいつまんで話してくれたら、 読書する手間が省ける」 との友人のアイデアに 触発されてのことなんですが、 精度の良い類似文章検索 アルゴリズムを用いれば 「案外、ピッタリした応答文が見つかるかも…」 と(少々安易に)考えての事です。

もし既存の文献を使って 適切な応答文が生成できるのであれば、 SNSなどから採録した会話文とは異なり、 内容にエビデンスのある応答文を用意できる ので、対話システムの実用性を高める ことができますし、 これまで活用の具体的な方策で悩むことの多かった 過去の新聞や専門書などの 歴史的情報性の高い文献に新たな活用方法 が提示できるのではないかと僕は考えています。


とりあえず実験だぁ…

類似文章検索で精度が高いとされる WMDの実装にメドが立ったので、 応答文生成の実験を始めることにしました。

これは典型的な自然言語処理の実験なので慣例に従い、 まずは英語をベースに基本的な特性を確認したのち、 その後は日本語ベースに移行して 応答文生成をブラッシュアップしていく アプローチを考えています。

対象とするドキュメントは?

比較的に応答文が見つかる可能性が高いのは 辞書や辞典といった文献と見込んでいるので、 これまた慣例に従い Wikipedia の英語版、 その後日本語版を使うことにします。

細かく調べたいので対象ページを絞り込んで…

このあたりは僕の直感(や好み)に 従わざる得ないのですが、 結局 Alan Turing のページを対象にすることにしました。

en.wikipedia.org

理由(言い訳ともいう)を説明すると…

  • 個人的に非常に関心があり内容を概ね把握してる(これが案外重要。
    関心がないトピックでチェックするのは苦痛)
  • ページ自体の文章量がかなり多い(フィットする応答文が多そう?)
  • ページに記載されているトピックが(概ね情報分野に限定されるが)多岐に分かれている
  • 日本語版は英語版の翻訳がベース(更新頻度が稀なので英語版に追いついていないけど)

それから…

FAQ: Alan Turing

今は博物館(?)になっている ブレッチリー・パーク のサイトでFAQを見つけました。

bletchleypark.org.uk

このFAQを表にまとめました( 英語版僕の翻訳 )ので参考にしてください。

全部で17項目ありますが、 これで英語での質問を考える必要がなくなりました。 回答もついているので、 この回答文を基準に見つけた応答文の評価もできそうです。


まとめ

ということで…

BookBot 0.2 は(一応)英語版 Turing Bot を目指すってことで、 新たなシリーズを始めることにします。 まぁ Glitch に載せるとなると JavaScript 化しなければならないので、 そこが難点かとは考えていますが(リコーディングがねぇ)、 ともあれ論より run ってことで…

以上

*1:僕のようなチャットボットを 人工無脳と呼んでいた世代は 「応答生成=対話システム」 と考えてきましたが、 今どきの対話システムは もっと複雑なんだとか…

とは言え、コンピュータからの応答が 相手が人間だと錯覚させる「対話の肝」である事は ELIZE以来の普遍的なお約束なのだと 僕は信じてます😁

本稿ではこの応答生成のシリーズで 「僕が何を目指しているのか?」 をザッと書き留めておきます。