質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

OpenNMT-py v1.2.0を用いた対話AIで「対話のやり取りを随時記録してそれを学習しどんどん対話の精度を上げる」方法についてご教示お願いいたします。

Soukyuu777
Soukyuu777

総合スコア3

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0評価

1クリップ

165閲覧

投稿2022/07/05 11:00

「Pythonでつくる対話システム」という本(https://github.com/dsbook/dsbook
を参考にしまして、その中の、OpenNMTという翻訳ライブラリを用いてつくる対話システムについて質問なのですが、
質問のタイトルにあります通り、対話のやり取りを随時記録してそれを追加で学習しどんどん対話の精度を上げる 方法を教えていただきたいです。こちらの発話とシステムからの応答を記録していくイメージです。

バージョンは
OpenNMT-py v1.2.0 (https://github.com/OpenNMT/OpenNMT-py/tree/1.2.0

python3

!pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 torchtext==0.5 -f https://download.pytorch.org/whl/torch_stable.html !pip install spacy==2.2.2 panel==0.6.4 fbprophet==0.5 holoviews==1.12.4 configargparse !pip install OpenNMT-py==1.2.0 !git clone https://github.com/OpenNMT/OpenNMT-py.git -b 1.2.0

といった感じです。開発環境はJupyter Labです。
会話コーパスは名大会話コーパス (https://mmsrv.ninjal.ac.jp/nucc/
を使っております。(リンク先の>文字化資料ダウンロード をクリックするとダウンロードできます)
これはジャンルごとに対話文章が分かれて公開されているのですが、前処理で一つのテキストファイルにまとめました。

また、学習データを作成するコードは

python3

import MeCab import os # データ数を設定 TRAIN_PAIR_NUM = 500000 DEV_PAIR_NUM = 2000 TEST_PAIR_NUM = 2000 mecab = MeCab.Tagger("-Owakati") mecab.parse("") s = [] #発話文を入れるリスト t = [] #応答文を入れるリスト ds = [] #読み込んだ際にすべての文章を入れるリスト #テキストデータ読み込み with open('corpus_MEIDAI_edit.txt', encoding='utf-8') as f: for i , line in enumerate(f): line = line.strip() ds.append(line) #発話と応答に分ける _s = ds[0:len(ds)-1:2] #発話 _t = ds[1::2] #応答 for s_list in _s: #分かち書き s_str = str(s_list) s_wakati = mecab.parse(s_str) #分かち書き s.append(s_wakati) #リストに追加 for t_list in _t: t_str = str(t_list) t_wakati = mecab.parse(t_str) #分かち書き t.append(t_wakati) #リストに追加 # 設定したデータ数に達したら読み込みを終了 for i in range(len(s)): if len(s) > DEV_PAIR_NUM + TEST_PAIR_NUM + TRAIN_PAIR_NUM: break # 出力用のディレクトリを作成 os.makedirs("OpenNMT", exist_ok=True) # ファイル出力 with open("OpenNMT/dev.src", "w", encoding='utf-8') as f: for l in s[0:DEV_PAIR_NUM]: f.write(l) with open("OpenNMT/dev.tgt", "w", encoding='utf-8') as f: for l in t[0:DEV_PAIR_NUM]: f.write(l) with open("OpenNMT/test.src", "w", encoding='utf-8') as f: for l in s[DEV_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM]: f.write(l) with open("OpenNMT/test.tgt", "w", encoding='utf-8') as f: for l in t[DEV_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM]: f.write(l) with open("OpenNMT/train.src", "w", encoding='utf-8') as f: for l in s[DEV_PAIR_NUM + TEST_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM + TRAIN_PAIR_NUM]: f.write(l) with open("OpenNMT/train.tgt", "w", encoding='utf-8') as f: for l in t[DEV_PAIR_NUM + TEST_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM + TRAIN_PAIR_NUM]: f.write(l)

となっております。
そして前処理は

python3

#前処理 !python OpenNMT-py/preprocess.py -train_src "./OpenNMT/train.src" -train_tgt "./OpenNMT/train.tgt" \ -valid_src "./OpenNMT/dev.src" -valid_tgt "./OpenNMT/dev.tgt" -save_data dlg

となっております。
学習させている記述は

python3

#学習 !python OpenNMT-py/train.py -gpu_ranks 0 --save_checkpoint_steps 50000 --train_steps 100000 -save_model "./OpenNMT/dlg_model" -data dlg

です。
学習させたモデルでの推論を

python3

#推論 !python OpenNMT-py/translate.py -model "./OpenNMT/dlg_model_step_100000.pt" -src "./OpenNMT/test.src" -output pred.txt -replace_unk -verbose !tail pred.txt

でさせています。

対話のログを随時記録して新たに学習し、どんどん対話の精度が上がるようにしたいのですが、やり方が分かりません。どういった方法がありますでしょうか?

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

JupyterLab

JupyterLabは、Jupyter notebookの後継の対話型開発環境(IDE)です。データの可視化がインタラクティブで、プラグイン作成により新しいコンポーネントの追加および既存のコンポーネントも統合可能。サーバに閉じているため、データ分析に向いています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。