ディープラーニングを使用して、あなたのようにチャットできるロボットをトレーニングするにはどうすればよいでしょうか?

ディープラーニングを使用して、あなたのようにチャットできるロボットをトレーニングするにはどうすればよいでしょうか?

[[201242]]

チャットボットとは一体何でしょうか? 簡単に言えば、音声またはテキスト方式で会話を行うコンピューター プログラムです。現在最も人気のある 4 つの会話型ロボットは、Apple の Siri、Microsoft の Cortana、Google Assistant、Amazon の Alexa です。スコアの確認や電話のかけ方などは手伝ってくれますが、もちろん、時々間違いを犯すこともあります。

この記事では、チャットボットがテキストに対してどのように機能するかについて詳しく説明します。ディープラーニング モデルを使用してチャットボットをトレーニングし、希望どおりにソーシャル メディアで会話を行う方法を説明します。

意図とディープラーニング

高レベルのチャットボットをトレーニングするにはどうすればいいですか?

高レベルで機能するチャットボットは、与えられたメッセージに対して最適な応答を返す必要があります。この「最善の」応答は、次の要件を満たす必要があります。

  • 相手の質問に答える
  • フィードバック関連情報
  • フォローアップの質問をしたり、現実的な方法で会話を続けたりする

これら 3 つの側面はロボットが表現するものであり、暗黙的で表現されていないのは、送信者の意図を理解し、フィードバック情報の種類を決定し (フォローアップの質問をするか、直接応答するかなど)、正しい文法と語彙のルールに従うという一連のプロセスです。

「意図」という言葉が重要であることに注意してください。意図を明確にすることで、その後のプロセスがスムーズに進むことが保証されます。 「意図」に関しては、この記事を通じて、ディープラーニングが「意図」の問題を解決するための最も効果的な方法の 1 つであることが読者にはわかるでしょう。

ディープラーニング手法

チャットボットが使用するディープラーニングモデルはほぼすべてSeq2Seqです。 2014 年に、Ilya Sutskever、Oriol Vinyals、Quoc Le が「ニューラル ネットワークによるシーケンス間学習」という論文を発表しました。要約すると、機械翻訳はうまく機能しているものの、Seq2Seq モデルはさまざまな NLP タスクをより適切に完了できることが示されています。

Seq2Seq モデルは 2 つの主要コンポーネントで構成されます。1 つはエンコーダー RNN、もう 1 つはデコーダー RNN です。大まかに言えば、エンコーダーの役割は、入力テキスト情報の固定表現を生成することです。デコーダーはこの表現を受け取り、それに応じて可変長のテキストを生成します。

これがどのように機能するかをより詳細に見てみましょう。ご存知のとおり、エンコーダー RNN には多くの隠れ状態ベクトルが含まれており、各ベクトルは前のタイムステップから取得された情報を表します。たとえば、ステップ 3 の隠れ状態ベクトルは、前の 3 つの単語の関数です。このロジックによれば、エンコーダー RNN の最終的な隠し状態ベクトルは、入力テキスト全体のかなり正確な表現と見なすことができます。

デコーダー RNN は、エンコーダーから最終的な隠し状態ベクトルを取得し、それを使用して応答の出力ワードを予測する役割を担います。最初のユニットを見てみましょう。ユニットの役割は、ベクトル表現 v を使用して、その語彙内のどの単語が出力応答に最も適しているかを決定することです。数学的には、語彙内の各単語の確率を計算し、最大尤度を持つ値を選択することを意味します。

2 番目のユニットはベクトル表現 v の関数であり、これは前のユニットの出力でもあります。 LSTM の目的は、次の条件付き確率を推定することです。

この方程式が何を意味するのか分析してみましょう。

左側は、入力シーケンスが与えられた場合の出力シーケンスの確率を示します。右側には、ベクトル表現と前のステップの出力を条件とするすべての単語の確率ベクトルであるp(yt|v,y1,…,yt)が含まれます。ここで、π はシグマ (または累積和) による乗算に相当します。右辺はp(Y1|V)*p(y2|v,y1)*p(Y3|v,y1,y2)に簡約できます。

先に進む前に、簡単な例を見てみましょう。最初の画像に「明日は空いていますか?」というテキストを入力してみましょう。ほとんどの人はどのように答えるでしょうか?通常は「はい」、「うん」、「いいえ」で始まります。

ネットワークのトレーニングが完了すると、確率 p(Y1 | V) は以下の分布に似たものになります。

計算する必要がある 2 番目の確率を見てみましょう。p(y2 | v, y1) は単語分布 y1 とベクトル表現 v の関数であり、pi は最終応答として最終結果を生成します。

Seq2Seq モデルの最も重要な機能の 1 つは、それが提供する汎用性です。従来の ML 手法 (線形回帰、サポート ベクター マシン) やディープ ニューラル ネットワークなどのディープラーニング手法を考えると、これらのモデルでは固定サイズの入力が必要であり、固定サイズの出力が生成されます。ただし、入力の長さは事前に知っておく必要があります。これは、機械翻訳、音声認識、質問応答などのタスクにとって大きな制限となります。これらのタスクでは、入力フレーズのサイズがわかりません。また、特定の出力表現に制限されるのではなく、可変長の応答を生成できるようにする必要があります。 Seq2Seq モデルではこのような柔軟性が可能になります。

2014 年以降、Seq2Seq モデルには多くの改良が加えられており、詳細については、この記事の最後にある「関連論文」のセクションで読むことができます。

データセットの選択

機械学習をあらゆる種類のタスクに適用することを検討する場合、最初に行う必要があるのは、データセットを選択し、必要なモデルをトレーニングすることです。シーケンス モデルの場合、多くのセッション ログが必要になります。大まかに言えば、このエンコーダー/デコーダー ネットワークは、各クエリ (エンコーダー入力) に対して期待される応答の種類 (デコーダー出力) を正しく理解できる必要があります。一般的なデータセットには、Cornell Movie Dialogue Corpus、Ubuntu Corpus、Microsoft の Social Media Dialogue Corpus などがあります。

ほとんどの人は、チャットボットを特定のメッセージに返信したり、何らかのサービスを提供したりするようにトレーニングしていますが、私はもっと楽しいアプリケーションに興味があります。この投稿では、実際の会話ログを使用して、Seq2Seq モデルをトレーニングし、メッセージへの応答を学習できるかどうかを確認したいと考えました。

データを取得

大量の会話データを作成する必要があり、ソーシャル メディアでは Facebook、Google Hangouts、SMS、Linkedin、Twitter、Tinder、Slack を使用して人々とのつながりを維持しています。

  • Facebook: トレーニング データのほとんどはここから得られます。 Facebook には、Facebook データをすべてダウンロードできる便利な機能があります。すべての情報、写真、履歴が含まれています。
  • ハングアウト: この記事の手順に従ってチャット データを抽出できます。
  • SMS: 以前のチャットをすべてすばやく取得することは可能です (Sms Backup+ は優れたアプリです) が、私は SMS をほとんど使用しません。
  • Linkedin: Linkedin では、データのアーカイブを取得するためのツールが提供されています。
  • Twitter: ここには個人情報が足りません。
  • Tinder: これらの会話はデータセットではありません。
  • Slack: Slack を使い始めたばかりで、手動でコピーする予定のプライベート メッセージはわずかしかありません。

データセットを作成する

データセットの作成は、データセットの前処理を伴う機械学習の重要な部分です。これらのソース データ アーカイブはさまざまな形式であり、不要な部分 (fb データの画像部分など) が含まれています。

ご覧のとおり、ハングアウト データの形式は Facebook データとは少し異なりますが、LinkedIn メッセージは CSV 形式です。私たちの目標は、これらすべてのデータセットを使用して、(FRIENDS_MESSAGE、YOUR_RESPONSE) という名前の統合ファイルを作成することです。

これを実現するために、ここで参照できる Python スクリプトを作成しました。このスクリプトは 2 つの異なるファイルを作成します。そのうちの 1 つは、すべての入力と出力のペアを含む Numpy オブジェクト (conversationDictionary.npy) です。もう 1 つは、これらの入力と出力のペアの文形式がそれぞれ 1 つずつ含まれている大きな txt ファイル (conversationData.txt) です。通常、私はデータセットを共有するのが好きですが、この特定のデータセットについては、プライベートな会話が多数含まれているため、非公開にしておきます。これは最終データセットのスナップショットです。

単語ベクトル

LOL、WTF、これらはすべて、会話データ ファイルに頻繁に出現する単語です。これらはソーシャル メディアの分野では一般的ですが、従来のデータセットの多くには存在しません。多くの場合、NLP タスクに取り組むときの私の最初の本能は、大規模なコーパスで多数の反復処理を行ってトレーニングできるため、事前トレーニング済みのベクトルを単純に使用することです。ただし、事前にトレーニングされた単語ベクトルの一般的なリストには含まれていない単語や略語が非常に多いため、単語が正しく表現されるようにするには、独自の単語ベクトルを生成することが重要です。

単語ベクトルを生成するために、word2vec モデルの古典的なアプローチを使用しました。基本的な考え方は、文中で単語が現れる文脈を観察することによって、モデルが単語ベクトルを作成することです。ベクトル空間では、同様の文脈を持つ単語が近くに配置されます。 word2vec モデルの作成とトレーニング方法のより詳細な概要については、私の親友の 1 人である Varma Rohan によるこのブログ投稿をご覧ください。

後で知ったのですが、TensorFlow の Seq2Seq 関数は単語埋め込みを最初からトレーニングするので、それらの単語ベクトルは使用しませんが、それでも良い練習になります。

TensorFlow で Seq2Seq モデルを作成する

データセットを作成し、単語ベクトルを生成したので、Seq2Seq モデルのコーディングに進むことができます。私は Python スクリプトでモデルを作成し、トレーニングしました。コードにコメントを付けてみましたので、皆さんも理解できると思います。このモデルの鍵となるのは、TensorFlow のembedding_RNN_seq2seq() 関数です。ドキュメントはここから見つかります。

トレーニングの進捗状況の追跡

このプロジェクトの興味深い点の 1 つは、ネットワークがトレーニングされるにつれて応答がどのように変化するかを確認できることです。トレーニング ループ中に、入力文字列でネットワークをテストし、すべての非 pad および非 eos トークンを出力しました。

まず、ネットワークがパディングと EOS パスフレーズを繰り返し出力するため、応答がほとんど空白であることがわかります。パディング パスワードはデータセット全体で最も一般的なパスワードであるため、これは正常です。すると、ネットワークがすべての入力文字列に対して「Haha」を出力し始めることがわかります。これは直感的に納得できます。なぜなら、「ハハハ」は頻繁に使われるので、ほとんど何に対しても受け入れられる返答だからです。徐々に、より完全な考えや文法構造が応答の中に現れ始めます。適切にトレーニングされた Seq2Seq モデルがあれば、Facebook メッセンジャー チャットボットを構築できます。

シンプルなFBメッセンジャーチャットボットの構築方法

すべての手順を完了するのに 30 分もかからなかったため、プロセスはそれほど難しくありませんでした。基本的な考え方は、シンプルな Express アプリを使用してサーバーをセットアップし、それを Heroku にインストールしてから、接続する Facebook ページをセットアップすることです。しかし最終的には、次のような Facebook チャット アプリが完成するはずです。

チャットボットにメッセージを送信できます (この初期動作は、送信されたすべてのメッセージに応答するだけです)。

トレーニング済みのTensorFlowモデルをデプロイする

さあ、すべてをまとめる時が来ました。 Tensorflow と Node の間に適切なインターフェースが見つからなかったため (公式にサポートされているラッパーがあるかどうかはわかりません)、Slack サーバーを使用してモデルをデプロイし、チャットボットの表現がそのモデルと対話できるようにすることにしました。ここでは、Slack サーバーのコードとチャットボットの index.js ファイルを表示できます。

テストしてみましょう!

このボットとチャットしたい場合は、このリンクをクリックするか、Facebook ページをクリックしてメッセージを送信してください。サーバーの起動が必要なため、最初の応答には時間がかかる場合があります。

ボットが実際に私のように話しているかどうかはわかりにくいかもしれませんが (オンラインで話す人は多くないので)、かなりうまくやってくれます! 文法はソーシャル メディアの標準を考慮すると合格点です。いくつか良い結果を選ぶこともできますが、ほとんどはかなりばかげています。 Skynet をいつでも使用できないため、これにより夜ぐっすり眠れるようになりました。

最初のものは特に興味深いと思いました。なぜなら、「Juju Green」は実際にはスティーラーズのワイドレシーバーであるジュジュ・スミス・シュスターと、ゴールデンステート・ウォリアーズのフォワードであるドレイモンド・グリーンを指しているように思われるからです。面白い組み合わせですね。

現在のパフォーマンスはあまり良くありませんが。改善方法を考えてみましょう!

改善方法

