傀儡師の館.Python

傀儡師の館.Python

PR

×

Calendar

Keyword Search

▼キーワード検索

Archives

2026.05
2026.04
2026.03
2026.02
2026.01
2025.12
2025.11
2025.10
2025.09
2025.08

Profile

kugutsushi

kugutsushi

Free Space

設定されていません。
2003.01.24
XML
カテゴリ: ことばの処理
MagicDraw UML

rsync (*nix のコマンド) を使えばいいか。で、その場合、どこへというのがあるのだよな(笑)。ファイルの暗号化まではこれだとダメだから、いったん暗号化しないといけないか(サーバ上で暗号化されていないと)。で、複数の友人とかなどで互助会的にサーバを運用するとかすればそこそこ低コストで使えるかな。

とりあえずデモを使ってみる。テキサスにあるデータセンターにつながる。転送する前にまずローカルで暗号化して圧縮してるのかな。1MB 分のテキストファイルだが結構時間がかかった。転送はさらに時間がかかる。うーん、最初はそういうことなのだろうな。で、次回からは差分だけを送るような形になって時間は短縮されると。まあ、こういうのは、よっぽど大事なデータだけだな。で、よっぽど大事なデータを人に預けるというのも信頼関係の話になるので、それはそれで心理的に抵抗感がある話なのだよな。まあ、35日間使えるらしい。35MB だとちょっと少ない(このくらいの量ならそこそこ商売として運用コスト的にも成り立つか)。GB単位で欲しい。料金を眺めてみると 1GB までなら、$24.95 (基本料金) + $14.95 = $ 39.9 か。うーん、微妙だけどちょっと高いかな。2000円台にはなってほしいところ。日本語ファイル名は文字化けするし。それに月1万円仮に払えば数十ギガバイトのHDD 月のサーバを単体で借りられるからやり放題だし。5万も出せばマシン1台買えちゃうから。CD-R に焼いたっていいし。そう考えると成り立ちそうでなかなか成り立たない商売なのだよな。

○ たかが Eliza されど Eliza(2) (Python で人工無能)

延び延びになっていた Eliza の中身をいよいよ見始める。Eliza と私との出会いは、かれこれ 10 年以上前だろうか。最初に見たのは BASIC で書かれたものだった。これを当時の国民機 NEC PC98 シリーズの互換機の EPSON で動かしたのが最初だ。LISP 版もその後見たかな。で、とにかく見てみると、Python で書かれたものは、はるかに分かりやすい。あ、正規表現使っているから簡単になったのか。ふーん。

eliza をクラスとして定義している。つまり、まあ、Eliza というのはどういうものになるのだよという設計図が最初に書かれているわけだ。この設計図あるいは遺伝子とでもいったらいいのだろうか、これを元に実際に動かすときに Eliza の実体を作ってお話するわけ(我ながら滅茶苦茶ラフな解説である)。

LISP 版であれば、この設計図自体を変更していくことができるので Eliza の進化が可能といえば可能だ。遺伝子にたとえたのは、この実体を作り出す設計図自体を自動的に書き換えていくプログラムを作れば、さらに自動的に進化していける。そして、突然変異が発生したり、実体がまともに動かずにすぐに死んでいったりなどすることを念頭においている。

が、Python 版ではきっちりとした設計図なので、これに従ったものしか現れてこない。ゆえに、人工知能であれば LISP はやっぱり便利なのだなーと改めて感じる。だが、人工無能であるので、そんなことは心配する必要がないのだ。だいたい、高度なプログラムはそんなに簡単に作れるものではないし、逆に理念だけが勝ったもの作ってもしょうがないので、動くことの方が大切なのだ。

と能書きばかり長い(笑)。さすがにここで終わってはなんなので、もう少し続ける。まず、クラスつまり設計図というか雛形が実体になるときには、__init__ という関数が呼ばれる。この中でデータを Eliza が読み込んで使いやすい形にしている。



[r’I need (.*)’,
[ "Why do you need %1?",
"Would it really help you to get %1?",
"Are you sure you need %1?"]],

