IKKO-Ohta / e2l

Economy to lang with nn
0 stars 0 forks source link

(C.Dyer 2014) parsing program implement #6

Open IKKO-Ohta opened 7 years ago

IKKO-Ohta commented 7 years ago

(C.Dyer 2014) parsing program implement

init

pred

trainsition

[L,R,SH] nltk.parsingと同じ規格で良い

IKKO-Ohta commented 7 years ago

五頁目の式、S[t],B[t]などのベクトル表現を得るための式で、Vを線形写像として x = max(0,V[w; w_LM; t] + b) とあるけれども、得られる値がスカラーかベクトルかで迷った。結論から言うとmax(0,X)はcomponent wiseなReLU関数なので、S[t],B[t]はベクトルなのだ、という理解でよいはず。

しかしwとw_LMの何が違うのかよくわからない。 wはword typeでw_LMはa fixed vector representation from a neural netowork modelとあるが、このときwがカテゴリ変数でw_LMがword2vec(より高級なものを使っているらしいけど)から得られた単語分散表現という意味か。で、それらを縦にconcatして、提案手法たるstacked-LSTMに突っ込んでcomponents-wise ReLUをするということ? という風に文章は読めるが、fig.4と整合的ではないように見える。

IKKO-Ohta commented 7 years ago

stacked-LSTMはポインタをもったLSTMブロック。というか分化する計算グラフ。push/popによって層のコネクションが分化する(一度pushされた層がなくなってしまうわけではない)。正直言ってこれがstackなのかどうかよくわからない(確かに後入れ先出しで計算を解決していくイメージはあるかも)

dependency parsingでは語と語の繋がりが次々になるわけではなく、飛び石になることがあり、そのような場合に計算グラフを分化させてうまく計算しようという意味だと思われる。

しかしparser側とどういう連動をするのか? このLSTM自体の訓練は? 動的に層が増えていくのはどうやって実現しているのか? この2つのLSTMも、parserのw,gと同時に訓練するという意味?

""" これは全然違う。誤読 9/21 """

IKKO-Ohta commented 7 years ago

たぶんこういうこと: 2017-09-15 16 01 15

IKKO-Ohta commented 6 years ago

作るもの

入力素性

stack LSTM

教師信号

parser本体

IKKO-Ohta commented 6 years ago

大まかに見取り図を書いたらコーディングに移る。

IKKO-Ohta commented 6 years ago

chainerで実装中。 https://github.com/IKKO-Ohta/e2l/blob/master/parsing/bin/lstmParser.py


9/20 15:40 confとtransitionアクションができて雰囲気がparserっぽくなる。 課題は部分木の再帰部分で、僕の理解だと次元の数のつじつまが合わない気がする。

IKKO-Ohta commented 6 years ago

Arc-standardをsubtreeの計算以外では実装。 次は入力とembedding側に回る。

IKKO-Ohta commented 6 years ago

学習時の形式は標準的な(?) oracleにしたやつを用いる。oracleはtransition-basedのバッファ・部分木の状況を記録したファイル形式で、配布されているプログラムでconllから抽出できる。oracle化するプログラムはhttps://github.com/clab/lstm-parser から拝借。 Done

Todo

IKKO-Ohta commented 6 years ago

def oracle_dump() """ オラクル形式を読み取ってデータ対に落とし込む """ をembedding以外の部分で実装した。

データ対に落とし込むための関数が必要。buffer側・stack側の両方でword embedding. stack側のほうでは、部分木をベクトル表現に直す工夫が必要となる。Dyer(2014) ではRichard Socher(2013)を参照している。Socherは、部分構文木をembeddingして感情分析にかける。 http://www.aclweb.org/anthology/D13-1170 木をベクトルに潰す処理としてはかなり高名っぽい。

IKKO-Ohta commented 6 years ago

クラス全体が肥大化してきた。 パーザのクラスを分割する。 parser

IKKO-Ohta commented 6 years ago

構文木のコンポジション[ベクトル埋め込み]はシンプルなRecursive Neural Networkで行う。 [a,(b,c)]という部分木があったら、

p1 = W[b;c] + b
p1 = ReLU(p1) p2 = W[a:p1] + b p2 = ReLU(p2)

となってp2が答え。同一の非線形写像オブジェクトを使い回してバックプロップするという理解。

IKKO-Ohta commented 6 years ago

RecNNを書いた。