#author("2019-04-17T15:45:45+00:00","default:masatomix","masatomix") #author("2019-04-17T21:34:26+00:00","default:masatomix","masatomix") #topicpath ---- #contents ** 日本語Wikipediaのデータを学習させる [#k01a7abc] やってみます。 *** Rubyとツール準備 [#haac0f8f] $ ruby --version ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux] $ rbenv exec gem install wp2txt bundler *** 日本語Wikipediaデータのダウンロードと変換 [#rf6cfc21] 日本語データはWikipediaのデータを使う事にします。 $ mkdir wikipedia && cd $_ $ curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2 2G以上あるのでご注意。 ダウンロードしたデータを wp2txt を使ってただのテキストファイルに変換します。 $ rbenv exec wp2txt --input-file jawiki-latest-pages-articles.xml.bz2 WP2TXT is spawming 2 threads to process data Preparing ... This may take several minutes or more ca... Done. jawiki-latest: 8% |oooooooooooooo … Processing finished $ たくさんのファイルが出来るので、ファイルをMecabで分かち書きしながら、連結します $ cat jawiki-latest-pages-articles.xml*.txt | mecab -Owakati -b 81920 > jawiki-latest-pages-articles-all_wakati.txt $ *** 学習 [#xe270072] $ python3 -m venv ~/venv/venv_ai $ source ~/venv/venv_ai/bin/activate (venv_ai) $ (venv_ai) $ mkdir ../python && cd $_ (venv_ai) $ cat save_model.py from gensim.models import word2vec import logging logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) sentences = word2vec.Text8Corpus('../wikipedia/jawiki-latest-pages-articles-all_wakati.txt') model = word2vec.Word2Vec(sentences, size=200, min_count=20, window=15) model.save("./wiki.model") (venv_ai) $ pip install gensim (venv_ai) $ python3 save_model.py ...めちゃくちゃ時間がかかる (venv_ai) $ 日本語の学習は以上です。 *** 動かしてみる。 [#n8b66f14] やってみます。 (venv_ai) $ cat word2vec_test.py from gensim.models import word2vec model = word2vec.Word2Vec.load("./wiki.model") results = model.wv.most_similar(positive=['ボルダリング']) for result in results: print(result) (venv_ai) $ python3 word2vec_test.py ('クライミング', 0.7824140787124634) ('ロッククライミング', 0.720820963382721) ('スノーボード', 0.6274969577789307) ('アウトドア', 0.6219459772109985) ('パラグライダー', 0.6193433403968811) ('トレッキング', 0.6125744581222534) ('スキーヤー', 0.6124218106269836) ('サイクリング', 0.6103093028068542) ('エクストリームスポーツ', 0.6046898365020752) ('climbing', 0.5836126804351807) (venv_ai) $ つぎに、沖縄県の県庁所在地を探してみます。 つぎに、沖縄県の県庁所在地を探してみます。「横浜市」から「神奈川県」を引いて、「沖縄県」を足すって操作です。 (venv_ai) $ cat word2vec_test2.py from gensim.models import word2vec model = word2vec.Word2Vec.load("./wiki.model") results = model.wv.most_similar(positive=['沖縄県', '横浜市'], negative=["神奈川県"], topn=5) results = model.wv.most_similar(positive=['横浜市','沖縄県'], negative=["神奈川県"], topn=5) for result in results: print(result) print('------------------') (venv_ai) $ python3 word2vec_test2.py ('那覇市', 0.7939830422401428) ('名護市', 0.7602319717407227) ('石垣市', 0.7390133142471313) ('浦添市', 0.721440315246582) ('宜野湾市', 0.7022244930267334) ------------------ (venv_ai) $ ---- この記事は #vote(おもしろかった,そうでもない) #comment #topicpath SIZE(10){現在のアクセス:&counter;}