🎆

機械翻訳を用いた選択式問題の日本語指示応答データセットの構築

2024/11/08に公開

GENIAC 松尾研 LLM開発プロジェクトメンバーのMitsuhashiです。
プロジェクト期間中に取り組んだ内容をまとめます。

概要

  • 本記事は、翻訳に基づいた選択式問題の日本語指示応答データセットの構築に関する記事です
  • そもそも日本語の指示応答データセットが少ない、という問題に対して、海外のデータセットを翻訳して日本語のデータセットを確実に増やすことを目的として取り組みました
  • 本記事で紹介するデータセットはOpenBookQA-Japanese-maskedです

https://huggingface.co/datasets/weblab-GENIAC/OpenBookQA-Japanese-masked

プロジェクト当時の自分の役割

  • 事前学習されたTanukiモデルに対して、以下の条件を満たすデータセットの構築と学習を行うこと、が自分の役割でした
    • 多様な指示応答に追従させる
    • モデルの性能を向上させる
  • 抽象的な課題ではありますが、自分なりに噛み砕いて理解することで、データセット構築に取り組みました

プロジェクト当時の状況

※あくまで個人の目から見た当時の状況です

  • Phase1と比較して、より高性能なLLMを学習するための施策を検討している時期でした
  • 事後学習の手法の選定や、学習に使うデータセットを探索している時期であり、先行事例があればそれに倣ってまずは1サイクルを回したいという状況でした

OpenBookQAデータセット

  • 先行事例の調査からOpenBookQAデータセットを見つけました

https://huggingface.co/datasets/allenai/openbookqa

  • このデータセットは、質問文と4つの選択肢、回答の記号、回答の根拠がまとめられたデータセットです
  • 質問文と選択肢、回答の記号、回答の根拠が別々に格納されているため、テンプレートを作成して一文にまとめた後に、翻訳を行いました

OpenBookQAデータセットの翻訳

  • 翻訳にはapache-2.0ライセンスであるcyberagent/calm3-22b-chatを使用させていただきました

https://huggingface.co/cyberagent/calm3-22b-chat

  • 翻訳には以下のソースコードを使用しました

https://github.com/matsuolab/nedo_project_code/blob/team_hatakeyama_phase2/team_hatakeyama_phase2/mitsuhashi/build_corpus/openbookqa_ja/generate_openbookqa_ja_batch.py

  • 開発環境はH100 80GB 1台、vllmのバッチ推論(バッチサイズ256)を用いて行いました
  • vllmはLLMの推論を高速化する手法の一つであり、他にもいろいろな高速化手法が提案されていますが、その中でも安定して高い推論速度を発揮しており、今回のプロジェクトでも大変助けられました
    • LLMの高速化の手法についての概要は以前にこちらの記事でも説明していますので、合わせてご参照ください

https://zenn.dev/kaeru39/articles/1ea73bfa40c7df#5.-vllm

  • 翻訳時に工夫した点として、テンプレートを使用して一文にまとめた点があります
    • データセットにも記載していますが、翻訳時には以下のテンプレートを使用しました
    • Qには質問文、A,B,C,Dには各選択肢の単語ないし文章、factには根拠文、Answerには回答の記号が入ります
「### 質問 ### 答え」の形式で日本語に翻訳してください。\n### Question\n{Q}\nA.{A}\nB.{B}\nC.{C}\nD.{D}\n\n### Answer\nBecause {fact}, the answer is {Answer}.

OpenBookQA-Jaの抜粋

  • 以下のフォーマットでデータを格納しています
{
    "idx": ID,
    "id": 元ID,
    "question_stem_en": 英語の質問文,
    "choices_en": {
        "text": 選択肢の文章,
        "label": 選択肢の記号,
        },
    "answerKey": 答え,
    "fact1": 根拠が書かれた英文,
    "humanScore": 未使用,
    "clarity": 未使用,
    "turkIdAnonymized": 未使用,
    "question_stem": 翻訳された日本語の指示文,
    "response": 翻訳された日本語の応答文,
    "translation_prompt_question_stem": 翻訳に使用したプロンプト,
    "translation_model": 翻訳に使用したモデル
},
  • データセットの抜粋は以下です
{
    "idx": 2,
    "id": "7-870",
    "question_stem_en": "When food is reduced in the stomach",
    "choices_en": {
        "text": [
            "the mind needs time to digest",
            "take a second to digest what I said",
            "nutrients are being deconstructed",
            "reader's digest is a body of works"
        ],
        "label": [
            "A",
            "B",
            "C",
            "D"
        ]
    },
    "answerKey": "C",
    "fact1": "digestion is when stomach acid breaks down food",
    "humanScore": 1.0,
    "clarity": 1.600000023841858,
    "turkIdAnonymized": "b356d338b7",
    "question_stem": "食べ物が胃で消化されるとき、\nA. 心は消化に時間がかかる\nB. 私が言ったことを理解するのに一瞬かかる\nC. 栄養素が分解される\nD. リーダーズ・ダイジェストは大作集",
    "response": "消化とは胃酸が食べ物を分解する過程なので、答えはCです。",
    "translation_prompt_question_stem": "「### 質問 ### 答え」の形式で日本語に翻訳してください。\n### Question\n{Q}\nA.{A}\nB.{B}\nC.{C}\nD.{D}\n\n### Answer\nBecause {fact}, the answer is {Answer}.",
        "translation_model": "cyberagent/calm3-22b-chat"
    },

確認できている課題

  • テンプレートを用いて言い切りの形に加工はしましたが、質問文が途中で切れて選択肢が登場するため、翻訳に失敗する事例を確認しています

Tanukiの学習に使用したか

  • 初期はTanukiの学習に使用していましたが、最終的なモデルの学習には使用されませんでした

まとめ

  • 本記事では、翻訳に基づく、選択式問題の日本語指示応答データセットを構築する取り組みについて記載しました
  • 構築したデータセットに対して、現状確認できている課題を整理しました
  • 道半ばな点はありますが、日本語の指示応答データセットの構築の一助になれば幸いです
東大松尾・岩澤研究室 | LLM開発 プロジェクト[GENIAC]

Discussion