QLoRA(4-bit NF4)を使って、マルチクラスのCEFR英語能力分類のためにQwen2.5-1.5Bを微調整しました。
目的は英語テキストを6つのCEFRレベル(A1 → C2)のいずれかに分類することです。これは以下に役立ちます:
- 適応型の言語学習システム、
- 配置テスト、
- 可読性推定、
- 教育向けNLPアプリケーション。
データセット
データセットには1,785件の英語テキストが含まれており、以下でバランスが取られています:
- 6つのCEFRレベル、
- 10のドメイン/トピック。
サンプルは以下を用いて合成的に生成されました:
- Groq API
- Llama-3.3-70B
生成の制約は、以下を保持するように設計されました:
- 語彙の複雑さ、
- 文法的な進行、
- 文構造のバリエーション、
- CEFR固有の言語パターン。
トレーニング設定
ベースモデル:
- Qwen2.5-1.5B
微調整手法:
- QLoRA
- 4-bit NF4量子化
- LoRAアダプタ
モデルのパラメータのうち、トレーニングしたのは約0.28%のみです。
結果
ホールドアウトのテストセット:
- 179サンプル
指標:
- Accuracy(正解率):84.9%
- Macro F1:84.9%
レベルごとの再現率:
| Level | Recall |
|---|---|
| A1 | 96.6% |
| A2 | 90.0% |
| B1 | 90.0% |
| B2 | 86.7% |
| C1 | 86.7% |
| C2 | 60.0% |
ほとんどの誤りはC1/C2の混同によるもので、これらのレベル間の微妙な言語的境界を考えると予想される結果です。
デプロイ
また、以下も構築しました:
- FastAPIによる推論API、
- Dockerのデプロイ設定。
使用例
from transformers import AutoModelForSequenceClassification, AutoTokenizer import torch model = AutoModelForSequenceClassification.from_pretrained( "yanou16/cefr-english-classifier" ) tokenizer = AutoTokenizer.from_pretrained( "yanou16/cefr-english-classifier" ) text = "Artificial intelligence is transforming many industries." inputs = tokenizer(text, return_tensors="pt") with torch.no_grad(): outputs = model(**inputs) pred = outputs.logits.argmax(dim=-1).item() print(pred) フィードバックを歓迎します。特に以下について:
- 評価手法、
- 合成データの品質、
- C2分類性能の改善、
- より良いベンチマーク手法。
[link] [comments]




