Numpy入門: 自然言語処理

NumpyはPython数値計算を行うためのライブラリであり、データ分析や機械学習自然言語処理(NLP)などに広く利用されています。この記事では、Numpyを用いて自然言語処理の基本的な操作を実行する方法について解説します。

目次

  1. はじめに
  2. テキストデータの読み込みと前処理
  3. 単語のトークン化
  4. 単語のベクトル化:One-hot Encoding
  5. 単語頻度によるフィルタリング:TF-IDF
  6. コサイン類似度による文章間の類似度計算
  7. まとめ

1. はじめに

import numpy as np
import re
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

まず、必要なモジュールをインポートします。

2. テキストデータの読み込みと前処理

def preprocess_text(text):
    text = text.lower()
    text = re.sub(r'\W', ' ', text) # 非英数字文字を空白で置換 
    text = re.sub(r'\s+', ' ', text) # 複数連続する空白を一つの空白で置換 
    return text.strip()

texts = ["This is the first document.", "This document is the second document.", "And this is the third one."]
texts = [preprocess_text(text) for text in texts]

ここではテキストデータの読み込みと前処理を行っています。具体的には小文字化、非英数字文字の削除、余分なスペースの削除等です。

3. 単語へのトークン化

vectorizer = CountVectorizer()
X_count = vectorizer.fit_transform(texts)

print("Vocabulary:", vectorizer.get_feature_names_out())
print("Tokenized Texts:\n", X_count.toarray())

CountVectorizerを使用して各文を単語にトークン化します。結果は各文の単語の出現頻度の行列として表現されます。

4. 単語のベクトル化:One-hot Encoding

def one_hot_encode(texts, vocab):
    one_hot = np.zeros((len(texts), len(vocab)))
    for i, text in enumerate(texts):
        for word in text.split():
            if word in vocab:
                one_hot[i, vocab.index(word)] = 1
    return one_hot

vocab = vectorizer.get_feature_names_out()
X_onehot = one_hot_encode(texts, list(vocab))

print("One-hot Encoded Texts:\n", X_onehot)

ここでは、One-hot Encodingという方法で単語をベクトル化しています。これは、各単語をボキャブラリ内の単一のインデックスにマッピングし、そのインデックス位置だけが1で他が0の配列(つまり「ホット」)を作成する方法です。

5. 単語頻度によるフィルタリング:TF-IDF

tfidf_vectorizer = TfidfVectorizer()
X_tfidf = tfidf_vectorizer.fit_transform(texts)

print("TF-IDF Vectorized Texts:\n", X_tfidf.toarray())

次に、TF-IDF(Term Frequency-Inverse Document Frequency)という手法でテキストデータをベクトル化します。これは各単語が文書全体でどれだけ重要かを計算する手法です。

6. コサイン類似度による文章間の類似度計算

similarity_matrix = cosine_similarity(X_tfidf)

print("Similarity Matrix:\n", similarity_matrix)

最後に、コサイン類似度という手法を用いて2つの文章間の類似性(距離)を計算します。これは角度コサイン値から導かれたものであり、0から1まで値が取り得ます(1が最も類似)。

7. まとめ

NumpyはPythonで高性能な数値計算を行うためライブラリです。この記事では、Numpyおよび関連するライブラリー(sklearn等)を用いて自然言語処理の基本的な操作を実行する方法について説明しました。これらの基本的な操作はテキストデータ分析や自然言語処理における多くのアプリケーションで使用されます。