今日でも、人間のコミュニケーションをシミュレートするプログラムを作成することが重要です。 最も単純なコミュニケーションモデルは、それらに対する質問と回答のベースです[1]。 この場合、知識ベースとインタープリタープログラムの実装を記述する問題が発生します。 ナレッジベースのマークアップ言語には、質問パターンと対応する応答テンプレート、それらへの対話の背景、および対応するコミュニケーションのトピックの名前を含めることができます。
Chatbotは、音楽、写真、事実、電卓、天気予報、通貨レートの表示などの追加機能を実行できます。 これらの機能のほとんどはインターネット上に実装されており、外部APIとして利用できます。
仮想対話プログラムを作成する別の方法は、通信ダイアログ、つまり人工ニューラルネットワークに基づく機械学習アルゴリズムを使用することです。 適切なANNモデルは、さまざまなシーケンスを保存、一般化、および予測できるリカレントニューラルネットワークです。 この論文では、質問と回答の知識ベースの単語に対応するインデックスをシーケンスの要素として使用することを提案します。
エイム
知識ベースをマークアップするための形式の1つは、AIML(人工知能マークアップ言語)マークアップ言語標準です。 言語のキーワードは、カテゴリ、パターン、およびテンプレートです。
<aiml> <category> <pattern>! ?</pattern> <template> <random> <li>. .</li> <li>. . ?</li> </random> </template> </category> </aiml>
カテゴリタグは、質問と回答のテンプレートを格納するパターンおよびテンプレートタグの親です。 ランダムタグを使用すると、インタプリタがランダムに選択した質問に対する複数の回答を指定できます。 作業では、会話の履歴とトピックに対応する追加のタグを導入することが提案されています。
<aiml> <category> <pattern> ?</pattern> <pattern> ?</pattern> <template> <random> <li> .</li> <li> .</li> </random> </template> <history>! ? . .</history> <theme></theme> </category> </aiml>
いくつかのパターンタグを使用すると、このカテゴリに対応するさまざまな質問のバリエーションを記述できます。その後に同じ回答オプションを続ける必要があります。 履歴タグは、この質問に先行するダイアログの履歴を保存します。 テーマタグには、会話トピックの名前が格納されます。 これらのタグにより、インタプリタは対話の背景とコミュニケーションのトピックに一致する質問パターンを選択でき、チャットボットのコミュニケーションシミュレーションの品質の改善に影響を与えるはずです。
マークアップ言語インタープリターを使用すると、相互に補完する以下の方法で最も関連性の高い質問を見つけることができます。
- 1.正規表現に基づいて質問のフレーズ全体を検索します。
- 2.質問とパターンで一致する単語の数で検索します。
- 3.一致する現在のトピックとカテゴリトピックを検索します。
- 4.現在の会話の先史時代とカテゴリの先史時代の一致する単語の数で検索します。
最適な一致を選択するための対応するアルゴリズムは、ソートアルゴリズムに基づいて形成されます。
sortMatches = allMatches.sort(function(a, b) { if(a.pattern == inputText && b.pattern != inputText) return -1; if(b.pattern == inputText && a.pattern != inputText) return 1; if(a.matches < b.matches) return 1; if(a.matches > b.matches) return -1; if(a.theme == bot.theme && b.theme != bot.theme) return -1; if(b.theme == bot.theme && a.theme != bot.theme) return 1; if(a.historyMatches < b.historyMatches) return 1; if(a.historyMatches > b.historyMatches) return -1; return 0; })
その結果、ソートされた一致配列の最初の要素が選択されます。
関連する回答の検索の品質を向上させるために、形態素解析モジュールが単語比較手順に導入され、単語の基本的な形式を見つけることができます。 このように、比較は単語の基本的な形式に基づいており、赤緯に関連する単語の不一致を排除します。
テーマ分類アルゴリズム
一部のカテゴリのみが定義されている場合、これらのカテゴリの名前を決定するアルゴリズムを使用することが提案されています。
- 1.テーマが定義されているカテゴリのセットをTとします。トピックが定義されていないカテゴリのセットはDです。これらのセットの要素は、パターンおよびカテゴリパターンのすべての値の文字列の和集合に関連付けられます。
- 2.たとえば、p = 70%の決定しきい値が導入されます。
- 3.集合Dの要素が順番にソートされ、集合Tの要素のサブセットVが選択され、pで一意の単語の割合が定義されます。
- 4. Vが空の場合、トピックはセットDの要素の行によって決定されます。
- 5. Vが空でない場合、この要素の行にある一意の単語の総数に対する一致する一意の単語の数の比率が最大になる要素がVから選択されます。 この要素Vの対応するテーマは、要素Dのテーマとして定義されます。
リカレントニューラルネットワーク
リカレントニューラルネットワークは、出力層のニューロンからの信号が入力層の追加のニューロンに到着する、いわゆる多層パーセプトロンの一種です。 コンテキストニューロン。
入力信号ベクトルはINPUTニューロングループに、CONTEXTニューロングループはゼロ信号になります。 さらに、信号は隠れたHIDDEN層のニューロンのグループに伝播し、それらによって変換されてOUTPUT出力層のニューロンに入ります。 次の反復で、INPUT信号ベクトルとともに、ニューロンのコンテキストグループは、最後の反復のOUTPUT出力層から信号のコピーを受け取ります(図1)。
図 1.リカレントニューラルネットワークの構造の一般的なビュー。文を記憶するためのリカレントニューラルネットワークの構造は次の形式になります。
CONTEXT、INPUT、およびOUTPUTレイヤーにはそれぞれ1つのニューロンがあり、その出力信号はワードセット内のワードインデックスにマップされます。 さらに、文の最後に対応する単語__end__が入力されます[2]。 ネットワークは、次の形式のオファーで順次トレーニングされます。
こんにちは お元気ですか? __end__こんにちは。 わかった __end__»
質問への回答は、次のスキームに従ってリカレントニューラルネットワークによって受信されます(図2)。
図 2.リカレントニューラルネットワークによる質問への回答の取得。HIDDENレイヤーのボリュームにより、一連の文全体を覚えることができます。 ネットワークは、逆伝播法によってトレーニングされます。
ソフトウェア実装
チャットボットプログラムは、Androidアプリケーションとして実装されました。 アプリケーションでは、いくつかのチャットボットモードを使用できます。
形態学的アナライザーとして、ロシアのAz.jsでテキストを処理するために無料のJavaScriptライブラリを使用しました。
リカレントニューラルネットワークを作成およびトレーニングするために、無料のJavaScriptライブラリRecurrentJSが使用されました。
すべてのモードで、ユーザーの質問言語に対する回答の自動翻訳は、Yandex Translate APIおよびBing Translate APIサービスに基づいて利用できます。 また、外部検索サービスは、カスタム検索APIとBing Image Search APIを使用します。 ナレッジ検索は、Google Knowledge Graph Search APIに基づいて実装されています。 音楽検索は、SoundCloud APIに基づいて実装されています。 計算機、天気予報、為替レート、時間は、Wolfram | Alpha APIに基づいて実装されています。
ChatBotは、
https://play.google.com/store/apps/details? id = svlab.chatbotのGoogle Playで利用でき
ます 。
おわりに
高度なAIMLマークアップとリカレントニューラルネットワークに基づいてチャットボットを構築するアルゴリズムが検討されています。 AIMLマークアップ拡張機能には、ダイアログのコンテキストに従って関連する質問と回答をより効率的に検索するための新しいテーマと履歴タグが含まれています。 カテゴリ内のトピックの名前を決定するために、トピックの一部のみが定義されている場合、トピックを分類するために発見的アルゴリズムを使用することが提案されています。 個々の単語の形態素解析のモジュールを使用して、それらを基本的な形式にすると、関連する回答の検索の品質を向上させることができます。 リカレントニューラルネットワークでは、ネットワークの一般化機能を使用して、知識ベースにない質問への回答を受け取ることができます。 ChatBotは、PlayストアのAndroidプラットフォームで利用できます。
文学
- 1. Provotar A.I.、Klochko K.A. チャットボットを使用した仮想通信の機能と問題//ヴィニツァ国立工科大学の科学作品。 2013. No. 3. P. 2。
- 2. Oriol Vinyals、Quoc Le A Neural Conversational Model // arXiv preprint arXiv:1506.05869、2015年7月22日。