リカレントニューラルネットワークとAIML言語拡張に基づくチャットボットアルゴリズム

今日でも、人間のコミュニケーションをシミュレートするプログラムを作成することが重要です。 最も単純なコミュニケーションモデルは、それらに対する質問と回答のベースです[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>
      
      





いくつかのパターンタグを使用すると、このカテゴリに対応するさまざまな質問のバリエーションを記述できます。その後に同じ回答オプションを続ける必要があります。 履歴タグは、この質問に先行するダイアログの履歴を保存します。 テーマタグには、会話トピックの名前が格納されます。 これらのタグにより、インタプリタは対話の背景とコミュニケーションのトピックに一致する質問パターンを選択でき、チャットボットのコミュニケーションシミュレーションの品質の改善に影響を与えるはずです。



マークアップ言語インタープリターを使用すると、相互に補完する以下の方法で最も関連性の高い質問を見つけることができます。





最適な一致を選択するための対応するアルゴリズムは、ソートアルゴリズムに基づいて形成されます。



 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; })
      
      





その結果、ソートされた一致配列の最初の要素が選択されます。



関連する回答の検索の品質を向上させるために、形態素解析モジュールが単語比較手順に導入され、単語の基本的な形式を見つけることができます。 このように、比較は単語の基本的な形式に基づいており、赤緯に関連する単語の不一致を排除します。



テーマ分類アルゴリズム



一部のカテゴリのみが定義されている場合、これらのカテゴリの名前を決定するアルゴリズムを使用することが提案されています。





リカレントニューラルネットワーク



リカレントニューラルネットワークは、出力層のニューロンからの信号が入力層の追加のニューロンに到着する、いわゆる多層パーセプトロンの一種です。 コンテキストニューロン。



入力信号ベクトルは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プラットフォームで利用できます。



文学






All Articles