制御可能な文章生成RAG - 学習用データ作成

はじめに

前回調査したRAGを学習するための単純なデータセットを作成した。

RAGのためのデータセット

RAGは入力文章に対して、知識を用いて出力文章を生成するモデルである。
RAGは内部的にはDPRBARTという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の学習を行いたい。

参考文献