はじめに
GloVeはStanfordによる単語分散表現の教師なし学習手法です。詳細は省きますが、Stanford版のword2vecと考えれば、使用シーン的には問題ないでしょう(単語のちかさをとる、深層学習の埋め込み表現の初期値にする)。word2vecよりも学習が遅いだとか、代わりに精度が高いだとか言われることもありますが、タスクによりけりというのが実際のところのように感じます。
word2vecの学習しょっちゅうやるのですが、はじめてGloVeの学習をしたので備忘録として記載します。
やったこと
準備
特に私の環境では追加インストールは必要ありませんでした。適当なCコンパイラだけ入ってればいいんじゃないかな。
git clone http://github.com/stanfordnlp/glove
cd glove
データの準備
データはword2vecの学習などと同じ、単語がスペース区切りされたファイルを用意します。異なる文書は改行で表現します。改行がある場合は、改行をまたいでウィンドウを設置したりはしないようなので、同じ文書のだったら1つの行にまとめてしまったほうが良いかもしれません。
下記はDBPediaデータセットむけにデータを作った例。
wget https://github.com/le-scientifique/torchDatasets/raw/master/dbpedia_csv.tar.gz
tar -xf dbpedia_csv.tar.gz
cat dbpedia_csv/train.csv| sed 's/\(^[0-9]*,"[^"]*"," *\)\|\("$\)//g' > dbpedia.txt
スクリプトの書き換え
GloVeを学習するためには複数のプログラムを実行する必要がありますが、GloVeレポジトリには一連の流れを記載したデモスクリプトが用意されています。使用データがベタ打ちされているので、上記で作ったデータを指すように修正します。
make
-if [ ! -e text8 ]; then
- if hash wget 2>/dev/null; then
- wget http://mattmahoney.net/dc/text8.zip
- else
- curl -O http://mattmahoney.net/dc/text8.zip
- fi
- unzip text8.zip
- rm text8.zip
-fi
-CORPUS=text8
+
+CORPUS=dbpedia.txt
VOCAB_FILE=vocab.txt
学習の実行
./demo.sh
を実行すると、自動的にMakeして学習を走らせてくれます。デフォルトの設定は1時間くらいで終わりました。