自然言語は曖昧性だらけ! I saw a girl with a telescope 構文解析 ( パージング ) は構造的な曖昧性を解消 2

Similar documents
NLP プログラミング勉強会 5 HMM による品詞推定 自然言語処理プログラミング勉強会 5 隠れマルコフモデルによる品詞推定 Graham Neubig 奈良先端科学技術大学院大学 (NAIST) 1

NLP プログラミング勉強会 6 かな漢字変換 自然言語処理プログラミング勉強会 6 - かな漢字変換 Graham Neubig 奈良先端科学技術大学院大学 (NAIST) 1

言語モデルの基礎 2

NLP プログラミング勉強会 4 単語分割 自然言語処理プログラミング勉強会 4 - 単語分割 Graham Neubig 奈良先端科学技術大学院大学 (NAIST) 1

本チュートリアルについて 14 部構成 比較的簡単なトピックから 各回 プログラミング言語 任意 チュートリアルで 新しい内容 宿題 プログラミング演習 次の週 結果について発表 もしくは話し合いをする スライドは Python で Python, C++, Java, Perl についての質問い答

Microsoft PowerPoint - 08LR-conflicts.ppt [互換モード]

nlp1-05.key

プレポスト【解説】

数理言語

文章のトピック 文章には様々なトピックが存在する Cuomo to Push for Broader Ban on Assault Weapons 2012 Was Hottest Year in U.S. History 2

memo

Microsoft PowerPoint - algo ppt [互換モード]

1. はじめに 2

Microsoft PowerPoint - kougi11.ppt

nlp1-04a.key

表1-表4_05

Microsoft PowerPoint - 05.pptx

memo

概要 単語の分散表現に基づく統計的機械翻訳の素性を提案 既存手法の FFNNLM に CNN と Gate を追加 dependency- to- string デコーダにおいて既存手法を上回る翻訳精度を達成

Microsoft PowerPoint - アルデIII 02回目10月14日

演習 レシピテキストの係り受け解析

PowerPoint プレゼンテーション

memo

言語資源活用ワークショップ 2019 発表論文集 半教師あり語義曖昧性解消における各ジャンルの語義なし用例文の利用 谷田部梨恵 ( 茨城大学大学院理工学研究科 ) 佐々木稔 ( 茨城大学工学部情報工学科 ) Semi-Supervised Word Sense Disambiguation Usin

Microsoft PowerPoint - 3.ppt [互換モード]

Microsoft PowerPoint - 10.ppt [互換モード]

alg2015-6r3.ppt

Microsoft PowerPoint - アルデIII 02回目10月15日

Microsoft Word - CompA-Ex doc

PowerPoint プレゼンテーション

slide5.pptx

