NLP

学習したことを記録しています

attention機構を持つLSTMを用いた含意関係認識

目次

今回はattention機構を持つLSTMを用いて含意認識を行います。

環境はこんな感じ

Ubuntu 16.04
python 2.7
tensorflow-gpu 1.2.0

今回のモデルはこれです。 f:id:hayan10:20170724144135p:plain

参考論文は[REASONING ABOUT ENTAILMENT WITH NEURAL ATTENTION] https://arxiv.org/pdf/1509.06664.pdf


実行データのダウンロード

githubにてデータのダウンロードをします。

ここから

GitHub - borelien/entailment-neural-attention-lstm-tf: (arXiv:1509.06664) Reasoning about Entailment with Neural Attention

右上の緑のClone or Download からダウンロードしてください。

Dataset

今回の含意認識に使うデータセットスタンフォード大学が提供する

The Stanford Natural Language Inference (SNLI) Corpusです。

                コーパスの例

Text Judgments Hypothesis
A man inspects the uniform of a figure in some East Asian country. contradiction The man is sleeping
An older and younger man smiling. neutral Two men are smiling and laughing at the cats playing on the floor.
A black race car starts up in front of a crowd of people. contradiction A man is driving down a lonely road.
A soccer game with multiple males playing. entailment Some men are playing a sport.
A smiling costumed woman is holding an umbrella. neutral A happy woman in a fairy costume holds an umbrella.

分類はentailment,neutral,contradictionの3種類にわけられ、5人の人間の意見による多数決によってラベル付けされています。

データの規模は57万データあり、すべての文はパースされています。

ダウンロードは下記のURLから

http://nlp.stanford.edu/projects/snli/snli_1.0.zip

ダウンロードしたzipファイルを解凍すると、_MACOSXsnli_1.0のファイルがあるのでsnli_1.0のフォルダの中身をdata/datasetに入れる。 (.DS_store,Icon^M,README.txtは入れなくてもOK)

Word2Vect

Word2Vectによって学習済みの単語の分散表現のデータをダウンロードします。

今回はGoogleNewsをもとに学習したデータを使います。

下記からダウンロード

GoogleNews

ダウンロードできない人は下記からGoogleNews-vectors-negative300.binだけをダウンロードする。

GitHub - mmihaltz/word2vec-GoogleNews-vectors: word2vec Google News model

ダウンロードしたGoogleNews-vectors-negative300.bindataの中に入れる。

プログラムの変更

githubでダウンロードしたプログラムでは python 2.7 tensorflow-gpu 1.2.0の環境で実行できないので プログラムの中身を変更します。

事前に変更しておいたプログラムがありますので下記からすべてダウンロードし pythonのファイルの中に上書き保存してください。

python - Google ドライブ

プログラム実行

実際に動かして行きましょう。まずはterminalにてpythonのあるディレクトリへ移動します。

いくつかのオプションを閲覧するときは下記を実行してください。

python main.py --help

トレーニングを開始するには

python main.py --train

すると、、、 こんな感じでトレーニングが開始します。 f:id:hayan10:20170724162034p:plain

ちなみにデフォルトでのハイパーパラメータはこのようになっています。

learning_rate = 0.001
weight_decay = 0.
batch_size_train = 24
num_epochs = 45
sequence_length = 20
embedding_dim = 300
num_units = 100