Upgrade to Pro — share decks privately, control downloads, hide ads and more …

東工大Swallowプロジェクトにおける大規模日本語Webコーパスの構築

Kakeru Hattori
February 08, 2024

 東工大Swallowプロジェクトにおける大規模日本語Webコーパスの構築

『第6回 Data-Centric AI勉強会』(2024年2月9日)にて発表
https://dcai-jp.connpass.com/event/307402/

東工大岡崎研究室と横田研究室が研究・開発を行った大規模言語モデル『Swallow』の学習にあたり独自に構築した『Swallowコーパス』は、現時点で商用利用が可能な日本語の言語モデルの学習コーパスの中で最大となっています。本発表では、その概要や具体的なコーパス構築手順について紹介します。

Kakeru Hattori

February 08, 2024
Tweet

More Decks by Kakeru Hattori

Other Decks in Research

Transcript

  1. 自己紹介 服部 翔 Kakeru Hattori 東京工業大学 情報理工学院 情報工学系知能情報コース 岡崎研究室 修士1年 2023年3月 言語処理学会第29回年次大会(NLP2023)

    『クエリ指向要約におけるクエリと要約の統合的な生成』(日立製作所賞) 2023年7月頃〜 東工大Swallowプロジェクトに参加 その他 Web開発(インターン),競プロ(青・休止中) 2 @ayase_lab Kakeru Hattori
  2. Common Crawlは商用利用可能な最大規模のWebクローリングデータ 11 Common Crawl • Webサイトをクローリングしたアーカイブを無償提供している非営利団体 • 現時点でアクセス可能なアーカイブの総量は 251,325,355,174

    ページ 近年は安定的な収集量 日本語の割合は約5% 出典:https://commoncrawl.github.io/cc-crawl-statistics/plots/crawlsize 公式の統計情報を元に独自にグラフ作成
  3. Swallowコーパスの構築ステップ 13 ❶ Swallow-RAW テキスト抽出 + 日本語判定 ❷ Swallow-CLEAN フィルタリング

    + 重複除去 ❸ Swallow-NORM 正規化 + フッター除去 WARCファイルの取得 Step 1 迅速な日本語テキスト判定 Step 2 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 Step 4 品質に基づくフィルタリング Step 5 重複除去(deduplication) Step 6 ホスト名でのフィルタリング Step 7 句読点の正規化 Step 8 フッターの除去 Step 9 63,352,266,406ページ(2020年〜) lang属性とタイトル文のみを活用 HTMLからテキスト部分を抽出 線形分類器で正確に日本語を識別 n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 NFKC正規化適用の為の下処理 Trafilaturaで残った部分を除去
  4. Swallowコーパスの構築ステップ - ❶ Swallow-RAW 15 ❶ Swallow-RAW テキスト抽出 + 日本語判定

    ❷ Swallow-CLEAN フィルタリング + 重複除去 ❸ Swallow-NORM 正規化 + フッター除去 WARCファイルの取得 Step 1 迅速な日本語テキスト判定 Step 2 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 Step 4 品質に基づくフィルタリング Step 5 重複除去(deduplication) Step 6 ホスト名でのフィルタリング Step 7 句読点の正規化 Step 8 フッターの除去 Step 9 63,352,266,406ページ(2020年〜) lang属性とタイトル文のみを活用 HTMLからテキスト部分を抽出 線形分類器で正確に日本語を識別 n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 NFKC正規化適用の為の下処理 Trafilaturaで残った部分を除去
  5. Common CrawlのデータはURLベースで取得可能 16 • URLの構成イメージ(AWSのS3バケットの例) ◦ s3://commoncrawl/crawl-data/[クロール期間名]/[ファイル名] • 約 100

    個 の クロール期間(例:2023年11月〜12月) • 1つの クロール期間 につき,約 80,000 個 の WARCファイル • 1つの WARCファイル につき,約 50,000 個 の Webページ 期間ごとに ファイル一覧を取得 出典:https://commoncrawl.org/get-started
  6. WARC形式はテキスト抽出が必要だが,高い品質を実現できる 17 Common Crawlからダウンロードできるファイル形式は主に2つあるが...... 項目 WET形式 WARC形式 データ形式 抽出済みのテキスト HTML

    テキスト抽出の必要性 なし あり テキスト品質 低い (適切に抽出すれば)高い 日本語コーパス例 CC-100,mC4,OSCAR Swallowコーパス ➔ 既存のWET形式経由の日本語コーパスよりも高い品質で抽出!
  7. Step 2 迅速な日本語判定は一部の日本語テキストを捨てるが、処理高速化に有効 19 テキスト抽出前にいずれか2つを満たすものを日本語と判定 1. HTMLのlang属性が ”ja” である 2.

    HTMLのtitle要素のテキストが日本語である(判定器使用) 適合率 0.89/再現率 0.97/F1スコア 0.926 ➔ 処理時間削減(約14分の1)のメリットの方が上回ると判断 迅速な日本語テキスト判定 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 Step 4 lang属性とタイトル文のみを活用 HTMLからテキスト部分を抽出 線形分類器で正確に日本語を識別
  8. Step 4 日本語判定器を学習してより正確に日本語テキストを残す 20 • 日本語は記号のみで十分に判定できる(意味埋め込みは不要) • 文字n-gramを特徴量に用いて,SVMをWikipediaで学習 ◦ 全言語の学習データから上位400,000件

    ◦ 日本語の学習データから上位400,000件 ◦ 中国語の学習データから上位100,000件 ◦ その他各言語の学習データから上位10,000件 Step 2 迅速な日本語テキスト判定 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 lang属性とタイトル文のみを活用 HTMLからテキスト部分を抽出 線形分類器で正確に日本語を識別
  9. Swallowコーパスの構築ステップ - ❷ Swallow-CLEAN 24 ❶ Swallow-RAW テキスト抽出 + 日本語判定

    ❷ Swallow-CLEAN フィルタリング + 重複除去 ❸ Swallow-NORM 正規化 + フッター除去 WARCファイルの取得 Step 1 迅速な日本語テキスト判定 Step 2 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 Step 4 品質に基づくフィルタリング Step 5 重複除去(deduplication) Step 6 ホスト名でのフィルタリング Step 7 句読点の正規化 Step 8 フッターの除去 Step 9 63,352,266,406ページ(2020年〜) lang属性とタイトル文のみを活用 HTMLからテキスト部分を抽出 線形分類器で正確に日本語を識別 n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 NFKC正規化適用の為の下処理 Trafilaturaで残った部分を除去
  10. Step 5 Step 6 Step 7 繰り返し表現の多い文書や低品質な文書をルールベースで除去 25 • 繰り返し表現は,※n-gramベースのルール等で不適切な文書を除去

    ◦ LLMが同じ単語を繰り返し生成するのを防止するため ◦ 例:(最頻出の◯gramの出現回数/全◯gramの出現回数) ≧ 0.2 • 日本語の品質については,※独自のルールを適用 ◦ 例❶:平仮名の文字が20%未満,カタカナの文字が50%以上 ◦ 例❷:NG表現(Hentai Wordなど)の文字割合が5%以上 品質に基づくフィルタリング 重複除去(deduplication) ホスト名でのフィルタリング n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 ※フィルタリングの全ルール一覧は補足資料❶に掲載
  11. 重複除去(deduplication)によりコーパスの「丸暗記」を防止する 26 • Common Crawlは同一のWebサイトを異なる時期に巡回する ➔ LLMがコーパスを「丸暗記」しないよう、重複は除去 • 重複除去は,※MinHash による特徴量集合の重複判定で行う

    ◦ 全ての文書を文字5-gramの特徴量集合に変換し,一致度を近似計算 ※MinHashによる重複検知アルゴリズムの詳細は補足資料❷で解説 Step 5 Step 6 Step 7 品質に基づくフィルタリング 重複除去(deduplication) ホスト名でのフィルタリング n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用
  12. 重複除去を行うと,古い時期のクローリングは20%程度しか残らない 27 重複した場合は新しい方を残すため,古い時期の文書はかなり少なくなる Step 5 Step 6 Step 7 品質に基づくフィルタリング

    重複除去(deduplication) ホスト名でのフィルタリング n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 〜2022年は20%程度しか残らない!
  13. ホスト名に基づくフィルタリングで有害な文書をさらに除去する 28 • Step 5 に加えて,さらにホスト名ベースで有害な文書を除去 ◦ UT1 blocklist に収録されている

    ◦ 出会い系サイトのサービス名が含まれるページの割合が0.1%以上 ◦ 全ページのテキストに対してNG表現を含む割合が0.5%以上 ◦ *wikipedia.org ◦ *.5ch.net Step 5 Step 6 Step 7 品質に基づくフィルタリング 重複除去(deduplication) ホスト名でのフィルタリング n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 日本語文書に特化した オリジナルのルールを追加
  14. Swallowコーパスの構築ステップ - ❸ Swallow-NORM 30 ❶ Swallow-RAW テキスト抽出 + 日本語判定

    ❷ Swallow-CLEAN フィルタリング + 重複除去 ❸ Swallow-NORM 正規化 + フッター除去 WARCファイルの取得 Step 1 迅速な日本語テキスト判定 Step 2 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 Step 4 品質に基づくフィルタリング Step 5 重複除去(deduplication) Step 6 ホスト名でのフィルタリング Step 7 句読点の正規化 Step 8 フッターの除去 Step 9 63,352,266,406ページ(2020年〜) lang属性とタイトル文のみを活用 HTMLからテキスト部分を抽出 線形分類器で正確に日本語を識別 n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 NFKC正規化適用の為の下処理 Trafilaturaで残った部分を除去
  15. まとめ:Swallowコーパスの構築ステップ(再掲) 33 ❶ Swallow-RAW テキスト抽出 + 日本語判定 ❷ Swallow-CLEAN フィルタリング

    + 重複除去 ❸ Swallow-NORM 正規化 + フッター除去 WARCファイルの取得 Step 1 迅速な日本語テキスト判定 Step 2 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 Step 4 品質に基づくフィルタリング Step 5 重複除去(deduplication) Step 6 ホスト名でのフィルタリング Step 7 句読点の正規化 Step 8 フッターの除去 Step 9 63,352,266,406ページ(2020年〜) lang属性とタイトル文のみを活用 HTMLからテキスト部分を抽出 線形分類器で正確に日本語を識別 n-gramや独自のルールベース MinHashを用いた類似文書の除去 ブロックリストやNG表現の活用 NFKC正規化適用の為の下処理 Trafilaturaで残った部分を除去
  16. Step 1 Step 7 Step 4 Step 2 まとめ:先行研究(RefinedWeb)との差分 34

    WARCファイルの取得 Step 1 迅速な日本語テキスト判定 テキスト抽出(Trafilatura) Step 3 精密な日本語テキスト判定 品質に基づくフィルタリング Step 5 重複除去(deduplication) Step 6 ホスト名でのフィルタリング 句読点の正規化 Step 8 フッターの除去 Step 9 ホスト名でのフィルタリング テキスト抽出(Trafilatura) Step 2 英語テキスト判定 Step 3 品質に基づくフィルタリング Step 4 行内の修正 Step 5 重複除去(deduplication) Step 6 正確な重複除去 Step 7 RefinedWeb https://arxiv.org/abs/2306.01116 UT1 blocklistが そのまま使えた 日本語に特化した 処理を追加 ファイル数が 多い中での工夫
  17. 文書の品質に基づくフィルタリングの詳細(1) 38 重複した表現を多く含む文書の削除 先行研究(MassiveWeb)のルールをそのまま採用 • 他の行と重複する行数 / 全行数(0.30) • 他の段落と重複する段落数

    / 全段落数(0.30) • 他の行と重複する行に含まれる文字数 / 全文字数 (0.20) • 他の段落と重複する段落に含まれる文字数 / 全文字数 (0.20) • 最頻出の 2-gram の出現回数 / 全 2-gram の出現回数 (0.20) • 最頻出の 3-gram の出現回数 / 全 3-gram の出現回数 (0.18) • 最頻出の 4-gram の出現回数 / 全 4-gram の出現回数 (0.16) • 2 回以上出現する 5-gram の総出現回数 / 全5-gram の総出現回数 (0.15) • 2 回以上出現する 6-gram の総出現回数 / 全6-gram の総出現回数 (0.14) • 2 回以上出現する 7-gram の総出現回数 / 全7-gram の総出現回数 (0.13) • 2 回以上出現する 8-gram の総出現回数 / 全8-gram の総出現回数 (0.12) • 2 回以上出現する 9-gram の総出現回数 / 全9-gram の総出現回数 (0.11) • 2 回以上出現する 10-gram の総出現回数 / 全10-gram の総出現回数 (0.10)
  18. 文書の品質に基づくフィルタリングの詳細(2) 39 低品質な日本語を含む文書の削除 • 文字数 (400 文字未満) • 平仮名の文字の割合 (0.2

    未満) • カタカナの文字の割合 (0.5 以上) • 日本語の文字 (平仮名,カタカナ,漢字,句読点)の割合 (0.5 未満) • 文書中の文の文字数の平均 (20 未満,もしくは90 よりも多い場合) • 最も長い文の文字数 (200 文字以上) • 文末が省略記号で終わる文の割合 (0.2 以上)
  19. MinHashの一致は「最小のハッシュ値を取る特徴量が共通であるか」と同義 42 文書A 特徴量名 Hash値 f3 0.1(1位) f1 0.3(3位) f5

    0.4(4位) f2 0.7(7位) f4 0.8(8位) 文書B 特徴量名 Hash値 f3 0.1(1位) f7 0.2(2位) f5 0.4(4位) f6 0.5(5位) f8 0.6(6位) = MinHashの一致 最小のハッシュ 値を取るのが 共通の特徴量 であるかどうか
  20. 複数のハッシュ値をまとめて比較して文書の重複を判定する 43 文書の重複を判定するアルゴリズム 1. MinHash値を b 個連結したもの(バケット)を r 個作成 2.

    r 回の比較の中で一組でも完全一致すれば2つの文書は重複とみなす Jaccard係数 s で 重複と見なされる確率 本研究では b = 20,r = 20 とした ※ K = br の値が大きすぎると メモリ必要量や計算量が多くなり困難が伴う