【Python】Word2Vec を利用して キーワードの類義語変換を自動化してみた

スポンサーリンク

こんにちは。

コロナウィルスが猛威を振るっていますね。
そのせいでNYダウや日経平均が暴落しており、
このまま景気後退期へ入ってしまうのかと心配しています。

最近自分の中の目標として、記事のリライトを自動化したいなーというものがあります。
手ごろな記事をリライトした後、自分の意見や経験をもとに追記、再リライトし、
新しい記事として投稿する、みたいな。

それを実現すべく、キーワードの類義語を自動的に取得してくれるツールを
作成してみました。
実装するにあたり色々調査した内容について、備忘録として残しておきます。

使用した言語は Python、類義語取得に使用したのは Word2Vec と呼ばれる手法です。

スポンサーリンク

Word2Vec とは

Word2Vec は、大量のテキストデータをプログラムによって解析し、
そこに含まれる各単語の意味をベクトルによって表現化する手法です。

2013年に Google が開発したもので、書籍やネット、論文でも
その仕組みについては公開されています。
自然言語処理の分野では、非常に重要な技術の1つになっているようです。


「同じ意味、似た意味の単語は、似た文脈の中に登場する」
という考えに基づき、各単語をベクトルによる数値化していきます。

単語をベクトルで表現することにより、
各単語同士の意味の近さを計算して数値化することが出来たり、
各単語同士の意味を足し算や引き算で計算することができます。


・・・ と、正直僕自身これくらいのざっくりしたイメージしか持っていません^^;

Word2Vec の詳細については、以下のページがかなりわかりやすく説明されています。
詳しく知りたい方は読んでみると良いでしょう。

【参考】
word2vec(Skip-Gram Model)の仕組みを恐らく日本一簡潔にまとめてみたつもり

スポンサーリンク

Word2Vec を Windows 環境で使用する前準備

Word2Vec を使用するにあたり、モデルと呼ばれる学習データを作成する必要があります。
その際に使用するモジュールなどを先にインストールしておきます。


・・・ただ、自前でモデルを作成するまでもなく、既に有志の方々によるモデルが
後悔されていますので、そちらを使用するのもありです。
その場合、このモデル作成手順は不要です。

モデル作成には結構時間がかかりますので、こういったサービスはありがたいですね。

gensim モジュールをインストール

Powershell で以下のコマンドを実行するだけで OK です。
(僕のPC環境は Windows10 64bit / python3.7 です)

↓実行結果


MeCab をインストール

Mecab はオープンソースの形態素解析エンジンで、
文章を分かち書きにする際に使用します。

インストールされていない場合は、以下のページを参考にインストールしておいてください。

Windows 環境への Mecab インストール方法 【備忘録】
個人的な理由から、記事のリライトツール作成に励む毎日を送っています。 文章をリライトする際、対象の文章を分かち書きにする必要が出てきたため、 オープンソースの形態素解析エンジンである MeCab をインストールしました。 ...

Word2Vec で使用するモデルの作成

Word2Vec では、コーパスと呼ばれる
テキストを大量に集めてデータベース化したものを利用してモデルを作成します。

コーパスの作成

僕は Wikipedia のデータを使用しました。
以下のコマンドを powershell 上にて実行し、ローカルにファイルをダウンロードします。
僕がダウンロードした際は、約2.8GBの大容量だったため、ダウンロードには
かなりの時間を要しました(20分くらい?)



ダウンロード中の画面はこんな感じ↓
Wikipediaのデータダウンロード中の画面


「jawiki-latest-pages-articles.xml.bz2」というファイルがダウンロードされます。
ダウンロードしたファイルは解凍せずに使用します。
Word2Vecのコーパスをダウンロード


XML ファイルをパースして Wiki本文だけを入手するため、
以下のサイトで公開されているフリーツールを使用し、コマンドを実行します。

A tool for extracting plain text from Wikipedia dumps



上のリンクから、画面右側にある「Clone or download」をクリックしてください。

Github から フリーツールをダウンロード



「wikiextractor-master.zip」というファイルがダウンロードされるので、
適当なフォルダに解凍します。

解凍したフォルダ内に移動し、「WikiExtractor.py」ファイルを実行します。
実行時の引数として、先ほどダウンロードした Wikipedia のダンプファイルを指定します。
ダウンロード同様、かなり時間かかります。



ツールの実行結果は、WikiExtractor.py ファイルと同じ階層に
text ディレクトリが作成され、その中に大量のテキストファイルとして出力されます。

Wikipedia の大量ダンプファイル



次は、分割して出力された数千のファイル群を、1つのファイルへ集約します。
以下のコマンドを powerShell から実行します。


モデルの作成前準備

上手順で作成したコーパスを利用し、モデルを作成します。

コマンドプロンプトを開き、先ほどの output.txt のあるフォルダへ移動した後、
以下のコマンドを実行します。



さらに、文字コードを UTF-8 へそろえるため、以下のコマンドを実行します。
(処理終了までに少し時間がかかります。5分程度でしょうか。)



※ Default では、Windows で nkf コマンドを使用することができなかったため、
以下サイトを参考にして nkf コマンドを導入しました。

nkfツールで文字コードを変換する(Windows編)

ここまでで、モデルを作成する準備が整いました。
後は下の Python ファイルを作成し実行することで、
作成したコーパスをもとにモデルを作成することができます。

モデルの作成

作成したコーパスをもとに、モデルを作成していきます。
以下の python プログラムを実行します。

処理完了まで結構時間がかかるため、処理進捗がわかりやすいように
logging による標準出力機能を入れてあります。

ローカルフォルダにモデルが作成されているのを確認してください。
ここまでで word2vec を使用する準備は完了です。

スポンサーリンク

Word2Vec を利用したキーワードの類義語調査

上手順で作成したモデルを使って、引数で与えたキーワードの類義語を返却する関数を作成してみました。

上記関数により、類義語のリストが返却されます。
tmp = get_synonym_word_by_word2vec(“対象語”)[0]
などとすれば、一番意味の近しい類義語を取得できます。

この関数を利用すれば、文章内の名詞や形容詞を上手い具合に
類義語で変換してくれるため、簡易的なリライトが可能になるでしょう。

その場合、リライト対象の文章を品詞ごとに分割するなどの処理が必要になるので、
MeCab を使って文章を分かち書きにするなどの処理を入れてやる必要がありそうです。

最後に

今回作成した関数を上手く使えば、何かアフィリエイトやアドセンスに役立つツール、
面白いツール、便利なツールを作成できそうですね。
何かアイディアが浮かんだら、ツール化して特典で配布してみようかなー なんて考えています。

あまり期待せずお待ちいただければと思います。


本記事を作成するにあたり、色々と参考にさせていただいたサイト運営の方々に感謝いたします。

【参考】
【Python】Word2Vecの使い方

コメント