kana-kanji conversion using n-gram

71
N-gram かな漢字変換 真鍋宏史 (Google)

Upload: takeda25

Post on 25-Jul-2015

777 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Kana-Kanji Conversion using N-gram

N-gram かな漢字変換

真鍋宏史 (Google)

Page 2: Kana-Kanji Conversion using N-gram

自己紹介

• はてダ: http://d.hatena.ne.jp/takeda25/

• Twitter: @takeda25

• Googleで日本語入力のチームにいます

• 悩みの多い日々を送っています

Page 3: Kana-Kanji Conversion using N-gram

概要

• N-gram かな漢字変換→低次では精度がよくない→高次の N-gram を利用→ノードが増える→刈り込み

Page 4: Kana-Kanji Conversion using N-gram

動機

•言語モデル配布 by @gologo13 さん

•現代日本語書き言葉均衡コーパス(BCCWJ)

•大きい

•精度もけっこういい

Page 5: Kana-Kanji Conversion using N-gram

これまで

•クラス 2-gram by 森信介先生→ Google 日本語入力(Mozc) も

•単語 1-gram、2-gram も

•それなりにうまくいくっぽい?

Page 6: Kana-Kanji Conversion using N-gram

2-gram やってみる

•「かいじょうではのうさんぶつやとくさんひん、てづくりひんのはんばい、きっさやげーむこーなーなどのてんとがならんだ。」

Page 7: Kana-Kanji Conversion using N-gram

結果

•「会場では農産物や特産品、手作り品の販売、喫茶やゲームコーナーなどのテントが並んだ。」

Page 8: Kana-Kanji Conversion using N-gram

完璧!

Page 9: Kana-Kanji Conversion using N-gram

別のテキスト

•「きょうはいいてんきですね。」

Page 10: Kana-Kanji Conversion using N-gram

結果

•「今日は言い天気ですね。」

Page 11: Kana-Kanji Conversion using N-gram

がっかり

Page 12: Kana-Kanji Conversion using N-gram

なぜか•@gologo13 さんのN-gramデータ:“超短単位”

•品詞情報等なし

•用言の語幹と活用語尾分離

• “言/い い/い ま/ま す/す” とか

Page 13: Kana-Kanji Conversion using N-gram

2-gram• “今日-は”:自然(コーパスに多くある)

• “は-言”:自然

• “言-い” : 自然

• “い-天気”:自然

•…

Page 14: Kana-Kanji Conversion using N-gram

全体

• “今日-は-言-い-天気-で-す-ね”:?

Page 15: Kana-Kanji Conversion using N-gram

超短単位が悪い?•超短単位を捨てる?

• “言い-天気”:不自然とわかる

•超短単位にはいいところも

• “に-言-う”と“に-言-い”が2-gramを共有するので汎用的に扱える

Page 16: Kana-Kanji Conversion using N-gram

N を増やす

• “言-い-天気”:不自然

•いけそう

• 3-gram にしてみる?

Page 17: Kana-Kanji Conversion using N-gram

ところで

• 2-gram デコードはどうやるか

Page 18: Kana-Kanji Conversion using N-gram

共通接頭辞検索•marisa-trie 使用

•検索キーの接頭辞(前からの部分文字列)にマッチするキー・値を返す

•日本語の単語をひらがなで入れたら:「くるまで」→「く」「くる」「くるま」

•それぞれに対する表記候補を列挙

Page 19: Kana-Kanji Conversion using N-gram

やってみる

•例:「かれがくるまでまつ」

Page 20: Kana-Kanji Conversion using N-gram

ノードか蚊彼枯れ

レが蛾学額区来る繰る

車流

間 …

Page 21: Kana-Kanji Conversion using N-gram

連接か蚊彼枯れ

レが蛾学額区来る繰る

車流

ある位置で終わるノードとその位置で始まるノードをくっつけて2-gramを調べる

(計算量:ひとつの位置で始まるノード数の2乗)

Page 22: Kana-Kanji Conversion using N-gram

2-gramか蚊彼枯れ

レが蛾学額区来る繰る

車流

の2-gram確率が 来る

が に至るまでの一番もっともらしいルートの確率×

Page 23: Kana-Kanji Conversion using N-gram

2-gramか蚊彼枯れ

レが蛾学額区来る繰る

車流

の2-gram確率蛾 来る

蛾×

に至るまでの一番もっともらしいルートの確率

Page 24: Kana-Kanji Conversion using N-gram

2-gramか蚊彼枯れ

レが蛾学額区来る繰る

車流

どっちが高いか比べる

Page 25: Kana-Kanji Conversion using N-gram

2-gramか蚊彼枯れ

レが蛾学額区来る繰る

車流

高い方の確率を来る に至るまでの一番もっともらしいルートの確率とする

Page 26: Kana-Kanji Conversion using N-gram

2-gramか蚊彼枯れ

レが蛾学額区来る繰る

車流

採用したのがどこだったか覚えておく

Page 27: Kana-Kanji Conversion using N-gram

2-gramか蚊彼枯れ

レが蛾学額区来る繰る

車流

最後まで終わったら、一番もっともらしい左ノードをたどっていく

Page 28: Kana-Kanji Conversion using N-gram

3-gram

Page 29: Kana-Kanji Conversion using N-gram

複合ノードか蚊彼

枯れ

レレ

が彼 蛾

枯れが蛾

レ が蛾

彼 学彼 額枯れ枯れ

学額

レレ 学

額区

すべての2-gramに対してノードを作る元のノード数の2乗のオーダー

Page 30: Kana-Kanji Conversion using N-gram

注意か蚊彼

枯れ

レレ

が彼 蛾

枯れが蛾

レ が蛾

彼 学彼 額枯れ枯れ

学額

レレ 学

額区

こういう遷移はあるけど

こういう遷移はない(遷移元ノードが「が」で終わっていない)ので

遷移のオーダーは複合ノード数の2乗(元のノード数の4乗)にはならない

Page 31: Kana-Kanji Conversion using N-gram

3-gram確率か蚊彼

枯れ

レレ

が彼 蛾

枯れが蛾

レ が蛾

彼 学彼 額枯れ枯れ

学額

レレ 学

額区

の3-gram確率が

が に至るまでの一番もっともらしいルートの確率×

区彼

Page 32: Kana-Kanji Conversion using N-gram

計算量

•位置ごとのノード数:元のノード数^2

•連接:元のノード数と同じ

•計算量:元のノード数^3

Page 33: Kana-Kanji Conversion using N-gram

元々のノード数

•「か」→「か」or「蚊」?

•実際はたくさん「か」→か、蚊、可、香、火、課、化、家、過、価…

•その3乗とかきつい

Page 34: Kana-Kanji Conversion using N-gram

節約したい

Page 35: Kana-Kanji Conversion using N-gram

ここに戻ってか蚊彼

枯れ

レレ

が彼 蛾

枯れが蛾

レ が蛾

彼 学彼 額枯れ枯れ

学額

レレ 学

額区

Page 36: Kana-Kanji Conversion using N-gram

ここに戻ってか蚊彼

枯れ

レレ

が彼 蛾

枯れが蛾

レ が蛾

彼 学彼 額枯れ枯れ

学額

レレ 学

額区

こういうノードは本当に要るのか(2-gramもなさそうなノード)

Page 37: Kana-Kanji Conversion using N-gram

3-gramに必要?か蚊彼

枯れ

レレ

が彼 蛾

枯れが蛾

レ が蛾

彼 学彼 額枯れ枯れ

学額

レレ 学

額区

蚊 レ がここで の確率がほしいから

蚊 レ のノードが必要?

Page 38: Kana-Kanji Conversion using N-gram

Backoff

蚊 レ が

蚊 レ

の確率がほしい→

蚊 レ が の3-gramが存在しない→

のbackoff scoreと レ が の2-gram確率から計算

Page 39: Kana-Kanji Conversion using N-gram

Backoff

蚊 レ が

蚊 レ

の確率がほしい→

蚊 レ が の3-gramが存在しない→

のbackoff scoreと レ が の2-gram確率から計算

蚊 レ の2-gramが存在しなかったら?→ レ が の2-gram確率しか使わない

蚊 レ のノードは持つ必要がない

Page 40: Kana-Kanji Conversion using N-gram

手順か蚊彼枯れ

Page 41: Kana-Kanji Conversion using N-gram

か蚊彼枯れ

レ ←この2-gramはあるとする

手順

Page 42: Kana-Kanji Conversion using N-gram

←複合ノードを作る

か蚊彼枯れか レ

手順

Page 43: Kana-Kanji Conversion using N-gram

元ノードは覚えておく

か蚊彼枯れか レ

手順

Page 44: Kana-Kanji Conversion using N-gram

