gensimのインストール
Pythonの場合はgensimをインストールすると、word2vecが使える。
gensimはドキュメントからセマンティックなトピックを自動的に抽出する機能を提供するライブラリ。
pip install --upgrade gensim
使ってみる
太宰治の「人間失格」を使ってモデルを学習させて、単語の足し算、引き算などをやってみた。
# -*- coding: utf-8 -*- import logging import codecs from prettyprint import pp import MeCab from gensim.models import word2vec logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) with codecs.open('ningen_shikkaku.txt', 'r', 'sjis') as f: text = f.read() tagger = MeCab.Tagger('-Owakati') wakati_text = tagger.parse(text.encode('utf-8')) open('wakati.txt', 'w').write(wakati_text) sentences = word2vec.Text8Corpus("wakati.txt") model = word2vec.Word2Vec(sentences, size=100, min_count=1) pp(model.most_similar(positive=[u'人生'])) pp(model.most_similar(positive=[u'人生'], negative=[u'酒'])) pp(model.most_similar(positive=[u'罪'], negative=[u'罰']))
ちょっとハマったところ
- MeCabはstr型しか受け付けないため、unicode型の文字列を処理したい場合はエンコードしてからMeCabに渡す。
- word2vecでモデルを構築するときにデフォルトだと頻度が5未満の文字は無視されてしまう。頻度がどれくらいなら無視するかはmin_countパラメータで設定できる。テキストにあるはずの ワードをpositive/negativeに入れても「KeyError: u"word xxxxxxx' not in vocabulary"」みたいなエラーが出てハマってしまった。
結果
ドキュメントのサイズが小さかったので、それほど面白い結果はえられなかったが、まあまあ面白かった結果だけ載せておく。
人生 = 哀れ、あさましい、罪、尊い
人生 - 酒 = 受け身、小男、ものしずか
罪 - 罰 = うまい
0 件のコメント:
コメントを投稿