ChainerとRNNと機械翻訳

基本的なRecurrent Neural Networkモデルを実装してみた

わかるLSTM 〜 最近の動向と共に

ニューラルネットワークで時系列データの予測を行う

講義まとめ:自然言語処理のための深層学習

TensorFlowのチュートリアル - RNNの翻訳

可変長ミニバッチを使ったChainerの系列学習の実装 ← Chainerで多層LSTM, 双方向LSTMを実装するならここが参考になるだろう

雑読論文まとめ←論文7本の要約

seq2seq

TensorFlowにはseq2seqが実装されている

  その利用例(英仏翻訳)

seq2seq-attn (ハーバード大学による実装)のGitHub

  • Torchベース
  • sequence to sequence + attention

  seq2seq-attnの利用例(日本語)

word2vec

googleの公式のサイトからはダウンロードできないぽい

GitHub

Mikolovのword2vec論文3本まとめ

word2vecで自然言語処理

word2vecのソースを読んでみた

fastText

facebookのfastTextでfastに単語の分散表現を獲得する

facebokの公開した人工知能fastTextを試してみた

fastTextで一体何ができるのか

論文は

 Enriching Word Vectors with Subword Information (subword)

 Bag of Tricks for Efficient Text Classification (階層的softmax)

高速と噂のfastTextの仕組み

苦手はカタカナ語⇒fastTextのsubword(部分語)の弊害

頻出語にはnegative sampling が合い、稀な語には階層softmaxが合う⇒Why is hierarchical softmax better for infrequent words, while negative sampling is better for frequent words?

GitHub

試しに使う

ここに沿って実行。(ここも結局は同じ方針か。--tokenizeオプションは興味深い。他にもかなり色々なオプションがある。) fastTextそのものについてはここに説明あり。

$ mkdir fastText
$ cd fastText
$ git clone https://github.com/facebookresearch/fastText.git
$ git clone https://github.com/attardi/wikiextractor.git
$ wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
$ cd fastText
$ make

これで./fastText が生成される

最も簡単なお試しは用意されている

$ ./classification-example.sh
$ ./classification-results.sh

後者はそのままでは実行できない。

ここからテキスト分類用データセット(全8種)をダウンロードし、 data/ に置き、 classification-results.sh の wget を含む行をコメントアウトした上で実行する。

Wikipediaのデータを使った例(専用の加工用ツールwikiextractorあり。日本語の場合はmecabなどの形態素解析ツールを使う。 他にも、wp2txtというツールも使えそう。ただしハマることもあるらしいここが使えるかも)

$ python wikiextractor/WikiExtractor.py -b 500M -o output ../jawiki-latest-pages-articles.xml.bz2
$ cat output/AA/* > outputAA.txt

$ sudo apt-get install mecab llibmecab-dev mecab-utils mecab-ipadic-utf8 python-mecab
$ mecab outputAA.txt -O wakati -o wakati-out.txt
./fastText skipgram -input wakati-out.txt -output model -dim 200

テキスト分類の実行例はここ

$ wget http://www.rondhuit.com/download/ldcc-20140209.tar.gz
$ wget -O livedoor.py 'http://www.cs.gunma-u.ac.jp/~nagai/wiki/index-write.php?plugin=attach&pcmd=open&file=livedoor.py&refer=%BC%AB%C1%B3%B8%C0%B8%EC%BD%E8%CD%FD'
$ wget -O rand_split.py 'http://www.cs.gunma-u.ac.jp/~nagai/wiki/index-write.php?plugin=attach&pcmd=open&file=rand_split.py&refer=%BC%AB%C1%B3%B8%C0%B8%EC%BD%E8%CD%FD'
$ tar xvzf ldcc-20140209.tar.gz -C data
$ python livedoor.py > data/livedoor.txt
$ python rand_split.py
$ ./fasttext supervised -input data/livedoor_train.txt -output result/livedoor -dim 10 -lr 0.1 -wordNgrams 2 -minCount 1 -bucket 10000000 -epoch 100 -thread 4
$ mkdir result
$ ./fasttext test result/livedoor.bin data/livedoor_test.txt
$ ./fasttext predict result/livedoor.bin predict.txt 3

predict.txtはスペース区切りの単語の羅列。各行ごとに分類結果を上位3つ推定

$ wget http://qwone.com/~jason/20Newsgroups/20news-bydate.tar.gz
$ tar xvf 20news-bydate.tar.gz -C 20news
$ wget -O 20news_train.py 'http://www.cs.gunma-u.ac.jp/~nagai/wiki/index-write.php?plugin=attach&pcmd=open&file=20news_train.py&refer=%BC%AB%C1%B3%B8%C0%B8%EC%BD%E8%CD%FD'
$ wget -O 20news_test.py 'http://www.cs.gunma-u.ac.jp/~nagai/wiki/index-write.php?plugin=attach&pcmd=open&file=20news_test.py&refer=%BC%AB%C1%B3%B8%C0%B8%EC%BD%E8%CD%FD'
$ python 20news_train.py > 20news/train.txt
$ python 20news_test.py  > 20news/test.txt
$ ./fasttext supervised -input 20news/train.txt -output result/20news -dim 10 -lr 0.1 -wordNgrams 2 -minCount 1 -bucket 10000000 -epoch 100 -thread 4

使用目的は2種類。

1. 分散表現(word vector)の取得

$ ./fasttext skipgram -input (分かち書きしたファイル) -output model -dim 300
$ python eval.py (単語)

2. テキスト分類

$ ./fasttext supervised -input data/dbpedia.train -output result/dbpedia -dim 10 -lr 0.1 -wordNgrams 2 -minCount 1 -bucket 10000000 -epoch 5 -thread 4
$ ./fasttext test result/dbpedia.bin data/dbpedia.test
$ ./fasttext predict result/dbpedia.bin data/dbpedia.test

HPYLM

https://github.com/musyoku/hpylm とその解説記事

$ git clone https://github.com/musyoku/hpylm.git
$ cd hpylm
$ make install

学習は

$ python train_en.py -f dataset/t1.txt -m model-t1 -n 1000 -split 0.9 

生成は

$ python generate.py -m model-t1 -n 100

日本語のファイルを対象とする場合、mecabなどで分かち書きしてから学習&生成

$ cat japanese.txt | mecab -Owakati > dataset/japanese-wakati.txt
$ python train_en.py -f dataset/japanese-wakati.txt -m model-jp -split 0.9
$ python generate.py -m model-jp -n 100

HPYLM, NPYLM

https://github.com/fgnt/nhpylm

$ cd nhpylm/c_core/NHPYLM
$ mkdir build
$ cd build
$ cmake ..
$ cd ../../../..

setup.pyの54行目を修正

except IOError:
$ pip install --user -e .

npylmの解説記事

https://github.com/musyoku/vpylm とその解説記事


添付ファイル: file20news_train.py 30件 [詳細] file20news_test.py 30件 [詳細] filelivedoor.py 37件 [詳細] filerand_split.py 34件 [詳細]

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-05-12 (金) 18:14:02 (72d)