←この2-gramはないとするか蚊彼枯れか レ

手順

Page 45: Kana-Kanji Conversion using N-gram

は必要ないので削る

か蚊彼枯れか レ

手順

蚊←蚊

Page 46: Kana-Kanji Conversion using N-gram

元ノードは覚えておく

か蚊彼枯れか レ

手順

Page 47: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

が ←この2-gramはあるとする

手順

Page 48: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ←複合ノードを作る彼 が

手順

Page 49: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

←この2-gramはないとする

彼 が

手順

Page 50: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

は必要ないので削るが

手順

←枯れ 枯れ

Page 51: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

←この3-gramはあるとするが

手順

Page 52: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

が←3-gramのモデルであれば、次に使うのはレ がレ が ? という3-gramまでなので、

手順

か は捨てる(より高次のモデルなら残す)

Page 53: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

←この2-gramはある

レ が

手順

Page 54: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

がレ がレ が ←ここで複合ノードを作るところだが

手順

Page 55: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

がレ がレ が

←既存のノードとかぶっている

手順

Page 56: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

がレ がレ が

←2つの確率を比べる

手順

Page 57: Kana-Kanji Conversion using N-gram

か蚊彼枯れか レ

レ彼 が

がレ がレ が

←より確率の高い左ノードを覚えておく

手順

Page 58: Kana-Kanji Conversion using N-gram

ここまでの図か蚊彼枯れか レ

レ彼 が

がレ が

Page 59: Kana-Kanji Conversion using N-gram

文末からたどるか蚊彼枯れか レ

レ彼 が

がレ が

学額

が 来る繰るが来る繰る

Page 60: Kana-Kanji Conversion using N-gram

複合ノードか蚊彼枯れか レ

レ彼 が

がレ が

Page 61: Kana-Kanji Conversion using N-gram

左側の要素は自明か蚊彼枯れか レ

レ彼 が

がレ が

Page 62: Kana-Kanji Conversion using N-gram

省略か蚊彼枯れ

レレ

ががが

Page 63: Kana-Kanji Conversion using N-gram

次数だけ覚えておくか蚊彼枯れ

レレ

ががが (2)

(2)

(2)

Page 64: Kana-Kanji Conversion using N-gram

手順まとめ•既存のノードに候補をつなげてN-gram確率を求める

• N-gramが存在しない履歴と最高次の履歴は切り捨てる

•削った結果を新しいノードにするすでにあれば、より確率の高いものを残す

Page 65: Kana-Kanji Conversion using N-gram

3-gramでも足りない•「ほんをかいたい」を3-gram変換→「本を書いたい」

• “書-い-た”と“い-た-い”はどちらも自然

• 4-gramにすると解決

•「書-い-た-い」vs.「買-い-た-い」

Page 66: Kana-Kanji Conversion using N-gram

定量的な評価•やってませんごめんなさい

•@nokuno さんが「Ngramかな漢字変換とMozc辞書の比較」という記事を書いてくださっているので見ていただければ…

•その代わり適当な変換例をご覧ください

Page 67: Kana-Kanji Conversion using N-gram

変換例(成功)•きょうはいいてんきですね→今日はいい天気ですね

•ほんをかいたい→本を買いたい

•ぼくとうみにいかないか→ぼくと海に行かないか(cf. 木刀見に行かないか)

Page 68: Kana-Kanji Conversion using N-gram

変換例(失敗)

•いちにちじゅうあつかった→一日中扱った

•ほんさいとはきょうでしゅうりょうです→本妻とは京で終了です

Page 69: Kana-Kanji Conversion using N-gram

課題• 文節区切りがない

→文節区切りのあるデータから学習?

• 文頭・文末の影響が強い→元データは文単位、変換は(数)文節単位、現状は前後に「、」をつけて変換

• まだけっこう遅い→Pythonだから?C++で書いて実用的になったらいいなぁ

• 辞書大きい(60M)→N-gramの格納法工夫?

Page 70: Kana-Kanji Conversion using N-gram

まとめ•高次N-gramによる変換

•必要ない履歴を削除してコンパクトに

•ヒューリスティックなしにしては結構うまくいってるんじゃないでしょうか

• https://github.com/hiroshi-manabe/ngram-converter

Page 71: Kana-Kanji Conversion using N-gram

時間があれば

•オンデマンドで変換しますのでお申し付けください(文頭/文末処理の都合上、前後に「、」を足して変換します)