🌏

KDDCup参戦記③ RAG/ファインチューニング編

2024/07/30に公開

はじめに

はじめまして。データアナリティクスラボ株式会社 データソリューション事業部の力岡と申します。普段はデータサイエンティストとして、データ分析や機械学習モデルの構築、生成AIアプリの開発などを行っています。

今回は、弊社チームで参加したKDD Cup 2024での取り組みについて紹介します。入賞は叶いませんでしたが、多くの挑戦を行い、貴重な知見を得ることができましたので、ここで共有させて頂きます。

参加したコンペティション

参加したコンペは以下で、LLMを活用してショッピングに関するタスクを解くというテーマでした。コンペの詳細について知りたい方は、別記事の「KDDCup参戦記① 概要と結果編」をご覧ください。
https://www.aicrowd.com/challenges/amazon-kdd-cup-2024-multi-task-online-shopping-challenge-for-llms

取り組んだ解法

本記事では、コンペ期間中に取り組んだRAGファインチューニングに関する取り組みを紹介します。各技術の理論的な説明は割愛し、実際に試した内容や得られた結果を中心にお伝えします。ちなみに検証では、Qwen2-7B-Instruct というLLMを使用しました。

RAG (Retrieval-Augmented Generation)

RAGとは、外部知識ベースから情報を取得し、その情報を元に回答を生成することで、より正確で豊かな回答を提供する技術です。

解きたい問題

コンペから提供されたサンプル問題には、商品に関する知識や簡単な計算を求める問題が含まれていました。例えば、以下の問題では、USBポートの数を問われています。USB-Cが1つ、USB-Aが2つの計3つ(選択肢3)が正解となりますが、7B級のLLMでは正解を導き出すのが難しく、間違った回答である2つ(選択肢2)を返してしまうという状況でした。そこで、RAGの技術を利用して商品情報や計算過程を参考情報として与えることで、精度を上げることができないかを試してみることにしました。

【サンプル問題】

The product 'Anker USB C Hub, 655 USB-C Hub (8-in-1), with 2 USB-A 10 Gbps Data . Ports, 100W Power Delivery, 4K HDMI, 1 Gbps Ethernet, microSD and SD Card Slots, 3.5 mm AUX, for MacBook, and More (Earthy White)' appears on an e-commerce website. It is a multiport hub. How many usb ports are there?
0. It cannot be inferred.
1. 1
2. 2
3. 3
Answer: 3

データの準備と前処理

参考情報として利用する商品情報は、2022年にAmazonが公開したESCIデータセットを元に作成しました。このデータセットには、英語、スペイン語、日本語の3言語でAmazonの商品情報がまとめられています。
https://github.com/amazon-science/esci-data

product_id:商品ID
product_title:商品タイトル
product_description:商品の説明文
product_bullet_point:商品のメタ情報(説明文のようなもの)
product_brand:商品のブランド
product_color:商品の色
product_locale:言語

ESCIデータセットは180万件と非常に多くのデータが含まれていたため、英語データへの絞り込み、不要な情報除去と重複削除、文字数の絞り込み、マイナー商品の除外などのフィルタリング処理を行い、56万件に絞り込みました。その後、同一ブランド内で文章の類似度計算を行い、類似度が高いレコードを削除することで42万件まで絞り込みを行いました。

データの加工

商品説明が書かれているproduct_bullet_pointには、冗長な内容や不要な情報を含むレコードが多く存在しました。そのため、商用利用可能なLLMの中でも比較的性能が高い Mixtral-8x22B-Instruct-v0.1 を利用して、コンペの問題を解きやすいように構造化変換を行いました。また、数値計算問題を解きやすいように、事前に計算結果を情報に含めるような工夫も行っています。

【変換前の商品情報】

The Anker Advantage: Join the 65 million+ powered by our leading technology.\nMassive Expansion: Get way more out of your laptop’s USB-C port, with 4K@30Hz HDMI, SD card connectivity, USB-A / USB-C data ports, as well as high-speed pass-through charging with Power Delivery.\nPowerful Pass-Through Charging: Compatible with USB-C Power Delivery to provide high-speed pass-through charging to your laptop at up to 85W.\nHigh-Speed, High-Def: USB-C and USB-A data ports provide file transfer at speeds up to 5 Gbps, while an HDMI port supports media display at resolutions up to 4K@30Hz.\nAnker USB C Hub, 341 USB-C Hub (7-in-1), with 4K HDMI, 100W Power Delivery, USB-C and 2 USB-A 5Gbps Data Ports, microSD and SD Card Reader, for MacBook Air, MacBook Pro, XPS, and More

【変換後の商品情報】

- This Anker USB C Hub is a 7-in-1 device
- It has 1 USB-C data port that can transfer files at speeds up to 5 Gbps
- There are 2 USB-A data ports, each can also transfer files at speeds up to 5 Gbps
- So, there are 3 data ports in total (1 USB-C and 2 USB-A)
- It also has 1 HDMI port that supports media display at resolutions up to 4K at 30Hz
- The hub is capable of 100W Power Delivery, providing pass-through charging to your laptop at up to 85W
- Additionally, it includes 1 microSD card reader and 1 SD card reader
- Therefore, there are 2 card readers in total (microSD and SD)

RAGの実装

事前準備として、加工済みのデータを multilingual-e5-large というEmbeddingモデルを使用してベクトル化し、全てのデータをVectorStoreに格納しました。その後、LLMを使用して問題を解く際に、問題文と類似度が高い商品情報をVectorStoreから検索し、類似度が設定した閾値より高ければ、関連する商品情報をプロンプトに参考情報として含めるというプロセスを構築しました。以下は、実際に参考情報が投入された問題例です。

【入力プロンプト】

You are an assistant with excellent knowledge of shopping. Please answer multiple-choice questions about the shopping and products.

# Question
The product 'Anker USB C Hub, 655 USB-C Hub (8-in-1), with 2 USB-A 10 Gbps Data Ports, 100W Power Delivery, 4K HDMI, 1 Gbps Ethernet, microSD and SD Card Slots, 3.5 mm AUX, for MacBook, and More (Earthy White)' appears on an e-commerce website. It is a multiport hub. How many usb ports are there?
0. It cannot be inferred.
1. 1
2. 2
3. 3

# Reference Information
Please use the following reference information to help you think through your answer to the question. The reference information may not be directly related to the question.Please use it only for thinking about your answer.
## Title
Anker USB C Hub, 341 USB-C Hub (7-in-1), with 4K HDMI, 100W Power Delivery, USB-C and 2 USB-A 5Gbps Data Ports, microSD and SD Card Reader, for MacBook Air, MacBook Pro, XPS, and More
## Brand
Anker
## Key Information
- This Anker USB C Hub is a 7-in-1 device
- It has 1 USB-C data port that can transfer files at speeds up to 5 Gbps
- There are 2 USB-A data ports, each can also transfer files at speeds up to 5 Gbps
- So, there are 3 data ports in total (1 USB-C and 2 USB-A)
- It also has 1 HDMI port that supports media display at resolutions up to 4K at 30Hz
- The hub is capable of 100W Power Delivery, providing pass-through charging to your laptop at up to 85W
- Additionally, it includes 1 microSD card reader and 1 SD card reader
- Therefore, there are 2 card readers in total (microSD and SD)

Answer:

【LLMの出力】

2

回答は変わらず、間違いである選択肢2が選ばれました(正解は選択肢3)。参考情報として与えた商品情報には商品名は異なるもののUSBポートの数え方が含まれていたため、この問題を解けなかったのは驚きでした。他の問題にも適用してみましたが、回答精度に大きな変化は見られませんでした。

推測ですが、別の検証でCoT(Chain of Thought)プロンプトを試した際も回答結果があまり変わらなかったため、7B級のモデルでは深く考えたり、参考情報を元に推論したりするのが難しいのかもしれません。結局、全ての問題に適切な参考情報を与えるのが難しいことや、参考情報が不要な問題を与えた際に精度が下がるリスクを考慮し、RAGの導入は断念しました。

実際、LLMの推論能力が高ければ、参考情報がなくても解くことが出来そうであったので、RAGの実装やチューニングにかかるコストに対して得られる効果が見合ってなさそうだなと感じたのが諦めた本音です。

ファインチューニング

次に、QAタスクに特化させるために、LLMのファインチューニング(厳密にはInstruction Tuningという手法)に取り組みました。この手法を利用することで、モデルが特定のタスクに対してより適切に応答できるようになります。

学習方法

Instruction Tuningは、対話形式のデータを学習させることで、モデルに回答形式やタスクの解き方を教えます。以下のように問題文にシステムプロンプト(指示プロンプト)を追加したデータを大量に用意して、モデルを追加学習させました。

You are an assistant with excellent knowledge of shopping. Please answer multiple-choice questions about the shopping and products.

The product 'Anker USB C Hub, 655 USB-C Hub (8-in-1), with 2 USB-A 10 Gbps Data . Ports, 100W Power Delivery, 4K HDMI, 1 Gbps Ethernet, microSD and SD Card Slots, 3.5 mm AUX, for MacBook, and More (Earthy White)' appears on an e-commerce website. It is a multiport hub. How many usb ports are there?
0. It cannot be inferred.
1. 1
2. 2
3. 3
Answer: 3

学習データには、「KDDCup参戦記②データ準備編」で作成したデータを利用しています。また、学習環境にはGoogle Colab ProのA100 GPUを利用しているため、VRAMの制約からフルパラメータのファインチューニングは行えず、PEFTのLoRAという技術を用いて一部のパラメータのみを追加学習しました。

ここからは、Instruction Tuningを実施する上で試行錯誤したハイパーパラメータの最適化学習データの最適化について説明します。

ハイパーパラメータの最適化

Instruction Tuningを行う際には、いくつかのハイパーパラメータを設定することができます。そこで、これらのパラメータを調整することで、モデルの性能がどう変化するかを検証しました。ハイパーパラメータを任意に変えた合計34個のモデルを学習し、テストデータに対するスコアをそれぞれ評価しました。本当はLBスコアで評価を行いたかったのですが、提出回数が限られていたため、自作のテストデータで評価を実施しています。

※ 実験計画法などを利用して厳密にパラメータの効果を推定したわけではないので、結果の解釈にはご注意ください。

【調整したパラメータ】

  • target_modules: LoRAを適用する層 [モデルの各層]
  • num_train_epochs: データセットの学習回数 [1, 3, 10]
  • optim: 最適化アルゴリズム [paged_adamw_8bit, paged_adamw_32bit, adafactor]
  • learning_rate: 学習率 [1e-6, 3e-6, 5e-6, 1e-5]
  • lr_scheduler_type: 学習率のスケジューリング方法 [constant, linear, cosine]
  • warmup_ratio: ウォームアップの比率 [0, 0.1, 0.2, 0.3]
  • neftune_noise_alpha: 埋め込み層へのノイズ追加 [0, 5]
  • data_collator: 出力のみを損失計算するか、入出力を損失計算するか

【その他の変更点】

  • 学習データ量: [1,000件, 2,000件, 3,000件]
  • システムプロンプト: タスク別にシステムプロンプトを分けるか、統一するか

パラメータ設定値と評価結果はExcelでまとめ、決定木を用いて特徴量重要度をざっくりと確認しました。結果より、learning_rateやdata_collatorの指定、学習データ量などが重要な因子であることが分かりました。

実際に他の条件を統一して比較したところ、学習データ量は多く、学習率が低すぎない方が良いという傾向が得られました。

これらの結果を基に、最良と推定されるハイパーパラメータでモデルを学習し、提出した結果は以下の通りです。その他のパラメータでもいくつか提出しましたが、大きく精度は変わらず(LB 0.63~0.65あたり)で、傾向は概ねテストデータのスコア傾向と一致していました。

学習データの最適化

学習データの最適化では、品質重視と量重視でそれぞれ検証を行いました。LIMAの論文でも、データの質はかなり重要だということがいわれていたので、その影響を確認しました。

品質重視

高品質なデータを少量学習させることで精度向上を試みました。学習データの中から問題のあるデータを全て目視で確認し、除外や内容の修正を手作業で行いました。こうして作成した400件のデータを5エポックで学習させました。データ件数が少ないため、やや過学習気味になると思いつつも、コンペ問題に慣れさせるために繰り返し学習させました。結果は以下の通りです。やはり、過学習の傾向はあったようでサンプル問題の精度は非常に高かったものの、LBスコアはあまりいい結果にはなりませんでした。

量重視

多種多様なデータを大量に学習させることで精度向上を試みました。今回のコンペの題材であるショッピングとは関係ないですが、HuggingFaceから取得した以下のQAデータセットでモデルを追加学習し、さらに問題形式に慣れるために自作したショッピング問題のデータセットで追加学習を行いました。データセットの量を変えながら、3パターンで検証を行いました。結果は以下の通りです。
https://huggingface.co/datasets/berquetR/mcqa_dataset

  • [ver1] MCQAデータセットを8,000件 + 自作データ3,750件を学習
  • [ver2] MCQAデータセットを32,700件 + 自作データ3,750件を学習
  • [ver3] MCQAデータセットを45,000件 + 自作データ3,750件を学習

データ量を増やすごとにLBスコアが向上していくことが確認できました。本当は継続して学習を行っていきたかったのですが、ver3の時点で学習に40時間とかなり時間が必要であり、コンペ終了間際ということもあり、時間や計算資源の都合上、ここまでしか学習させることができませんでした。

さいごに

どの取り組みもなかなかスコアが向上せず、あまりいい結果は得られませんでしたが、実装や検証を通じて色々なことを学ぶことができました。取り組みの中の所感としては、7B級のモデルにおいて特定のタスクに特化させたいという場合は、多種多様でかつ大量のデータでファインチューニングすることが良さそうな印象でした。パラメータ数が多いモデルでは、量→質へとシフトしていくのかもしれません。もっと他にも調整できる部分やより良いやり方があったと思うので、コンペの上位解法が公開されたら、しっかりと勉強していきたいと思います。

最後までお読みいただきありがとうございました。
全5回構成で記事を執筆予定です。興味のある方は別記事もご覧頂けますと幸いです。

関連記事

KDDCup参戦記① 概要と結果編
KDDCup参戦記② データ準備編
KDDCup参戦記③ RAG/ファインチューニング編 ◀ イマココ
KDDCup参戦記④ モデルマージ編
KDDCup参戦記⑤ 上位解法の紹介

DAL Tech Blog

Discussion