项目介绍:FineWeb-Edu FastText 分类器
项目概述
FineWeb-Edu FastText 分类器是一个用来判断网页教育价值的快速文本分类器。该模型基于训练数据集 fineweb-edu-llama3-annotations 进行优化训练。该项目有两个主要目标:
- 高效处理能力:能够在CPU上每秒处理超过2000个样本,因此可以在预训练期间或使用CPU处理大量数据时即时使用。
- 轻量模型对比:此模型旨在与基于 Transformer 的模型 HuggingFaceFW/fineweb-edu-classifier 进行对比,以探讨其在有限容量下的表现。
这个 FastText 方法受到另一种关于教育价值定义的独立开发的教育分类器的启发,该分类器可在 kenhktsui/llm-data-textbook-quality-fasttext-classifier-v2 找到。
使用方法
以下是如何在 Python 中使用该模型的基本代码。
from typing import List
import re
from huggingface_hub import hf_hub_download
import fasttext
model_hf = fasttext.load_model(hf_hub_download("kenhktsui/fineweb-edu-fasttext-classifier", "model.bin"))
def replace_newlines(text: str) -> str:
return re.sub("\n+", " ", text)
def predict(text_list: List[str]) -> List[dict]:
text_list = [replace_newlines(text) for text in text_list]
pred = model_hf.predict(text_list)
return [{"label": int(l[0].lstrip("__label__")), "score": s[0]}
for l, s in zip(*pred)]
# 示例预测
predict(["Hi"])
# 输出: [{'label': 0, 'score': 1.00001}]
模型评估
最后的46867个样本被用作测试数据,尽管这并不是和 HuggingFaceFW/fineweb-edu-classifier 使用的完全相同的测试数据。
分类报告
分类表现如下:
precision recall f1-score support
0 0.72 0.44 0.55 5704
1 0.73 0.87 0.80 26595
2 0.52 0.49 0.50 10350
3 0.48 0.33 0.39 3397
4 0.69 0.03 0.06 819
5 0.00 0.00 0.00 2
accuracy 0.68 46867
macro avg 0.52 0.36 0.38 46867
weighted avg 0.67 0.68 0.66 46867
该模型的整体准确率为68%,相较于 Transformer 模型,FastText 模型在标签 0、1、2 上表现较为接近,而在标签 3、4 上性能略有下降。这种下降主要由于 FastText 模型的容量限制。
混淆矩阵和预测偏差
[ 2537 3098 65 4 0 0]
[ 944 23037 2491 123 0 0]
y_true [ 26 4742 5048 533 1 0]
[ 4 434 1846 1105 8 0]
[ 0 38 213 544 24 0]
[ 0 0 0 0 2 0]
y_pred
预测与实际匹配频率上,该模型,总体而言,更可能低估而非高估教育价值。这种表现的保守性有利于在筛选大量数据时使用。
与 Transformer 模型的对比
在超过100万份网页数据中,该模型和原 Transformer 模型在 MiniPile 训练集中的 Spearman 分级相关系数为0.5881,测试集中为0.5832,显示出适度的单调关系。这表明两者之间的教育价值评级具有一定的一致性,但也存在差异。
综上所述,FineWeb-Edu FastText 分类器是一个快速且高效的工具,可以在网页教育价值评估中展示出稳健的性能表现。