訪問者への注意事項:
python3 manage.py runserver
を実行するだけです。この方法での flask の実行に慣れていない場合は、Flask-Script のドキュメントを参照してください。ご迷惑をおかけして申し訳ありません。2017 年 5 月 9 日時点で、プロジェクトの主なパッケージは次のとおりです。
python3 manage.py runserver
ユーザー/開発者の観点から見ると、このプロジェクトは、シーケンス間モデルを操作するためのよりクリーンなインターフェイスを提供します。理想的な結果は、Keras の可読性を備えながら、TensorFlow に近い柔軟性を備えたチャットボット API です。
「クライアント」側では、モデル パラメーターを操作して実行することは、構成 (yaml) ファイルを作成し、Python インタープリターを開いて、いくつかのコマンドを発行するのと同じくらい簡単です。たとえば、次のスニペットは、設定を使用して (もちろんダウンロード後) コーネル データセットでトレーニングを開始するために必要なすべてです。
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
これは、プロジェクトと連携するための 1 つの方法にすぎません。たとえば、ユーザーはコマンドライン引数を介してパラメータを渡すこともでき、これは同様に指定した構成ファイルとマージされます (競合する場合はコマンドライン引数が優先されます)。以前に保存したチャットボットの場所を渡して、トレーニングを再開したり、会話を開始したりすることもできます。詳細については、 main.py
参照してください。
Ubuntu Dialogue Corpus: 前処理アプローチは、ノートブック フォルダーの ubuntu_reformat.ipynb で確認できます。データセットの使用目的は、マルチターン対話の応答ランキングですが、発話ペアを抽出し、エンコーダとデコーダの入力に対応する単一の文から単一の応答として解釈するという、かなり単純なアプローチを採用しました。 、それぞれモデル内で。
Cornell Movie-Dialogs: 私は、この前処理されたバージョンの Cornell コーパスから始めて、ノイズを減らすために若干の修正を加えました。
Redditのコメント: redditのコメント数は17億件。現在、前処理を行って、この膨大なデータセットを会話モデルのトレーニングに適した形式に縮小することに取り組んでいます。完了したら、処理されたデータセットのダウンロード リンクを掲載します。
DynamicBot:model_components.py のカスタム クラスによって提供される、よりオブジェクト指向のアプローチを使用します。その結果、オンラインでバッチ連結された埋め込みが高速になり、より自然なチャット アプローチが実現します。 TensorFlow 1.0 リリースの (素晴らしい) 新しい Python API、特に Dynamic_rnn を利用します。また、適切な変数スコープの実践と、ドキュメントやソース コードで観察した一般的な tensorflow 規約にも準拠しており、TensorBoard でのきれいなグラフ視覚化などの優れた副作用があります。
SimpleBot: 以下のより複雑な「ChatBot」モデルに基づく単純化されたバケット化モデル。バケット パーティションのカスタマイズの柔軟性が低く、サンプリングの代わりに完全なボキャブラリに対してスパース ソフトマックスを使用しますが、その実装ははるかに透過的です。 ChatBot とは対照的に、tf.contrib の使用は最小限であり、主に基本的な tensorflow メソッドに依存するという意味で、多かれ少なかれ「スクラッチ」から実装されます。 TensorFlow を初めて使用する場合は、その実装を読んで tensorflow プログラミングの一般的な規約の感覚をつかむと役立つかもしれません。これは、私が ChatBot のすべてのメソッドのソース コードを読み、よりコンパクトな独自のコードを書いた結果であるためです。解釈。
ChatBot: この TensorFlow チュートリアルで説明されているモデルの拡張バージョン。アーキテクチャの特徴: バケット化された入力、デコーダはアテンション メカニズムを使用します (私のノートの 69 ページを参照、入力は tf.contrib ライブラリで提供される単純な関数で埋め込まれます。また、サンプリングされたソフトマックス損失関数を採用して、より大きな語彙サイズを可能にします (ページ追加のコメント: バケット化されたモデルの性質により、他のモデルに比べてモデルの作成に時間がかかります。主なボトルネックは、最大のバケットのサイズと勾配操作の方法であるようです。バケットのサイズに基づいて作成されます。
Web ページ ディレクトリは、Flask アプリケーションに TensorFlow モデルをデプロイするためのシンプルでスペース効率の高い方法を示しています。モデルは「凍結」されます。チャットに必要のないコンポーネント (オプティマイザーなど) はすべて削除され、残りの変数はすべて定数に変換されます。ユーザーがモデル名をクリックすると、そのモデルの REST API が作成されます。ユーザーがフォームに文を入力すると、(AJAX) POST リクエストが発行され、応答はチャットボットの応答文になります。 REST API の詳細については、views.py を参照してください。
Flask アプリケーションは、アプリケーションのインスタンス化にブループリントを使用したり、アプリケーション環境 (開発または運用など) に応じて異なるデータベースを使用したりするなど、ベスト プラクティスに従います。
ここでは、モデルがどのように構築され、どのように視覚化できるかについて詳しく説明します。このセクションは進行中の作業であり、まだ完了していません。
feed_dict
引数を使用してモデルにデータ バッチを入力する代わりに、グラフ構造自体で入力情報と前処理技術をエンコードする方が大幅に高速になります。これは、トレーニング時にモデルに何も供給しないことを意味します。むしろ、モデルは一連のキューを使用して Google の protobuf 形式のファイルからデータにアクセスし、ファイルをテンソル シーケンスにデコードし、シーケンスを動的にバッチ化してパディングし、これらのバッチを埋め込みデコーダーにフィードします。すべてはグラフ構造内にあります。さらに、このデータ処理は複数のスレッドによって並行して調整されます。テンソルボード (および変数スコープのベスト プラクティス) を使用して、このタイプのパイプラインを高レベルで視覚化できます。
(詳しい説明は近日公開予定です!)
これらのモデルについては多くの研究が行われており、最も「重要な」論文に関するメモをここのディープラーニング ノートの最後のセクションに文書化しています。このメモには、論文の内容を TensorFlow コードに変換する方法も含まれています。より多くの論文からのアイデアがこのプロジェクトに反映されたら、それを更新するつもりです。
論文:
オンラインリソース: