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

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

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

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

PyTorch

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

JupyterLab

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

Python 3.x

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

Q&A

解決済

1回答

739閲覧

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

Soukyuu777

総合スコア4

Jupyter

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

PyTorch

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

JupyterLab

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

Python 3.x

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

0グッド

1クリップ

投稿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

1!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 2!pip install spacy==2.2.2 panel==0.6.4 fbprophet==0.5 holoviews==1.12.4 configargparse 3!pip install OpenNMT-py==1.2.0 4!git clone https://github.com/OpenNMT/OpenNMT-py.git -b 1.2.0

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

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

python3

1import MeCab 2import os 3 4# データ数を設定 5TRAIN_PAIR_NUM = 500000 6DEV_PAIR_NUM = 2000 7TEST_PAIR_NUM = 2000 8 9mecab = MeCab.Tagger("-Owakati") 10mecab.parse("") 11 12s = [] #発話文を入れるリスト 13t = [] #応答文を入れるリスト 14ds = [] #読み込んだ際にすべての文章を入れるリスト 15#テキストデータ読み込み 16with open('corpus_MEIDAI_edit.txt', encoding='utf-8') as f: 17 for i , line in enumerate(f): 18 line = line.strip() 19 ds.append(line) 20 21 #発話と応答に分ける 22 _s = ds[0:len(ds)-1:2] #発話 23 _t = ds[1::2] #応答 24 25 for s_list in _s: 26 #分かち書き 27 s_str = str(s_list) 28 s_wakati = mecab.parse(s_str) #分かち書き 29 30 s.append(s_wakati) #リストに追加 31 32 for t_list in _t: 33 t_str = str(t_list) 34 t_wakati = mecab.parse(t_str) #分かち書き 35 36 t.append(t_wakati) #リストに追加 37 38 # 設定したデータ数に達したら読み込みを終了 39 for i in range(len(s)): 40 if len(s) > DEV_PAIR_NUM + TEST_PAIR_NUM + TRAIN_PAIR_NUM: 41 break 42 43# 出力用のディレクトリを作成 44os.makedirs("OpenNMT", exist_ok=True) 45 46# ファイル出力 47with open("OpenNMT/dev.src", "w", encoding='utf-8') as f: 48 for l in s[0:DEV_PAIR_NUM]: 49 f.write(l) 50with open("OpenNMT/dev.tgt", "w", encoding='utf-8') as f: 51 for l in t[0:DEV_PAIR_NUM]: 52 f.write(l) 53with open("OpenNMT/test.src", "w", encoding='utf-8') as f: 54 for l in s[DEV_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM]: 55 f.write(l) 56with open("OpenNMT/test.tgt", "w", encoding='utf-8') as f: 57 for l in t[DEV_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM]: 58 f.write(l) 59with open("OpenNMT/train.src", "w", encoding='utf-8') as f: 60 for l in s[DEV_PAIR_NUM + TEST_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM + TRAIN_PAIR_NUM]: 61 f.write(l) 62with open("OpenNMT/train.tgt", "w", encoding='utf-8') as f: 63 for l in t[DEV_PAIR_NUM + TEST_PAIR_NUM:DEV_PAIR_NUM + TEST_PAIR_NUM + TRAIN_PAIR_NUM]: 64 f.write(l)

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

python3

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

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

python3

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

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

python3

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

でさせています。

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

今のAIは、作成したモデルにデータを追加して再学習させるということはできません。
なので、「対話のログを随時記録」したものを使いたいのであれば、それを学習のデータに組み込んで新たなモデルを作成する必要があります。

ちなみに、そのログで正しくない回答に正解を与えるような分のペアを与えたとしても、学習済みのモデルが正解を出力するようにはならないでしょう。モデルとデータの関係はそういうものです。

投稿2022/07/05 11:37

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Soukyuu777

2022/07/05 14:41

ご回答感謝いたします。 会話した分のデータを追加したモデルで毎回すべてを学習しないといけないのでしょうか。 前回の学習済みモデル(チェックポイント?)を使って追加のデータの分だけ学習させることはできませんか?
TakaiY

2022/07/06 00:51

できません。
Soukyuu777

2022/07/06 06:27

了解いたしました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問