ラベル 自然言語処理 の投稿を表示しています。 すべての投稿を表示
ラベル 自然言語処理 の投稿を表示しています。 すべての投稿を表示

2018年4月25日水曜日

OpenNMTで英日翻訳できるようにする 2

この前のデータではうまくいかなかったので、他のデータで再挑戦。
コーパス:JESC 配布のもの
320万文あるし、データ量としては十二分のはず…。

preprocess.py

分割データを、とりあえずそのまま学習させる。
preprocess.pyの実行で、train.enが大きいためメモリが足りないと怒られるときがある。
-max_shard_size 1000000
を実行ファイル名の後ろにつける。
こんな感じ。
python preprocess.py -max_shard_size 1000000 -train_src data/train.en -train_tgt data/train.ja -valid_src data/val.en -valid_tgt data/val.ja -save_data data/en_ja

実行すると、dataフォルダの中に大量のtrain.ptが作成される。

train.py

うまくいくよう祈りながら実行
nohup python3 -u train.py -data data/en_ja -save_model en_ja-model > log.txt &

translate.py

学習が終わったら、動かしてみる。
前回accが29とかだったが、今回は40まで上がっている!!!

いい感じ
SENT 755: ('▁someone', '▁attacked', '▁me', '!')
PRED 755: ▁誰かが 私を 襲 った !
PRED SCORE: -9.0828

SENT 727: ('▁do', '▁it', '▁yourself', '▁from', '▁today', '▁on', '.')
PRED 727: ▁今日 から 自分で やれ
PRED SCORE: -6.6255

ちょっと惜しい
SENT 704: ('▁i', '▁can', '▁raise', '▁the', '▁child', '▁by', '▁myself', '▁without', '▁a', '▁male', '▁figure', '.')
PRED 704: ▁男 が いない と ▁一人で 育て られる
PRED SCORE: -8.9010

SENT 1374: ('▁because', '▁she', '▁can', "'", 't', '▁believe', '▁i', '▁can', "'", 't', '▁eat', '▁this', '▁pen', 'gu', 'in', '.')
PRED 1374: ▁この ペン ギ ンは 食べ られない から
PRED SCORE: -8.6270

ダメダメ
SENT 789: ('▁worst', '▁of', '▁all', ',', '▁he', '▁doesn', "'", 't', '▁have', '▁hair', '...')
PRED 789: ▁ヘ ヘ ヘ ヘ ...。
PRED SCORE: -10.1595

SENT 1569: ('▁hey', ',', '▁l', 'ud', 'l', 'ow', '!', '▁grab', '▁a', '▁light', '▁cann', 'on', '▁and', '▁get', '▁out', '▁here', '▁now', '!')
PRED 1569: ▁ライ ト キャ ノ ン !
PRED SCORE: -9.9253

特にデータのトリミング的なことはせずに、そのまま突っ込んだけど、いい感じに訳せてそうな気がする。

おまけ

遊戯王かな?
SENT 1405: ('▁i', '▁won', "'", 't', '▁let', '▁you', '!', '▁i', '▁activate', '▁a', '▁magic', '▁card', '!')
PRED 1405: ▁マジ ック カード 発動 !
PRED SCORE: -8.2402

SENT 1478: ('▁his', '▁per', 'man', 'ent', '▁trap', ',', '▁dep', 'th', '▁am', 'ul', 'et', '...')
PRED 1478: ▁永 続 トラ ップ ▁ディ ス ・ ア ミュ レット
PRED SCORE: -6.4971


2017年9月16日土曜日

OpenNMTで英日翻訳できるようにする

OpenNMTをインストールして機械翻訳(英日)を使えるようにする

環境

  • Python 3.5.4
  • Linux

手順

$ git clone https://github.com/OpenNMT/OpenNMT-py.git
$ pip3 install -r requirements.txt

実行しようとすると、torchがないと怒られる…
$ python translate.py -model demo-model_epochX_PPL.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose
Traceback (most recent call last):
  File "translate.py", line 7, in <module>
    import torch

