文字起こしの精度を自分で測る方法|文字誤り率(CER)をPythonで計算する
文字起こしのツールを比べる時、「精度が高い」という宣伝の言葉だけでは、自分の声と話し方でどうなるかは分かりません。同じ原稿を読み上げて、間違えた文字の割合を数えると、ツールごとの差を数字で比べられます。この割合を文字誤り率(CER:Character Error Rate)と呼びます。この記事では、CERの計算方法と、Pythonで計算する短いコード、筆者が試した計算例を示します。
(確認:コードは筆者のPC(Python 3.13)で実行。CERの考え方は、音声認識の評価で一般的に使われる「編集距離」にもとづく筆者の説明です。特定のツールの精度は、この記事では測っていません)
文字誤り率(CER)の考え方
CER =(置き換え + 抜け + 余計な文字)÷ 正解の文字数
- 置き換え:「止まります」が「泊まります」になった(1文字)
- 抜け:正解にある文字が、文字起こしにない
- 余計な文字:正解にない文字が、文字起こしに入った
この3つの合計は、2つの文字列の編集距離(レーベンシュタイン距離)として計算できます。CERは低いほど正確です。
Pythonのコード
# 文字誤り率(CER)=(置換+削除+挿入)÷ 正解の文字数。編集距離で数える
def edit_distance(ref, hyp):
prev = list(range(len(hyp) + 1))
for i, r in enumerate(ref, 1):
cur = [i]
for j, h in enumerate(hyp, 1):
cur.append(min(prev[j] + 1, cur[j - 1] + 1, prev[j - 1] + (r != h)))
prev = cur
return prev[-1]
def cer(ref, hyp):
ref = ref.replace(" ", "").replace("、", "").replace("。", "") # 句読点と空白は数えない
hyp = hyp.replace(" ", "").replace("、", "").replace("。", "")
return edit_distance(ref, hyp) / len(ref)
ref = "MT5のEAはパソコンを閉じると止まります。VPSで動かせば止まりません。"
hyp = "MT5のEAはパソコンを閉じると泊まります。VPSで動かせば止まりません"
print(f"CER = {cer(ref, hyp):.1%}")
筆者のPCで実行した結果は、正解35文字のうち誤り1文字、CER=2.9%でした(句読点を除いて数えています)。
ツールを比べる手順
- 原稿を用意する:記事でよく使う言葉(固有名詞、数字、カタカナの専門用語)を入れた、300〜500文字くらいの文章
- 同じ条件で読み上げる:同じ部屋・同じマイク・同じ速さ。1回録音したファイルを、各ツールに読ませるのが公平です
- 表記をそろえる:数字の全角・半角、「1つ」と「一つ」のような違いは、どちらに合わせるか決めて、両方を同じように直してから数える
- CERを計算する:上のコードの ref に原稿、hyp に文字起こしの結果を入れる
- どこで間違えたかも見る:専門用語ばかり間違えるなら、単語登録の機能があるツールで改善する場合があります
数字の読み方(筆者の考え)
| CER | 500文字の原稿での誤り | 下書きとしての使いやすさ |
|---|---|---|
| 2% | 約10文字 | 読み直しで直せる |
| 5% | 約25文字 | 手直しは多いが、材料にはなる |
| 10% | 約50文字 | 読み直しの手間が大きい |
誤りの文字数は、CER×500で計算しています(筆者の計算)。どこまでなら許せるかは、記事を書く人の手直しの速さで変わります。
注意
- 句読点は、ツールによって付け方が大きく違うため、このコードでは数えていません。句読点の付き方も比べたい時は、除外の行を消して計算します
- 話者が複数の録音や、雑音の多い録音では、CERは大きく変わります。比べる時は条件をそろえます
- このコードは、数千文字程度の比較を想定しています。長い文章では計算に時間がかかります
音声メモから記事を作る流れと、Windowsの音声入力・文字起こしサービスの使い分けは音声メモから記事の下書きを作る流れ、録音ファイルの容量は録音ファイルの容量の計算にあります。
テスト用の原稿の作り方
原稿には、自分の記事でよく使う言葉を入れます。たとえば当サイトなら、次のような文が考えられます。
MT5のEAをVPSで動かす時は、メモリを4GB以上にします。
ストラテジーテスターの最適化は、論理プロセッサの数だけ並べて計算します。
確定申告の期限は、翌年の3月15日です。
英字(MT5・EA・VPS)、数字(4GB・3月15日)、専門用語(論理プロセッサ・最適化)が入っていると、ツールごとの得意・不得意が見えやすくなります。
まとめ
- 文字誤り率(CER)=(置き換え+抜け+余計な文字)÷正解の文字数。編集距離で計算できる
- 筆者の計算例では、35文字中1文字の誤りでCER 2.9%
- 同じ録音を各ツールに読ませ、表記をそろえてから比べる
本記事は比べ方の説明であり、特定のサービスを勧めるものではありません。


