こんにちは。
いつものtaanatsuです。
今回は今更感が強いですが、なぜかちゃんと使ったことがなかったWord2Vecを使ってみます。
それでは、やっていきましょうか。
Word2Vec
word2vecとは、文章中の単語同士の類似度を測り、似た単語を算出できます。
後は単語の引き算とか足し算もできるようですね。
今回は簡単に単語間の類似度を算出してみましょう。
前準備
venv
恒例のやつです。
$ python3 -m venv venv $ source venv/bin/activate
必要ライブラリ
mecabを事前にお使いのPCにインストールを済ませておいてください。
$ pip install gensim $ pip install BeautifulSoup4 $ pip install mecab-python3
前処理
日本語は形態素解析(文章を「名詞」「動詞」「形容詞」のように形態素に分解すること)を行い、
単語の意味のある最小の単位に分解します。
後、HTMLなども消し去ります。
「raw_data.csv」に文章を1行で入れておいてください。
例
文章1 文章2 文章3 ... 文章N
これを整形し、「wakachi.txt」というファイルに書き出します。
import csv from bs4 import BeautifulSoup import MeCab wakachiTagger = MeCab.Tagger('-Owakati') with open('wakachi.txt', 'w') as wCsvFile: with open('raw_data.csv', newline='') as csvfile: reader = csv.reader(csvfile) for row in reader: text = BeautifulSoup(row[0]).text.replace('\n', '') wakachi = wakachiTagger.parse(text).replace('\n', '') writer = csv.writer(wCsvFile) writer.writerow([wakachi])
学習
「前処理」で出力した「wakachi.txt」から、Word2Vec用の「wakachi.model」を作成します。
from gensim.models import word2vec sentences = word2vec.Text8Corpus('./wakachi.txt') model = word2vec.Word2Vec(sentences, min_count=20, window=15) model.save("./wakachi.model")
予測
学習で作成した「wakachi.model」を利用し、データを予測します。
from gensim.models import word2vec model = word2vec.Word2Vec.load("./wakachi.model") results = model.wv.most_similar(positive=['人間'], topn=10) for result in results: print(result)
参考にさせていただいたサイト様
終わりに
コード量を見るに、そこまでハードルは高くなさそうですね。
(参考にさせていただいたサイト様、ありがとうございます)
次はDoc2Vecを使って文章同士の類似度を測ってみたいと思います。 それではまた次回