チャットボットを訓練する方法


10

私はニューラルネットワークの実験を開始したかったし、おもちゃの問題として、チャットするようにトレーニングしたかった、つまりcleverbotのようなチャットボットを実装したかった。とにかくそんなに賢くない。

ドキュメントを探してみたところ、一般的なタスクに関する多くのチュートリアルが見つかりましたが、この特定のトピックについてはほとんど見つかりませんでした。私が見つけたものは、実装について洞察を与えることなく結果を公開しただけです。実行したものは、かなり浅いものでした(seq2seqのテンソルフローのドキュメントページには、imhoが不足しています)。

さて、おおむね原理は理解できたと思うのですが、どうすればいいのかよくわかりません。したがって、私は問題にどのように取り組むかを説明し、この解決策についてのフィードバックを希望します。どこが間違っているのか、そしてプロセスに関する詳細な説明と実用的な知識へのリンクがあるかもしれません。

  1. タスクに使用するデータセットは、私のすべてのFacebookとwhatsappのチャット履歴のダンプです。どれくらいの大きさかはわかりませんが、それでも十分な大きさではありません。ターゲット言語は英語ではないため、意味のある会話サンプルをどこにすばやく収集できるかわかりません。

  2. 各文から思考ベクトルを生成します。それでも実際にはどうなのかわからない。deeplearning4jのウェブサイトでword2vecの良い例を見つけましたが、文の例はありません。単語ベクトルがどのように構築されるのか、またその理由は理解できましたが、文ベクトルの完全な説明は見つかりませんでした。

  3. 入力と出力として思考ベクトルを使用して、ニューラルネットワークをトレーニングします。いくつのレイヤーが必要か、どのレイヤーがlstmレイヤーでなければならないかはわかりません。

  4. 次に、思考ベクトルを文を構成する文字のシーケンスに変換できる別のニューラルネットワークが必要です。異なる文の長さを補うにはパディングを使用する必要があると読みましたが、文字をエンコードする方法がありません(コードポイントで十分ですか?)。

回答:


7

私はこのブログ投稿を読むことから始めることをお勧めします。コードを共食いさせて、会話の1つのステートメントを取り込んでから、そのステートメントへの回答を出力するRNNを作成することができます。

それはあなたのプロジェクトの簡単なバージョンで、すべて単語ベクトルと思考ベクトルがありません。あなたは文字を入力しているだけなので、タイプミスは気にする必要はありません。

次のより複雑なステップは、文字ではなく単語ベクトルを入力することです。これにより、トレーニングデータの一部ではない単語に一般化できます。そして、それはおそらくまだコードの小さな変更です。

思考ベクトルの使用を主張する場合は、NN翻訳について読み始める必要があります。そして、おそらく事前トレーニング済みのエンコーダネットワークを取得してみてください。または、自分の言語の大規模な翻訳コーパスで事前にトレーニングします。

小規模なトレーニングセットでは、システムがトレーニングデータを逐語的に再作成するまで、できる限りのベストを尽くします。単語ベクトルを使用すると、システムは「今日は猫を倒した」と同じ答えを出すことができます。「昨日犬を蹴った」というトレーニングデータで説明したとおりです。

ベクトルが大きな違いを生むとは思いません。あなたがデコーダーを学ぶようになれば。


私は少し前に最初の記事をすでに読んでおり、文字は抽象化の適切なレベルではないと感じています。ワードベクトルを1つずつ使用することは考えていませんでしたが、これも興味深い方法で、それほど複雑ではありません。私はこの論文を読みます。これはおそらく私が読んだものです...
トーテム2016

使用するボットコアを見つけました...しかし、テキストの生成に行き詰まっています。ai.stackexchange.com/questions/5963/…ベクトルと学習率にもかかわらず、私が疑問に思っているのは、それでもまだ機能していないはずです...これは、私が使用しているライブラリの欠点になるのではないかと心配しています。使用していますが、300のレイヤーサイズではそれが可能ではないと思います...または、必要なトレーニングの量はレイヤーのサイズに関連していますか?任意の助けいただければ幸いです。使用しているライブラリに注意してください。
FreezePhoenix 2018

0

あなたのプロジェクトのコンセプトに従って、まず第一に、いくつかのテスト駆動開発手法を適用するようにお願いします。まず、少量のデータセットを処理するために使用できる、より小さなサイズのデータ​​ベースを作成してみます。これにより、望ましい改善が得られます。

つまり、そのデータベースを使用して、データとしてノードとして整理されたツリーを作成します。したがって、ボットがデータベースから、指定されたデータセットからのデータポイントでマークされたフィードバックを生成し始めた場合、フィードバックも回答も方法です。ツリーの次のノードに。

:初心者の場合、これは単純なタスクであるため、全体として大きなチャット履歴を使用しないでください。入力が多すぎる==過剰適合。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.