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


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

Source: https://habr.com/ru/post/J181998/


All Articles