自自自自自自 2012 - 自自 24 自 11 自 26 自 (No7)- 自自自自自自 自自自自自自自自自自自自自 自自自自
Jan 15, 2016
自然言語処理 2012- 平成 24 年 11 月 26 日 (No7)-
東京工科大学コンピュータサイエンス学部
亀田弘之
復習
• ( 英文の場合の復習&確認 )• (今日の授業でもさっと眺めるだけにし
ますが、不安な人は後でじっくり読んでください。)
2Natural 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 プログラムの実行 ( 日本語文処理 ) <=演
習3Natural 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).
7Natural 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)).
8Natural 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) が使える。
10Natural 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分)
13Natural 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