シンプルなインタラクティブアシスタントを作成する



こんにちは、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が存在する可能性については、理解してお許しください。



All Articles