ImportError: No module named torch

torchのインストール

pyTorchを見てみる
  • http://pytorch.org
pytthon 3.6.*のときとかは、cp36とかに勝手に変更すると入る
$ sudo pip3 install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp35-cp35m-manylinux1_x86_64.whl 
$ sudo pip3 install torchvision

プログラムの実行

以下のコマンドで実行できるが、これは英独の翻訳
$ python3 preprocess.py -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo

英日にしたいので、新しくディレクトリを作成し、その下に英語と日本語のパラレルコーパスを置いた。
行数は英独のものと同様にしたが、データ量としては少ないことに留意する。
*-train.txtが10000行、*-val.txtが3000行。
日本語のコーパスはmecabを用いて、単語をspace区切りに加工している。

モデルの学習

以下のコマンドでデフォルト設定で動く
python3 train.py -data data/demo -save_model demo-model

学習するのに時間がかかるので、nohupで動かすのが良い
$ nohup python3 -u train.py -data data/demo -save_model demo-model > log.txt &

翻訳の実行

モデルのファイルは1番最後に出力されているのを指定した。
src-test.txtは自分で作っても良いかも
$ python3 translate.py -model demo-model_acc_26.58_ppl_194.39_e13.pt -src data/src-test.txt -output pred.txt -replace_unk -verbose

ex. )
SENT 1: please, don't forget me.
PRED 1: 「 それ は どう し た ん です か ? 」
PRED SCORE: -16.1014

ひどさしかない。
gitにも小さいデータでやると恐ろしい結果になると書いてあるので、次は大きいコーパスで試してみる。

なんか見てる人が結構いるっぽいので続きの記事
こちらは大きいコーパスで試してみた

2017年4月29日土曜日

input-buffer overflow. The line is split. use -b #SIZE option.

jawikiなどの大きなファイルをわかち書きしようとすると、以下のようなエラーが出る
$ input-buffer overflow. The line is split. use -b #SIZE option.

-b オプションを付けることで解決できる
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/ -Owakati -b 781361152 jawiki.txt > jawiki_wakachi.txt

指定するサイズはwcコマンドで確認
$ wc jawiki.txt 
  2351310   3832483 781361152 jawiki.txt

2017年1月26日木曜日

日本語wikiコーパスの作成

wikiコーパスのダウンロード
$ curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2

xml形式なので、テキストを抜き出す。
そういったプログラムを用意してくださっているので利用する。
$ git clone https://github.com/attardi/wikiextractor

実行
$ python wikiextractor/WikiExtractor.py jawiki-latest-pages-articles.xml.bz2

