きっと続かんブログ

勉強したことや人に言いたいことを書く。

Quick-Thought使ってみたい

Quick-Thoughtとは

2018年に登場した文の分散表現獲得手法の一つ。
Skip-Thought(2015)が「前後の文を予測して生成する」モデルなのに対し、
Quick-Thoughtは「次の文を文グループから選んで当てる」モデル。
「生成する」タスクより「選択する」タスクの方が簡単。従ってシンプルな構造・高速な計算が実現できる。
さらに、構文のような本来不要な特徴を省いて「文の意味」だけに的を絞った特徴抽出が可能(ほんとかな)。

実装はここに。

github.com

GitHub解説

英語苦手だからメモっとく。TensorflowによるQuick-Thoughtの実装。Chris ShallueさんがTensorflowで実装したSkip-Thoughtをベースにしている。

Model configuration files(設定ファイル)

モデルの設定をjson形式でまとめる。見やすい。model_configs にサンプルがある。
例えば"mode"は、どんな単語embeddingを使うか(fixed,trained,expand)。

Pretrained Models(サンプルモデル)

データセット"BookCorpus","UMBC"で学習したMC-QT(MultiChannel Quick Thought)モデルがここにおいてるよ。
モデルと共に辞書も置いてるみたいですね。

Training a Model(モデルの学習)

Prepare the Training Data(データの準備)

データのフォーマットとしてTFRecordを採用。
scripts/data_prep.shは、辞書ファイル(VOCAB_FILE)とトークンファイル(TOKENIZED_FILES)からTFRecord形式のデータを生成するスクリプト
・辞書ファイルは、各行に1単語を記述(ただし、最初の行はとする)
トークンファイルは、各行にトークン化された文を記述(ソース文書の順序を保つこと)

Run the Training Script(学習の実行)

モデルの学習はrun.shを実行することで行う。

DATA_DIR #上で準備したTFRecordファイルのパス
RESULTS_HOME #結果を出力するディレクトリ
CFG #設定ファイルの上位ディレクトリ
MDL_CFGS #CFGのパス
GLOVE_PATH #GloVeで獲得した単語embeddingへのパス

レーニングを実行すると、設定ファイルは$RESULTS_HOME/$CFGに出力される。

Evaluating a Model(モデルの評価)

Expanding the Vocablary(オプション:語彙の拡張)

Skip-Thoughtの論文で提案された手法を用いて、学習に使用する語彙を拡張することが可能である。
Skip-Thoughtは単語の分散表現化にword2vecを用いていたので多分それのこと。
voc_exp.shで実行。あらかじめ学習済みのword2vecモデルが必要。

Evaluation on downstream tasks(学習タスクの評価)

語彙辞書の作成やトークン化など”上流”タスクに対し、ニューラルネットワークを用いたモデル学習のことを”下流(downstream)”タスクと呼んでいるみたい。
評価にはscripts/eval.shを実行する。 Skip-Thoughtモデルの作成者が用いた評価スクリプトも必要なため、RyanさんのGitHubリポジトリ※をクローンする必要がある。

※Skip-Thoughtの実装は2つあり、著者のRyanさんがTheanoで、ChrisさんがTensorflowで実装している。

今後の予定

とりあえず動くように頑張る。cloneしてスクリプトファイル実行すれば即動くってわけにはいかなそうだ。先週RyanさんのSkip-Thoughtを試したんだけど、Chrisさんのほう使ってれば楽だったかなあ。。