自然言語処理2009 -平成21年10月26日(No4)-

今日もPCを使います.
用意してください.
自然言語処理2013
-平成24年11月18日(No7)東京工科大学
コンピュータサイエンス学部
亀田弘之
まずは復習(15分)
• (英文の場合の復習&確認)
• (今日の授業でもさっと眺めるだけにしますが、
不安な人は後でじっくり読んでください。)
今日は、復習と日本語
処理の場合の話しです。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
2
NLPのプログラムを書いてみよう!
1. Prologのインストール(www.swi-prolog.org)
2. プログラム作成手順
1.
2.
3.
4.
5.
6.
7.
8.
(言語データの収集)
言語分析 <= 対象言語の知識が必要
形式文法の設定 <= 形式言語の知識が必要
Prolog形式への書き換え <= Prologの知識が必要
NLPプログラムの実行(英文処理) <=演習
構文木を出力するプログラム (draw_term/1)
動作の理解(自分で実行トレースができる)
NLPプログラムの実行(日本語文処理) <=演習
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
3
[手順1]:言語データの収集
Tom broke the cup.
検討事項: 処理対象の文をどのようにして集めればよいのか?
•Webから集める?
•文法書の例文を集める?
•語学の教科書(例:中学校3年間の英語の教科書)の例文?
•適切な例文を自分で作成?
•それとも...
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
4
[手順2]:言語分析
Tom broke the cup.
検討事項: 文法の枠組みを決めておく必要がある。
•伝統的な文法に従うのか?
•日本語の場合、 学校文法(橋本文法),大槻文法・?
•新たに自作?
•それとも...
Natural Language Processing 2013 (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 2013 (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).
Version1(Prog1.pl)
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
7
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)). 確認:
前頁のversion1との
違いは何?
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
8
動作確認
• 実際にswi-Prologで実行してみよう!
• drawterm.pl を使うと、木構造(構文構造)を
図として表示することができる。
?- s([tom,broke,the,cup],[],P),draw_term(P).
P = s(n(tom), vp(v(broke), np(d(the), n(cup))))
http://www.swi-prolog.org/
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
9
今日の授業内容
1.
2.
3.
4.
5.
構文解析プログラム作成手順を再確認する。
構文解析プログラム(英文)を自力で作成する。
構文解析プログラム(和文)を自力で作成する。
木構造表示プログラム(draw_term/1)を使う。
構文解析プログラムの動作をトレースする。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
10
今日の学習目標
1. 構文解析プログラムを自作し、
作成手法を再確認する。
2. 構文解析プログラム(英文)を自力で作成できる。
3. 構文解析プログラム(和文)を自力で作成できる。
4. 木構造表示プログラム(draw_term/1)が使える。
5. 構文解析プログラムの動作を理解できる。
(注)ユニフィケーション(同一視可能)の可否を
具体的に判断できる。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
11
1.構文解析プログラムを自作し、
作成手法を再確認する。
• まずは一緒に作成してみよう。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
12
分析対象英文の決定
• 課題1:
John ran fast.
(参考)
• 名詞(noun), 動詞(verb), 副詞(adverb)
• 動詞句( adverbal phrase)
• 文(sentence)
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
13
2.構文解析プログラム(英文)を
自力で作成する
• (やってみよう)(5分)
• 友人と相談してもOK。
Let’s challenge!
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
14
ソースコードの例(未記入)
このページは自分で完成させてください。
– 統語規則部分
– 単語辞書部分
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
15
動作のトレース
• (黒板で説明)
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
16
補足問題:他の処理対象文
• 練習課題:
–Tom went to a park.
–Time flies like an arrow.
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
17
英文はまずはここまで
• 以下では、日本語処理について考えましょう。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
18
日本語処理
• 処理対象
例:
メロスが走る
• 言語要素分析
メロス
が
走る
(
)
( ) (
)
(
)
( )
( )
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
19
日本語処理
• 処理対象
例:
メロスが走る
• 言語要素分析
メロス
が
(名詞)
(助詞)
(主語)
(文)
走る
(動詞)
(述語)
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
20
• 形式文法の設定
文法 G = < Vn, Vt, σ, P >
ただし、
Vn = { 文, 主語, 述語, 名詞, 助詞, 動詞 }
Vt = { メロス, が, 走る }
σ=文
P = { 文→主語+述語, 主語→名詞助詞,
述語→動詞}
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
21
• 形式文法の設定
文法 G = < Vn, Vt, σ, P >
ただし、
Vn = { 文, 主語, 述語, 名詞, 助詞, 動詞 }
Vt = { メロス, が, 走る }
σ=文
P = { 文→主語+述語, 主語→名詞+助詞,
述語→動詞}
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
22
(参考メモ1)
• Prolog形式への書き換え(1)
文 :- 主語, 述語.
主語 :- 名詞, 助詞.
述語 :- 動詞.
名詞(メロス).
助詞(が).
動詞(走る).
(注)このページはメモ。Prologとしては不完全。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
23
(参考メモ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 2013 (Tokyo Univ. of Tech.)
24
(参考メモ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 2013 (Tokyo Univ. of Tech.)
25
One Point Advice
文字コードはUTF8を使おう。
なぜ sjis ではなく utf8 なのか?
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
26
動作の確認(動作のトレース)
-? 文([メロス,が,走る],[],X).
文(
A
,B, 文(_主部, _述部)
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
27
統語解析+形態素解析の版
• 今までの例は統語解析だけを行うものであっ
た。英文ではまだしも、日本語の場合は形態
素解析を避けて通ることはできない。
どうすればいいのだろうか?
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
28
形態素解析も合わせてできる版
文(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 2013 (Tokyo Univ. of Tech.)
29
今日の議論
1. 構文解析における文法の役割は何?
– 文法なしで構文解析できるのか?
2. 形態素解析における単語辞書の役割は何?
– 単語辞書なしで単位切りはできるのか?
3. ここまでの構文解析手法の利点と限界は何か?
– 単語辞書
– 統語規則辞書(構文規則辞書)
– 文字コード,ファイル形式 など
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
30
次回は、ここまでの手法の
限界について考えます
• 次週は、これに関連して未知語処理の話しを
します。その後,感情処理,対話処理,機械
翻訳等の話しをします。
• お楽しみに!
(注)未提出のレポートは早く提出すること。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
31
自宅での課題(レポート課題4)
• 今日までやった内容を、自分なりにまとめ、
「Prolog言語を用いた自然言語処理プログラ
ムの作成手順」
というタイトルのマニュアルを作成しなさい。
– 提出日:平成25年11月25日(月)
– 書式: A4用紙,マニュアルの表紙の上に,
レポートとしての表紙も付けること。
– 実行例(1つか2つでOK)もマニュアル中に記載
すること。
Natural Language Processing 2013 (Tokyo Univ. of Tech.)
32