ホームページ  >  記事  >  バックエンド開発  >  Python でテキスト特徴抽出テクノロジーを使用するにはどうすればよいですか?

Python でテキスト特徴抽出テクノロジーを使用するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-06-04 11:10:342284ブラウズ

Python は、テキスト データの処理に使用できる人気のあるプログラミング言語です。データ サイエンスと自然言語処理の分野では、テキスト特徴抽出は、機械学習や深層学習アルゴリズムで使用するために、生の自然言語テキストを数値ベクトルに変換する重要な技術です。この記事では、Python でテキスト特徴抽出技術を使用する方法を紹介します。

1. テキスト データの前処理

テキスト特徴抽出の前に、元のテキストの簡単な前処理が必要です。前処理には通常、次の手順が含まれます。

  1. すべてのテキストを小文字に変換します。これは、Python が大文字と小文字を区別する言語であるため、すべてのテキストを小文字に変換しないと、テキスト特徴抽出結果が大文字と小文字の影響を受ける可能性があります。
  2. 句読点を削除します。句読点はテキスト特徴抽出には意味がないため、削除する必要があります。
  3. ストップワードを削除します。ストップワードとは、「the」、「and」など、自然言語で頻繁に使用される単語を指します。これらはテキスト特徴抽出には意味がないため、削除する必要があります。
  4. ステミング。ステミングとは、同じ単語のさまざまなバリエーション (「run」、「running」、「ran」など) を統一された単語形式に変換することを指します。これにより、特徴の数が減り、モデルの意味論的な一般化能力が強化されます。

Python でのテキストの前処理では、主に nltk や spaCy などのオープンソースの自然言語処理ライブラリに依存しています。以下は、英語テキストに対する上記の前処理手順を実装できる Python コードの例です:

import string
import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize

def preprocess_text(text):
    # 将文本转换为小写
    text = text.lower()
    # 去除标点符号
    text = text.translate(str.maketrans("", "", string.punctuation))
    # 分词
    words = word_tokenize(text)
    # 去除停用词
    words = [word for word in words if word not in stopwords.words("english")]
    # 词干化
    stemmer = PorterStemmer()
    words = [stemmer.stem(word) for word in words]
    # 返回预处理后的文本
    return " ".join(words)

2. バッグオブワード モデル

テキスト特徴抽出では、最も一般的に使用されるモデルは次のとおりです。 Bag-of-Words モデル (Bag-of-Words)。 Bag-of-Words モデルは、テキスト内の単語が順序のないセットであると仮定し、各単語を特徴として使用し、テキスト内の単語の出現頻度を特徴値として使用します。このようにして、テキストは単語の頻度で構成されるベクトルとして表現できます。

Python には、sklearn や nltk など、バッグオブワード モデルの構築に使用できるオープン ソース ライブラリが多数あります。以下は Python コードの例です。sklearn を使用して英語テキストのバッグ オブ ワード モデルを実装できます:

from sklearn.feature_extraction.text import CountVectorizer

# 定义文本数据
texts = ["hello world", "hello python"]

# 构建词袋模型
vectorizer = CountVectorizer()
vectorizer.fit_transform(texts)

# 输出词袋模型的特征
print(vectorizer.get_feature_names())
# 输出文本的特征向量
print(vectorizer.transform(texts).toarray())

上記のコードでは、まず CountVectorizer を使用してバッグ オブ ワード モデルを構築し、 「hello world」と「hello Python」というテキストデータを入力として変換します。最後に、get_feature_names() メソッドを使用してバッグオブワード モデルの特徴を取得し、transform() メソッドを使用してテキストを特徴ベクトルに変換し、toarray() メソッドを使用してスパース行列を表現します。一般的な NumPy 配列。

3. TF-IDF モデル

