変換ログを用いた 仮名漢字変換精度の向上

2011年3月10日@豊橋技術科学大学 言語処理学会第17回年次大会(NLP 2011)
変換ログを用いた
仮名漢字変換精度の向上
山口洋平 森信介 河原達也
京都大学情報学研究科
2011年3月10日
背景
• 統計的仮名漢字変換
– ひらがな文を仮名漢字混じり文に変換して出力
きかんしぜんそく ⇒ 気管支喘息
• 仮名漢字変換ログ
– 変換システムの入出力の履歴
気管/きかん 支/し 喘息/ぜんそく
– ユーザの言語活動の特性を反映
• よく変換する単語、表現
2
背景(続)
• 目的:ユーザの特性の自動学習
• 問題
1. 語彙 (未知語の問題)
•
語彙にない単語は出力できない
2. 言語モデルの傾向
•
同音異義語の選択を誤る
変換ログの活用の提案
– ユーザの特性を反映した語彙と文脈情報の追加
3
先行研究
• 統計的仮名漢字変換
– [森他, 情処論, 98] [Chen et al., ACL, 00]
• テキストの部分文字列を変換候補に挙げる
仮名漢字変換
– [Mori et al. Coling, 06]
– 未知語であっても変換候補に列挙
– 文脈情報を考慮
4
統計的仮名漢字変換(単語と読み)
• 入力: y 出力: w
• モデル: P(w|y)
• w* = argmaxw P(w|y)
= argmaxw P(w, y)
– 確率が最大となる単語列を求める
– 解探索: Viterbiアルゴリズム
• 言語モデル P(w, y)
– 単語と読みの組が単位のn-gramモデル
• [森他, 情処論, 10]
– 単語に読みがついたコーパスからパラメータ推定
5
テキストの部分文字列の利用(1/2)
1. テキストすべての部分文字列に対してすべての
可能な読みを辞書に追加(単漢字辞書を活用)
文字列表記:関手
可能な読み: かんて、せきて、かんしゅ、かんで、せきしゅ
2. テキスト中の全ての部分文字列を語彙とする
n-gramを構築
– テキストの各文字の間の単語境界確率を推定
– テキストから文脈情報も得ている
6
テキストの部分文字列の利用(2/2)
• 実際は計算量が膨大
• 近似
– 擬似確率的単語分割
テキストを乱数で揺らしながら単語に分割
– 擬似確率的読み付与
乱数で揺らしながら読みを付与
• 乱数の発生回数が多いと、より良い近似に
7
擬似確率的単語分割
確率的単語分割コーパス+乱数
= 揺れのある単語分割済みコーパス(×倍率)
≒ 確率的単語分割コーパス
例)単
0.2
項0.9イ 0.1デ0.1ア 0.1ル0.9 整0.3域0.3上0.9の
各文字間で
確率は KyTea で推定
1. 単語境界となる確率を推定
2. 0~1の乱数に従って境界かどうかを判定
試行
1
2
3
4
結果
単項 イデアル 整 域上 の
単項 イデ アル 整域 上 の
単項 イデアル 整域上 の
単 項 イデアル 整域 上 の
倍率4
8
擬似確率的読み付与
読み付与誤りに対処
• 単語の可能の読みとその確率を推定
• 乱数に従って、付与する読みを揺らす
関手
乱数(0~1)を発生 x 4
読み候補
せきて
かんて
かんしゅ
確率
0.434
0.280
0.195
かんで
せきしゅ
0.050
0.041
確率は KyTea で推定
関手/せきて
関手/かんて
関手/せきて
関手/かんしゅ
未知語でも1つでも正し
い読みが付与されれば、
変換候補に挙がる
9
変換ログ
難溶/なんよう/IN 性/せい/IN の/の/IN 製剤/せいざい/SUB
エンゲ/えんげ/UNK 困難/こんなん/IN 、/、/IN
• フォーマット
– 表記/読み/出典
– IN:内部語彙、SUB:テキストの部分文字列、
UNK:未知語
⇒ テキストの部分文字列が変換ログに出現
⇒語彙として獲得
10
3種類のユーザモデル
• 変換出力とユーザの意図が異なる時
ユーザはどう振舞うか
1.system
IMEの
ユーザ
変換出力
の意図
– 1-best出力
2.oracle
– ユーザの意図通り
3.simu
– 現実のユーザのシミュレーション
11
ユーザモデル1 system
• 仮名漢字変換エンジンの出力を選択
– 誤分割や誤変換があってもそのまま確定
– 変換ログは誤変換(ノイズ)も含む
変換ログ
ユーザの意図:
難溶性の製剤
変換出力:
南陽 性 の 製材
難溶 正 ノ 政財
南洋 聖 野 製剤
・・・
確定
南陽/なんよう 性/せい
の/の 製材/せいざい
・・・
・・・
ユーザモデル2 oracle
• 必ずユーザの意図した結果を選択
– 誤分割や誤変換を必ず修正してから確定
– 変換ログは正しく修正された結果のみを含む
⇒未知語なら語彙獲得
変換ログ
ユーザの意図:
難溶性の製剤
変換出力:
南陽 性 の 製材
難溶 正 ノ 政財
南洋 聖 野 製剤
・・・
確定
難溶/なんよう 性/せい
の/の 製剤/せいざい
・・・
・・・
13
ユーザモデル3 simu
• 現実のユーザのシミュレーション
– system と oracle の中間
– 個人の入力の傾向、状況に依存
• 振る舞い
– システムの出力とユーザの意図が異なる時
1. 割合 α で誤変換を確定
2. 誤確定箇所を消去
3. 再入力し正しい変換結果を選択
14
実験
• 変換ログを用いた仮名漢字変換精度の評価
– 3種類のユーザを想定
• 評価基準
– カバー率
• 語彙 V = V学習コーパス ∪ V変換ログ がテストコーパスの語彙
をどれだけカバーしているか
• SUB は語彙ではなく単語候補
– 変換精度
• F値(文単位)
15
言語資源
学習コーパス
テキスト
ユーザの入力
テストコーパス
分野
単語境界
入力記号
一般
医薬
医薬
医薬
人手
自動
自動
人手
文字数
単語数
3,919,935 899,030
18,132,813
256,967
208,381 45,318
文数
33,141
275,091
30,000
1,000
一般:現代日本語書き言葉均衡コーパス
医薬:日本医薬情報センター
16
実験手順
1.
2.
3.
4.
5.
6.
学習コーパスから初期言語モデルを構築
ユーザの入力から300文を変換
変換ログを学習コーパスに追加
言語モデルを更新
テストコーパスに対する精度を計算
ユーザの入力全てに行き渡るまで2~5の
繰り返し(全100回)
17
ユーザの変換ログの作り方
• system: 1-best を変換ログに追加
• oracle: 正解を変換ログに追加
• simu
– 誤変換の割合: α = 13/200 = 0.065
• あるユーザの変換ログから推定
a. systemとoracleが同じならsystemの方を追加
b. そうでないとき、
1.
乱数(0~1)を発生
α以下なら system の変換ログも追加
2. oracle の変換ログを追加
18
カバー率
100%
98%
96%
94%
ユーザ
system
oracle
92%
90%
0回目の
カバー率
89.63
simu
100回目の
カバー率
system
oracle
差(%)
98.06
99.56
+8.42
+9.92
99.54
+9.90
simu
88%
0
20
40
60
80
100
追加
回数
19
変換精度(1/3)
100%
95%
90%
system
oracle
simu
85%
80%
75%
0
20
40
60
80
100
追加
回数
20
変換精度(2/3)
99%
99%
98%
98%
system
oracle
simu
97%
97%
結果: simu > oracle > system
期待: oracle > simu > system
96%
96%
95%
0
20
40
60
80
100
追加
回数
21
変換精度(3/3)
ユーザ
system
oracle
simu
0回目の
F値(%)
100回目の
F値(%)
100回目の
再現率(%)
100回目の
適合率(%)
F値の差(%)
78.14
97.95
98.39
98.46
98.07
98.38
98.45
97.84
98.40
98.46
+19.81
+20.25
+20.32
• 精度が向上
– 理由1:未知語である単語候補が語彙としてとれた
– 理由2:言語モデルがよくなった
• 100回目のF値: simu > oracle > system
– 理由1:simu の変換ログの量は oracle の (1+α) 倍
– 理由2:ユーザの入力とその正解データを自動で分割
22
まとめと今後の課題
• ユーザの特性を動的に学習
– 変換ログの活用
• 語彙とその文脈情報の言語モデルへの追加
– 3種類のユーザモデルによる実験
• 今後の課題
– 変換ログの活用方法の工夫
• 補間
• ノイズ有りデータからの学習
– 文断片(文節程度)単位での実験
23
24
評価基準
• カバレージ
– 語彙がテストコーパスをどれだけカバーできてるか
• F値
– 仮名漢字変換の第一候補の精度
文
文字数
正解 警官の厚い人垣 に 傍まれた
出力 景観の熱い人が気にはばまれた
共通
の い人
に
まれた
F値 =
Nref = 12
Nsys = 14
NLCS = 7
NLCS
1
2
7
=
13
(Nref + Nsys)
25
読み推定[森他, NLP, 10]
• Q1: 学習コーパスに出現しているか?
• yes
– Q2: 読みが唯一か複数か
• 複数⇒分類器を用いて読みを選択
• 唯一⇒その読みを選択
• no
– Q2’: 辞書に入っているか
• yes⇒最初の項目の読みを選択
• no⇒各文字の一般的な読みの連接
26
語彙
44000
42000
40000
system
oracle
simu
38000
36000
34000
32000
0
20
40
60
80
100
27