こんにちは、Habr! AIとパーソナルアシスタント(Siri、Google Nowなど)の最新の進歩に触発されて、私は自分用にアシスタントを書くことにしました。
スージーに会う
私の疑似AIの主なハイライトは、非常にシンプルな実装と多くのフレーズの迅速な学習です。 これは次のように達成されます。
ロジックスージー
(現在)実行可能ファイルを含むフォルダーには、sinonims.txt、faq.txt、phrases.txtの3つのファイルがあります。 それらは私によって満たされています。将来的には音声入力機能や何らかの自己学習を追加する予定です。
sinonims.txt
-置換のソースワードのベースhi = hi
こんにちは=こんにちは
hi = hi
...
事案=状態
人生=状態
...
faq.txt
-基本的な質問と回答。 応答には、テキスト、コマンド、または変数が含まれる場合があります* hi * = {&hi}、{%name}
* like * state * = {&state}
...
*オフ*デバッグ* = {@ dbg0} {&ok}
右側にはマスクがあり、その下に同義語のテキストが置換され、左側の回答にあります。 特殊文字「@」、「%」、および「&」は、コンストラクトの代わりに挿入する必要があるもの(それぞれコマンド、変数、またはフレーズ)を示します。
phrases.txt
-いくつかのバージョンの頻繁なフレーズのベースhi1 =こんにちは
hi2 =ようこそ
...
state1 =良い
state2 =正常
state3 =すべてが正常です
...
ベースを埋めたいという要望がある場合-コメントを書いて、ベース、ソース、exeshnikをレイアウトします。
リクエスト処理の例
ソーステキスト:こんにちは、お元気ですか->行をクリアし、辞書の同義語を置き換えます:hi as state->どのマスクに該当するかを調べます: * hi * and * as * state * -> Parsim answer:replace {&hi} and {&state }フレーズのデータベースに存在するオプションにランダムに、変数curusrに{%name} ->結果: 歓迎します、すべてが正常です (スージーはあまり能力がないと思っていたかもしれませんが、リテラシーは必要ありません。私の計画は、彼女の音声認識とTTSを台無しにすることです。この場合、彼女は句読点を付けたり、大文字で単語を書く必要はありません)
スージーの内面
初期化手順
procedure init; var path: string; begin canspeak := true; path := extractfilepath(application.ExeName) + '\brains\'; // faq := tstringlist.Create; // words := tstringlist.Create; words.LoadFromFile(path + 'phrases.txt'); faq.LoadFromFile(path + 'faq.txt'); sins := tstringlist.Create; sins.LoadFromFile(path + 'sinonims.txt'); curusr := 'dysha'; // name := sino(curusr); // say(' '); say(' ' + inttostr(faq.Count * sins.Count) + ' ' + inttostr(faq.Count * words.Count)); end;
解析手順
procedure parce(s: string); var p, o, i, t, i1: Integer; t1: string; str: tstringlist; begin str := tstringlist.Create; said := false; s := ansilowercase(s); // trim(s); stringtowords(s, str); s := ''; for i := 0 to str.Count - 1 do // s := s + sino(str[i]) + ' '; delete(s, length(s), 1); s := answ(s); // , , , ={%cname} d(s); // tparce := s; rootcmdparce; // faqparce; // end;
おわりに
スージーにはたくさんの計画がありますが、音声認識と音声合成を追加したいです(ただし、これは長いレッスンであり、十分な時間はありません-セッション、学生、シンパサイザーは理解します)、オペレーターの言うことを記憶し、分析し、リマインダー、メモを保存する機能。 カントリーハウスには多くの人が横たわっているので、システム全体を別のマシンに配置します。良いスピーカー、マイク、モーションセンサーをcomポート経由で中継し、部屋に行って「スージー、ドアを閉めて、切って」エアコンとお気に入りの曲をつけて "またはそのような何か...ああ、それはなんてクールなんだ、それは気に。
トピックの写真を探していたときに、彼が理解していることを知っている、これに出会いました。
UPD
exeshnikでソースを投稿します: docs.google.com/file/d/0B1vVuifL615WVzNmQllOUGEwd00/edit?usp=sharing 以前に基地を埋める人がいるなら、私に投げてくれてとても感謝しています。 bydlocodeが存在する可能性については、理解してお許しください。