Taro-最大値探索法の開発(公開版

PowerPoint Presentation

文法と言語 ー文脈自由文法とLR構文解析2ー

Taro-2分探索木Ⅰ(公開版).jtd

Taro-2分探索木Ⅱ(公開版).jtd

プログラミング及び演習 第1回 講義概容・実行制御

Microsoft PowerPoint - kougi10.ppt

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

Microsoft Word - VBA基礎(3).docx

COMPUTING THE LARGEST EMPTY RECTANGLE

Microsoft PowerPoint - 13approx.pptx

Microsoft PowerPoint - Compiler03note.pptx

情報処理演習 B8クラス

Taro-スタック(公開版).jtd

nlp1-12.key

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

Rの基本操作

Microsoft Word _VBAProg1.docx

Taro-再帰関数Ⅲ(公開版).jtd

PowerPoint プレゼンテーション

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

始めに, 最下位共通先祖を求めるための関数 LcaDFS( int v ) の処理を記述する. この関数は値を返さない再帰的な void 関数で, 点 v を根とする木 T の部分木を深さ優先探索する. 整数の引数 v は, 木 T の点を示す点番号で, 配列 NodeSpace[ ] へのカーソル

メソッドのまとめ

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

Prog1_10th

プログラム言語及び演習Ⅲ

Microsoft PowerPoint - 13Kadai.pptx

プログラミング入門1




ex04_2012.ppt

Taro-cshプログラミングの応用.jt

基礎プログラミング2015

Microsoft PowerPoint - prog08.ppt

シェルプログラミング コマンドをパイプでつなげるだけでは済まないような ある程度まとまった処理を複数のコマンドを制御構文を用いたりしてファイルとしたものを ( シェル ) スクリプトと呼ぶ シェルプログラム バッチなどともいう.bash_profile もシェルスクリプトなので このファイルを解読し

Microsoft PowerPoint - 06.pptx

Microsoft PowerPoint - prog13.ppt

数理言語

Microsoft PowerPoint - 6.pptx

プログラミングA

プログラミング基礎

2015-s6-4g-pocket-guidebook_H1-4.indd

A Constructive Approach to Gene Expression Dynamics

人工知能入門

オートマトンと言語

2006年10月5日(木)実施

(NICT) ( ) ( ) (NEC) ( )

Microsoft PowerPoint - ad11-09.pptx

CプログラミングI

Microsoft PowerPoint - 2-LispProgramming-full

JavaScriptで プログラミング

第2回

Microsoft PowerPoint - ruby_instruction.ppt

第2回

情報リテラシー 第1回

プログラミングA

Microsoft PowerPoint - DA2_2017.pptx

データ構造

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

memo

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

Microsoft PowerPoint - アルデIII 10回目12月09日

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

ポインタ変数

PowerPoint Presentation

Taro-再帰関数Ⅱ(公開版).jtd

(Microsoft PowerPoint - \203|\203X\203^\201[\224\255\225\\\227p\216\221\227\ ppt)

Transcription:

自然言語処理プログラミング勉強会 12 係り受け解析 Graham Neubig 奈良先端科学技術大学院大学 (NAIST) 1

自然言語は曖昧性だらけ! I saw a girl with a telescope 構文解析 ( パージング ) は構造的な曖昧性を解消 2

構文解析の種類 係り受け解析 : 単語と単語のつながりを重視 I saw a girl with a telescope 句構造解析 : 句とその再帰的な構造を重視 S VP NP NP PP NP PRP VBD DT NN IN DT NN I saw a girl with a telescope 3

係り受けを使った曖昧性解消 I saw a girl with a telescope I saw a girl with a telescope 4

係り受けの種類 ラベルあり : 単語間の関係の種類を記述 nsubj det prep dobj pobj det I saw a girl with a telescope ラベルなし : 関係の種類を問わず 親と子のみ I saw a girl with a telescope 5

係り受け解析手法 Shift-reduce 左から右へ貪欲的に解析 高速 ( 線形時間 ) 少し精度が低い ソフト : MaltParser 全域木 文全体の係り受けを最適化 精度が少し高く スピードが少し落ちる ソフト : MSTParser, Eda チャンク同定の段階適用 1) 単語を句にチャンキング 2) 主辞 ( 親 ) を発見の繰り返し ソフト : CaboCha 6

最大全域木 各係り受けは有向グラフの辺 機械学習を用いて辺に対してスコアを付与 スコア最大の木を返す I グラフスコア付きグラフ係り受け木 saw saw saw 6 4 6 4-1 2 girl I girl I girl 1 7 7-2 5 a a a (Chu-Liu-Edmonds アルゴリズム ) 7

チャンク同定の段階適用 親が必ず最後にくる日本語に対して有効 文をチャンクに分割 親を右の単語にする私は望遠鏡で女の子を見た は で の子を見た 私 望遠鏡 女 は で 子を見た 私 望遠鏡 の 私 は 望遠鏡 女で女 の 子 を 見た 私 は望遠鏡 女 で の 子 見たを 8

Shift-Reduce 左から右へ単語を1 個ずつ処理 2 つのデータ構造 キュー : 未処理の単語を格納 スタック : 処理中の単語を格納 各時点で 1 つの動作を選択 shift: 1 単語をキューからスタックへ移動 reduce 左 : スタックの1 単語目は2 単語目の親 reduce 右 : スタックの1 単語目は2 単語目の親 分類器を使ってどの動作を取るかを学習 9

Shift-Reduce の例 スタック キュー スタック キュー I saw a girl saw a girl shift I I saw a girl r left shift saw girl I saw a girl shift I a I saw r left shift a girl I saw girl r right saw a girl a I 10

Shift-Reduce のための分類 状態が与えられ : I スタック saw a キュー girl どの動作を選択? shift? r left? r right? I saw a girl I saw a girl I saw a girl 正しい選択 正しい係り受け木 11

