自然言語処理で使う単語埋め込み(Word2Vec)をPythonで実装してみよう

Python

単語埋め込み(Word Embedding)は、自然言語処理(NLP)で単語をベクトル形式に変換する技術です。その中でもWord2Vecは、シンプルながら強力なアルゴリズムとして広く利用されています。本記事では、Pythonを使ってWord2Vecの基礎から実装方法までを解説します。


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

単語埋め込みは、単語を高次元なベクトル空間にマッピングする技術です。このベクトルは、単語の意味的な類似性を捉えることができ、機械学習モデルの入力として利用されます。

例えば、

  • “king” – “man” + “woman” ≈ “queen”

のような計算が可能になります。

Word2Vecは、以下の2つのモデルを用いて単語埋め込みを学習します。

  1. CBOW(Continuous Bag of Words): 文脈からターゲット単語を予測するモデル。
  2. Skip-gram: ターゲット単語から文脈を予測するモデル。

必要なライブラリのインストール

Word2Vecの実装には、Gensimライブラリを使用します。以下のコマンドでインストールしてください。

pip install gensim

Word2Vecの実装

以下に、Word2Vecを使った単語埋め込みの基本的な実装例を示します。

1. データの準備

まず、サンプルデータとして簡単なテキストを用意します。

from gensim.models import Word2Vec
from nltk.tokenize import word_tokenize
import nltk

nltk.download('punkt')

# サンプルデータ
sentences = [
    "Natural language processing enables computers to understand human language.",
    "Word embeddings are useful for many NLP tasks.",
    "Machine learning and deep learning models require numerical inputs."
]

# トークナイズ
tokenized_sentences = [word_tokenize(sentence.lower()) for sentence in sentences]
print(tokenized_sentences)

2. Word2Vecモデルの学習

Gensimを使用して、Word2Vecモデルを学習させます。

# Word2Vecモデルの作成
model = Word2Vec(
    sentences=tokenized_sentences,  # トークナイズされた文
    vector_size=50,                 # ベクトルの次元数
    window=5,                       # コンテキストの幅
    min_count=1,                    # 学習に使用する単語の最小出現回数
    sg=1                            # Skip-gramモデルを使用(0ならCBOW)
)

# 学習済みベクトルの確認
vector = model.wv['language']  # "language"のベクトル
print(vector)

3. 類似単語の取得

学習済みのモデルから類似単語を取得します。

# 類似単語の表示
similar_words = model.wv.most_similar('language')
print(similar_words)

実行結果の例

以下は、”language”に類似した単語の例です。

[('processing', 0.98), ('human', 0.96), ('computers', 0.95)]

これにより、単語の意味的な関係をベクトル空間上で視覚化できます。


応用例

1. テキスト分類

Word2Vecで得られたベクトルを特徴量として利用し、スパム検出や感情分析などのテキスト分類に活用できます。

2. クエリ拡張

検索エンジンで、入力クエリに類似する単語を追加することで、検索精度を向上させることができます。

3. 次世代チャットボット

単語埋め込みを使うことで、文脈を理解した自然な応答を生成するチャットボットを構築できます。


注意点

  • 大量のデータ: Word2Vecは大量のデータで学習するほど高精度な結果が得られます。
  • ドメイン依存性: 特定の分野での利用には、該当分野のデータを用いてモデルを学習する必要があります。
  • モデル選択: CBOWとSkip-gramの選択はタスクに応じて適切に行いましょう。

まとめ

Word2Vecは、自然言語処理において強力な単語埋め込み技術です。本記事で紹介した方法を基に、自分のデータでモデルを学習させ、さまざまな応用にチャレンジしてみてください。PythonとGensimを活用することで、より高度な自然言語処理タスクに取り組む第一歩となるでしょう。

コメント

タイトルとURLをコピーしました