Word2vecをMacで試す〜日本語Wikipediaコーパス活用

AI

日本語の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

スポンサーリンク

お勧め書籍

AI関連

Python

JavaScript

HTML CSS関連

統計学

AI lecture
スポンサーリンク
dororoをフォローする
IT工房|AI入門とWeb開発
タイトルとURLをコピーしました