Shift-Reduce のための分類 shift reduce 左 reduce 右 の重みベクトル w s w l w r キューとスタックに基づいて素性関数を計算 φ(queue, stack) 素性関数と重みを掛け合わせてスコアを計算 s s = w s * φ(queue,stack) スコアが最大の動作を利用 s s > s l && s s > s r do shift 12

Shift-Reduce の素性 素性は少なくともスタックの最後の 2 項目 キューの最初の項目をカバー stack[-2] stack[-1] queue[0] 単語 : saw a girl 品詞 : VBD DET NN (-2 最後から 2 番 ) (-1 最後 ) (0 最初 ) φ W-2saw,W-1a = 1 φ W-2saw,P-1DET = 1 φ P-2VBD,W-1a = 1 φ P-2VBD,P-1DET = 1 φ W-1a,W0girl = 1 φ W-1a,P0NN = 1 φ P-1DET,W0girl = 1 φ P-1DET,P0NN = 1 13

アルゴリズムの定義 アルゴリズム ShiftReduce の入力 : 重み w s w l w r queue=[ (1, word 1, POS 1 ), (2, word 2, POS 2 ), ] スタックは特別な ROOT 記号のみを格納 : stack = [ (0, ROOT, ROOT ) ] 戻り値は各単語の親の ID を格納した配列 : heads = [ -1, head 1, head 2, ] 14

Shift-Reduce アルゴリズム ShiftReduce(queue) make list heads stack = [ (0, ROOT, ROOT ) ] while queue > 0 or stack > 1: feats = MakeFeats(stack, queue) s s = w s * feats # shift のスコア s l = w l * feats s r = w r * feats # reduce left のスコア # reduce right のスコア if s s >= s l and s s >= s r and queue > 0: stack.push( queue.popleft() ) # shift を実行 elif s l >= s r : # reduce 左を実行 heads[ stack[-2].id ] = stack[-1].id stack.remove(-2) else: # reduce 右を実行 heads[ stack[-1].id ] = stack[-2].id stack.remove(-1) 15

Shift-Reduce の学習 パーセプトロンで学習可能 解析を行い 正解 corr が分類器の戻り値 ans と異なる際 重みを更新 例 : if ans = SHIFT and corr = LEFT w s -= φ(queue,stack) w l += φ(queue,stack) 16

go 正解 の計算 (1) 各単語の親 head を知っている場合 とりあえず : stack[-1].head == stack[-2].id ( 左が右の親 ) corr = RIGHT stack[-2].head == stack[-1].id ( 右が左の親 ) corr = LEFT else corr = SHIFT 問題 : reduce 右を速すぎる段階で実行! stack[-2] stack[-1] queue[0] go to school to school id: head: 1 0 2 1 3 2 RIGHT 17

正解 の計算 (2) 各単語の未処理の子供の数 unproc を考慮 : stack[-1].head == stack[-2].id ( 右が左の親 ) stack[-1].unproc == 0 ( 左に未処理の子供がない ) corr = RIGHT stack[-2].head == stack[-1].id ( 左が右の親 ) stack[-2].unproc == 0 ( 右に未処理の子供がない ) corr = LEFT else corr = SHIFT 木を読み込みながらに unproc の初期値を計算 reduce を行うたびに unproc から 1 を引く corr == RIGHT stack[-1].unproc -= 1 18

Shift-Reduce の学習アルゴリズム ShiftReduceTrain(queue) make list heads stack = [ (0, ROOT, ROOT ) ] while queue > 0 or stack > 1: feats = MakeFeats(stack, queue) calculate ans # ShiftReduce と同様 calculate corr # 前のスライドと同様 if ans!= corr: w ans -= feats w corr += feats perform action according to corr 19

係り受けの標準的な形式 CoNLL ファイル形式 : タブで区切られた行 空の 1 行で区切られた文 ID 単語 原型 品詞品詞 2 拡張親 ラベル 1 ms. ms. NNP NNP _ 2 DEP 2 haag haag NNP NNP _ 3 NP-SBJ 3 plays plays VBZ VBZ _ 0 ROOT 4 elianti elianti NNP NNP _ 3 NP-OBJ 5.... _ 3 DEP 20

演習課題 21

実装 train-sr.py test-sr.py 演習課題 学習 data/mstparser en train.dep 実行 data/mstparser en test.dep 評価精度を測る script/grade dep.py チャレンジ 素性の拡張 識別学習アルゴリズムの改良 よくある誤りの分析 22

Thank You! 23