日本語のWikipediaの公開データからコーパスを作成する方法はネットでたくさん出回っています。
今回はQiitaの「日本語版WikipediaのデータからWord2Vec用データをつくる(Mac対応)」記事を参考に試す方法です。
大まかにはこの記事に従えば試すことができますが、途中のエラー対策や注意点を追記しています。
intelのiMacで試したものです。M1MacやWindowsは別記事を参考にした方が良いです。
また、Home Brewをインストール済みの前提で説明しています。
Word2vecをインストール
参考コード(参考サイトのものです)
cd word2vec #任意の作業ディレクトリに移動してください git clone https://github.com/svn2github/word2vec.git cd word2vec make chmod +x *.sh
Word2vecを導入します。この例ではword2vecフォルダをあらかじめ作成しておいて、cdで移動するところからですね。
次にgit cloneしていますので、新たにword2vecフォルダができてクローンした内容が入ります。この段階で2重のword2vecフォルダができています。
クローンしたファイルを使って make しますが、ここでエラーになります。
エラー対策
makeすると ‘malloc.h’ file not found … #include <malloc.h > とエラーが出る場合は、ライブラリ名の違いを修正する必要がありますので下記を参考に書き換えます。
vimまたは、何らかのエディタで下記3つのファイルを書き換えます。ファイルは検索で探すと良いです。
- distance.c
- word-analogy.c
- compute-accuracy.c
書き換える内容は、各ファイルの中にある 次の内容を
#include <malloc.h >
次のように変更します。
#include <stdlib.h >
大体66行目くらいにあるはずです。
変更後makeするとうまくいくはずです。
その後、chmod +x *.shを行なってアクセス権を変更します。
wikiextractorでデータからxmlをクリンナップ
ここもエラーが出やすいところです。ポイントは自分が作業を行なっている階層をしっかり把握して適切なパスを付けることです。
参考サイトのコードはそこまで面倒を見てくれていません。
gitクローンでwikiextractorという専用のツールを取得しています。
このまま、先ほどの流れでこのコマンドを実行すると、word2vec/word2vec/wikiextractorのようなフォルダ構成になります。
git clone https://github.com/attardi/wikiextractor.git
xmlをクリンナップするために次のコマンドを実行しますが、パスがあってないと当然エラーになります。
WikiExtractor.pyの場所とjawiki-latest-pages-articles.xml.bz2場所をしかりとパスで記述する必要があります。
python ./wikiextractor/WikiExtractor.py jawiki-latest-pages-articles.xml.bz2 -q -b 10M -o wiki_texts
パスが正しくても、ここでエラーが出ます。
エラーを解決するには、WikiExtractor.pyファイル内容の一部変更が必要です。と言っても、.extractの前のドットを取るだけです。
WikiExtractor.pyのコード訂正前
from .extract import Extractor, ignoreTag, define_template, acceptedNamespaces
WikiExtractor.pyのコード訂正後
from extract import Extractor, ignoreTag, define_template, acceptedNamespaces
これでしばらく参考サイト通りのコードでうまくいきます。結構時間がかかりますので注意してください。
以下参考サイトのコード
ファイルの連結
find wiki_texts/ | grep wiki | awk '{system("cat "$0" >> wiki_all.txt")}'
brew install nkf nkf -w --overwrite wiki_all.txt
仕上げのクリンナップ
sed -e 's/<[^>]*>//g' ./wiki_all.txt > ./wiki_notag.txt
#全角カッコを半角に $ sed -i -e 's/(/(/g' ./wiki_notag.txt && sed -i -e 's/)/)/g' ./wiki_notag.txt #カッコ内を削除 $ sed -i -e 's/([^)]*)//g' ./wiki_notag.txt
#空白をすべて埋めたあと空行を削除 $ sed -i -e 's/ //g' ./wiki_notag.txt && sed -i -e '/^$/d' ./wiki_notag.txt
mecabをインストール
brew install mecab
brew install mecab-ipadic
brew install xz
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
./bin/install-mecab-ipadic-neologd -n -a
cd ../ #作業ディレクトリに戻ります pip install mecab-python3
分かち書きを実行
mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologd -Owakati wiki_notag.txt -o wiki_wakati.txt -b 163840
nkf -w --overwrite wiki_wakati.txt
ベクトル化を実行
./word2vec -train wiki_wakati.txt -output wiki_wakati_w2v.bin -size 200 -window 5 -sample le-3 -negative 5 -hs 0 -threads 1 -binary 1 -iter 1
関連の高い単語を探す
コマンドを実行しても動かない場合は大抵パスの間違いです。
distance コマンドはword2vec/word2vecの中で実行できます。パスを間違えてないかよく確認して実行してください。
wiki_wakati_w2v.binも必要に応じてパスを付ける必要があります。
./distance wiki_wakati_w2v.bin
コメントを投稿するにはログインしてください。