壊れた人工知能?

 最近、将棋のプロ棋士の実力を上回るコンピュータ・ソフトが注目されて、その知力が他の分野に応用されることが期待され、研究されていると、私は聞いています。そのような人工知能が、さまざまな分野へ実用化されることができるようになってきたとも聞いています。
 一般的に、私たち人間は、コンピュータという機械を、この上なく正確で、永久的に稼働していくものとして見ています。計算などの動作が速くて、かつ正確で、永久に稼働するスーパーマシンこそ、私たちがコンピュータに抱き、かつ、期待するイメージだと言えます。ですから、いずれ人間の知能が、コンピュータのそれに取って代わられるのではないかと憶測して、不安と恐怖に駆られているというわけです。
 その結果、人類がコンピュータに征服・支配されて大変なことになる、というSF映画が数多く作られました。昔、コンピュータは融通の利かないもの、計算は正確で速いものの、人間の気まぐれな感情や知的活動にはかなわないものと考えられていて、まだまだ人間の側に余裕がありました。しかし、近年では、機械(ハード)そのものの性能やプログラミング(ソフト)の技術が発達した結果として、今まで人間の知力が担ってきた煩雑で複雑な物事を、コンピュータが取って代わってできるようになりつつあります。
 しかしながら、私はコンピュータが機械である限り、他の機械と同じように、故障もすれば、壊れもするし、いずれは寿命も来るものだと思っています。私は、今年でパソコン歴が30年ほどになりますが、事実、30年前に買った幾つかのパソコンは、配線基板や半導体や液晶ディスプレイなどが壊れていずれも動きません。秋葉原にあるパソコンのジャンク・ショップへ行けばわかりますが、私の持っていた昔のパソコンよりもはるかに高性能な、それほど古くないパソコンでも、内蔵しているコンデンサーが熱をもって壊れてしまい、電源さえ入りません。そんなパソコンは、ざらにあります。私の持っていたマシンたちは、国産(MADE IN JAPAN)でしたが、それでも時が過ぎて壊れました。秋葉原のジャンク・パソコンのほとんどは、台湾製でした。けれども、近年のパソコンは台湾製や中国製が世界のパソコンの多数派すなわち世界標準であると言えましょう。私の持っていた比較的新しい別のパソコンは、マレーシア製のノートパソコン(メーカーは三洋電機)や中国製のデスクトップパソコンでしたが、最終的には壊れて電源が入らなくなりました。
 パソコンという機械は、モデルチェンジが早いと思います。言い換えれば、新しいコンピュータ・ソフトは、中古(ちゅうぶる)のパソコン(機械)では動かないようにできています。時代に乗り遅れないように、誰もが新しいコンピュータのハードウェアとソフトウェアに目を向けます。が、それと同時に、古いものは捨て去られ、忘れ去られてしまいます。ですから、古いパソコンのシステムが故障して動作しなくても、何も支障は起きないし、誰もそれを嘆いたりはしないのです。
 従って、パソコンを、他の商品と同じように賞味期限を持っている商品の一つであると見ていれば、不都合は何も起こりません。コンピュータという機械には、永久かつ正常に稼働するイメージが一般にありますが、実際にはそうではないからです。実際のところ、四六時中、動かし続けたとしたらば、ヒートアップしないわけにはいきません。それほど長持ちする商品ではないということを、肝に銘じておくべきでしょう。
 以上のようなことを考えている時に、その例を示すために格好な材料を見つけました。日本エレキテル連合の、おしゃべり未亡人朱美ちゃん3号です。彼女はアンドロイド、つまり、機械であるわけです。説明されてはいませんが、当然その脳は、人工知能なわけです。そして、何を言われても「ダメよ〜ダメダメ」としか答えられません。明らかに、機械としては故障しているように見えます。
 そこで私は、手元のウィンドウズ・パソコンで動く簡易言語(VBScript)とHTMLアプリケーションのシステムを使って、『朱美ちゃん3号もどき』という人工知能もどきを作ってみました。その自前プログラムを動作させると、以下のような内容のウィンドウをパソコンの画面上に再現させることができるはずです。

あなた> 朱美ちゃん     ・・・ ・・・ ・・・ あなた>朱美ちゃん愛してるよ     「愛してる」?  ダメよ〜 ダメダメ! あなた>湯布院の温泉に一緒に行こうよ     「湯布院」? 「温泉」? 「一緒に」? 「行こう」?  ダメよ〜 ダメダメ! あなた>アイシテル ……     「アイシテル」?  ダメよ〜 ダメダメ! あなた>


 解説すると、パソコン上でこのプログラムを動作させると、まず、背景が黒地で文字が白い、昔のパソコン画面と同じようなウィンドウが、パソコンの画面上に開きます。そして、四角い黒地のウィンドウの左上隅に、『あなた>』と白文字で表示されます。『あなた』がパソコンのキーボードからローマ字入力方式で、日本語の1行文を入れてくるのを待っています。それを入れて、リターン・キー(もしくは、ENTERキー)を押すと、『あなた』の1行日本語文を解釈して、コンピュータ側の『朱美ちゃん3号もどき』が答えを返してきます。そして再び、『あなた>』という白文字が黒地の画面に現れて、『あなた』の言葉が入ることを待ちます。その繰り返しで、昔のチャット(chat)会話みたいな文字テキストによるやり取りが続きます。そのやり取りが長くなると、縦スクロールが出現して、前にどんなやり取りをしたかを確認することができます。(やり取りの内容は、ウィンドウを閉じるまで有効です。)『朱美ちゃん3号もどき』の会話に飽きたら、ウィンドウ右上のクローズ・ボタンを押してウィンドウを閉じると、このプログラムの動作が終了します。
 ちなみに、テキスト形式で出来ている、このプログラムの内容スクリプトを以下に公開します。

