Document

文型パターンパーサの試作
鳥取大学 工学部
○徳久雅人 村上仁一 池原悟
1.はじめに
■ 研究背景
– 等価的類推思考の原理に基づく機械翻訳
(池原2002)
– 原言語・目的言語の各表現を文型パターン化
・ 意味的に等価な翻訳
・ 重文・複文の大規模パターン辞書の構築
・ 網羅性・可読性を狙った新たな記述言語を使用
– パターン照合方式の設計&実装が課題
本稿の目的
• 本翻訳方式の実現に向けた
文型パターンパーサの試作
2.文型パターン
• 原文
LJ: 彼は日本一のバイオリニストだと言われている
LE: People say that he is the best violinist in Japan.
• 単語レベルパターン
WJ: N1は/日本一の/N2.daと/V3.reru.teiru
WE: People V3 that N1 be the best N2 in Japan.
• 句レベルパターン
PJ: N1は/NP2.daと/V3.reru.teiru
PE: People V3 that N1 be NP2.
• 節レベルパターン
・・・
文型パターンの記述要素
• 字面
• 変数
• 関数
は,と,日本一の,…
N,V,AJ,…
– 様相関数: 変数に後続する表現形式を指定
例) V1.reru = 言われる
– 語尾関数: 変数に対応部の表現形式を指定
例) V1^meirei = 言え
– 字面関数: 変数に含まれる字面を指定
例) #大変(CL1) = 彼は大変忙しい
など
記述要素の制御
•
•
•
•
•
離散記号
選択記号
任意記号
順序任意
記憶記号
など
/
(A|B|C)
[A]
{A,B,C}
#1
任意の単語
彼(は|が)
[私は]
{N1は,N2に,N3を}
#1[N2は]
文型パターン辞書の規模
•
•
•
•
原文:約12万の日英対訳文(重文・複文)
単語レベルパターン: 約12万パターン
句レベルパターン: 約 9 万パターン
節レベルパターン: 約 1 万パターン
⇒ 変数N,V,VP,CL などの定義は浅い
⇒ パターン辞書は,浅くて幅の広い構造
3.文型パターンの照合
文型パターン照合の概念
• 入力文とパターンを照合するとは
–
–
•
文とパターンが適合するとは
–
•
適合する文型パターンを全て検索
適合の仕方を全て出力 (適合解)
パターン内の全ての必須要素が
パターンの指定順に全て入力文と対応
変数内の構造の曖昧性は原則無視
照合の具体例
(入力文) 今晩はもう帰れ
(パターン辞書)
PTN1: TIME1は/もうV2^meirei
今晩 は もう帰れ
PTN2: AJ1ので/TIME2は/V3^meirei
- - - 今晩 は 帰れ
PTN3: TIME1は/V2^meirei
今晩 は 帰れ
照合方式
• ATN(Augmented Transition Network)
– パターン記述要素の機能が複雑
(離散記号,順序入れ替え,変数代入・制約,…)
• エージェントの概念
– 適合解の管理
• 幅優先探索
– 全ての適合解を出力
AB-ATN
Agent oriented
Breadth-first
ATN
アークの機能属性
ノード:解析状態,アーク:遷移条件
1つのアークに3種類の機能属性
V1
1. 「条件比較」属性
2. 「制約」属性
3. 「バインド処理」属性
V1^meirei
#1 N2
#1 は
#1[N2は]
jump
AB-ATN アルゴリズム(1/2)
• エージェント
–
–
–
–
適合解(変数のバインド値,経路)の管理
ノード上に存在
解析状態の推移に応じて移動
分岐するノードでは分裂
AB-ATN アルゴリズム(2/2)
1: function AB-ATN1(S,P)
2:
Q0=generate(P)
3:
foreach B ∈ S
4:
Q1=覚醒中エージェント
5:
while Q1 ≠ [ ]
6:
Q2=アーク選択(Q1)
7:
Q1= [ ]
8:
foreach C ∈ Q2
9:
Q1 +=アーク処理
10:
end
11:
end
12:
clock(Q0)
13:
end
14: 終了動作(Q0)
15:
return 適合解
16: end
1パターンと文とを適合判定
形態素単位で判定
エージェントの活性化
アーク選択・分岐
エージェントのアーク処理
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
={駅}
pop
N
N
/
V2
^meirei
の
N
pop
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
={駅,の}
pop
N
N
/
V2
^meirei
の
N
pop
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
={駅,の}
pop
N
N
/
V2
^meirei
の
N
pop
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
={駅,の}
pop
N
N
/
V2
^meirei
の
N
pop
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
N
pop
={駅,の,裏}
pop
N
/
V2
^meirei
の
N
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
N
pop
={駅,の,裏}
pop
N
/
V2
^meirei
の
N
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
N
pop
={駅,の,裏}
pop
N
/
V2
^meirei
の
N
={裏}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
N
pop
={駅,の,裏}
pop
N
/
V2
^meirei
の
N
={裏}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
N
pop
={駅,の,裏,に}
pop
N
/
V2
^meirei
の
N
={裏,に}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
N
pop
={駅,の,裏,に}
pop
N
/
V2
^meirei
の
N
={裏,に}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
={駅,の,裏,に}
={駅,の,裏,に}
={裏,に}
={裏,に}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
={駅,の,裏,に}
={裏,に}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
={駅,の,裏,に}
={裏,に}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
={駅,の,裏,に}
={裏,に}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
={駅,の,裏,に,行け}
={裏,に,行け}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
={駅,の,裏,に,行け}
={裏,に,行け}
照合の具体例
「駅の裏にすぐ行け」
1駅, 2の, 3裏, 4に, 5すぐ, 6行け,7nil
/NP1に/V2^meirei
/
に
NP1
pop
N
N
の
N
/
V2
^meirei
pop
={駅,の,裏,に,行け}
={裏,に,行け}
4.照合候補の絞込みによる高速化
(照合の前処理)
• 候補に残るための条件
– パターン内の全必須字面が入力文に存在
– パターン内の関数内字面が入力文に存在
(例)「彼は本を読んでいる」
P1 : N1はN2をV3.teiru
P2 : N1はN2をV3
P3 : N1は日本一のN2だ
P4 : N1はV3.rareru
れ,れる,れよ,るる
られ,られる,られよ,らるる
5.実装
文型パターンパーサの構成図
入力文
入力文
前処理系
入力形態素情報
照合
本体系
入力字種ビットマップ
オートマトン
生成系
絞込み系
全文型パターン 全オートマトン
文型パターン
辞書
候補
オートマトン
照合結果
照合実験
パターン数
• パターン原文1,000文
vs. パターン12万,9万,1万の照合実験
• 絞込みの効果
( 1/130 ~ 1/16 )
140,000
120,000
100,000
80,000
60,000
40,000
20,000
0
124,158
87,685
921
単語レベル
3,217
句レベル
パターン総数
11,280
713
節レベル
平均候補数
(1.3% ~ 4.8%)
パターン数
4,000
6%
3217
3,000
2,000
1,000
0
4%
921
13
156
2%
713
23
0%
単語レベル 句レベル 節レベル
平均候補数
平均適合数
ヒット率
ヒット率
• ヒット率
• 処理時間
単語レベル 句レベル 節レベル
1文当たり
平均照合時間
1パターン当たり
平均照合時間
0.42 秒
0.5 ミリ秒
6.27秒
0.84秒
1.9ミリ秒 1.2ミリ秒
CPU=Athlon64, Memory=1GB, OS=Linux, C言語
本パーサの利用
• 自由入力文と全パターン(22万)の照合デモ
(ACLデモセッション,2003年 7月)
• パターン原文12万文との照合実験
(池原ほか,SIG-SLUD,2004年 3月)
(前田ほか,言語処理学会年次大会,2004年 3月)
7.おわりに
■ まとめ
等価的類推思考の原理に基づく機械翻訳方式
のための文型パターンパーサを試作
• ATNアルゴリズムの拡張
• 文型記述に対応したアークの設計
• エージェントによる適合解の管理
– 約22万パターンを対象にした照合実験が可能
■ 今後の課題
– エージェントの履歴機能,join機能,の追加
– 意味属性制約つきパターンへの対応
パターン内の字種数
• 単語レベル:
• 句レベル:
• 節レベル:
12.6 字種/1パターン
9.2 字種/1パターン
7.4 字種/1パターン
オープンテスト
• 文献:日本語基本文型
• 適合パターンのあった文の数
–
–
–
–
単語レベル … 424文 / 801文 (53%)
句レベル … 664文 / 801文 (83%)
節レベル … 596文 / 801文 (74%)
混合レベル … 687文 / 801文 (86%)
• 1文あたりの適合パターン数
–
–
–
–
単語レベル … 4 (異なり)
8 (のべ)
句レベル … 34
120
節レベル … 10
35
混合レベル … 48
163