edu-classifier / README_ja.md
aya-se's picture
Fix typo
6e0decf

Swallow Education Classifier

概要

日本語ウェブページの教育的価値を判定する fastText 分類器です。本リポジトリには学術カテゴリに属する日本語 Wikipedia テキストを基に訓練された分類器(Wiki-based classifier)と、LLM による自動アノテーションを基に訓練された分類器(LLM-based classifier)が含まれます。前者はCC BY-SA 4.0、後者は自動アノテーションに利用した LLM から継承されるライセンス(Llama 3.1 Community License Agreement、もしくはGemma Terms of Use)で利用できます。

これらの分類器は、Swallow コーパス v2* の品質フィルタリングに採用され、Llama 3.1 Swallowシリーズの訓練に用いられました。実験では、分類器のスコアに基づくフィルタリングの適用により、同等の計算規模の学習で、LLM の日本語知識をより効果的に向上できることを確認しました。

注意:日本語テキストに対して動作するように設計されています。英語を含めて、日本語以外の言語での動作や品質は保証しません。

* Common Crawl 由来の大規模日本語コーパス

使用法

Wiki-based classifier は与えられた文書が Wikipedia らしいかどうかを 0〜1 の確率で出力します。一方、LLM-based classifier は与えられた文書の教育的スコアが 0、1、2、3 のいずれに属するかどうかを 4 ラベル分類問題として予測します。各ラベルの予測確率に基づくスコアの期待値(0〜3)を最終的なスコアとして用いることができます。

pip install numpy==1.26.4 fasttext
from huggingface_hub import hf_hub_download
import fasttext

# テキストの例
text = "Llama 3.1 Swallow\nLlama 3.1 SwallowはLlama 3.1の英語の能力を維持しながら、日本語の能力を強化した大規模言語モデル (8B, 70B) です。"
text = text.replace("\n", " ")

# Wiki-based classifierを使用する場合
model = fasttext.load_model(hf_hub_download("tokyotech-llm/edu-classifier", "wiki.bin"))
res = model.predict(text, k=-1)

## 正例の予測確率を教育的スコアとみなす
edu_score = res[1][0] if res[0][0] == "__label__pos" else 1 - res[1][0]

# LLM-based classifierを使用する場合
model = fasttext.load_model(
    hf_hub_download("tokyotech-llm/edu-classifier", "llm_llama.bin")
)
res = model.predict(text, k=-1)

## 各スコアの予測確率の期待値を教育的スコアとみなす
edu_score = sum([int(label[-1]) * prob for label, prob in zip(res[0], res[1])])

ベストプラクティス

研究では、どちらの分類器も有効であることを確認していますが、多様な文書に適切なスコアを付与したい場合には、LLM-based classifier の使用を推奨します。Wiki-based classifier は Wikipedia らしさを測定するため、有用と判定される文書の範囲が限定され、ほとんどの文書に 0 付近のスコアを付与する傾向にあります。一方、LLM-based classifier は一般的な教育的価値の定義に基づき、より広範囲な文書に対して採点できます。

訓練

いずれの分類器も、fastText で訓練データを 20 エポック学習しました。文字 n-gram (n=2,3) を特徴量に用いました。単語 n-gram は精度向上に繋がらなかったため、採用しませんでした。

Wiki-based classifier

Wikipedia 記事を教育的な文書の正例と見なし、分類器を構築しました。人物に関する記事など、必ずしも教養的とは言えない記事もあるため、学術分野のカテゴリに属する日本語 Wikipedia 記事 37,399 件を抽出し、訓練データの正例としました。また、負例は Swallow コーパス v2 からランダムにサンプリングした文書 37,399 件としました。

LLM-based classifier

FineWeb-Eduを参考に、以下の手順で構築しました。

  1. Swallow Corpus Version 2 からランダムに抽出した 20 万件の文書と、独自に選定したウェブ記事 31,059 件を訓練データとする。
  2. 1.の文書に対して、Llama 3.1 70B Instruct(もしくはGemma 2 27B IT)とプロンプトを用いて、「高度に学術的なトピックか」「深い洞察や議論を提供しているか」「一般向けに分かりやすいか」の 3 つの基準で文書の教育的価値を採点する(3 点満点)。
  3. 2.で自動採点された文書を訓練データとして、fastText で教育的スコアの点数(0、1、2、3)を予測する 4 クラス分類器を訓練する。

謝辞

この成果は、国立研究開発法人新エネルギー・産業技術総合開発機構(NEDO)の委託業務(JPNP18002)、および産総研政策予算プロジェクト「フィジカル領域の生成 AI 基盤モデルに関する研究開発」の結果得られたものです。また、LLM の継続事前学習の実験では、国立研究開発法人産業技術総合研究所が構築・運用する AI 橋渡しクラウド(ABCI: AI Bridging Cloud Infrastructure)の「大規模言語モデル構築支援プログラム」の支援を受けました。

引用

プレプリントの PDF はこちらからダウンロードできます(日本語のみ)

@inproceedings{hattori-2025-swallow-v2,
  author = {服部 翔 and 岡崎 直観 and 水木 栄 and 藤井 一喜 and 中村 泰士 and 大井 聖也 and 塩谷 泰平 and 齋藤 幸史郎 and Youmi Ma and 前田 航希 and 岡本 拓己 and 石田 茂樹 and 横田 理央 and 高村 大也},
  title = {Swallowコーパスv2: 教育的な日本語ウェブコーパスの構築},
  booktitle = {言語処理学会第31回年次大会 (NLP2025)},
  year = {2025},
}