JA EN
体系学習手法・アライメント
·★ 会員·論文·12分で読めます

データセット構築の実務 — 集める・洗う・混ぜる

モデルを作る仕事の大半は、実はデータセットを作る仕事です。母集団の設計、品質フィルタの閾値の決め方、テストへの漏れの検査、配合比が決めてしまう周回数、合成データの使いどころ、アノテーションのガイドライン設計までを、前提知識ゼロから1から解説します。

対象textタスクpretraining

Self-Instruct: Aligning Language Models with Self-Generated Instructions


仕込みが料理を決める

同じレシピ、同じ火力、同じ鍋。それでも作る人が変われば味が変わるのは、仕込みが違うからです。素材をどこから買い、傷んだ部分をどう落とし、何と何をどの比率で合わせるか。火にかける前に、ほとんど勝負がついています。

モデル開発も同じ構図です。層を1枚増やすより、食べさせるものを変えるほうが結果を動かすことは珍しくありません。ところが多くの現場では、この話が「データを増やしましょう」で終わってしまいます。増やすのは3つある工程のうちの1つでしかなく、しかも一番効きが悪い工程です。

この記事で扱うのは、手元のタスク向けにデータセットを設計する実務です。Web全体から事前学習コーパスを作る大規模な話は事前学習データの作り方に譲ります。分類器のための数万件でも、指示チューニング用の数千件でも、判断の構造はまったく同じです。

全体像 — 4つの問いに答える工程

データセット構築は、次の4つに順番に答えていく作業です。

  1. 何を集めるか — 母集団の設計
  2. 何を捨てるか — 品質フィルタと重複除去
  3. どう混ぜるか — 配合比
  4. 誰がラベルを付けるか — アノテーション設計

この4つは、必要な判断の種類がそれぞれ違います。集めるのは統計の問題、捨てるのは閾値の問題、混ぜるのは配分の問題、ラベルは定義の問題。ひとまとめに「データ整備」と呼んでいると、どこで失敗しているのかが見えなくなります。学習が終わってから「データが悪かった」と分かっても、どの工程に戻ればいいのかが特定できません。

順序にも原則が1つあります。安くて効く判定を先に置く。どうせ後で捨てる文書に重い処理を先にかければ、その計算はまるごと無駄になります。ドメイン単位で落とせるものは1バイトも読まずに落とし、次に長さや文字種のような数え上げ、最後に分類器や人手。この並べ替えだけで費用が桁で変わります。

集める — 「たくさん」ではなく「どの分布から」

集め始める前に決めるべきは量ではなく、母集団です。本番で入ってくる入力の分布に、訓練データの分布をどれだけ寄せられるか。ここがずれていると、後段でいくら洗っても直りません。

手当たり次第に集めると、必ず「集めやすいもの」に偏ります。英語、公開データ、平日昼間の問い合わせ、長い文書。だから先にを決めます。ソース、言語、難易度、文書長、そして時期。軸を掛け合わせた表を作り、各セルに最低件数を割り当てる。これが層化です。空のままのセルは、そのままモデルが知らない領域になります。時期の軸を落とすと、古い話し方だけを覚えたモデルができ上がります。

もう1つ、後で必ず効いてくるのが出所の記録です。1件ごとに、取得元・取得日・ライセンス・元のURLを残す。「この提供元の分だけ削除してほしい」という要求は、規模が小さいうちから普通に発生します。混ぜてしまってから出所を辿れないと、データセットごと作り直しになります。

集めた直後の健康診断

洗う前に、何が入っているかを見ます。件数、長さの分布、ソース別の件数、言語の内訳、文字化けの率。長さの分布が二山になっていれば抽出が2種類混ざっている合図ですし、上位1ソースが半分を占めていれば、その1件が壊れただけでデータセット全体が傾きます。ここで異常が見えたら、フィルタを書く前に収集側を直したほうが速いことが多いです。この数字は1枚に残しておいてください。後で配合比を決めるときの土台になります。

そしてもう1つ有効なのが、文書を埋め込みベクトルに落として近傍を眺める方法です。コピペ由来の塊、同じテンプレートから量産されたページ、ほぼ同文の再投稿は、近傍として固まって現れます。距離の測り方で「誰が近傍に来るか」が変わることも、先に体感しておいてください。

FIG 1クエリを動かすと近傍の顔ぶれが変わる。データセットの健康診断では、この「近すぎる隣人」がそのまま重複候補になる。内積だと長い文書が割り込んでくる点にも注意

洗う (1) — 品質フィルタは「閾値を決める工程」

品質フィルタは段階的に賢くしていきます。ルール、統計量、分類器。ただしどの段でもやっていることは同じで、各文書にスコア s(x)s(x) を付け、閾値 τ\tau で線を引くだけです。本当の仕事はフィルタを書くことではなく、τ\tau を決めることにあります。

π(τ)=Pr[y=    s(x)τ]\pi(\tau)=\Pr\bigl[\,y=\text{良}\;\bigm|\;s(x)\ge\tau\,\bigr]
(1)

s(x)s(x) は文書のスコア、yy は人間から見た良し悪し、π(τ)\pi(\tau) は残した集団の純度です。言い換えるとτ\tau 以上だけ残したとき、その中で本当に良いものの割合」τ\tau を上げれば純度は上がり、件数は減ります。

決め方は単純です。200〜500件を人手でラベルし、スコア順に並べて、候補ごとに純度と残存率の表を作る。「純度88%・残存60%」と「純度92%・残存25%」のどちらを取るかを、その表を見て決めます。感覚で0.8にしてはいけません。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. Self-Instruct: Aligning Language Models with Self-Generated Instructions. arXiv:2212.10560論文ページ·PDF
  2. LIMA: Less Is More for Alignment. arXiv:2305.11206論文ページ·PDF
  3. The Curse of Recursion: Training on Generated Data Makes Models Forget. arXiv:2305.17493論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です