【RefinedWeb】The Pile よりも高性能なデータセット

以前 The Pile というデータセットを解説しました。

https://qiita.com/kernelian/items/8f7a000cc907c14ae491

今回は、その The Pile よりも性能がよい（学習したモデルの性能が高くなる）データセットである 「**RefinedWeb**」を紹介します。

## 課題

### データ集めは重要だが、大変

最近の生成 AI はめちゃくちゃ性能が良いですが、生成 AI の性能の高さを上げるにはモデルサイズとデータセットのサイズの両方をスケーリングすることが重要です。

ただ、データのスケーリングは中々ハードルがあります。
インターネット上に無限にデータがあるように見えても、品質やライセンスを考えると使えるデータは無限ではないからです。
GPT-3 レベルのモデルを学習するためには、少なくとも3.5兆トークンのテキストが必要と言われており、先述した The Pile なんかは 10 分の 1 に満たないです。

### 高品質なデータ集めはコストが高い

いわゆる高品質なデータは、キュレーションされたデータです。
キュレーション（Curation）は、情報やコンテンツを選別し、整理することです。つまり、元データをそのまま使うのではなく、人間が手でデータから情報を引っこ抜いていい感じのデータを作るということです。

様々な本や論文、ウェブ、SNS からキュレーションされたデータを用いて学習することで性能の良い AI が作れることがわかってはいるものの、キュレーションしたデータを作る作業は労働集約的な活動で、コストが非常に高いです。

### データが悪いとモデルの性能も悪い

Pre-training をするために、人間がほぼコストを払わず、クローリングや機械的なクレンジングだけでデータを集めることも考えられます。
ただ、結局のところ、機械的に作られたデータは、手作業でキュレーションされたデータに比べて品質が悪いことが多いです。
なので、作られるモデルのパフォーマンスも悪くなることがわかっています。

## 解決策は？

先ほど、機械的に作成したデータセットが品質が悪いと言いましたが、適切なデータの処理を行うことで品質を向上させることができます。

本ページで解説している RefinedWeb は、CommonCrawlからのウェブデータのフィルタリングと重複排除のためのパイプライン MDR（MacroData Refinement） でデータセットの品質を向上させています。

## MDR とは？

RefinedWeb は以下の設計原則を持ちます。
- 3-6 兆トークンのデータ量
- 厳格な重複削除
- バイアスをかけず、フィルタリング

### 文書の準備

#### データの読み取り
CommonCrawl は、WARC（生の HTML 応答）または WET ファイル（純粋なテキストのみを含むように前処理されたもの）のいずれかで利用可能です。

個々のファイルは、特定の URL でのページに対応しており、これらは単一の文書／サンプルを構成します。WET ファイルを利用すれば、自分で HTML 抽出を実行する必要がなくなります。

しかし、WET ファイルには望ましくないナビゲーションメニューや広告、その他の関連性のないテキストが含まれていることがわかっており、そのため、MDR では、warcio ライブラリを使用して生のWARC ファイルを用いる。

#### URLフィルタリング

MDR で計算集約的な処理を行う前に、URL に基づいたフィルタリングを行います。

これは、詐欺や成人向けウェブサイト（例えば、主にポルノ、暴力、ギャンブル関連など）をターゲットにします。

このとき 2 つのルールに基づいてフィルタリングを行います
1. 460万ドメインの集約されたブロックリスト
1. 研究チームでキュレートして重大度で重み付けした単語リストに基づく URL スコア
    - 一般的に使用されるブロックリストには、人気のあるブログプラットフォームやポップカルチャーウェブサイトなど、多くの誤検知が含まれていることがわかっている。
    - C4 で使用されるような単語ベースのルールは、医療や法律のページがブロックされる結果となりやすい。
    - RefinedWeb がキュレートされたコーパスとともに集合データセットの一部として使用されることを意図しているため、Wikipedia、arXiv などの高品質なデータの一般的なソースもフィルタリングした。

#### テキスト抽出
メニュー、ヘッダー、フッター、広告などを無視し、ページのメインコンテンツのみを抽出したいです。
このとき、trafilatura という非商用のライブラリを用いるのがよいため、テキスト抽出には trafilatura を使用し、かつ正規表現で連続する改行を2つに制限し、すべてのURLを削除するといったフォーマットを適用します。

#### 言語識別
文書レベルで CCNet の fastText 言語分類器を使用しています。これは文字 n-gram を使用し、Wikipedia で訓練され、176 言語に対応しています。トップ言語のスコアが 0.65 未満の文書は削除します。これは通常、自然なテキストを含まないページに相当します。

#### ここまでの処理により残った文書の割合
この段階で取得するデータは、RW-RAWと呼ばれ、最小限のフィルタリングで抽出できるものに相当します。この段階では、元の文書のうち 48 ％のみが残っており、そのほとんどは言語識別によってフィルタリングされています。

### 文書単位と行単位のフィルタリング

#### 繰り返しの除去

