学習対話システムは最近、予想外の人気を得ています。 残念ながら、ニューラルネットワークの対話システムのフレームワーク内で行われたすべては、英語のために行われました。 しかし、今日はこのギャップを埋めて、モデルにロシア語を話すように教えます。
方法
まず第一に、私は単語ごとにテキストの生成を放棄することにしました。 これはクールですが、見た目ほど有用ではなく、さまざまな単語形式が多数あるロシア語では特に困難です。 その代わりに、私は大規模なデータベースから正しい答えを選択して行くことにしました。 つまり タスクは、提案が会話のコンテキストを考慮して適切な答えであるかどうかを決定するニューラルネットワークを作成することです。
その理由:
-単語を選択するために大きなsoftmaxレイヤーは必要ありません。つまり、テキストを分析する実際のタスクにより多くのニューラルネットワークリソースを割り当てることができます。
-結果として得られる比較モデルはさまざまな目的に適しています。理論的には、新しいトレーニングデータベースなしでテキストの新しいデータベースをダウンロードするだけで、チャットボットにさまざまな特別なトピックに関するコミュニケーションをとることができます。 これは実際に役立ちます。
-迅速に動作し、サーバー上に複数のGPUがなくても多くのユーザーと同時に実際に通信できるモデルを作成できます。
なぜ
一般に、一般的なトピックベースの対話システムは、たとえばオンラインコンサルタントで役立ちます。そのため、コンサルタントは、メインタスク、ゲーム、および他の多くのタスクに関係のないトピックについて話すことができます。
なぜニューラルネットワークなのか?
より古典的な方法でタスクにアプローチすることは可能ですか? データベースに一連の回答をダウンロードし、前のフレーズのフルテキストインデックスを探しますか? 答えは、これを行うことができますが、結果はあまり良くありません。 言いましょう:
W:こんにちは!
K:グレッグ、マリア、これはアリだ...
W:お元気ですか?
K:隣の部屋、ムッシューから騒音の苦情を受けました
W:お名前は?
K:ありがとう、ありがとう。
W:あなたは何歳ですか?
K:近くのどこかに住んでいますか...?
回答の大きなデータベースを検索すると多くの結果が得られますが、それらの関連性は小さいため、ダイアログの品質はやや劣ります。 これがニューラルネットワークが私たちを助けるべき場所です-それで私たちは悪いものから良い答えをソートします。
トレーニング用のデータの入手先:
多くの人にとって最もつらい質問です。 こことここの人々は映画の字幕のベースを取っています。 ロシア語にはこのようなベースが存在しますが、サイズは小さくなります。 しかし、このベースの大きな問題は、多くの独白、さまざまなごみが含まれていることと、対話を互いに分離することが難しいことです。
そのため、私は別の道を選択し、字幕に加えて、公開されている書籍からダイアログを収集することにしました。 初心者の作家やあらゆる種類のファンフィクションの著者は、信じられないほどの量の情報を作成しているので、それを使用しないのは罪です。 もちろん、このようなナンセンスはたくさんあります。 その過程で、私は必然的にこれを読まなければならず、私の頭はセルゲイとセーラームーン(同じ考えを持っていた!)の長い会話から腫れ上がった。 しかし、一般的に、これは字幕よりも優れたベースですが、収集はそれほど簡単ではありませんが、時間を費やす必要があります。
建築
想像力にはかなりの範囲があります。 簡単なオプションから始めて、複雑なオプションに移って、さまざまな機能の本当の利点を理解しました。 記事では、人々は通常それを冷やして新しいガジェットを取り付けようとしますが、このエリアが新しいという事実のために、この利点は必ずしも明白ではありません。
最も単純なモデルは、コンテキストと応答ワードベクトルのシーケンスを組み合わせて、すべてを通常の完全に接続されたレイヤーに送ります。 答えは長さが異なるため、固定長のベクトルに書き込み、「余分な」場所をゼロで埋めます。 これは悪いと考えられています。 見てみましょう。
2番目のオプションは、コンテキストと回答を「混合」する前に、プレゼンテーションを形成するために「独自の」レイヤーが与えられるという点で異なります。 さて、さらにいくつかの処理層があるかもしれません、図は2つを示しています。
3番目のオプションは、再帰的LSTMエンコーダーを使用して、異なる長さのシーケンスをエンコードします。 はるかに遅く、学習に時間がかかります。 しかし、うまく機能するようです。
図1 ニューラルネットワークアーキテクチャ
結果
いくつかの提案されたオプション(ランダムに選択された回答)から正解を選択する機能により、それぞれ700ニューロンのデータを分析するための5つのレイヤー(700ニューロンの入力データの表現の+1レイヤー)で、モデル番号2で最良の結果が示されました。 このような深いネットワークをトレーニングするには、ハイウェイレイヤーを使用する必要がありました。これにより、下位レイヤーから上位レイヤーへの情報の拡散が容易になり、モデルがGPUで計算されるまで数日待つ必要がありました。 モデル番号1は明らかに教育水準が低く、3番は長い間考えていましたが、モデル番号2の結果には数パーセントも到達しませんでした。 これは、最も単純なモデルは大量のデータには適していませんが、必要以上にエンティティを増やすべきではないという事実を思い出させます。
結果として得られるシステムのベースはレプリカの3,000万ペアであり、ニューラルネットワークには約300万の訓練されたパラメーターがあります。
その結果、どのような対話が得られますか?
H:こんにちは
K:こんにちは。
C:元気ですか?
K:分からない。
C:あなたの名前は?
K:私の名前はユーニスです。
C:あなたは何歳ですか?
K:15。
C:どこに住んでいますか?
K:家で。
W:あなたは学校にいますか?
K:いいえ
W:どこで勉強していますか?
K:ドイツ連邦軍で。
C:音楽は好きですか?
K:はい、音楽が大好きです。
C:どんな音楽が好きですか?
K:私は主にR&B、ファンクを聴いています。
C:あなたは神を信じていますか?
K:私はまだ神を信じている、老人
W:道徳とは何ですか?
K:二人一緒に-それは道徳ではないですか?
W:海は何色ですか?
K:嵐の後の海の色。
私の意見では十分です。 別の例を次に示します。
C:カバはどこに住んでいますか?
K:住んでいた
C:何、今は生きていないの?
K:わかりません。
W:それから彼は以前どこに住んでいたの?
K:公園のそば、メープルストリート。
W:彼はどこへ行ったの?
K:彼はどこへ行ったの?
W:彼にどこに行ったの?
K:なぜ再び病院にいるのか分かりません。
W:病気だから
K:人々を助けたいだけです。
C:それから、カバの場所を教えてください!
K:どうしてそんなに知りたいの?
W:答えてくれ
K:あなたの家族に別れを告げるのを手伝ってほしいですか?
W:これは脅威ですか?
K:観察
C:結局のところ、カバはどこにいるのでしょうか?
K:彼はハワイにいますが、Rajがここから決まります
C:Rajは誰ですか?
K:彼に会わなかった?
H:いいえ、決して
K:夫と妻が住んでいたが、夫だけが毎晩姿を消した。
このボットとライブで会話するにはどうすればよいですか?
ボットが配置されているサーバーと通信するAndroidアプリケーションを作成しようとしました。 アプリケーションは未加工で、テスト段階にあります。インストールするには、ベータテスターのグループに参加する必要があります。
plus.google.com/u/0/communities/103302070341792486151
その後、以下を使用してインストールできます。
play.google.com/apps/testing/mindy.bot
PS
このアプリケーションの機能は現在研究中です。 お金はかからず、広告も表示しません。 アプリケーションは単純化されたモデルを使用しますが、サーバーの負荷を軽減します。
PPS
モデルが英語でコミュニケーションをとろうとする場合は、ロシア語で答えると、彼女は間違いを訂正します。
plus.google.com/u/0/communities/103302070341792486151
その後、以下を使用してインストールできます。
play.google.com/apps/testing/mindy.bot
PS
このアプリケーションの機能は現在研究中です。 お金はかからず、広告も表示しません。 アプリケーションは単純化されたモデルを使用しますが、サーバーの負荷を軽減します。
PPS
モデルが英語でコミュニケーションをとろうとする場合は、ロシア語で答えると、彼女は間違いを訂正します。
結論:
面白かった。 ただし、トレーニングデータの品質はまだ不十分です。 モデルの開発には、よりリアルな対話を収集することが有用です。 それにもかかわらず、かなり合理的な回答を得るために、回答を選択するためのテンプレートとルールを手動で作成する必要がないため、結果は有望です。