#################################
#### 人工無能「葵」##############
####### AKOSM2 エンジン #########
########## Standard Edition #####
#################################
########## 説明書 Ver1.05 #######
#################################
■はじめに
『人工無能「葵」AKOSM2エンジン Standard Edition』をお買い上げ・・・もといダウンロードありがとうございます。
CGI型としては珍しい自動学習タイプです。とはいっても、かなり簡素な代物です。気長に力まず軽い気分で使ってもらえると助かります。
バグ報告、マニュアルの間違い、質問、遠慮せずメールしてください。バグ直しやマニュアルの整備に役立ちます。
■特徴
メリット
・自動学習方式。自分でキーワード等を登録する必要がありません
・ほとんどメンテナンスフリー。時々の学習データのダイエット以外メンテナンスの必要がありません。
・設置が簡単。必要な物が全部そろっているので、別途ライブラリーやらを入手する必要がありません。
・形態素分解用の特殊なプログラムを使用しない。なのでPERLが使えるサーバーなら大抵動きます。
・CGI型なのでIRCクライアントとかインストールできないようなコンピュータに疎いお友達ともチャットできます。実は結構大きい。(私の友達はIRC入れてくれないのだ)
デメリット
・使えば使うほど重くなります。時々学習データのダイエットを行う必要があります。詳しくは「注意」を参照してください。
・自動学習方式ということは逆に、特定のキャラクターや反応パターンを自由に作れないということです。
・必ず話すわけではありません。時々、話すだけです。学習データが増えるうちによく話すようになります。
・チャット部分がへぼいです。
■必要な物
・サーバー
Perl 5.8以降がインストールされている必要があります。
flockは排他処理を別の方法でしているので、使用できなくてもかまいません。
・エディタ
UTF8を扱えるエディタが必要です。
・FTPソフト
ファイル転送に使います。まぁ、持ってるとは思いますが・・・。
転送時にASCIIモードにしてください。
■ファイル構成
ファイル名 属性 説明
最初からあるファイル
aoi.cgi 0755 チャットプログラム
aoicore.pl 0755 人工無能本体
aoidiet.cgi 0755 葵のダイエット
ookamakun.js 0666 JavaScript製「大鎌君」
lockfile_aoi 0666 排他処理用
その他、いくつかのファイルが自動生成されます
設置するディレクトリの属性:0755
※ディレクトリのパーティションが正しくないと、自動生成ファイルができません。
※サーバーによっては違うパーティションにする必要があるかもしれません
■設置方法
※UTF8が扱えるエディタを使用してください。必ず!!でないと文字化けします。UTF8は「UTF8N」、BOMが付いてない物にしてください。よく分からなくても、サーバーで動くようなら大丈夫です。
○aoicore.plの編集(UTF8です)
14行目:人工無能の名前を設定してください。
例:$munouname='寿下無寿下無五劫の擦り切れ海砂利水魚水行末雲行末風行末食う寝るところに住むところやぶら柑子パイポパイポパイポのシューリンガンシューリンガンのグリーンダイグリーンダイのポンポコナのポンポコピーの長久命の長助';
16行目:人工無能の一人称を設定してください。
例:$munouself='おいどん';
18行目:禁止用語を検出した時の返答です。空白にすると無言になります。あんまり厳しすぎる言葉は止めたほうがいい気がします。
例:$haziki=''; 禁止用語を検出しても何もいいません。
例:$haziki='あら、あなた低級な頭をしていらっしゃいますわね。うふふ。文章から低俗な容姿と仕草と吐き気を催すような雰囲気が漂ってきますわ。さぁ、はやくお帰りなして。これ以上見ていると本当に吐いてしまいそうだわ(はぁと)';温厚な例
20行目:禁止用語の設定です。あんまり厳しく設定するとどんな会話も弾かれます。
例:「@prohibitword=(<省略>,'H');」とした場合。
A>HBの鉛筆って薄くない?
無能さん>あらぁ、低俗な文章ですこと。あなたの脳みそ、腐ってるんじゃなくて? いちど病院に行かれてはどうかしら? あら、すいませんわ。馬鹿は死んでも治らないと言います事よね。失礼しましたわ。ほほほほほ
A>・・・・(泣)
○aoi.cgiの編集(UTF8です)
1行目:Perlのパスの設定。ブロバイダー等が提供している情報を参考にしてください。必ず「#!」を先頭につけてください
例:#!/usr/bin/perl
13行目:データの初期化や配色の変更に使うパスワードです。他人に初期化されないように安易なパスワードはやめましょう。日本語不可
例:$rootpass='oo,yuusyayokaettekitaka.hai,oosama,koregaseiken"ekusukariba-"desu.mitekudasai,konokagayakiwo.mu...ko,korehasubarasii!';
15行目:会話ログを保存するファイルの名前を設定します。他人に見られたくない場合は分かりにくい名前にしましょう。日本語不可
例:$logfile='mitehosikunai.txt';
17行目:人工無能の名前です。aoicore.plで設定したものと同じ名前にしてください。
例:$munouname='寿下無寿下無五劫の擦り切れ海砂利水魚水行末雲行末風行末食う寝るところに住むところやぶら柑子パイポパイポパイポのシューリンガンシューリンガンのグリーンダイグリーンダイのポンポコナのポンポコピーの長久命の長助';
19行目:ブラウザのタイトルバーに表示される文字列です。
例:$title='人工無能「のういっけつ君」';
21行目:TOPページ(ログイン画面)で表示される文章です。タグもつかえます。
例:$message='ようこそ人工無能の館へ
自動学習方式なのでどんどん学習させて立派なパラノイアに育てましょう!
';
26,28,30行目は特にいじる必要はありません。
○aoidiet.cgiの編集(UTF8です)
1行目:Perlのパスです
例:#!/usr/bin/perl
7行目:パスワードです。他人に「弱者切り捨て Lv.3」で学習データを完膚なきまでに削られないように安易なパスワードはやめましょう。日本語不可
例:$pass='aa,nantekimihautsukusiinda.ara,iyadawa,osezinankaittyatte.osezinankazyanai.koregamakotodenainaraba,konoyonimakotogaarumonoka.sonoserihu,betsunokonimoittenakatta?';
○FTPでアップロード
ASCIIモードでアップロードしてください。でないと改行コードがおかしくなります。
パーティションは、aoicore.plとaoi.cgiとaoidiet.cgiが0755。lockfile_aoiとookamakun.jsが0666です。葵を設置するディレクトリ自体のパーティションも0755にしてください。でないと、自動生成ファイルが作れません。
・初期設定
aoi.cgiにブラウザでアクセスしてください。パスワードを入れれば初期化されます。
ここでうまく行かない時は最初の設定が間違っている可能性があります。
どうしてもうまく行かない場合は、メールで聞いてください。
■メンテナンス方法
aoidiet.cgiへブラウザからアクセスしてください。詳しい説明はそこに表示されます。実行前に「必ず」バックアップをとりましょう。
■注意
○自動学習データについて
学習を重ねるにつれ、学習データが肥大化していきます。
基本的に、人工無能というのは処理が重いものですが、この人工無能は処理量が学習データのサイズに比例します。
時々ダイエットを行ってサイズを小さく保つことをお勧めします。
適当なファイルサイズは場合のよりますし、確かなことは言えませんが、少なくとも100KBは超えないほうがいいと思います。
かといって数KBでは反応がなさすぎますので、まぁ、数十キロバイトが適当でしょうか。
「自宅サーバーやってるぜ!」とか「友達のサーバーだから大丈夫だ!(私の場合(汗;)」とかいう場合は500KBでも1MBでもご自由に〜〜。相当重くなると思いますけどね〜
かといって過度のダイエットは危険です。ダイエット前にかならずバックアップを取っておきましょう。
○返答頻度
いわゆる「一対一会話」式の人工無能ではないので、こちらのセリフに必ず返事をしてくれるとは限りません。特に最初のうちはぜんぜん話しません。がんばって独り言を言うか、友達とひたすら語り合いましょう。
■FAQ 役に立つヒント と 役に立たないヒント の スクランブルエッグ
Q、育てていけば人間と遜色無いレベルまで育ちますか?
A、無理です。そういうことをお望みならば、いくらでも高機能な手動登録式の人工無能がありますから、そちらを根気よく育ててください。ほっといて気軽に〜というスタンスなので、人間らしさは低いです。
Q、馬鹿過ぎて困る。うずらはもっと賢かったぞ!
A、無茶いわんといてください。容量何百MBおあるうずらと辞書ファイルせいぜい数百KBの葵じゃ比べ物になりません。CGIとしての負荷も考えなければなりませんし、なにより私のアイディア力が足りません。
Q、最初から登録されている言葉はどれくらいありますか?
A、ゼロです。完璧ゼロです。なので、最初はウンともスンともいいません。気長に育てましょう。
Q、わしはもっと○○で(ピーーー)な会話がしたいのじゃ。なんとかならんかのう
A、aoicore.plの「禁止用語チェック」とかいてある下の「if(&chkword...」という行の先頭に半角で#を追加しましょう。そうすると、どんな言葉にも分け隔てなく学習してくれます。
Q、いや、俺は硬派な男だ! もっと厳しく取り締まりたい
A、aoicore.plの上の方の@prohibitwordの中に禁止したい語を追加してください。日本語は全角で、英語や数字は半角です。ただし例えば「SM」を禁止しようとすると、このエンジンの名前「AKOSM」まではじかれてしまいます。むやみやたらに追加すると大変なことになります。
Q、なんでこんなにチャット部分がへぼいの?
A、人工無能を作ろうと思い当たった時に、とりあえずチャットプログラムが必要でした。その時、「とりあえず無能が動けばいいや」という考えで作ったプログラムだからです。
Q、チャット部分を作り直さないのですか?
A、「とりあえずチャットさえできればいいや」という思想なので特に改良する必要性を感じません。ってか、面倒くさいです
Q、せめてログインしてる人の一覧ぐらい表示して欲しい
A、チャットプログラムがそういうことを考えてないので無理です。
Q、もっと話すようにできないの?
A、ランダム反応をONにすればできます。AKOSM1ではあったのですが、AKOSM2では廃止されています。なので、無理です。(なら最初から出来ないと書け!)
Q、なんでランダム反応を無くしたのですか?
A、最初の学習量が少ない時、毎回同じような返答をしてしまうからです。さらに、ランダム反応により会話の話題がどんどん変わっていってしまうので、学習結果がどんどん悪くなってしまいます。(元から悪いのに)
Q、学習データのフォーマットはどうなってますか?
A、単純です。各行ごとに「キーワード,返答文,返答文,....」という配列になっています。文章中に「キーワード」があった場合にその後の返答文からひとつ選んで答えとします。複数のキーワードが含まれていた時は、ランダムで選択されます。
Q、文章を自動で作るようにできませんか?
A、形態素分解等を使用していないのでそういうのは無理です。
Q、「人工無能」じゃなくて「人工無脳」が正しいのではないですか?
A、昔からある呼び方は確かに「人工無脳」ですが、自分は「人工無能」という呼び方をしています。なぜなら実際に「無能」だからです。漢字変換で一発ででるし、GOOGLEでも「人工無脳」より「人工無能」の方が検索結果多いし・・・
Q、手動登録や登録された語の削除を行いたい。
A、もしかしたらそういうツールを作るかもしれませんが、今のところそういったツールはありません。辞書が物凄く単純なので、自分でエディタでいじってください。
Q、ログファイルが大きくなりすぎて困ってます。
A、FTP等でログファイルをリネームや削除してください。ログファイルが無くても次の書きこみ時に自動的に作成されるので大丈夫です。
Q、なんでUTF8なんてつかってるの? メモ帳で開けないじゃないか!
A、UTF8を使わないと、日本語がうまくPerlで扱えないのです。フリーでUTF8を使えるエディタがたくさんあるので探してください。(私はJmEditorというのをつかってます)
Q、改造していいですか?
A、そういうスキルがあるなら自分で一から人工無能を作ったほうが懸命です。自分で作ったほうが100倍楽しいです。が、要望によりGPLを適用したため、そういうことは自由に出来ます。興味があったら弄くり倒してください。
Q、商用利用してもいいですか?
A、おそらくそういう事はありません。
Q、AKOSMの意味はなんですか?
A、「Auto Keyword and Original Sentence Memory」です。その名の通り、入力された文をそのまま記憶します。自分で文章を作ったりはしません。
Q、「大鎌君」という変な名前のプログラムはなんですか?
A、文字列をカタカナや漢字などの切れ目でぶった切るプログラムです。PerlがUTFを扱えない時代に作ったものです。今ならば普通にPerlでも同じようなことができるのですが、面倒なのでJavaScriptのままです。
Q、JavaScriptが使えないブラウザで使えますか?
A、大鎌君が動いてくれないので無理です。JavaScriptが使えるブラウザでチャットしてください。
Q、バグがあります。
A、メールで報告してください。できるだけ具体的にお願いします。たぶん、結構なバグがあると思います。
Q、人工無能ってなんですか?
A、チャットで適当に話すプログラムのことです。英語用プログラムは割合まともに動きますが、文章が複雑で単語の切れ目が無い日本語用人工無能はあんまりまともな動作は期待できません。
Q、チャットってなんですか?
A、辞書を引きましょう。
Q、コンピュータってなんですか?
A、本を読みましょう。
Q、キーボードってなんですか?
A、目の前にあるものです。
Q、マウスってなんですか?
A、ねずみです。
Q、電源ってなんですか?
A、・・・・・・・・・。おとうさんおかあさんに聞いてください。分かったらそこの金属部分を強く握ってみましょう。
Q、裏で誰かが操っているんじゃないですか?
A、そんな暇人はいないと思います。
Q、むしろ、自分で操りたいです。
A、普通のチャットで無能を演じましょう。
Q、人工無能に自我を持たせたいです。
A、がんばってください。ひとつ言っておくことは、自我とは自己と他の境界を認識してこそ生じます。なので、自己として「体」をもたないと駄目です。データだけの人工無能のロジックをどういじっても自我はできません。
Q、この人工無能を改良して人工知能をつくりたいです
A、無理。
Q、人工知能の作り方を教えてください
A、本を読みましょう。
Q、じゃあ人工無能でもいいので作り方を教えてください。
A、人工無能はアイディア次第なのでなんとも言えません。作り方は人それぞれです。決まったセオリーはありません。
Q、じゃあ、へぼいけど葵の仕組みを教えて欲しい
A、なにぃ!? へぼいというなら自分でソースを解析しろ!!。。じゃなくて、しなさい。
Q、ソースコードが汚くて読みたくありません。
A、試練です。
Q、人と同じ意識を持つスーパー人工知能を作りたいのじゃ!!
A、おじいさん、気を落ち着けてください。まず、それには人の体に匹敵する情報解像度を持つ感覚器がないとだめです。ありの体に人間の脳みそをつなげても、刺激が足りなくて脳は発達しないでしょう。触覚センサー、匂いセンサー、内部機関モニタセンサー、音響センサー、CCDカメラを備えたメイドロボでも発売されたら、基礎本能プログラムを書きこんだニューロコンピューターでもつなげてあげてください。
Q、とりあえずそのメイドロボとウハウハしたい
A、発売を待ちましょう。
Q、はぁはぁ・・・どうやったらそのメイドロボがつくれるの?
A、ハードウェア屋に聞いてください。専門家じゃないのでわかりません
■著作権・その他
・全ての著作権は多分私「ななと」or「kisuku」にあるような気がします。著作権を放棄した覚えもないので、多分そうです。
・でも、GPL適用しているので勝手に改造・再配布、私に報告しないで自由にできます。
・このプログラムによりどんなトラブルや被害にあったとしても責任は一切とれません。自己責任でお願いします。
・でもサポートはできるだけします。バグ報告や質問があったらメールください。改良やマニュアル更新のヒントにします。
■バージョンアップ情報
〆ver 1.00 2004/12/23
とりあえず公開。
〆ver 1.01 2004/12/24
早速、葵ダイエットに致命的なバグを発見。
詳細:「ボキャブラリー退化」で無駄な改行コードを消し損ねていた。
そもそもSJIS用のままでUTF8用になっていなかった。
aoi.cgiのutf8の扱いを修正
〆ver 1.02 2004/12/26
時々ログファイル等に空白の改行が入るのを修正。(学習ファイルには影響無し)
一人称変換を加筆。
〆ver 1.03 2005/03/18
UTF8でのフォーム入力に難あり。aoi.cgiをEUCに変更。
aoicore.plの入出力にUTF8フラグ追加
〆ver 1.04 2005/03/19
ver 1.03は勘違いだった。おかしいのは他の所だった(ぉぃぉぃ
aoicore.plをver1.02の状態に戻した。
もっかい、全部UTF8に直した。
発言の更新間隔選択を変更した
〆ver 1.05 2005/03/30
aoi.cgiのHTML出力の文字コード宣言が小文字だったので大文字に[utf-8]→[UTF-8]
これで、文字化けが減るのかは未確認
〆2006/02.04
要望により、GPLを適用しました。
〆ver 1.06 2006/07/09
名前をうまく置換できないバグを修正。
※学習ファイルなどの形式にはver1.00から変更ありません。そのまま使えます。
■バグ報告やらなんやらの連絡先
mail:kisuku@butyou.vip.co.jp
転送メールなので、大抵の場合連絡がつきます。
web:http://marie.saiin.net/~kisuku/
■他人にはどうでもいいことメモ(ならこんなとこにメモるな!と自分でも思います)
・PerlのUTF8フラグの扱いがよくわからんので、ver1.01時点で、ファイルはフラグ無し記録で統一。プログラム内部でフラグをつけて処理して、書きこみ時にフラグを消す。ってか、いままでバグのおかげでうまく動いていたわけで・・・。バグを直したら変更部分が大量に・・。
・フラグついてる時にutf8::decodeやったり、フラグが無いのにencodeやったりするとおかしくなる。あ〜、各時点でフラグがついているかいないかを確定的に言えるプログラムにしないと〜めんどい〜。
・いちいちファイルの読み書きのたびにUTF8フラグをつけたり消したり・・・。負荷が増えそうだけど。まぁ、UTF8が一番文字化けとか問題がすくないし・・・。仕方ないか。
・utf8のdecode/encodeにかかる時間。NOTE PC 133MHzで約200KBの学習データを100セットエンコード&デコード。結果、12秒。つまり一回のデコード&エンコードで0.12秒。全然問題なさそうだ。最近の1GHz越えのサーバーなら一回0.01秒とかその程度ですみそう。
・ver1.02でUTF8でフォーム入力のエンコードがうまく行かなかったのは、文字列をエンコードしないで日本語文字コードのまま渡していたせい。文字化けして当たり前だ。