クローリングのエラーや低品質のソースにより、多くの文書には繰り返しシーケンスが含まれています。
これは最終的なモデルで問題を引き起こす可能性があります。このコンテンツは後の重複排除段階で捕捉することができますが、文書単位で早期に捕捉する方が安価で簡単です。

この処理では、行、段落、または n-gram の繰り返しが過剰な文書をヒューリスティックに除去します。


#### 文書単位のフィルタリング
ページのかなりの割合は、キーワードのリスト、定型文、特殊文字のシーケンスで構成された機械生成スパムです。

このような文書は言語モデリングには適していません。これらを除外するために、品質フィルタリングヒューリスティック手法を採用します。
これらは、全体的な長さ、記号と単語の比率、および文書が実際の自然言語であることを保証するその他の基準において外れ値を除去することに焦点を当てています。

これらのフィルタは、無造作に英語から他の言語に移行されると過度のフィルタリングになる可能性があるため、言語ごとに適応する必要があることに注意してください。

#### 行単位の修正

事前処理されたファイルに依存するのではなく、trafilatura を使用することで改善されたにもかかわらず、多くの文書には望ましくない行（例えば、ソーシャルメディアカウンターの「3いいね」、ナビゲーションボタンなど）が織り交ぜられたままです。
そのため、これらの望ましくない項目を対象とする行修正フィルターを考案しました。これらの修正により文書の 5 ％以上が削除される場合は、文書全体を削除します。

#### ここまでの処理により残った文書の割合
この段階で取得するデータは、MDR パイプラインのすべてのフィルタリングヒューリスティックを通過しました。このデータセットを RW-FILTERED と呼びます。CommonCrawl の文書のうち 23 ％のみが残っており、RW-Raw の文書の約 50 ％がフィルタリングによって削除されました。

### 重複排除：曖昧な重複、正確な重複、そしてダンプ間での重複排除

フィルタリング後、データの品質は向上しましたが、大量のコンテンツが文書間で繰り返されています。
これは、
- クローラーが間接的に同じページを複数回ヒットするため
- 定型文が繰り返されるため（例：ライセンス）
- 盗用のため
です。

これらの重複はモデルに強い影響を与え、一般化ではなく記憶を促進する可能性があります。重複排除は費用がかかるため、公開データセットでは限定的な採用にとどまることが多いです。

この研究では積極的な重複排除戦略を採用し、曖昧な文書のマッチングと正確なシーケンスの除去を組み合わせています。

#### 曖昧な重複排除

MinHash（Broder, 1997）の手法を適用して類似の文書を削除します。

各文書についてスケッチを計算し、他の文書との近似的な類似性を測定し、最終的に高い重複度を持つペアを削除します。MinHash は、特定のエンティティだけが異なるライセンス、ウェブサイト間で繰り返されるプレースホルダー SEO テキストなどのテンプレート文書の発見に優れています。

MinHash 重複排除を、5-grams で計算し、450 のハッシュを含む 20 のバケットに分割された、文書ごとに 9,000 のハッシュを使用して実行します。

The Pile の 10 ハッシュのような積極的でない設定を使用すると、重複排除率が低下し、モデルのパフォーマンスが悪化します。MinHash設定についての詳細が知りたい人は論文を参照してください。

#### 正確な重複排除

正確な部分文字列は、文書レベルではなく、シーケンスレベルで操作し、トークンごとに正確に一致する文字列間のマッチングを見つけます。
これは、suffix array の手法を使用して行います（例：特定の免責事項や通知等）。50 個以上の連続トークンのマッチングを Lee et al.（2022）の手法の実装を使用して削除します。正確な部分文字列は、特定の範囲を削除することで文書を変更します。

完全な文書を削除するか、重複した文字列をカットする代わりに損失マスキングすることも試しましたが、これはゼロショットパフォーマンスにおいて有意な変化をもたらしませんでした。

#### URL重複排除

計算上の制約のため、RW-Filtered 上で直接重複排除を実行することは不可能です。代わりに、CommonCrawl を 100 部分に分割し、各部分が各ダンプの 100 分の 1 を含むようにし、個々の部分について重複排除を行います。

より大きな重複クラスター（例：ライセンス、一般的なスパムなど）は部分間で共有され、効果的に除去されます。しかし、CommonCrawl のダンプにはかなりの重複があり、内容に変更がないにもかかわらず、URL がダンプ間で再訪されることがわかりました。したがって、処理される後続の部分からそれらを削除するために、我々が保持した各部分からのすべてのサンプルのURLのリストを保持します。

## 処理をした結果

上記のような処理を行ってデータセットを作って AI を学習します。
結果、The Pile のような他の主要なデータセットを使ってモデルを学習したときよりも、パフォーマンスの向上が見られました。

## まとめ

モデルの学習をする際にデータをどうするかは非常に問題になりやすい点です。
キュレーションによるデータの生成はコストが高く、個人レベルであればそんな予算もなく難しいです。

今回の研究のように、機械的な処理をうまいこと組み合わせることで、モデルのパフォーマンスを向上させることができたという点は朗報ですね。

おわり。