チャットボットとのやり取りからわかることを改善する方法には、改善の余地がまだたくさんあります。数回のメッセージのやり取りをすると、ただ会話を続けるだけでは十分ではないことがすぐに明らかになります。チャブトットは考えをつなげることができず、返答の一部はランダムで支離滅裂に思えます。チャットボットのパフォーマンスを向上させる方法をいくつか紹介します。

  • 追加のデータセットを組み込むことで、ネットワークがより大きな会話のコーパスから学習できるようになります。これにより、チャットボットは厳密にトレーニングされているため、「個性」が失われます。しかし、より現実的な会話を生み出すのに役立つと信じています。
  • エンコーダー メッセージがデコーダー メッセージと無関係なシナリオを処理します。たとえば、1 つの会話が終了したら、翌日に新しい会話を開始します。会話の話題は全く関係ないかもしれません。これはモデルのトレーニングに影響する可能性があります。
  • 双方向 LSTM、アテンション メカニズム、ソケットを使用します。
  • LSTM ユニットの数、LSTM レイヤーの数、オプティマイザーの選択、トレーニング反復回数などのハイパーパラメータを最適化します。

あなたのようなチャットボットをどうやって構築するのか、そのプロセスのレビュー

ここまで読んできた方は、チャットボットを作成するために何が必要か大まかに理解しているはずです。最後の手順をもう一度見てみましょう。詳細な手順は GitHub リポジトリに記載されています。

  • 誰かと話したことのあるソーシャル メディア サイトをすべて見つけて、データのコピーをダウンロードします。
  • CreateDataset.py または独自のスクリプトからすべての (メッセージ、応答) ペアを抽出します。
  • (オプション) Word2Vec.py を使用して、会話に現れる各単語の単語ベクトルを生成します。
  • Seq2Seq.py でシーケンス モデルを作成、トレーニング、保存します。
  • Facebook チャットボットを作成します。
  • Flask サーバーを作成し、保存した Seq2Seq モデルをそこにデプロイします。
  • インデックス ファイルを編集し、Flask サーバーと通信します。

<<:  人工知能業界の給与が明らかに、転職の時期が来た

>>:  Javaで機械学習を始める方法

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

Facebook、ロボット開発プラットフォームDroidletをオープンソース化

最近、Facebook は、自然言語処理とコンピューター ビジョンを使用してロボットが周囲の世界を理...

インターネット技術起業家は、2 つのセッションで提案を行う際にどのような点に重点を置いていますか?

[[258735]] 3月3日、毎年恒例の全国「両会」が正式に始まりました。「両会」シーズンが始ま...

...

初心者必読: 5 つの反復レベルから機械学習を理解する

このなぞなぞの答えを推測できますか?機械学習を学べば、どこにでも登場します...プログラマーであれば...

...

2021年のAI展望

人工知能は進歩し続け、企業の運営方法や私たち自身の日常の経験を変えています。実際、AI はほぼすべて...

2023年の7つの主要なAI技術トレンド

人工知能は現在世界を席巻しており、サプライチェーンの完全な自動化、仮想アシスタンスの提供などにより、...

高度な機械学習ノート 1 | TensorFlow のインストールと開始方法

[[185581]]導入TensorFlow は、DistBelief に基づいて Google が...

小売業界におけるロボットの応用は何ですか?

巨大食品店で溢れかえった商品を見つける高さ6フィートの自由に動くロボットから、ウォルマートの在庫をチ...

汎用人工知能までどれくらい遠いのでしょうか?

汎用人工知能はどのくらい遠いのでしょうか? どのくらいの速さで進歩しているのでしょうか? 現在、人間...

...

自動運転は飛躍的な進歩を遂げており、マスク氏は年内にL5レベルの自動運転が実現すると発言した。

自動運転技術は、世界中の大手自動車メーカーの主要な研究開発方向となっています。現在、多くの自動車メー...

過去 2 週間で AI の進路を変える可能性が最も高い 6 つのリリース!

編纂者:ヤン・ジェン制作:51CTO テクノロジースタック(WeChat ID:blog)過去 2 ...

AI を活用したスマートビルの構築: これはまだ始まりに過ぎない

[[381380]]人工知能 (AI) はスマートビル管理の究極の未来と考えられていますが、それが定...

適切な AI データ ストレージを選択するための 6 つの考慮事項

間違ったストレージ AI プラットフォームを採用すると深刻な影響が生じる可能性があるため、製品の選択...