かな漢字変換ソフト「genji」をつくってみた

24
Genji2016/11/12 東海道らぐ@Kansai Open Forum はしもとまさひこ

Upload: masahiko-hashimoto

Post on 08-Jan-2017

130 views

Category:

Technology


0 download

TRANSCRIPT

かな漢字変換ソフト「Genji」をつくってみた

2016/11/12 東海道らぐ@Kansai Open Forumはしもとまさひこ

自己紹介

● 東海道らぐ関東の案内人(元名古屋案内人)– 東海道らぐ5周年!!!

● ちびぎーこ保護者会(別名:日本openSUSEユーザ会)の人

● 最近は日本語入力についていろいろ勉強中。– 今日のお題

注:お断り。

私はKOF終了後にこの資料をアップするかもですが基本的に統計学などには「ド素人」なのでその点は承知頂ますようお願いします^^;;

※私の大学時代の専攻はむしろ日本語学の方…(某大学の日本文学文化学科卒とかそんなレベル)

7月末のOSC京都にて…

かな漢字変換「Genji」のrc phase1をリリース!

…が、今回は「まず動くこと」が第一だったので本当に動くくらいの機能しかなかったw

そもそも変換のための辞書ファイルを行きの新幹線で作成してる始末だったのでまともな変換ができるわけなかったorz

「Genji rc phase1」の実力● できたこと

– 当然「わたしのなまえはなかのです」は変換可能– 「あひるやき」も変換できた

● できなかったこと– 「きょうと」が「京と」になってしまう ←致命的!!!– 「おおさか」が「大坂」になってしまう

ところでどんな変換アルゴリズムだったのか?純粋に「文節区切りの単語n-gram」です

例: 「私の名前は中野です」→ これを単語区切りにするとこうなります

「私」「の」「名前」「は」「中野」「です」

→ で、単語n-gramなのでこうなります「私の」「の名前」「名前は」「は中野」「中野です」

→ ただし、文節でデータを区切るので「私の」「名前は」「中野です」↑この単位で辞書に登録!

確率の計算方法 @OSC京都「文節の出現頻度 / 自立語の出現頻度」

例)「私の」 ※これは文節– 「私」「の」 ←出現回数 5回 = 5 / 9 = 0.55– 「私」「は」 ←出現回数 3回 = 3 / 9 = 0.33– 「私」「を」 ←出現回数 1回 = 1 / 9 = 0.11

この確率に1足したものを辞書に登録。

さて、今回。。。

確率の計算方法 @ OSC東京「文節の出現頻度 / 自立語の出現頻度 ➗ / その自立語と同音異義語の出現頻度」

例)例) 「私の」 ※これは文節– 「私」「の」 ←出現回数 5回 = 5 / 10 = 0.50– 「私」「は」 ←出現回数 3回 = 3 / 10 = 0.30– 「私」「を」 ←出現回数 1回 = 1 / 10 = 0.10– 「渡し」「を」 ←出現回数 1回 = 1 / 10 = 0.10

↑これが追加されました※これで「おおさか」→「大坂」にはなりにくいはず!!

1週間前

結果・・・

「わたしのなまえはなかのです」

すら変換できなくなった・・・orz

なぜ?

母数が多くなって全体的に確率が低くなった

…反面、孤高の自立語が確率「2」を有してしまったw

どうゆうことか?「私」「中野」といった名詞、動詞だけでなく連接詞、接尾辞なども自立語に含めていた・・・例)– あひる焼き →「あひる」「焼き」– ひよわ焼き →「ひよわ」「焼き」– 鹿焼き  →「鹿」「焼き」→「焼き」も自立語と判定され、「焼き」が強くなりすぎて 「焼き」の確率ばかりが高くなる(焼かれてばかり)

※他にも「と」を変換すると「都」になってしまうなど。

焼かれてばっかじゃね〜か

う〜ん・・・うまく行かないけど今年の秋はこれにて終了〜〜〜

・・・で、終っていいと思っているのか!!!?(ぇ

まさか1週間で

アルゴリズムが劇的に変わって

変換効率が劇的に変わる

…なんてことは…

…あった(笑)

確率の計算方法 @OSC京都「文節の出現頻度 ➗ 自立語の出現頻度」

例) 「私の」 ※これは文節– 「私」「の」 ←出現回数 5回 = 5 / 9 = 0.55– 「私」「は」 ←出現回数 3回 = 3 / 9 = 0.33– 「私」「を」 ←出現回数 1回 = 1 / 9 = 0.11

この確率に1足したものを辞書に登録。

ちょっと前のスライドです

ここに注目!!

そもそもなんで「1」を足していたの?

今まではポイント積算法でした例)私の名前は中野です

「私の」(1.5) × 「名前は」(1.2) × 「中野です」(1.1)

= ポイント 1.98

「私の」 × 「名前は」 × 「中の」(1.2) × 「出」(1.5) × 「巣」(2.0)

= ポイント 6.48

→ 負けた(笑)

Genjiの辞書は「自立語」or「自立語+付属語」という特性上、1文字の自立語が出現すると

ポイントが高くなる→変換効率が極端に落ちるというのがあった…orz

[新提案?] n-gram × コスト最小法コスト算出方法: 2 − (n-gramの出現確率)例) わたしのなまえはなかのです– 「私の」(1.5) × 「名前は」(1.8) × 「中野です」(1.9)

= 5.13– 「私の」×「名前は」×「中の」(1.8) ×「出」(1.5) ×「巣」(1)

= 7.29

→ 「コスト最小法」なのでコストが小さい方を選択→ 「中野です」の出現頻度は低いのでコストは大きいが、 代わりに積算される数が減るので、結果的に選択されやすくなる→ 勝った!!(何にだよ?)

ところで「n-gram × コスト最小法」って

実はいろんな場面で使えるのでは?(いかがでしょう?^^;)

ご清聴、ありがとうございましたm(_ _)m