制御可能な文章生成RAG - 学習用データ作成
はじめに
前回調査したRAGを学習するための単純なデータセットを作成した。
RAGのためのデータセット
RAGは入力文章に対して、知識を用いて出力文章を生成するモデルである。
RAGは内部的にはDPRとBARTという2つのモデルからなり、DPRは知識の
retrieve(検索)を行い、 BARTはseq2seqにより文章の生成を行う。
元のRAG論文では TriviaQA1, Natural Questions2の2つのデータセットでDPRを
事前学習してから、 DPRのquery encoder部分とBARTを同時に最適化している。
今回RAGの挙動を理解するための単純なデータセットを作成する。
都道府県統計データ
知識文章
政府が公開している情報
から、都道府県ごとの面積、年代ごとの人口をtableデータ化して、
そこから知識文章を作成する。
知識文章例
都道府県 | 種類 | 面積 | 知識 | 年代 | 人口 | |
---|---|---|---|---|---|---|
45 | 鹿児島県 | 面積 | 9100 | 鹿児島県の面積は9100km2である。 | nan | nan |
46 | 沖縄県 | 面積 | 2200 | 沖縄県の面積は2200km2である。 | nan | nan |
48 | 北海道 | 人口 | nan | 1920年の北海道の人口は235万人です。 | 1920 | 235 |
49 | 青森県 | 人口 | nan | 1920年の青森県の人口は75万人です。 | 1920 | 75 |
50 | 岩手県 | 人口 | nan | 1920年の岩手県の人口は84万人です。 | 1920 | 84 |
各都道府県の面積と五年ごとの人口から計986個の知識文章を作成した。
質問・回答文章
知識文章を元に質問・回答文章ペアを作成する。
文章ペアは以下のアルゴリズムで生成する。
- Q1: Aの人口はX万人くらいですか? (2015年基準)。
- X万人くらいです。 (-20% ~ +20%)
- X万人よりも少ないです。(< -20%)
- X万人よりも多いです。(> +20%)
- Q2 : Aの面積はX km2よりも大きいですか?
- X km2くらいです。 (-20% ~ +20%)
- X km2よりも大きいです。 ( > +20%)
- X km2よりも小さいです。 (< -20%)
- Q3 : AとBではどちらが大きいですか?
- 同じくらいです。 (-20% ~ +20%)
- Aのほうが大きいです。
- Bのほうが大きいです。
- Q4 : X年からY年でAの人口は変わっていますか?(Y > X)
- 同じくらいです。 (-20% ~ +20%)
- 増えています。 ( > +20%)
- 減っています。 (< -20%)
このようなアルゴリズムで3428個の質問・回答文を生成した。
質問・回答文章例
種類 | 質問 | 回答 | |
---|---|---|---|
3187 | Q4 | 1920年から1970年で熊本県の人口は変わっていますか? | 増えています。 |
702 | Q3 | 佐賀県と石川県ではどちらが大きいですか? | 石川県のほうが大きいです。 |
310 | Q2 | 鳥取県の面積は18609km2くらいですか? | 18609km2よりも小さいです。 |
467 | Q3 | 千葉県と三重県ではどちらが大きいですか? | 同じくらいです。 |
45 | Q1 | 千葉県の人口は494万人くらいですか? | 494万人よりも多いです。 |
1337 | Q4 | 1935年から1985年で埼玉県の人口は変わっていますか? | 増えています。 |
2705 | Q4 | 1925年から1985年で山口県の人口は変わっていますか? | 増えています。 |
1599 | Q4 | 1955年から1980年で新潟県の人口は変わっていますか? | 同じくらいです。 |
391 | Q3 | 青森県と富山県ではどちらが大きいですか? | 青森県のほうが大きいです。 |
1696 | Q4 | 1925年から1955年で石川県の人口は変わっていますか? | 増えています。 |
DPR用のデータ
transformers3にはDPRの学習例はなかったが、 FacebookのDPRの実装4には
学習方法が記載されていた。
学習データは以下のjson形式で記述する必要がある。
[ { "question": "....", "answers": ["...", "...", "..."], "positive_ctxs": [{ "title": "...", "text": "...." }], "negative_ctxs": ["..."], "hard_negative_ctxs": ["..."] }, ... ]
'question', 'answers'は今回作成した質問・応答文で良い。
その他の要素はこの質問・回答ペアに関連する情報であり今回は
知識文章から選ぶこととする。
- positive_ctxs は質問・回答文生成に利用した知識
- negative_ctxsは質問・回答文に関係ない都道府県の知識
- hard_negative_ctxs は関連する都道府県の利用していない知識
例
{'question': '1975年から2010年で沖縄県の人口は変わっていますか?', 'answers': ['増えています。'], 'positive_ctxs': [{'title': '', 'text': '1975年の沖縄県の人口は104万人です。'}, {'title': '', 'text': '2010年の沖縄県の人口は139万人です。'}], 'negative_ctxs': [{'title': '', 'text': '1995年の佐賀県の人口は88万人です。'}, {'title': '', 'text': '1995年の和歌山県の人口は108万人です。'}, {'title': '', 'text': '1940年の山形県の人口は111万人です。'}], 'hard_negative_ctxs': [{'title': '', 'text': '1955年の沖縄県の人口は80万人です。'}, {'title': '', 'text': '1980年の沖縄県の人口は110万人です。'}, {'title': '', 'text': '1970年の沖縄県の人口は94万人です。'}]}
まとめ
今回はRAG学習のためのテストデータセットの作成を行った。
次回はDPRの学習を行いたい。