Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonとWord2Vecによる単語埋め込み(Word Embedding)の実装入門

単語埋め込み(Word Embedding)とは

単語埋め込み(Word Embedding)は、単語を実数値のベクトルへマッピングするための言語モデリング手法です。多次元のベクトル空間上に単語やフレーズを表現することで、意味が近い単語同士が空間的にも近く配置されるようになります。この技術により、コンピュータが単語の「意味」を数値的に扱えるようになり、自然言語処理のさまざまなタスクの基盤となっています。

単語埋め込みは、ニューラルネットワーク、共起行列、確率モデルなど、複数のアプローチによって生成することが可能です。

Word2Vecの仕組み

Word2Vecは、単語埋め込みを生成するためのモデル群です。その構造は、入力層・隠れ層・出力層からなる浅い2層のニューラルネットワークであり、主に以下の2つの学習方式があります。

  • CBOW(Continuous Bag of Words):周囲の文脈となる単語群から、対象となる単語を予測する方式です。学習速度が速く、頻出単語に対して安定した結果を得やすい特徴があります。
  • Skip-Gram:対象となる単語から、周囲の文脈単語を予測する方式です。CBOWと逆のアプローチで、少ないデータでも希少な単語の表現をうまく学習できるとされています。

Pythonでの実装例

以下は、gensimライブラリを使って『不思議の国のアリス』のテキストからCBOWモデルとSkip-Gramモデルを構築し、「alice」と他の単語とのコサイン類似度を計算するサンプルコードです。

# 必要なモジュールをインポート
from nltk.tokenize import sent_tokenize, word_tokenize
import warnings
warnings.filterwarnings(action='ignore')
import gensim
from gensim.models import Word2Vec

# 'alice.txt' ファイルを読み込む
sample = open("C:\\Users\\Vishesh\\Desktop\\alice.txt", "r")
s = sample.read()

# 改行文字をスペースに置換
f = s.replace("\n", " ")
data = []

# ファイル内の各文を処理
for i in sent_tokenize(f):
    temp = []
    # 文を単語にトークン化
    for j in word_tokenize(i):
        temp.append(j.lower())
    data.append(temp)

# CBOWモデルを作成
model1 = gensim.models.Word2Vec(data, min_count=1, vector_size=100, window=5)

# 結果を出力
print("Cosine similarity between 'alice' and 'wonderland' - CBOW : ",
      model1.wv.similarity('alice', 'wonderland'))
print("Cosine similarity between 'alice' and 'machines' - CBOW : ",
      model1.wv.similarity('alice', 'machines'))

# Skip-Gramモデルを作成
model2 = gensim.models.Word2Vec(data, min_count=1, vector_size=100, window=5, sg=1)

# 結果を出力
print("Cosine similarity between 'alice' and 'wonderland' - Skip Gram : ",
      model2.wv.similarity('alice', 'wonderland'))
print("Cosine similarity between 'alice' and 'machines' - Skip Gram : ",
      model2.wv.similarity('alice', 'machines'))

主要なパラメータの解説

  • min_count:学習対象に含める単語の最低出現回数。ここでは「1」を指定しているため、すべての単語が対象になります。
  • vector_size:生成される単語ベクトルの次元数。ここでは100次元のベクトルを作成しています。
  • window:文脈として参照する前後の単語数(ウィンドウサイズ)。
  • sg:学習アルゴリズムの指定。「0」がCBOW(デフォルト)、「1」がSkip-Gramです。

実行結果について

このコードを実行すると、「alice」と「wonderland」のような物語内で関連性の高い単語ペアは比較的高いコサイン類似度を示し、「alice」と「machines」のように関連性の低い単語ペアは低い値になることが期待できます。なお、gensim 4.x以降では size パラメータが vector_size に変更され、類似度の計算には model.wv.similarity() を使用する点に注意してください。

  1. PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法

    はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c

  2. PythonでWordCloud(ワードクラウド)を作成する方法

    このチュートリアルでは、テキストファイルとマスク画像を用意し、そこからワードクラウド(Word Cloud)を生成して png 形式の画像として保存するプログラムをPythonで作成します。 この処理を実装するには、以下のPythonライブラリが必要です。 ・matplotlib ・wordcloud ・numpy ・tkinter ・PIL ライブラリのセットアップ まず、必要なライブラリを次のコマンドでインストールします。 $ sudo pip3 install matplotlib $ sudo pip3 install wordcloud $ sudo apt-get install