kana-kanji conversion using n-gram
TRANSCRIPT
![Page 1: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/1.jpg)
N-gram かな漢字変換
真鍋宏史 (Google)
![Page 2: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/2.jpg)
自己紹介
• はてダ: http://d.hatena.ne.jp/takeda25/
• Twitter: @takeda25
• Googleで日本語入力のチームにいます
• 悩みの多い日々を送っています
![Page 3: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/3.jpg)
概要
• N-gram かな漢字変換→低次では精度がよくない→高次の N-gram を利用→ノードが増える→刈り込み
![Page 4: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/4.jpg)
動機
•言語モデル配布 by @gologo13 さん
•現代日本語書き言葉均衡コーパス(BCCWJ)
•大きい
•精度もけっこういい
![Page 5: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/5.jpg)
これまで
•クラス 2-gram by 森信介先生→ Google 日本語入力(Mozc) も
•単語 1-gram、2-gram も
•それなりにうまくいくっぽい?
![Page 6: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/6.jpg)
2-gram やってみる
•「かいじょうではのうさんぶつやとくさんひん、てづくりひんのはんばい、きっさやげーむこーなーなどのてんとがならんだ。」
![Page 7: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/7.jpg)
結果
•「会場では農産物や特産品、手作り品の販売、喫茶やゲームコーナーなどのテントが並んだ。」
![Page 8: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/8.jpg)
完璧!
![Page 9: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/9.jpg)
別のテキスト
•「きょうはいいてんきですね。」
![Page 10: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/10.jpg)
結果
•「今日は言い天気ですね。」
![Page 11: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/11.jpg)
がっかり
![Page 12: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/12.jpg)
なぜか•@gologo13 さんのN-gramデータ:“超短単位”
•品詞情報等なし
•用言の語幹と活用語尾分離
• “言/い い/い ま/ま す/す” とか
![Page 13: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/13.jpg)
2-gram• “今日-は”:自然(コーパスに多くある)
• “は-言”:自然
• “言-い” : 自然
• “い-天気”:自然
•…
![Page 14: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/14.jpg)
全体
• “今日-は-言-い-天気-で-す-ね”:?
![Page 15: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/15.jpg)
超短単位が悪い?•超短単位を捨てる?
• “言い-天気”:不自然とわかる
•超短単位にはいいところも
• “に-言-う”と“に-言-い”が2-gramを共有するので汎用的に扱える
![Page 16: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/16.jpg)
N を増やす
• “言-い-天気”:不自然
•いけそう
• 3-gram にしてみる?
![Page 17: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/17.jpg)
ところで
• 2-gram デコードはどうやるか
![Page 18: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/18.jpg)
共通接頭辞検索•marisa-trie 使用
•検索キーの接頭辞(前からの部分文字列)にマッチするキー・値を返す
•日本語の単語をひらがなで入れたら:「くるまで」→「く」「くる」「くるま」
•それぞれに対する表記候補を列挙
![Page 19: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/19.jpg)
やってみる
•例:「かれがくるまでまつ」
![Page 20: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/20.jpg)
ノードか蚊彼枯れ
レが蛾学額区来る繰る
車流
間 …
![Page 21: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/21.jpg)
連接か蚊彼枯れ
レが蛾学額区来る繰る
車流
間
ある位置で終わるノードとその位置で始まるノードをくっつけて2-gramを調べる
(計算量:ひとつの位置で始まるノード数の2乗)
![Page 22: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/22.jpg)
2-gramか蚊彼枯れ
レが蛾学額区来る繰る
車流
間
の2-gram確率が 来る
が に至るまでの一番もっともらしいルートの確率×
![Page 23: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/23.jpg)
2-gramか蚊彼枯れ
レが蛾学額区来る繰る
車流
間
の2-gram確率蛾 来る
蛾×
に至るまでの一番もっともらしいルートの確率
![Page 24: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/24.jpg)
2-gramか蚊彼枯れ
レが蛾学額区来る繰る
車流
間
どっちが高いか比べる
![Page 25: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/25.jpg)
2-gramか蚊彼枯れ
レが蛾学額区来る繰る
車流
間
高い方の確率を来る に至るまでの一番もっともらしいルートの確率とする
![Page 26: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/26.jpg)
2-gramか蚊彼枯れ
レが蛾学額区来る繰る
車流
間
採用したのがどこだったか覚えておく
![Page 27: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/27.jpg)
2-gramか蚊彼枯れ
レが蛾学額区来る繰る
車流
間
最後まで終わったら、一番もっともらしい左ノードをたどっていく
![Page 28: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/28.jpg)
3-gram
![Page 29: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/29.jpg)
複合ノードか蚊彼
枯れ
レ
が
レレ
が彼 蛾
枯れが蛾
レ が蛾
彼 学彼 額枯れ枯れ
学額
レレ 学
額区
区
すべての2-gramに対してノードを作る元のノード数の2乗のオーダー
![Page 30: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/30.jpg)
注意か蚊彼
枯れ
レ
が
レレ
が彼 蛾
枯れが蛾
レ が蛾
彼 学彼 額枯れ枯れ
学額
レレ 学
額区
区
こういう遷移はあるけど
こういう遷移はない(遷移元ノードが「が」で終わっていない)ので
遷移のオーダーは複合ノード数の2乗(元のノード数の4乗)にはならない
![Page 31: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/31.jpg)
3-gram確率か蚊彼
枯れ
レ
が
レレ
が彼 蛾
枯れが蛾
レ が蛾
彼 学彼 額枯れ枯れ
学額
レレ 学
額区
区
の3-gram確率が
が に至るまでの一番もっともらしいルートの確率×
彼
区彼
![Page 32: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/32.jpg)
計算量
•位置ごとのノード数:元のノード数^2
•連接:元のノード数と同じ
•計算量:元のノード数^3
![Page 33: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/33.jpg)
元々のノード数
•「か」→「か」or「蚊」?
•実際はたくさん「か」→か、蚊、可、香、火、課、化、家、過、価…
•その3乗とかきつい
![Page 34: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/34.jpg)
節約したい
![Page 35: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/35.jpg)
ここに戻ってか蚊彼
枯れ
レ
が
レレ
が彼 蛾
枯れが蛾
レ が蛾
彼 学彼 額枯れ枯れ
学額
レレ 学
額区
区
![Page 36: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/36.jpg)
ここに戻ってか蚊彼
枯れ
レ
が
レレ
が彼 蛾
枯れが蛾
レ が蛾
彼 学彼 額枯れ枯れ
学額
レレ 学
額区
区
こういうノードは本当に要るのか(2-gramもなさそうなノード)
![Page 37: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/37.jpg)
3-gramに必要?か蚊彼
枯れ
レ
が
レレ
が彼 蛾
枯れが蛾
レ が蛾
彼 学彼 額枯れ枯れ
学額
レレ 学
額区
区
蚊 レ がここで の確率がほしいから
蚊 レ のノードが必要?
![Page 38: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/38.jpg)
Backoff
区
蚊 レ が
蚊 レ
の確率がほしい→
蚊 レ が の3-gramが存在しない→
のbackoff scoreと レ が の2-gram確率から計算
![Page 39: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/39.jpg)
Backoff
区
蚊 レ が
蚊 レ
の確率がほしい→
蚊 レ が の3-gramが存在しない→
のbackoff scoreと レ が の2-gram確率から計算
蚊 レ の2-gramが存在しなかったら?→ レ が の2-gram確率しか使わない
蚊 レ のノードは持つ必要がない
![Page 40: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/40.jpg)
手順か蚊彼枯れ
![Page 41: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/41.jpg)
か蚊彼枯れ
レ ←この2-gramはあるとする
手順
![Page 42: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/42.jpg)
←複合ノードを作る
か蚊彼枯れか レ
手順
![Page 43: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/43.jpg)
元ノードは覚えておく
か蚊彼枯れか レ
手順
![Page 44: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/44.jpg)
←この2-gramはないとするか蚊彼枯れか レ
レ
手順
![Page 45: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/45.jpg)
は必要ないので削る
か蚊彼枯れか レ
レ
手順
蚊←蚊
![Page 46: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/46.jpg)
元ノードは覚えておく
か蚊彼枯れか レ
レ
手順
![Page 47: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/47.jpg)
か蚊彼枯れか レ
レ
が ←この2-gramはあるとする
手順
![Page 48: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/48.jpg)
か蚊彼枯れか レ
レ←複合ノードを作る彼 が
手順
![Page 49: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/49.jpg)
か蚊彼枯れか レ
レ
←この2-gramはないとする
彼 が
が
手順
![Page 50: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/50.jpg)
か蚊彼枯れか レ
レ彼 が
は必要ないので削るが
手順
←枯れ 枯れ
![Page 51: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/51.jpg)
か蚊彼枯れか レ
レ彼 が
が
←この3-gramはあるとするが
手順
![Page 52: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/52.jpg)
か蚊彼枯れか レ
レ彼 が
が←3-gramのモデルであれば、次に使うのはレ がレ が ? という3-gramまでなので、
手順
か は捨てる(より高次のモデルなら残す)
か
![Page 53: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/53.jpg)
か蚊彼枯れか レ
レ彼 が
が
←この2-gramはある
レ が
が
手順
![Page 54: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/54.jpg)
か蚊彼枯れか レ
レ彼 が
がレ がレ が ←ここで複合ノードを作るところだが
手順
![Page 55: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/55.jpg)
か蚊彼枯れか レ
レ彼 が
がレ がレ が
←既存のノードとかぶっている
手順
![Page 56: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/56.jpg)
か蚊彼枯れか レ
レ彼 が
がレ がレ が
←2つの確率を比べる
手順
![Page 57: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/57.jpg)
か蚊彼枯れか レ
レ彼 が
がレ がレ が
←より確率の高い左ノードを覚えておく
手順
![Page 58: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/58.jpg)
ここまでの図か蚊彼枯れか レ
レ彼 が
がレ が
![Page 59: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/59.jpg)
文末からたどるか蚊彼枯れか レ
レ彼 が
がレ が
学額
が 来る繰るが来る繰る
![Page 60: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/60.jpg)
複合ノードか蚊彼枯れか レ
レ彼 が
がレ が
![Page 61: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/61.jpg)
左側の要素は自明か蚊彼枯れか レ
レ彼 が
がレ が
![Page 62: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/62.jpg)
省略か蚊彼枯れ
レレ
ががが
![Page 63: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/63.jpg)
次数だけ覚えておくか蚊彼枯れ
レレ
ががが (2)
(2)
(2)
![Page 64: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/64.jpg)
手順まとめ•既存のノードに候補をつなげてN-gram確率を求める
• N-gramが存在しない履歴と最高次の履歴は切り捨てる
•削った結果を新しいノードにするすでにあれば、より確率の高いものを残す
![Page 65: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/65.jpg)
3-gramでも足りない•「ほんをかいたい」を3-gram変換→「本を書いたい」
• “書-い-た”と“い-た-い”はどちらも自然
• 4-gramにすると解決
•「書-い-た-い」vs.「買-い-た-い」
![Page 66: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/66.jpg)
定量的な評価•やってませんごめんなさい
•@nokuno さんが「Ngramかな漢字変換とMozc辞書の比較」という記事を書いてくださっているので見ていただければ…
•その代わり適当な変換例をご覧ください
![Page 67: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/67.jpg)
変換例(成功)•きょうはいいてんきですね→今日はいい天気ですね
•ほんをかいたい→本を買いたい
•ぼくとうみにいかないか→ぼくと海に行かないか(cf. 木刀見に行かないか)
![Page 68: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/68.jpg)
変換例(失敗)
•いちにちじゅうあつかった→一日中扱った
•ほんさいとはきょうでしゅうりょうです→本妻とは京で終了です
![Page 69: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/69.jpg)
課題• 文節区切りがない
→文節区切りのあるデータから学習?
• 文頭・文末の影響が強い→元データは文単位、変換は(数)文節単位、現状は前後に「、」をつけて変換
• まだけっこう遅い→Pythonだから?C++で書いて実用的になったらいいなぁ
• 辞書大きい(60M)→N-gramの格納法工夫?
![Page 70: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/70.jpg)
まとめ•高次N-gramによる変換
•必要ない履歴を削除してコンパクトに
•ヒューリスティックなしにしては結構うまくいってるんじゃないでしょうか
• https://github.com/hiroshi-manabe/ngram-converter
![Page 71: Kana-Kanji Conversion using N-gram](https://reader034.vdocuments.pub/reader034/viewer/2022042607/55b3bf00bb61ebc5088b46d7/html5/thumbnails/71.jpg)
時間があれば
•オンデマンドで変換しますのでお申し付けください(文頭/文末処理の都合上、前後に「、」を足して変換します)