- 履歴一覧
- ソース を表示
- ちに/AIMist ver3.x系仕様メモ は削除されています。
#現在激しく作成中です。おかしなところもありますが、とりあえずお察しください。
〜目次〜
ナンデスカこれはー。†
全体の処理の流れ 記憶(MarkovChain.Memorize系関数)編†
- 概説
- 基本的にはmist_ai.dic内に全て書かれているが、細かな関数はmist_aisupport.dicに記述されている。前者をMain、後者をSubと略すことにする。
- 使用したくない文字(記号)の削除、置換(Main MarkovChain.Memorize.SentenceFilter関数)
- 次のフィルタが実装されている。
- チャット特有の記号の削除、置換
- URLのキック処理
- Sakuraスクリプト、葉梨スクリプトの削除
他のGhostからの学習を前提に。ただし、この機能は未実装に終わっている。
サンプルスクリプト
・Sakuraスクリプト削除
_talk = RE_REPLACE(_talk, "\\_?[[:alpha:]](([[:alnum:]])?|(\[(.*?)\])?)|\\!\[(.*?)\]|\\(\-|\+|_\+|[[:digit:]])", "")
・葉梨スクリプト削除
_talk = RE_REPLACE(_talk, "@0?(<|>|\||\+|\-|\=|\:|a|n|o|u|e|b|w|wavout)(\[(.*?)\])?", "")
- 茶筌による解析(Sub ChasenRequest)
- フィルタにより、余計な文字を全て消した上で茶筌による解析を行う。
- 出力は簡易配列の形で返すようにし、RE_SPLITすることにより、二次元配列に変化するように仕向ける。こうすると、WinChaで表示しているように取得できるので、全く苦労しない。
出力された結果は、基本的に一つずつ判断していくことになるので、foreachにより一つの要素を抜き取り、それを簡易配列として扱えばよい。
- 品詞の確認(Main MarkovChain.Memorize)
- 上の通り、foreachにより一つの要素を抜き取り、それを簡易配列として扱っている。
- 記号は基本的にスルー。
- if文で、(感動詞)、あるいは、(数、非自立、代名詞、特殊、接続)を含まない、かつ、名詞を含む品詞、あるいは、(記号)を含まない(形容詞)が含まれること……にヒットするものを一時的にキーワードとして保存する。
- 品詞が名詞-数である場合、茶筌によってばらばらにされた数字を一まとめにするため、一時的に保存していき、固めていく。
- 記憶を行う(Main MarkovChain.Memorize.Pattern)
- ここでマルコフ連鎖として、ばらばらにされたパーツを保存する。
- Sub SQLSearchRequestを中心に、要素を順番に5つ並べ保存していく。
本来、人工無能で扱うマルコフ連鎖は3つずつ並べていくタイプが多い。しかし、ミストは一般ユーザー向けの人工無能として開発していかなければならず、未熟なりにでもまともな返答を行いたいという意地もある(ぉぃ)。3つずつ覚えさせて出力すると、処理の甘さから電波文になりやすい。そこで、3〜5つの要素を状態に合わせて使い分けるようにしている。
全体の処理の流れ 文章生成(MarkovChain.Remember系関数)編†
- 概説
- 記憶に比べると、記憶したものにしたがって単語を並べていくだけなので、いたってシンプルである。
- 返り値として、Sakuraスクリプトも何も含まない文章が返される。
- Sakuraスクリプトとかシェル指定とかどーしてるの?というのはもう少し後で。
- キーワードに感動詞がある場合、特別な処理を行う。
- (おはよう、こんにちは、こんばんは、さようなら、おやすみ)がそれに当たる。スクリプト内で品詞を見ずに単語のほうを見ているのはver2.x時代の名残……ということにしてくださいお願いします(ぅぉぃ