ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

28
ホットな日本語入力技術のお勉強。 OSC 2016 Hamanako 編 〜 2016/1/23 OSC 2016 Hamanako はしもとまさひこ

Transcript of ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

Page 1: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

2016/1/23OSC 2016 Hamanako

はしもとまさひこ

Page 2: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

簡単に自己紹介。

● 東海道らぐ(Tokaido Linux User Group)案内人– 東京〜静岡〜名古屋〜京都〜大阪で活動するらぐ– 明日、鴨江アートセンターでオフ会やります!!!

詳しくは東海道らぐブースのビラを参照(余ってるはず)

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

● 最近は日本語入力についていろいろ勉強している人

Page 3: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

まず、質問です(^^)

これからいくつか質問をします。

ご協力をお願いします!

Page 4: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

Q1.日本語入力ソフトを意識して使っていますか?

1. 自分はこれしか使わない!というソフトがある (※MS-IME, ATOK, Google日本語入力等)

2. ソフトは知らないけど優れたソフトを使いたい!

3. 特に意識したことはない

注: OSとか関係なく回答ください

Page 5: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

Q2. OSSなOSをデスクトップで使っていますか?

1. Linux, BSD等をデスクトップで使ってます!

2. デスクトップはMacしか使わないよ!

3. デスクトップはWindowsに決まってるでしょ!

注: 正直に回答ください(^^)

Page 6: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

今日はオープンソースの日本語入力についてです

1. 最近の日本語入力技術とは?

1. 辞書データ構築技術について 〜Trie〜

2. かな漢字変換アルゴリズム① 〜Mozc〜

3. かな漢字変換アルゴリズム② 〜libkkc〜

2. まとめ1. 最近のオープンソースな日本語入力事情

2. おーぷん万葉の紹介

Page 7: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

1-1. 最新の日本語入力技術とは

辞書データ構築編

Page 8: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

まず初めは辞書のお話

かな漢字変換を使う際、必ず必要となるのが辞書、もしくは変換に必要なデータです

それを格納するための技術も日々(?)進化してます

かな漢字変換ソフト

辞書データ

入力

辞書登録

この文字変換できないから辞書に登録しなくちゃ!

これのこと

Page 9: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

データを格納するための技術 〜Trie〜

● 通常の木構造に対し、枝にラベルがついたもの– メリット:共通接頭検索が可能になる

12 3

5 6

すび

これがいわゆるラベルラベルがついてるとTrieと呼ぶ

ラベルをたどることで辞書検索が可能になります→データ圧縮にもつながる

Page 10: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

Trieの実装 〜LOUDS〜

10 1110 10 110 10 0 0 0 10 0

12 3

5 6

すび

仮想ノード「0」から

3つに分岐「1」は

分岐なし「2」から

2つに分岐「3」は

分岐なし「4」「5」「6」は

末端ノード「7」は

分岐なし「8」は

末端ノード

Trieをビットで表現したものそれが「LOUDS」(らうず)

課題として下記のようなものがあります・ノードを動的に追加することが困難・Trie構築後にビットを作成しないと厳しい?

Page 11: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

現在の主流はTrie

● その他のTrieの実装としてダブル配列等があります– LOUDSより高速ですが、メモリ消費が大きいので

かな漢字変換には不向きと言われてます– 形態素解析器mecabはダブル配列を採用してます

● オープンソースのライブラリが数多く存在します– 自分で実装すると大変! まずはオープンソースで試してみましょう

● Tx / Ux : 非常にコンパクトなLOUDSのライブラリ● Rx: mozcで採用されているLOUDSのライブラリ● marisa-trie: libkkcで採用されているLOUDSのライブラリ

Page 12: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

1-2. 最新の日本語入力技術とは

かな漢字変換アルゴリズム編

Page 13: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

注: 繰り返しますが…

本日お話する内容は全て

オープンソースの実装ついて

です

※AT○KとかMicr○s○ftの技術については知りません!(笑)

Page 14: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

オープンソースなかな漢字変換の歴史

● 1987年 : Wnn (FreeWnnの前身)● 1989年 : Canna● 2002年 : Anthy● 2010年 : mozc● 2013年 : libkkc (Fedora19よりデフォルトIMEへ)

簡単な年表ですが…^^;

Page 15: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

従来の変換アルゴリズム例: N文節最長一致法

● 例文: 「きょうはあひるやきです」

今日 歯 あ 昼 焼きで 酢

今日は あ 昼 焼きです

今日は 家鴨 焼きです

今日は あひる焼きです

6文節

4文節

3文節

2文節一番少ないのでこれを選択!

ポイント:文節 = 自立語(名詞・動詞等) + 付属語(助詞等)

Canna等で採用

Page 16: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

かな漢字変換アルゴリズム① 〜Mozc〜

● Mozc – Google日本語入力のオープンソース版

– 2010年 Googleによってリリース

● 形態素解析を用いた変換アルゴリズム– コスト最小法。現在の主流になりつつある

Page 17: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

コスト最小法 とは

文頭

の 名前は

中野

注:ちょっと(かなり?)端折って説明します^^;

です

文末ので す

綿 市 花 課

例: 「わたしのなまえはなかのです」を変換する場合 (コストの値はテキトーです^^;)

10

30 15

30 1510

15 40

20

50

● 単語生起コスト: 単語の出現優先度を表したコスト● 連接コスト: 単語と単語の結びつきやすさを表したコスト

→ 全て足して、合計値が最も低いルートが候補になります

15

30 4045

20

2020

20

50

20

25

3040

45

2020

出現頻度の高い単語は単語生起コストが低い

「名前」と「花」という単語は結びつきにくいので連接コストは高い

Page 18: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

コスト最小法も完璧ではない?

Mozcで変換できないものもある…

「にわにはにわにわとりがいる」→ 「庭には庭鶏がいる」になってしまう

庭 庭 鶏には が いる

庭 二 鶏には が いる羽

正解の変換のほうが単語数が多いため単語生起コストがどうしても高くなる

Page 19: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

かな漢字変換アルゴリズム② 〜libkkc〜

● libkkc– 2013年 Fedora19のデフォルトIMEになる

– RedHat社のUeno氏によって開発

● N-gramによるかな漢字変換– 形態素解析を行わないアルゴリズム

= 辞書データに品詞情報を持たない– ビッグデータ(巨大コーパス)を十分に活かせる可能性

ここが重要!!!

Page 20: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

N-gramとは?

N文字の共起関係からテキストの特徴を分析する

– 2文字: 2-gram (= bi-gram)

– 3文字: 3-gram (= tri-gram)

例文) 私の名前は中野です → 2-gram

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

この単位で確率を求め変換用データを作成します

Page 21: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

例えばlibkkcの変換用データは…

-1.114728 ぬいぐるみ/ぬいぐるみ 」/」 ていど/程度-0.667107 ぬいぐるみ/ぬいぐるみ 」/」 と/と-0.643911 ぬいぐるみ/ぬいぐるみ うらない/占い を/を-0.740726 ぬいぐるみ/ぬいぐるみ たすう/多数 を/を-0.454970 ぬいぐるみ/ぬいぐるみ だ/だ が/が-0.814252 ぬいぐるみ/ぬいぐるみ で/で わりお/ワリオ-1.110465 ぬいぐるみ/ぬいぐるみ は/は かのじょ/彼女-0.802579 ぬいぐるみ/ぬいぐるみ やら/やら しゃしん/写真-1.626115 ぬいぐるみ/ぬいぐるみ を/を 「/「-1.708439 ぬいぐるみ/ぬいぐるみ を/を せいさく/製作-1.631926 ぬいぐるみ/ぬいぐるみ を/を つく/作-1.713616 ぬいぐるみ/ぬいぐるみ を/を なげつけ/投げつけ-1.681401 ぬいぐるみ/ぬいぐるみ を/を のこ/残-1.713256 ぬいぐるみ/ぬいぐるみ を/を もちこ/持ち込-1.714574 ぬいぐるみ/ぬいぐるみ を/を よご/汚-1.716680 ぬいぐるみ/ぬいぐるみ を/を りんぐ/リング-0.813648 ぬいぐるみ/ぬいぐるみ (/( じょん/ジョン-0.803737 ぬいぐるみ/ヌイグルミ の/の こと/こと

単語単位ではなく単語の組み合わせ単位で

変換用データとして登録されていますね

なんだかノイズデータっぽいのもいるのですが…

Page 22: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

結構さくさく変換できる…が!?

● 苦手な変換ももちろんある– 「ぬいぐるみをぬう」 →「ぬいぐるみを縫う」(正解)

– 「ぬいぐるみ」 →「縫い包み」(そうなるの!?)

– 「ぬいぐるみのことをおもう」→「ヌイグルミのことを思う」

● 形態素解析を行わない

→ 文節区切りができない

→ 変換したい箇所にフォーカスを当てるのがやや大変!

「この漢字をどうしましょ」 ←こんな感じでフォーカスが当たってしまうorz

前ページのノイズデータを思いっきり拾った感じですね…

Page 23: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

2.まとめ

Page 24: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

現在のLinuxのかな漢字変換

● およそMozc一色– Ubuntu, Debian, openSUSE, VineLinux…– まぁそれでもいいのではないかと言われているが…– 途中いろいろ問題発生しつつ乗り越えてる感ある

● とはいえ、既に一部でサポートフェーズと言われているのも事実

● Redhat系はlibkkcですね– Fedora, CentOS…

Page 25: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

皆さん、本当にそれでいいですか?

Page 26: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

おーぷん万葉プロジェクトとは

● 目的「自由な日本語辞書を手に入れよう!」– 現在: かな漢字変換ソフト「Genji」を開発中。

● 現状の問題点:– ビックデータと叫ばれる時代に、開発がアクティブでコミュニティー主体の日本語入力システムがない???

→ そんな現状を打破したい!てのが目的です。

Page 27: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

日本語をもっと自由に楽しみましょう!

Page 28: ホットな日本語入力技術のお勉強。〜 OSC 2016 Hamanako 編 〜

ご清聴、ありがとうございました。