1. テキスト分類
テキスト分類では、機械学習モデルを用いてテキストをカテゴリに割り当てます。特徴ベクトル変換後、各種分類アルゴリズムを適用します。
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import SGDClassifier
text_samples = ["素晴らしい製品", "最悪のサービス", "満足のいく結果", "期待外れの体験"]
class_labels = [1, 0, 1, 0] # 1: 肯定, 0: 否定
vector_encoder = CountVectorizer()
feature_matrix = vector_encoder.fit_transform(text_samples)
classifier = SGDClassifier()
classifier.fit(feature_matrix, class_labels)
test_phrase = ["不満足な結果"]
test_vector = vector_encoder.transform(test_phrase)
result = classifier.predict(test_vector)
print(result) # [0]
2. 情報検索
クエリとドキュメント間の類似度計算にベクトル表現を利用し、関連性の高い文書を検索します。
from sklearn.neighbors import NearestNeighbors
corpus = ["猫がマットの上に座る", "犬が郵便配達員に吠える", "鳥が歌を歌う"]
corpus_vectors = vector_encoder.fit_transform(corpus)
search_query = ["マット上の猫"]
query_vector = vector_encoder.transform(search_query)
neighbor_finder = NearestNeighbors(n_neighbors=1)
neighbor_finder.fit(corpus_vectors)
distances, indices = neighbor_finder.kneighbors(query_vector)
print(indices) # 類似文書インデックス
3. 意味的類似性
ベクトル空間における距離測定により、テキスト間の意味的類似性を評価します。
def compute_similarity(text_a, text_b):
vec_a = vector_encoder.transform([text_a])
vec_b = vector_encoder.transform([text_b])
return cosine_similarity(vec_a, vec_b)[0][0]
phrase1 = "サッカーを楽しむ"
phrase2 = "フットボールが好き"
similarity_score = compute_similarity(phrase1, phrase2)
print(similarity_score) # 類似度スコア
4. テキストクラスタリング
類似テキストをグループ化するため、教師なし学習アルゴリズムを適用します。
from sklearn.cluster import DBSCAN
text_collection = ["優れた映画作品", "ひどい映画体験", "素晴らしい気分", "悪い経験"]
feature_set = vector_encoder.fit_transform(text_collection)
cluster_model = DBSCAN(eps=0.5)
cluster_labels = cluster_model.fit_predict(feature_set.toarray())
print(cluster_labels) # クラスタラベル
5. 機械翻訳
多言語間の意味表現変換にテキストベクトルを活用します。
from transformers import pipeline
translator = pipeline("translation_en_to_fr")
translated = translator("I enjoy coding", max_length=40)
print(translated[0]['translation_text']) # J'aime programmer
6. 生成タスク
ベクトル表現を基にした生成モデルで、新規テキストを生成します。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("distilgpt2")
generation_model = AutoModelForCausalLM.from_pretrained("distilgpt2")
def text_generation(seed_text):
inputs = tokenizer(seed_text, return_tensors="pt")
outputs = generation_model.generate(**inputs, max_length=60)
return tokenizer.decode(outputs[0])
generated = text_generation("昔々")
print(generated)