狠狠撸

狠狠撸Share a Scribd company logo
DNNを使用した新しいかな漢字変換
New『Genji』(仮) その仕組みとは?
はしもとまさひこ@おーぷん万葉
KANSAI Open Forum 2019 2019/11/8
2019/11/8DNNを使用した新しいかな漢字変換 2/31
自己紹介
Name: はしもとまさ(または鹿)
Twitter: @shikanotsukimi
●
東海道らぐ (Tokaido Liuxn Uesr Gruop)
…の関東案内人
●
おーぷん万葉プロジェクト
オープンデータを使用したかな漢字変換の自作など
●
ちびぎーこ保護者会(別名:日本openSUSEユーザ会)
およそ雑用……?
2019/11/8DNNを使用した新しいかな漢字変換 3/31
鹿野月美として小説書いてる件
●
『冴えないフミオの育てかた』
– 今秋映画化された『冴えない彼女の育てかた』の二次小説
– めちゃくちゃ可愛い絵描きさんが主人公
(アニメには一切出てこない地味キャラですが)
– 映画も始まったせいか、まもなく10000PV達成(見込み)
●
冬コミにて脚本デビュー!??
– 『おーぷんそーすちゃんねる』にてラジオCDの脚本を担当
– 今回は初の壁配置サークル!! そして豪華声優陣!!?
4日目(大晦日!!)南ナ39b 当日は声優さんもいる……かな?
– 絶賛シナリオ書いてます???orz
2019/11/8DNNを使用した新しいかな漢字変換 4/31
本日のアジェンダ
●
これまでのかな漢字変換
●
これまでのDNNを使用したかな漢字変換?
●
New『Genji』その仕組みとは? ←本日のお題
●
今後の課題
2019/11/8DNNを使用した新しいかな漢字変換 5/31
これまでのかな漢字変換
OSSでもかな漢字変換は数多くリリースされてきました
– 1987年: FreeWnn
●
OSC京都でお馴染み(?)のかな漢字変換
– 1990年: Canna
●
逐次変換機能(いわゆるライブ変換?)の先駆者
– 2000年: SKK
●
未だに現役!??
– 2001年: Anthy
●
京都の生んだもう一つのOSSかな漢字変換
2019/11/8DNNを使用した新しいかな漢字変換 6/31
最近のかな漢字変換と言えば?
●
2010年: Mozc
– Google日本語入力のOSS版
– 最近のLinuxディストリビューションの標準
●
2013年: libkkc
– RedHatが開発したN-gramのかな漢字変換
– Fedora & RadHatで使用
2019/11/8DNNを使用した新しいかな漢字変換 7/31
Mozc ? Since 2010 ?
Google日本語入力のオープンソース版
●
現在のLinuxデフォルトといえばほぼこれ!
– Ubuntu、Debian、openSUSE…
– 例外: RedHat系(Fedora、CentOS)
●
形態素解析を用いたかな漢字変換
形態素解析器 Mecab と同じ開発者(工藤拓氏)
2019/11/8DNNを使用した新しいかな漢字変換 8/31
こんな感じの変換方法(コスト最小法)
文
頭
私
の 名前
は
中野
注:ちょっと(かなり?)端折って説明します^^;
 例)「わたしのなまえはなかのです」を変換する場合 (コストの値はテキトーです!)
です
文
末ので す
中
綿 市 花 課
10
30 15
30 15
10
15 40
20
50
● 単語生起コスト: 単語の出現優先度を表したコスト
● 連接コスト: 単語と単語の結びつきやすさを表したコスト
→ 全て足して、合計値が最も低いルートが候補になります
15
30 40
45
20
20
20
20
50
20
25
30
40
45
20
20
出現頻度の高い単語は
単語生起コストが低い
「名前」と「花」という単語は
結びつきにくいので連接コストは高い
2019/11/8DNNを使用した新しいかな漢字変換 9/31
Mozcの問題点
●
現在開発が停止してしまっています!!
– 例えば『令和』
この単語を追加するのに
各ディストリビューション毎に対応する必要が
発生してしまっている状況 (Debian, Ubuntu, openSUSE...)
– 連接コストについては『平成』からの丸パクリ対応
– 但し、単語生起コストについては適当な値を
入れるしかない
※本来はコーパスから導く必要のある値
2019/11/8DNNを使用した新しいかな漢字変換 10/31
(もうひとつの)libkkc ?Since 2013?
N-gramによるかな漢字変換
= ビッグデータ(巨大コーパス)を十分に活かせる
その反面、辞書が大きくなりすぎてしまう危険性…
つまり、形態素解析を行わないかな漢字変換
? 文節区切りができません!
2019/11/8DNNを使用した新しいかな漢字変換 11/31
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 ぬいぐるみ/ヌイグルミ の/の こと/こと
単語単位ではなく
単語の組み合わせ単位で
変換用データとして
登録されていますね
libkkcの場合は
3単語ずつの組み合わせ
= 3-gram = tri-gram
これ、ノイズでは???
実は品詞情報を
一切持っていません!
2019/11/8DNNを使用した新しいかな漢字変換 12/31
そしたらよく言われるの……
AIでなんとか
ごにょごにょすればいいじゃん!!
あまり無責任なこと言うのやめましょう…
2019/11/8DNNを使用した新しいかな漢字変換 13/31
これまでの深層学習を利用したかな漢字変換
自然言語処理の深層学習といえば……?
– RNN
– 奥辞谤诲2痴别肠 ←この実装本当にある???
2019/11/8DNNを使用した新しいかな漢字変換 14/31
深層学習の主流はこんな感じとか
かな漢字変換 ? RNN
RNN = 時系列が存在するニューラルネットワーク
私 輪他市 綿し
わたし の
の 野 生絵名前
なまえ
菜真絵
青丸ひとつひとつが「重み」
これだけの計算が必要…orz
2019/11/8DNNを使用した新しいかな漢字変換 15/31
その他は?
例えばWord2Vec……
Word2Vecを利用したかな漢字変換は
さすがに聞いたことない。。。
(類似の単語を取り出してかな漢字変換???)
2019/11/8DNNを使用した新しいかな漢字変換 16/31
私の(これまでの)正直な感想。
深層学習でかな漢字変換って
やっぱりまだまだなのでは?
……と、去年まではそう話しておりました。
2019/11/8DNNを使用した新しいかな漢字変換 17/31
ところ変わって私の職場のお話
そもそも今回のお話のきっかけ。
私の職場(どことは言わないけど自然言語処理ではない)では
深層学習を利用している
?いわゆる異常検知
これはどこにでもありがちな話ですよね!
2019/11/8DNNを使用した新しいかな漢字変換 18/31
使用しているモデル = AutoEncoder
入力をエンコードして、特徴抽出した後
デコードしてデータを復元し、入力値と比較する
?きちんと復元できればそれって異常なし!
異常検知ではわりとどこでも使われてる一般的なモデルです!
入力 出力
特徴抽出
二乗誤差を算出して
誤差が大きい 異常度が高い?
2019/11/8DNNを使用した新しいかな漢字変換 19/31
あれ?
このパターン、ついさっき見ませんでしたっけ?
2019/11/8DNNを使用した新しいかな漢字変換 20/31
異常度==コスト!??
●
Mozc
– 連接コスト&生起コストを算出し
コストが低いルートを選択してかな漢字変換を行う
●
異常検知
– 異常度を算出し、異常度が高いと異常を検知する
ようはスコアが低くなるルートを選択するんですよね?
やってること同じじゃない!??
2019/11/8DNNを使用した新しいかな漢字変換 21/31
ところで異常度が高い日本語って?
「私の名前は中野です」=正常
「私が名前は中野です」=異常
どうしてこれが異常なのか??
2019/11/8DNNを使用した新しいかな漢字変換 22/31
係り受けに着目してみよう
●
「私 / の / 名前」
?「私」が「名前」に係っている
 「私」と「名前」という単語を「の」が結んでいる
●
「私 / が / 名前」
?「私」が「名前」に係っていない
 上記の3単語は関連性がない
3単語をペアにして、正常か否かを学習させてみる
2019/11/8DNNを使用した新しいかな漢字変換 23/31
とりあえずこんな学習させてみた
1.係り受けで紐づく3単語をセットにして抽出
?それぞれの単語に16bitの乱数を設定
?16列のベクトル(0 or 1)に変換して
 3単語 × 16bit = 48列をひとつの学習データとする
1 0 0 1 …… 1 0 1 1 1 …… 0 1 1 1 0 …… 0
私 の 名前
合計48bitの 0 or 1 をAutoEncoderの入力へ
単語ごとに
テキトーな乱数を
16bit化
2019/11/8DNNを使用した新しいかな漢字変換 24/31
単語をベクトル化???
2.AutoEncoderで学習させて出力として出てきたベクトルを
  次回学習時の入力として使用する
※平均をとり、平均以上の値を “1”、そうでなければ “0” として
 再度16bitの値へ変換する(もっといい方法ある…?)
入力 出力
48bitの
0 or 1
の行列
48個の
float型
の配列
Auto Encoder
配列の平均を取り
0 or 1 の行列へ
変換
再び入力へ
2019/11/8DNNを使用した新しいかな漢字変換 25/31
試した結果
ちゃんと損失値は下がりました!
てことは、学習は進んでる!?
2019/11/8DNNを使用した新しいかな漢字変換 26/31
というわけで新かな漢字変換
名前: EgoisticLily
某ラノベに出てくるサークル名から。
2019/11/8DNNを使用した新しいかな漢字変換 27/31
AutoEncoderを使用するメリット
●
学習が速い! ※対RNN? ←比較対象間違え?
●
品詞情報と一緒に学習しておくと
新単語追加時にひとまず品詞情報さえ入れておけば
どうにか動く!
●
従来のN-Gramかな漢字変換と異なり
品詞情報を付与できる!
→文節区切りが可能なはず……?
2019/11/8DNNを使用した新しいかな漢字変換 28/31
本日、東海道らぐブースにて展示しております!
……え、もう展示時間終わり???
※興味のある方はこの後片付け中にでも(汗)
実演については……
2019/11/8DNNを使用した新しいかな漢字変換 29/31
今後の課題
実はこのモデル(気づいたと思いますが)
頻度情報を持っていません!!
※敢えて持たせないようにしていたとも言う……
下記の問題をどう解決するか?
おおさかじょう  大阪城? or 大坂城!?
※品詞も同じのため、どちらが優先されるかは運次第?
2019/11/8DNNを使用した新しいかな漢字変換 30/31
今後の運用方針
●
現状KNPの結果から学習データを生成している
?できればNEologdの辞書データも使いたい!
●
辞書ベースによるかな漢字変換は継続したい
?毎回DNNを学習するのはさすがに避けたい!
●
オープンデータをさらに活かした形で!
?青空文庫のコーパス化を進めたい!
2019/11/8DNNを使用した新しいかな漢字変換 31/31
ご清聴、ありがとうございました!

More Related Content

DNNを使用した新しいかな漢字変換『EgoisticLily』 その仕組みとは?