バッグオブワード モデルはテキスト内の単語の頻度をうまく表現できますが、テキスト内の単語ごとに異なる重要性が考慮されていません。分類。たとえば、テキスト分類問題では、一部の単語がテキストの複数のカテゴリに出現することがありますが、それらは異なるカテゴリを区別する上で大きな役割を果たしません。逆に、一部の単語はテキストの特定のカテゴリにのみ出現する可能性があり、異なるカテゴリを区別するために重要です。

この問題を解決するために、より高度なテキスト特徴抽出テクノロジとして TF-IDF モデルを使用します。 TF-IDF (Term Frequency-Inverse Document Frequency) は、文書内の単語の重要性を評価するために使用される統計手法です。文書内の単語の頻度と、文書のコレクション全体における単語の出現頻度の逆数を乗算して、単語の TF-IDF 値を計算します。

Python には、sklearn や nltk など、TF-IDF モデルの構築に使用できるオープン ソース ライブラリも多数あります。以下は Python コードの例です。sklearn を使用して英語テキストの TF-IDF モデルを実装できます:

from sklearn.feature_extraction.text import TfidfVectorizer

# 定义文本数据
texts = ["hello world", "hello python"]

# 构建TF-IDF模型
vectorizer = TfidfVectorizer()
vectorizer.fit_transform(texts)

# 输出TF-IDF模型的特征
print(vectorizer.get_feature_names())
# 输出文本的特征向量
print(vectorizer.transform(texts).toarray())

上記のコードでは、まず TfidfVectorizer を使用して TF-IDF モデルを構築し、テキストを変換しますデータ「hello world」と「hello Python」を入力として使用します。最後に、get_feature_names() メソッドを使用して TF-IDF モデルの特徴を取得し、transform() メソッドを使用してテキストを特徴ベクトルに変換し、toarray() メソッドを使用してスパース行列を一般的な NumPy として表します。配列。

4. Word2Vec モデル

bag-of-words モデルと TF-IDF モデルに加えて、Word2Vec モデルと呼ばれる高度なテキスト特徴抽出テクノロジもあります。 Word2Vec は、Google によって開発されたニューラル ネットワーク モデルで、類似した単語がベクトル空間で近くなるように単語を密なベクトルとして表現するために使用されます。

Python では、gensim ライブラリを使用して Word2Vec モデルを簡単に実装できます。以下は Python コードの例です。gensim ライブラリを使用して、英語テキストの Word2Vec モデルを実装できます:

from gensim.models import Word2Vec
import nltk

# 定义文本数据
texts = ["hello world", "hello python"]

# 分词
words = [nltk.word_tokenize(text) for text in texts]

# 构建Word2Vec模型
model = Word2Vec(size=100, min_count=1)
model.build_vocab(words)
model.train(words, total_examples=model.corpus_count, epochs=model.iter)

# 输出单词的特征向量
print(model["hello"])
print(model["world"])
print(model["python"])

上記のコードでは、最初に nltk ライブラリを使用してテキストをセグメント化し、次に Word2Vec を使用します。 Word2Vec モデルを構築するクラス。ここで、size パラメーターは各単語のベクトル次元を指定し、min_count パラメーターは最小単語頻度 (この場合は 1) を指定して、すべての単語がモデルに考慮されるようにします。次に、build_vocab() メソッドを使用して語彙を構築し、train() メソッドを使用してモデルをトレーニングします。最後に、model["hello"]、model["world"]、model["python"] などの角括弧を使用して、各単語の特徴ベクトルにアクセスできます。

概要

この記事では、バッグ オブ ワード モデル、TF-IDF モデル、Word2Vec モデルなど、Python でテキスト特徴抽出テクノロジを使用する方法を紹介します。これらの手法を使用する場合、テキスト データ内のノイズを克服するために、単純なテキストの前処理が必要です。さらに、さまざまなテキスト特徴抽出テクノロジがさまざまなアプリケーション シナリオに適しており、特定の問題に応じて適切なテクノロジを選択する必要があることに注意してください。

以上がPython でテキスト特徴抽出テクノロジーを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。