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?

[Android] 英語の辞書を作成して自作の IME に搭載する [Kotlin]

Posted at

概要

自作 Android キーボード Sumire では、英語予測変換を 1 つの LOUDS Trie だけで実装していました。そのため github と入力しても GitHub のような途中に大文字を含む単語を候補に出せませんでした。

目指したこと

Mozc が採用する 読み用 Trie・単語用 Trie・Token 配列 の 3 層構造を応用し、アルファベット入力から CamelCase(途中大文字)単語も正確に提示できるようにすること。

WikiText

WikiPedia の文章をベースにした言語モデリング用コーパスを利用してユニグラム、品詞とスコアを付与したテキストファイルを作成しました。約217,000 の単語を取得することができました。そのうち CamelCase の英単語は約 3,400 でした。

手順 内容
① コーパス取得 HuggingFace から WikiText-103 をダウンロード
② 1-gram 抽出 spaCy(NER 有効)で約 217,000 語を取得
③ スコア計算 出現確率 P(word) から score = −log P を算出
④ 辞書生成 読み LOUDS(小文字)、単語 LOUDS(CamelCase)、Token 配列へ変換
⑤ 自動化 GitHub Actions で TSV → LOUDS/Token を生成し Release に公開
1-grams_score_cost_pos_combined_with_ner.txt(一部)
input_word  output_word pos_tag         score
new         New         GPE             2920
time        Time        WORK_OF_ART     3319
game        Game        ORG             4113

LOUDS と Token 配列

Mozc のかな漢字変換に使用されているデータ構造は、読みと単語の Trie と Token の配列から構成されています。読みの Trie に小文字の文字列を、単語の Trie にはCamelCase の英単語を登録すれば良いと考えました。また単語の Trie にはCamelCase の英単語のみを登録して、小文字、大文字、一番目の文字が大文字の単語は Token のなかに同値表現を示すフラグのみを保持して圧縮するようにしました。

ファイル サイズ 備考
1-grams_score_cost_pos_combined_with_ner.txt 6.3 MB 1-gram+スコア+品詞
読み LOUDS 2.3 MB 小文字のみ
単語 LOUDS 37 kB CamelCase のみ
Token 配列 1.4 MB 大小・同値表現をフラグ化

まとめ

githu と入力すると GitHub と予測変換で表示することができて打ち間違えることがなくなった!

Screen_recording_20250716_001527.gif

成果物

参照

辞書と言語モデルの効率のよい圧縮とかな漢字変換への応用

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?