- 本モデルは,各種分散表現の圧縮表現を学習するスクリプトである
- 正確には,以下のような(denoising)Auto-Encoder Modelを学習する
- 入力:分散表現
$v_x \in R^{N_d}$ - 中間層:圧縮表現
$[1,N_k]^{N_m}$ - より正確には one-hot vector のsoftmax近似
- 出力層:復元された分散表現
$v_x' \in R^{N_d}$
- 入力:分散表現
- 本モデルの詳細は,以下の文献を参照のこと
SHU, Raphael; NAKAYAMA, Hideki. Compressing Word Embeddings via Deep Compositional Code Learning. arXiv preprint arXiv:1711.01068, 2017.
朱中元, 中山英樹. 深層コード学習による単語分散表現の圧縮. In: 言語処理学会第24回年次大会(NLP2018), 2018
- スクリプトの開発およびテストは Python 2.7.14 を使用した
- 必要なpackageについては
./requirement.txt
を参照のこと - 入力データは NumPy
.npy
形式に対応している
- KerasおよびTensorFlowをインストール,動作確認を行うこと
- 設定は 1)実行時引数として定義 2)スクリプト内部で定義 の2種類に大別される
--input_embedding
:入力する分散表現.例:gensim.models.Word2Vec
のsyn0.npy
ファイル--output_dir
:学習済みモデル(keras.model形式)の保存先ディレクトリ.ファイル名は入力から自動決定--N_k
:圧縮表現・コードワードベクトルの本数--N_m
:圧縮表現・コードブックの数--N_epoch
:エポック数
F_temperature
:Gumbel-Softmax Trick適用時のアニーリング温度N_minibatch
:ミニバッチサイズoptimizer_name
:最適化手法
compress_word_embedding.py \
--input_embedding PATH_TO_THE_NPY_FILE
--output_dir ../trained_model/
- 学習済みモデルは 1)圧縮表現への変換 2)分散表現の復元 の2つに用いる
- 利用例については,同梱のJupyter Notebookを参照されたい
- 以下の手順に従う
- 圧縮表現を求めたい分散表現をひとつ用意する
- モデルに入力して,中間層の値を出力させる
- 中間層のkeras.layer.nameは
gumbel_softmax
である.$N_m$個の$N_k$次元ベクトルが得られる
- 中間層のkeras.layer.nameは
- 中間層の値を離散値に変換する.これが圧縮表現である
-
$m \in [1,N_m]$ ごとにargmaxを取る
-
- 以下の手順に従う
- モデルから,Decoder層のパラメータを抽出する
- Decoder層のkeras.layer.nameは
decoder_[0-(N_m-1)]
である.$N_m$個の$(N_k, N_d)$次元行列が得られる
- Decoder層のkeras.layer.nameは
- 復元したい圧縮表現をひとつ用意する
- 例:
[2,3,8,5,4,1,0,11]
- 例:
- Decoder層のパラメータからそれぞれ$k$行目を取得して足し合わせる.これが分散表現である
- 例:
decoder_0:2行目 + decoder_1:3行目 + ...
- 例:
- モデルから,Decoder層のパラメータを抽出する
以上