正規表現を使って、「私はxxが欲しい」(I need) と来た場合には3つのパターンを用意する。つまり、「どうしてxxが欲しいの?」"Why do you need %1? と(省略)、で、実際には %1 の部分にマッチした文字を当てはめていくということになるわけだ。英語の場合、これがやりやすいのは、例えば、"I need a friend who ....." と友人(friend)を修飾するようなものが長々ときても、それをそのまま持ってきても、ちゃんと文が成り立つ可能性が高いことだ。

日本語だったらどうだろう。「=私は疲れているので、おとなしい友人=が=欲しい」と日本語であった場合には、「ほんとうに、=あなたは疲れているのでおとなしい友人=が=欲しいのですか」。あれ、一応できるないことはないね(笑)。

まあいいや。とにかく、Eliza の場合、入力に対する応えがうまく出来ていて、誘導しやすいようになっているのが特徴。あとは、英語の特徴で、けっこうラフなやり方をしても、うまくいってしまうのだ。まあ、日本語の場合でも動詞を軸に駆動にすればできないことはないのだなー。なのに名詞駆動の人工無能が多いのはなぜ・・・。「欲しいのです」、「欲しいのだよ」、「欲しいんです」。語尾に変化をもたせるとすぐに破綻してしまうのだよな。つまり、マッチさせるのが難しい。形態素解析を使おうとおもったのは、こういう語尾の変化を吸収させてしまうためなのであった。あとは、「欲しいなんてことはない」。こういうちょっとねじくれたものも対応できないことはないから。たとえば、否定形が後ろに来ていたら、対象外にするとか。

そんなわけで、ほんとうは、詳細に見ていくと日本語だと英語に比べて言語の特性上、うまくマッチしないパターンがあるということを示せるのだろうが面倒なのでやめておく。

とにかく、この会話のネタを仕込むことが最初に行われるわけだ。正規表現を高速で行えるようにコンパイルして(コンピュータが理解しやすい形式に変換して、応対用のデータを覚えこむ。最初に学習してしまうわけだ。

で、あとは、設計図の中でどんなことをするか、行動様式を決めてやる。この行動様式には、変換(translate) と応答(respond)がある。非常に単純なのだ。つまり、何かを聞いたら、それに対して何らかの変換を加えてやって、応答文を返す。ただそれだけ。

変換(transform) では、入力された文をまずスペースで分割する。日本語なら形態素解析を行って単語ごとに分かちがきしてやるが、英語の場合スペースで切るだけだから1行で済んでしまうのだ。で、最初に覚えこんだ正規表現パターンとは別に用意してある単語の置き換え用の辞書を参照しする。つまり正規表現とは別に単語辞書が用意されているのだ。ここでは、I am ... の I を You に置き換えたり、am を are に置き換え、また、you’ve を you have に置き換えるために使う。つまり、I と You の変換のための小さな辞書から、キーの部分だけを抜き出してやる。つまり I, am, you’ve というリストができる。そうしたら、入力された文の頭から置き換えリストを参照して、置き換える必要がある単語は置き換えてやる。で、それが終わったら、もう一度、ばらばらにした単語をつなぎなおして一つの文字列にして返す。



実際のプログラムでは、これを繰り返し呼び出して会話を行うわけだ。なんで、その程度にも関わらずもっともらしい動きになるか。それは、登録してある例文のウマさと、英語自体の特性によるものだろう。日本語ではとてもこれと等価のプログラムを同じような行数で書くことはできないのだ。だから、たかが Eliza されど Eliza なのだ。これの元となったプログラムは、1966年に作られたものであることに注意! 要するにアメリカではその時代にすでに人工無能の走りが出ていたわけで、現状ではもっと高度なものになっているということだ。

なんて書くと、次は Alice でも見なきゃいけないのかな。その前に、やっぱり、プログラムの方をすすめないとな。

今日の教訓。動詞駆動になるように注意せよ。日本語の語尾の扱いに注意せよ。それは日本語の文生成でもあるわけだが、ゆえに面倒なところもあるので、どこで切り上げるかも考えておこう。あぁ、そういえば、「はい」と「いいえ」扱いについても、早めに入れないといけないな。日本語と英語とでは、やっぱり英語の方が楽なのだよなー。

とにかく、今日はここまで。





お気に入りの記事を「いいね!」で応援しよう

Last updated  2006.09.12 20:16:32 コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: