1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【python】機械学習ベースの英語-カタカナ変換ライブラリの比較

1
Last updated at Posted at 2025-08-18

はじめに

english -> イングリッシュ、みたいに英語テキストをカタカナに変換する方法を調べました。
未知語にも強い機械学習ベースの実装として、e2kenglish2kanaという2つのライブラリを試してみます。

環境

  • macOS 14.7
  • Python 3.12
  • uv

e2k

概要

Wictionaryなどの辞書で学習されたRNNベースのモデルを使用しています。

  • インストール: pip install e2k
  • ライセンス: Public Domain
  • モデル: RNN
  • 学習データ: Wiktionary, JMdict, EDICT
  • 機能: 文字変換(c2k)以外に音素変換(p2k)、アクセント推定、N-gram推定による未知語処理などが可能
  • 精度: BLEUスコアがC2Kで0.92、P2Kで0.89
  • 速度: 比較的高速
  • URL: https://github.com/Patchethium/e2k

使い方

英単語の読み方は、通常のスペル読み(english -> イングリッシュ)と、アルファベットを1文字ずつ読む綴り読み(MVP -> エムブイピー)の2種類があります。

メインの文字変換クラスC2Kは基本スペル読みをします。そこで、e2kではNGramというクラスによって、どちらの読み方をすべきか判定することができ、これを用いることが推奨されています。

uv add e2k
from e2k import C2K
from e2k import NGram

ngram = NGram()

# characters directly to katakana
c2k = C2K()

def convert(english: str) -> str:
    if ngram(english):
        return c2k(english)   
    else:
        return ngram.as_is(english.lower()) # 小文字で入力必要

print(convert("english")) # イングリッシュ
print(convert("MVP")) #エムヴィーピー

english2kana

概要

法人名データで学習されたSequence-to-Sequenceモデルを使用しています。

  • インストール: pip install english2kana
  • ライセンス: MIT
  • モデル: Sequence-to-sequence
  • 学習データ: 法人名データ(日本の法人番号サイト由来)
  • 機能: 文字変換
  • 精度: Test Loss: 0.1440、Test Accuracy: 0.9552
  • URL: https://github.com/m7142yosuke/english2kana

使い方

english2kana.translateにより変換が可能です。こちらのライブラリではスペル読みか綴り読みかも含めて内部的に判断してくれるようです。

uv add english2kana
from english2kana import english2kana

# Initialize the translator
e2k = english2kana()
# Load the pretrained model
e2k.load_model()

def convert(english: str) -> str:
    return e2k.translate(english)

print(convert("english")) # エングリッシュ
print(convert("MVP")) #エムブイピー

比較

方法

両ライブラリを共通の評価データで、精度と速度について比較してみます。

評価データとして、英語とカタカナのペアが多数収録されているbep-eng.dicを用いました。このデータは両ライブラリにおいて学習データに用いられていません。

bep-eng.dicからランダムに100件のデータを取得し、これを正解、出力との完全一致精度、編集距離、カナ類似度を評価します。完全一致精度は正解と出力が完全一致した件数の割合です。本当は完全一致精度だけで評価できると良かったのですが、カナ変換においては例えば「ティ」と「チ」など、どちらが正解とも言いにくいものがあるため、もう少しゆるい指標もあったほうが良いと思われました。そこで、正解と出力の文字ベースの編集距離や母音・子音の類似も考慮した編集距離(カナ類似度)も合わせて観察することにしました。

評価スクリプトは以下に置きました。

結果

Accuracyは高いほど、Average Edit DistanceとAverage Kana Distanceは低いほど優れた指標となります。

e2k english2kana
完全一致精度 36% 25%
編集距離 0.236 0.371
カナ類似度 0.1575 2.356
変換速度/1件 40 ms 434 ms

考察

精度、速度ともにe2kベースのほうが優れている結果となりました。
速度については、e2kの実行時間が約1/10と短く、実行時間に含まれない、モデルロード時間も含めると、e2kに軍配がありそうです。

精度については定量的にはe2kのほうが優れているという結果でしたでしたが、間違い事例を目視してみると、意外と差がないというか、むしろ、english2kanaのほうが感覚に合うのでは、と思う結果もありました。

共通で間違えられた評価アイテムのうちいくつかを記載します。

正解 1.e 2k 2. english2kana 評価者メモ
ANTIBODY アンティボディー アンチボディー アンティボディ どちらもほぼ正解だが2のほうがより正解に近い
INDURATED インデュレイティドゥ インドレーテッド インデュラテッド どちらもほぼ正解
BOARDED ボーディドゥ ボード ボーデッド 1の間違え方が激しい。2はほぼ正解
TUCSON ツーソン タックスン ティーユーシーオーエヌオー 2は誤って綴り読み

間違え方的にはenglish2kanaのほうが許容しやすいものも多く、実行時間がシビアでない用途であれば、出力傾向の好みを見ながら使い分けるのもありだと思いました。

ちなみに、TUCSONのように、english2kanaではスペル読みすべきものを綴り読みする事例が見られたため、念の為、english2kanaの評価でもe2kのNGramによる判定処理を入れたバージョンでも評価してみました。以下のような結果となりました。数値に表れている通り、数値的な精度向上は特に見られませんでした。

Accuracy: 25.00%
Average Edit Distance: 0.388
Average Kana Distance: 2.459
Time: 0.428 seconds / per item

関連実装

英語-カナ変換は従来だと辞書ベースのものが主流でした。

辞書ベース(特にbep-eng.dic)は一般的な単語については感覚にマッチするカナが得られてよいのですが、未知語の対応がネックになります。またbep-eng.dicはGPL v2ライセンスのため、ユースケースによっては採用が難しいこともあります。

比較すると、今回紹介したe2kとenglish2kanaはライセンス的にはOSSで使いやすく、未知語に対してもある程度、感覚にあう推定結果が得られる利点があります。

おわりに

機械学習ベースの英語-カナ変換ライブラリを試してみました。
過去に調べたときは辞書ベースの方法しか見つからなかったのですが、この1年くらいで、機械学習ベースの実装が複数公開されたようです。
e2kとenglish2kanaを比較してみたところ、数値上はe2kのほうが優れていましたが、今回の評価方法がどの程度妥当かは議論の余地があります。実際に結果を眺めると、english2kanaのほうが良いと思える出力も多く、好みやユースケースに応じて使い分けるのが良いかなと思いました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?