抽出された内容はフォルダに分けられるので、catで1つのファイルにまとめる
$ cat text/*/* > jawiki_org.txt

内容に<documetn ...>とあったり、空白行があったりするのでトリミング
$ cat ./jawiki_org.txt | sed -e 's/<.*>//g' | sed -e '/^ *$/d' > ./jawiki.txt

必要あればmecabで分かち書き
$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/ -Owakati jawiki.txt > jawiki_wakachi.txt

以上の操作で完了

2017年1月22日日曜日

ImportError: No module named queue

pythonでword2vecを使おうとしたときのエラー
$ python word2vec.py 
Traceback (most recent call last):
  File "word2vec.py", line 3, in <module>
    from gensim.models import word2vec
  File "/Library/Python/2.7/site-packages/gensim/__init__.py", line 6, in <module>
    from gensim import parsing, matutils, interfaces, corpora, models, similarities, summarization
  File "/Library/Python/2.7/site-packages/gensim/summarization/__init__.py", line 4, in <module>
    from .keywords import keywords
  File "/Library/Python/2.7/site-packages/gensim/summarization/keywords.py", line 13, in <module>
    from six.moves.queue import Queue as _Queue
ImportError: No module named queue

これの原因としては、sixまわりのファイルが以下の2つに重複して入ってたことによる

1. /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/
2. /Library/Python/2.7/site-packages

そもそもの原因は、バージョンが低かったこと。
pipでアップグレードすると、2. のパスが更新される。
でも、実際にプログラムを実行すると1. を見に行く。
なので、バージョンの低いファイルを読み込んでしまい、エラーになっていた。

仕方ないので、1. にあったsix.pyとsix.pycを削除したら動くようになった。
本当なら削除するよりも、パスを変更する等の方がいいのだけれど…

ValueError: numpy.dtype has the wrong size

pythonでword2vecを使おうとしたときに出たエラー
$ python word2vec.py 
Traceback (most recent call last):
  File "word2vec.py", line 3, in <module>
    from gensim.models import word2vec
  File "/Library/Python/2.7/site-packages/gensim/__init__.py", line 6, in <module>
    from gensim import parsing, matutils, interfaces, corpora, models, similarities, summarization
  File "/Library/Python/2.7/site-packages/gensim/models/__init__.py", line 14, in <module>
    from .word2vec import Word2Vec
  File "/Library/Python/2.7/site-packages/gensim/models/word2vec.py", line 108, in <module>
    from gensim.models.word2vec_inner import train_batch_sg, train_batch_cbow
  File "__init__.pxd", line 155, in init gensim.models.word2vec_inner (./gensim/models/word2vec_inner.c:10913)
ValueError: numpy.dtype has the wrong size, try recompiling. Expected 88, got 96

pipでnumpyをインストールしているとダメらしい。
easy_installで入れ直すと動く

$ pip uninstall numpy
$ easy_install numpy


mecab-ipadic-neologdのインストール

みなさんご存知の形態素解析ソフトmecab。
mecab-ipadic-neologdを使えばweb上から得た新しい単語の解析も可能になる。
mecabはインストールされている前提で、辞書からの登録。

$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd/
$ ./bin/install-mecab-ipadic-neologd
[install-mecab-ipadic-NEologd] : Start..
[install-mecab-ipadic-NEologd] : Check the existance of libraries
[install-mecab-ipadic-NEologd] :     find => ok
[install-mecab-ipadic-NEologd] :     sort => ok
[install-mecab-ipadic-NEologd] :     head => ok
[install-mecab-ipadic-NEologd] :     cut => ok
[install-mecab-ipadic-NEologd] :     egrep => ok
[install-mecab-ipadic-NEologd] :     mecab => ok
[install-mecab-ipadic-NEologd] :     mecab-config => ok
[install-mecab-ipadic-NEologd] :     make => ok
[install-mecab-ipadic-NEologd] :     curl => ok
[install-mecab-ipadic-NEologd] :     sed => ok
[install-mecab-ipadic-NEologd] :     cat => ok
[install-mecab-ipadic-NEologd] :     diff => ok
[install-mecab-ipadic-NEologd] :     tar => ok
[install-mecab-ipadic-NEologd] :     unxz is not found.

not foundの場合はxzをインストールする。

$ brew install xz
$ ./bin/install-mecab-ipadic-neologd

きちんと動作すると途中でyes or noを聞かれる

[install-mecab-ipadic-NEologd] : Do you want to install mecab-ipadic-NEologd? Type yes or no.
yes

yesと答えた後、パスワードを入力

default system dictionary   | mecab-ipadic-NEologd
エン ケン   | エンケン 
マツコ 会議   | マツコ会議 
ど根性 ガエル の 娘   | ど根性ガエル の 娘 
スマ ステ   | スマステ 
山下 美月   | 山下美月 
蒼 井 翔太   | 蒼井翔太 
ワッキー 貝山   | ワッキー貝山 
亜 人 ちゃん   | 亜人 ちゃん 
男 水   | 男水 
ハミルトン 島   | ハミルトン島 
島田 八 段   | 島田 八段 
天守 物語   | 天守物語 
ひだ まり スケッチ   | ひだまりスケッチ 

一例として、上記の内容が出力される。
インストール完了

実際に使う時は以下のコマンドをパスつきで実行
分かち書きオプションもばっちり

$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd/ -Owakati