自動読点挿入 AI (MA) - v2 (ONNX / Transformers.js)
このモデルは、日本語の文章に対して適切な位置に自動で「読点(、)」を挿入するための軽量な自然言語処理モデルです。
ブラウザ上で高速に動作する Transformers.js (ONNX Runtime Web) 向けに最適化されています。
モデルの概要
- Architecture: DeBERTa-v2 (Tiny 相当)
- Task: Token Classification (B-COMMA の予測)
- Parameters: 約2280万パラメータ
- Model Size: 約 23.3 MB (ONNX形式)
- Language: 日本語
- Performance (v2): F1: 0.7481 / Precision: 0.8145 / Recall: 0.6953
使い方 (Transformers.js)
WebサイトやJavaScript/TypeScriptのアプリケーションに直接組み込むことができます。
【重要】 WebAssembly環境特有の精度低下を補正するため、標準の pipeline は使用せず、生の出力値(Logits)から確率を算出して閾値調整を行う実装を強く推奨します。
import { AutoTokenizer, AutoModelForTokenClassification } from '@xenova/transformers';
// モデルのロード
const tokenizer = await AutoTokenizer.from_pretrained('m4sak1/MA');
const model = await AutoModelForTokenClassification.from_pretrained('m4sak1/MA', {
quantized: false
});
// 推論
const text = "明日は雨が降るそうなので傘を持っていこうと思います";
const inputs = await tokenizer(text);
const outputs = await model(inputs);
const logits = outputs.logits.data;
const seqLen = outputs.logits.dims[1];
let predictedStr = '';
const chars = Array.from(text);
const PROB_THRESHOLD = 0.37; // WASM用の調整閾値(数値を下げるとAIが敏感になります)
for (let i = 0; i < seqLen; i++) {
const l0 = logits[i * 2];
const l1 = logits[i * 2 + 1];
// Softmaxで確率を計算
const max = Math.max(l0, l1);
const e0 = Math.exp(l0 - max);
const e1 = Math.exp(l1 - max);
const prob1 = e1 / (e0 + e1);
if (i > 0 && i <= chars.length) {
predictedStr += chars[i - 1];
if (prob1 > PROB_THRESHOLD) predictedStr += '、';
}
}
console.log(predictedStr);
// 予想出力: "明日は、雨が降るそうなので、傘を持っていこうと、思います"
学習データ
Wikipediaの日本語ダンプデータを使用し、自然な読点の位置を学習しています。 v2アップデートにおいて、約240万文(Phase 2)の大規模コーパスへとデータセットを拡張しファインチューニングを行いました。
- 出典: Wikipedia 日本語版 (CC BY-SA 3.0/4.0)
- 著作権法第30条の4(情報解析のための複製等)に基づき学習
制限事項・注意点
- コンテキスト長: 学習時の最大シーケンス長は512トークン(約500文字)です。長文を処理する場合は、アプリケーション側で文単位(句点など)でチャンク分割して処理することを推奨します。
- 精度: 完璧な日本語文法を保証するものではありません。あくまで「人間が自然に息継ぎをする、または意味の切れ目となる場所」を確率的に予測します。
ライセンス
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
詳しくはこちら → https://ai.m4sak1.me/MA