japanese-punctuation-onnx
句読点の無い日本語に、「、」「。」「?」を打つモデル。
概要
音声認識のなかには、句読点を付けずに文字だけを返すものがあります。日本語に強い ReazonSpeech の k2 版(reazonspeech-k2-v2)もそのひとつです。 このモデルは、そうした文字の並びに後から句読点を打ちます。
句読点の位置は、話の間ではなく文の中身から決めます。一息で話した長い文にも「、」「。」が入り、 「〜でしょうか」「〜行かない」のような問いかけには「?」が付きます。 スマートフォンの日本語入力アプリ Nier Voice IME の文字起こしのために作ったもので、 Hugging Face で公開しています。
打ち方の例
どれもこのモデルに実際に通した結果です。丁寧な文にも、くだけた話し言葉にも打てます。
特徴
「、」「。」「?」の3種類
文の切れ目の「。」、息の区切りの「、」、問いかけの「?」を、1文字ごとに判断して打ちます。
話し言葉に合わせて学習
国会の質疑や記者会見の口頭のやり取り、日常の例文、小説の会話文で学んでいます。「〜だろう?」のような会話の問いかけも学習に含めています。
端末の中で動く
ONNX の int8 版で約92MB。Unihertz Titan 2 では、ひと区切りの文を十数〜200ミリ秒ほどで処理します。通信は要りません。
文字をそのまま入力に
1文字を1つの単位として扱うので、辞書や形態素解析を用意せずに使えます。vocab.txt を引くだけで入力が作れます。
精度
実際の口述74本を ReazonSpeech の k2 版で文字にし、句読点を打った結果を、同じ音声を Whisper で起こしたときの句読点と比べました。 数字は一致の度合いを表す F1 で、1.0 に近いほど一致しています。
| 、 | 。 | ? | |
|---|---|---|---|
| 区切りの語尾で打つ規則(比較用) | 0.35 | 0.69 | — |
| このモデル | 0.70 | 0.88 | 0.79 |
口述は話し手1人のもので、正解の代わりに Whisper の句読点を目安にしています。 「、」は人によって打つ位置が揺れるため、数字は目安としてご覧ください。 語尾の上げ下げだけで問いかけと分かる文(「〜できる」を上げて言うなど)は、文字からは判断しきれないことがあります。
使い方
Hugging Face のページから punct.int8.onnx と vocab.txt を取得し、ONNX Runtime で読み込みます。
文字を1つずつ vocab.txt で番号にして渡すと、文字ごとに「なし/、/。/?」の4通りの点数が返ります。
入力の形と Python の短い例は、Hugging Face のページに載せています。一度に渡せるのは510文字までです。
学習データとライセンス
モデルは Apache License 2.0 で公開しています。土台は東北大学の文字単位 BERT (tohoku-nlp/bert-base-japanese-char-v3)です。 学習には次のデータを、句読点の正規化などの加工をして使いました。
国会会議録(国会会議録検索システム)/ 防衛省ウェブサイト「防衛大臣記者会見」(公共データ利用規約 第1.0版)/ Tatoeba(CC BY 2.0 FR)/ 青空文庫の会話文(globis-university/aozorabunko-clean、CC BY 4.0)