自然言語処理 2012
- 平成 24 年 11 月 26 日 (No7)-
東京工科大学
コンピュータサイエンス学部
亀田弘之
復習
•
( 英文の場合の復習&確認 )
•
(今日の授業でもさっと眺めるだけにし ますが、不安な人は後でじっくり読んで ください。)
2
Natural Language Processing 2012 (Tokyo Univ. of Tech.)
今日は、復習と日本語 処理の場合の話しです
。
NLP のプログラムを書いてみよ
1. Prolog
のインストール う!
(www.swi-prolog.org) 2.プログラム作成手順
1.
(言語データの収集)
2.
言語分析
<=対象言語の知識が必要
3.
形式文法の設定
<=形式言語の知識が必要
4. Prolog
形式への書き換え
<= Prologの知識が必要
5. NLP
プログラムの実行
(英文処理
)<=演習
6.
構文木を出力するプログラム
(draw_term/1) 7.動作の理解(自分で実行トレースができる)
8. NLP
プログラムの実行
(日本語文処理
)<=演習
3
Natural Language Processing 2012 (Tokyo Univ. of Tech.)
[ 手順1 ] :言語データの収集 Tom broke the cup.
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 4
検討事項: 処理対象の文をどのようにして集めればよいの か?
•Web から集める?
•文法書の例文を集める?
•語学の教科書(例:中学校3年間の英語の教科書)の例 文?•適切な例文を自分で作成?
•それとも...
検討事項: 処理対象の文をどのようにして集めればよいの か?•Web から集める?
•文法書の例文を集める?
•語学の教科書(例:中学校3年間の英語の教科書)の例 文?
•適切な例文を自分で作成?
•それとも...
[ 手順2 ] :言語分析 Tom broke the cup.
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 5
検討事項: 文法の枠組みを決めておく必要がある。
•伝統的な文法に従うのか?
•日本語の場合、 学校文法(大槻文法・橋本文
•新たに自作?法)?
•それとも...
検討事項: 文法の枠組みを決めておく必要がある。
•伝統的な文法に従うのか?
•日本語の場合、 学校文法(大槻文法・橋本文 法)?
•新たに自作?
•それとも...
[ 手順3 ]: 文法の設定
文法
G=<Vn, Vt, σ, P>ここで、
・非終端記号の集合
: Vt= { s, vp, np, n, v, d}・終端記号の集合
:Vn={tom, cup, broke,the}
・開始記号
σ=s・書き換え規則群
P:右記の 通り。
{ s → n,vp.
vp → v,np.
np → d,n.
n → tom.
n → cup.
v → broke.
d → the. }
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 6
例
統 語 規 則
単 語 辞 書
[ 手順3 ]:Prolog 形式へ変換
s(A,C):-n(A,B),vp(B,C).
vp(A,C):-v(A,B),np(B,C).
np(A,C):-d(A,B),n(B,C).
n([tom|T],T).
n([cup|T],T).
v([broke|T],T).
d([the|T],T).
7
Natural Language Processing 2012 (Tokyo Univ. of Tech.)
例
Version1 ( Prog1.pl )
Version2 ( Prog2.pl )
s(A,C,s(_n,_vp)):- n(A,B,_n),vp(B,C,_vp).
vp(A,C,vp(_v,_np)):-
v(A,B,_v),np(B,C,_np).
np(A,C,np(_d,_n)):- d(A,B,_d),n(B,C,_n).
n([tom|T],T,n(tom)).
n([cup|T],T,n(cup)).
v([broke|T],T,v(broke)).
d([the|T],T,d(the)).
8
Natural Language Processing 2012 (Tokyo Univ. of Tech.)
例
確認: 前頁の version1 との 違いは何?
確認: 前頁の version1 との 違いは何?
動作確認
•
実際に swi-Prolog で実行してみよう!
•
drawterm.pl を使うと、木構造(構文構造
)を図として表示することができる。
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 9
http://www.swi-prolog.org/
?- s([tom,broke,the,cup],[],P),draw_term(P).
P = s(n(tom), vp(v(broke), np(d(the), n(cup))))
今日の内容
1.
構文解析プログラムを自作し、
作成手法を再確認する。
2.
構文解析プログラム(英文)を自力で作成 する。
3.
構文解析プログラム(和文)を自力で作成 する。
4.
木構造表示プログラム (draw_term/1) が使え る。
10
Natural Language Processing 2012 (Tokyo Univ. of Tech.)
1.構文解析プログラムを自作 作成手法を再確認する。 し、
•
まずは一緒に作成してみよう。
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 11
分析対象英文の決定
•
課題1:
John ran fast.
(
参考
)• 名詞 (noun), 動詞 (verb), 副詞 (adverb)
• 動詞句 ( adverbal phrase)
• 文 (sentence)
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 12
2.構文解析プログラム(英文)
自力で作成する を
•
(やってみよう)(5分)
13
Natural Language Processing 2012 (Tokyo Univ. of Tech.)
Let’s challenge!
Let’s challenge!
ソースコードの例 ( 未記入 )
自分で書き込んでください。
–
統語規則部分
–単語辞書部分
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 14
動作のトレース
•
(黒板で説明)
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 15
補足問題:他の処理対象文
• Tom went to a park.
• Time flies like an arrow.
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 16
英文はまずはここまで
•
以下では、日本語処理について考えましょ う。
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 17
日本語処理
•
処理対象
例: 衝撃が走る
•
言語要素分析
衝撃 が 走る
( ) ( ) ( ) ( ) ( )
( )
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 18
日本語処理
•
処理対象
例: 衝撃が走る
•
言語要素分析
衝撃 が 走る ( 名詞 ) ( 助詞 ) ( 動詞 )
( 主語 ) ( 述語 ) ( 文 )
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 19
•
形式文法の設定
文法
G = < Vn, Vt, σ, P >ただし、
Vn = {
文
,主語
,述語
,名詞
,助詞
,動詞
} Vt = {メロス
,が
,走る
}σ=
文
P = {
文→主語
+述語
,主語→名詞助詞
,述語→動詞
}Natural Language Processing 2012 (Tokyo Univ. of Tech.) 20
•
形式文法の設定
文法
G = < Vn, Vt, σ, P >ただし、
Vn = {
文
,主語
,述語
,名詞
,助詞
,動詞
} Vt = {衝撃
,が
,走る
}σ=
文
P = {
文→主語
+述語
,主語→名詞
+助詞
,述語→動詞
}Natural Language Processing 2012 (Tokyo Univ. of Tech.) 21
(参考メモ1)
•
Prolog 形式への書き換え
文 :- 主語 , 述語 .
主語 :- 名詞 , 助詞 . 述語 :- 動詞 .
名詞 ( メロス ).
助詞 ( が ).
動詞 ( 走る ).
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 22
(参考メモ2)
•
Prolog 形式への書き換え(2)
文 (A,C) :- 主語 (A,B), 述語 (B,C).
主語 (A,C) :- 名詞 (A,B), 助詞 (B,C).
述語 (A,B) :- 動詞 (A,B).
名詞 ([ メロス |T],T).
助詞 ([ が |T],T).
動詞 ([ 走る |T],T).
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 23
(参考メモ3)
• Prolog
形式への書き換え(
3)
文
(A,C,文
(_主語
,_述語
)) :-主語
(A,B,_主語
),述語
(B,C,_述語
).主語
(A,C,主語
(_名詞
,_助詞
)) :-名詞
(A,B,_名詞
),助詞
(B,C,_助詞
).述語
(A,B,述語
(_動詞
)) :-動詞
(A,B,_動詞
).名詞
([メロス
|T],T,名詞
(メロス
)).助詞
([が
|T],T,助詞
(が
)).動詞
([走る
|T],T,動詞
(走る
)).Natural Language Processing 2012 (Tokyo Univ. of Tech.) 24
動作の確認(動作のトレース)
-? 文 ([ メロス , が , 走る ],[],X).
文 ( A ,B, 文 (_ 主部 , _ 述部 )
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 25
統語解析+形態素解析の版
•
今までの例は統語解析だけを行うもので あった。英文ではまだしも、日本語の場 合は形態素解析を避けて通ることはでき ない。
どうすればいいのだろうか?
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 26
形態素解析も合わせてできる版
文
(A,C,文
(_主語
,_述語
)) :-主語
(A,B,_主語
),述語
(B,C,_述語
).主語
(A,C,主語
(_名詞
,_助詞
)) :-名詞
(A,B,_名詞
),助詞
(B,C,_助詞
).述語
(A,B,述語
(_動詞
)) :-動詞
(A,B,_動詞
).名詞
([メ
,ロ
,ス
|T],T,名詞
(メロス
)).助詞
([が
|T],T,助詞
(が
)).動詞
([走
,る
|T],T,動詞
(走る
)).Natural Language Processing 2012 (Tokyo Univ. of Tech.) 27
次回は、ここまでの手法の
有効性や限界について考えます
•
次週は、これに関連して未知語処理の話 しをします。
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 28
自宅での課題
•
今日までやった内容を、自分なりにまと め、「自然言語処理プログラムの書き方
」というマニュアルを充実させなさい。
•
さし当って、提出は必要ありません。
Natural Language Processing 2012 (Tokyo Univ. of Tech.) 29