<HTML>
<HEAD>
    <TITLE>朱美ちゃん3号もどき</TITLE>
    <META content="text/html; charset=shift_jis" http-equiv=Content-Type>
    <META content="MSHTML 5.00.2919.6307" name=GENERATOR>
</HEAD>

<STYLE TYPE="text/css">
  BODY  {background-color:black; font-family:"MS UI Gothic", "MS 明朝";}
  SPAN  {font-size:12pt; color:white; background-color:black;}
  INPUT {font-size:12pt; color:white; border:none; background-color:black; ime-mode:active;}
</STYLE>

<SCRIPT LANGUAGE = "VBScript">
'//--------------------------------------------------------------
'//
'//                                           by Kuroda Kunio
'//
'//   『朱美ちゃん3号もどき』
'//
'//
'//--------------------------------------------------------------
Option Explicit


Dim WshShell
Set WshShell = CreateObject("WScript.Shell")

Call ResizeTo(660, 300)


Dim Keywords, KWCnt, PCode, ICode

Keywords = array( _
	"湯布院", "ゆぶいん", "温泉", "おんせん", _
	"一緒に", "いっしょに", _
	"行こう", _
	"行きたい", "いきたい", _
	"あいしてる", "アイシテル", "愛してる" _
)

KWCnt = UBound(Keywords)
PCode = "あなた>"
ICode = string(len(PCode), " ")


Sub Window_onLoad()
    WSHShell.SendKeys "{TAB}"
End Sub



Sub CatchRetCode()
    Dim dstr

    Select Case window.event.keyCode
       Case 13
          dstr = UserBuffer.value
	  UserBuffer.value = ""
          Call AddScreen(dstr & "<BR>")
          Call AddMessage(RetAnswer(dstr))
	  WSHShell.SendKeys "+{TAB}"
       Case Else

    End Select
End Sub


Private Sub AddMessage(dat)

    If dat <> "" Then
       Call AddScreen(ICode & dat & "<BR>" & PCode)
    Else
       Call AddScreen(PCode)
    End If

End Sub


Private Sub AddScreen(dat)
    ScreenBuffer.InnerHTML = ScreenBuffer.InnerHTML & dat
End Sub


Private Function RetAnswer(dat)
    Dim rstr, n, key

    rstr = ""
    For n = 0 to KWCnt
        key = Found(n, dat)
        If key <> "" Then
           rstr = rstr & "「" & key & "」? "
        End If
    Next

    If rstr <> "" Then
       RetAnswer = rstr & " ダメよ〜 ダメダメ!"
    Else
       RetAnswer = "・・・ ・・・ ・・・"
    End If

End Function


Private Function Found(n, dat)

    If Instr(1, dat, Keywords(n)) > 0  Then
       Found = Keywords(n)
    Else
       Found = ""
    End If

End Function


</SCRIPT>

<BODY SCROLL = "Yes" LEFTMARGIN = "0", TOPMARGIN = "0" onKeyPress="CatchRetCode()">
  <SPAN id="ScreenBuffer">あなた> </SPAN>
  <INPUT type="text" name="UserBuffer" size=64 />

</BODY>
</HTML>


 簡易言語のVBScriptがわかる人にとっては、それほど難しいプログラムではありませんが、『朱美ちゃん3号もどき』が反応するキーワードになる言葉を増やしたり変えたりしたい場合は、配列変数のKywordsにarray関数でその言葉を定義している箇所をいじってください。
 私の今回の試みは、人工知能のプログラミングとしてはインチキなのかもしれません。真面目に人工知能を商品化しようとしているSバンクのS.M.社長から怒号を浴びせられるかもしれません。従って、今回のプログラムは、人工知能もどき、あるいは人工無能と本来、呼ぶべきものなのかもしれません。
 それにもかかわらず、今回私がこうした内容をネットに公開したことには、それなりのワケがありました。人工知能に対して、もっと身近に考えて欲しいと思います。人知を超えた高尚なイメージを持って欲しくないのです。人間の考えていることを表現できるプログラムによって、それがこのように簡単にモデル化できることをわかって欲しいのです。
 つまり、人工知能は、人間が責任をもって作り、育てていくものである、ということなのです。その利便性にばかり期待や注目をして、粗末に扱ったり、使い捨てにしてはいけないのです。機械が故障するのも、コンピュータ・プログラムが暴走して壊れるのも、結局は人間が悪いのです。だから、その悪い結果を受け止めるのも、それを修理・修復するのも、結局は、人間の側にある責務(責任と義務)を意識することにかかっていると思います。