このリポジトリには、16のMyers-Briggs Personalityタイプのいずれかを取得できるチャットボットを開発するコードが含まれています。
チャットボットは、対応するsubreddit(たとえば、 INFJタイプのR/INFJなど)に属する投稿とコメントを使用して、各パーソナリティに対して微調整されています。
reddit_scraper.pyには、特定のsubredditをスクレイプするスクリプトが含まれています。それを実行するには、最初に接続するためにMySQLデータベースのインスタンスが必要です。また、RedDitアカウントとMySQLデータベースに関連付けられたパラメーターも必要ですconfig.example.pyのスキーマに従って、すべてをconfig.pyファイルに挿入する必要があります。
スクリプトは、最初にpostsと呼ばれるすべての投稿をテーブルにロードし、次にcommentsと呼ばれるテーブルにコメントをロードします。並列化は適用されていますが、この2番目の部分には何時間もかかります。そのため、メインスクリプト(〜20分)から興味のある投稿をダウンロードしたら、スクリプトcomments_scraper.pyを使用して関連するコメントをダウンロードできます。あなたがそれを中断した場合、次にそれを実行するとき、スクリプトはあなたが残した場所から始めるつもりです。
モデルをトレーニングするために、最初にconversational dataset format 、つまり次の構造を持つCSVテーブルにデータを報告しました。
| id | 応答 | コンテクスト | コンテキスト/0 | ... | コンテキスト/n |
|---|---|---|---|---|---|
| S892NN | 元気です | 大丈夫です。あなたはどうですか? | 人生はどうですか? | ... | こんにちは! |
ここで、コンテキスト/nは会話の始まりを表し、最新の交換に移動します(コンテキスト/0 、コンテキスト、応答で表示されます。これは会話の最新の文です)。 config.pyファイルのNUMBER_OF_CONTEXTSパラメーターをオーバーライドすることにより、コンテキストのカーディナリティを変更することが可能です。
スクリプトcreate_conversational_dataset.py 、スクレイピングフェーズ中に作成されたSQLテーブルから始まるCSVを生成し、データフォルダーのピクルスファイルに保存します。会話は、投稿とその直接的なコメントの1つまたは投稿、コメント、コメントチェーンのいずれかから作成されます。
スクリプトの実行は並行しているため、 NUMBER_OF_PROCESSESパラメーターに応じてn異なるcsvs -nに書き込みます。最後に、結果のピクルスファイルを作成します。
Notebook training.pyは、会話データ上のDialoGPT-medium言語モデルの微調整が含まれており、主にthis notebookにあるコードの適応です。
demo.pyを実行すると、会話が開始されます。
すべてのコードをRespositoryで実行するには、仮想環境を作成して、次のコマンドを実行できます。
virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt