NTTドコモR&Dの技術ブログです。

KDDCup 2024 Amazon Multi-Task Online Shopping Challenge for LLMs における訓練用データセット構築

はじめに

NTTドコモ クロステック開発部の小原です。

本記事では、KDDCup 2024 Amazon Multi-Task Online Shopping Challenge for LLMs (以下、本コンペ)の解法で使用されたデータセット構築についてご紹介します。我々ドコモも本コンペへ取り組んでいたものの、残念ながら入賞範囲外となってしまいました。我々の手法の中でうまく開発が進まなかったものとして、Fine-tuning用のデータセット開発があったため、今回は入賞手法がどのようにFine-tuning用のデータを用意したか確認しながらの話となります。

幣グループの順位、トラックごとに見た場合の最高順位は12位となっている。

本コンペにおけるデータの状況とFine-tuningの重要性

本コンペはLLMで解くことが想定されているタスクに対する解法を競うものとなっており、出題されるタスクの種類の傾向が異なるトラックが5つあります。タスクにはECサイト向けの商品説明生成や翻訳等があり、テストデータのタスクの種類は全トラック合計で57種類、問題数は約20000問となっています。しかしながら、本コンペの参加者に開示される開発用データはタスク5種類(下図)、問題数は96問のみとなっており、非常に限られた状態になっています。

ただし、本コンペでは外部の公開済みデータセットや自作データセットを使用することが許可されており、より良いモデルを作るには自分で汎用的な公開データセットや自作データセットを用意して利用する必要があります。また、公開されている高性能なLLMは基本的に汎用的であるものの本コンペのドメインであるEC向けに作られたわけではないため、上位解法を目指すのであればECドメインのデータセットの用意及びLLMのFine-tuningの重要性が増します。

開発用データ内にあるタスクの種類 (LLaSA: Large Language and E-Commerce Shopping Assistant の図2より引用)

入賞した解法ではデータセットを用意してFine-tuningを行ったか?

前章では本コンペのデータ事情やFine-tuningの必要性について説明しました。しかしながら、実のところ本コンペにおいて入賞した解法はFine-tuningを採用したのでしょうか?

現在公開されている有名なLLMは、入力時の指示が適切であれば本コンペの出力フォーマットや適切な回答を行うことができます。 現に、本コンペの総合2位のAML_LabCityUチームの解法では公開されているLLMに対してIn-context learningやプロンプトチューニング、LLMのtop_p等に対するハイパラチューニングを実施しており、Fine-tuning無しで入賞しています。

AML_LabCityUチームの解法の推論構造 (Second Place Overall Solution for Amazon KDDCup 2024 図1より引用)

しかし、本コンペで入賞した解法の9つのうち7つは公開データセットもしくは自作データセットを用意してFine-tuningをしています。特に現地でのコンペ運営からの発表では、全Trackで一位入賞を果たしたTeam_NVIDIAの解法はLLMや公開データセットを利用した訓練データ作成とFine-tuningを含む解法を用いて、本コンペのタスクに対して当時のChatGPTのGPT-4 Turbo以上の性能を示したそうです。Team_NVIDIAの解法において、自前のデータセットを用いたFine-tuningはあくまで解法の中の一要素でしかないものの、本事例や入賞解法におけるFine-tuningの採用率を考えるとFine-tuningが重要な要素であるといえます。

Team_NVIDIAの解法 (Winning Amazon KDDCup’24 の図2より引用)

GPT-4 TurboとTeam_NVIDIAの解法の結果比較

入賞した解法におけるFine-tuning

KDDCupでは入賞した手法が論文として公開されます。本コンペでは、各トラックごとに7位までに入ったチームが入賞したものとみなされています。前述したように公開データや自作データセットによるFine-tuningを採用した入賞チームは、9チーム中7チームとなっています。この7チームにおけるFine-tuning用データの用意方法は以下の様になっています。

入賞した解法の論文名 使用した既存の公開データセット データの用意
Winning Amazon KDD Cup'24 ECInstruct, ESCI-data, Amazon-M2, Amazon Reviews 2023, MMLU, Alpaca-Cleaned ChatGPT含むLLM等で公開データを本コンペ向けに変換、強化したのちにFine-tuning
LLaSA: Large Language and E-Commerce Shopping Assistant ECInstruct, Amazon-ESCI, Amazon-M2, Amaon Reviews 2023, OA-Mine & AE-110K, Amazon-Category 開発用データのみを用いてChatGPTからタスクに合うデータを作成、既存のデータセットは本コンペ向けに変換し、これらのデータでFine-tuning
Enhancing User Behavior Alignment by Input-Level Model Cooperation and Model-Level Parameter Optimization ECInstruct 公開データをそのままFine-tuningに使用
EC-Guide: A Comprehensive E-Commerce Guide for Instruction Tuning and Quantization by ZJU-AI4H ECInstruct, ESCI, Amazon M2, BLAIR (Amazon Review 2023), Amazon QA, Amazon Meta Data, PairwiseFashion, IntentionQA Womens_Clothing_Review, Flores, gsm8k, CommonSenseQA, Product-Attribute-Extraction 公開データセットに対するフィルタリング、ChatGPTによる説明や質問文生成等を実施。作成したデータはQLoRAによる学習に利用する。
Fine-Tuning Large Language Models for Multitasking in Online Shopping Using Synthetic Data ECInstruct, Amazon M2, Amazon reviews 公開データセットに対してChatGPTを用いた合成データ作成を行い、その後Fine-tuning。
Tailoring LLMs for Online Shopping: A Strategy for Multi-Task Learning and Domain-Specific Performance Enhancement ECInstruct 公開データをそのままFine-tuningに使用
More diverse more adaptive: Comprehensive Multi-task Learning for Improved LLM Domain Adaptation in E-commerce なし ChatGPT等のLLMによる生成データをそのままFine-tuning

公開データセットをそのままFine-tuningに利用している解法もあるものの、解法の半数ではChatGPTによる例題作成や公開データセットの補強及を行っており*1、そのデータをInstruction tuningをはじめとしたFine-tuning用のデータに利用しています。ChatGPTを使ってはいますが一筋縄で適切なデータの生成ができているわけではなく、各タスクごとにプロンプトチューニングを用意したり、chain-of-thoughtを利用した回答誘導も行っているようでした。

各チームの自作データと実装

ここでは、上記の入賞解法でFine-tuningに使われたデータがどのように用意されているか実際確認を行います。 KDDCupでは入賞したとしてもコードやデータを一般公開する義務は無いものの、本コンペでは2024年12月16日現在で3件*2が解法の実装もしくはデータセットが公開されています。公開されている解法の中で解法中に使われたであろうデータがあるものは2件あります。

EC-Guide: A Comprehensive E-Commerce Guide for Instruction Tuning and Quantization by ZJU-AI4H

こちらはZJU_AI4Hチームで扱われていたデータセットであり、EC-Guideとして公開されています。EC-Guideデータセットでは開発用データで提示されていた5つのタスクに沿ったデータからさらに細分化したサブタスクを用意しており、実際のデータ(GenerationタスクのProduct Elaboration)の一例は以下の通りです。

{
    "input_field": "Input: Explain the product type Bracket  \n",
    "output_field": "A bracket is a support or stand that is typically used to hold or secure an item in place, often attached to a wall or other surface.",
    "task_type": "generation",
    "metric": "sent-transformer"
},

データのフォーマットは本コンペの開発用データやテストデータに類似する形式を採用しています。EC-Guide内のデータは全てこのフォーマットに統一されているものの、ベースとなったデータセットのフォーマットは以下の一例(ECInstruct)の様に異なったものとなっています。

{
    "split": "train",
    "task": "Multiclass_Product_Classification",
    "setting": "IND_Single_Instruction",
    "instruction": "What is the relevance between the query and the product title below? Answer from one of the options.",
    "input": "{\"query\": \"fathers christmas gift\", \"product title\": \"RAK Magnetic Wristband - Men & Women's Tool Bracelet with 10 Strong Magnets to Hold Screws, Nails and Drilling Bits - Gift Ideas for Dad, Husband, Handyman or Handy Woman\"}",
    "options": "[\"A: The product is relevant to the query, and satisfies all the query specifications.\", \"B: The product is somewhat relevant. It fails to fulfill some aspects of the query but the product can be used as a functional substitute.\", \"C: The product does not fulfill the query, but could be used in combination with a product exactly matching the query.\", \"D: The product is irrelevant to the query.\"]",
    "output": "A: The product is relevant to the query, and satisfies all the query specifications.",
    "few_shot_example": null
},

このようなデータセットを作成するにあたって、ベースとなる公開データセットや作成するタスクによって作成する手段を変えており、例えば上記のECInstructデータセットからEC-GuideのGenerationタスクのProduct Elaborationのデータセットを作成する場合は以下の手順を踏みます。

  1. ECInstructのtaskから、'Attribute_Value_Extraction'に一致するデータを収集する。
  2. 収集したデータからChatGPTを用いて詳細な説明付けを行う。
    1. (補足: フォーマットをそろえる箇所もChatGPTに依存している?)

上記の処理は一例であり、タスクとサブタスク、ベースとなるデータセットが異なる場合は、別途用意したフィルタリングやアルゴリズムを用いてデータセットを用意しているため、手間がかけられていることがわかります。

Fine-Tuning Large Language Models for Multitasking in Online Shopping Using Synthetic Data

こちらはInnovaチームで扱われていたデータセットとなります。実装内にあるfinetuning_code内にデータとFine-tuningコードがあります。以下の様に、こちらのデータセットはフォーマットの異なるファイルで構成されているものの、根幹となっているフォーマットはECInstructに準拠しています。

task11_train_ECInstruct.json内のデータ例

{
    "split":"train",
    "task":"multiple-choice",
    "setting":"IND_Single_Instruction",
    "instruction":"Given the product title and question, select the correct answer among all the options.",
    "input":{
        "query1":"skin moisturizer",
        "query2":"coconut oil"
    },
    "options":"[0. irrelevant, 1. substitute, 2. complement, 3. narrowing]",
    "output":"2",
    "few_shot_example":null
},

nuestras_tasksv2.csv内のデータ例

input,options,instruction,output
{'Input': 'Rheumatology'},None,{'Instruction': 'Explain the product category name'},"{'Output': 'Rheumatology is a medical specialty that deals with the diagnosis and treatment of musculoskeletal diseases and systemic autoimmune conditions. This includes diseases such as arthritis, lupus, and fibromyalgia.'}"

ただし、学習時にこのフォーマットをそのまま使うわけではなく、一つのテキストへ変換する形を取っています。その後、このテキストデータはtrlのSFTTrainerによる学習へ回されます。

# 4つの{}には指定した変数が入ります。変数は順に、上記のjsonやcsvにあるinstruction、input、option、outputが入ります。
 """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{}\n\n### Input:\n{}\n\n### Options:\n{}\n\n### Response:\n{}"""

まとめ

本コンペにおける各解法のFine-tuning用のデータセットの作成や実際のデータについて紹介しました。入賞した解法を確認する限り、本コンペにおいて入賞に近づくためにはFine-tuningの開発を諦めずに進める必要があった様です。ただし、公開データをそのまま使うわけではなくフィルタリング、ChatGPTをはじめとするLLMによる訓練データの補強、フォーマットの統一等が必要になっています。与えられた開発用のデータからChatGPTで例文を作成する場合も、プロンプトの調整や内容が適切であるかの確認が必要になる様です。

*1:ChatGPTの利用規約には出力データの利用方法に関する規約があり、2024年12月16日現在は"Use Output to develop models that compete with OpenAI."とあります。一応、今回のコンペはAmazonのECサイト利用に限定することで、ChatGPTの出力の開発利用はOpenAIに競合しないという形なのでしょうか...?

*2:本来は4件であるものの、そのうちの1件であるLLaSA: Large Language and E-Commerce Shopping Assistantは空のリポジトリであるため除外