データサイエンティストが自然言語処理について知っておくべき7つのテクノロジー

著者| George  S eif

翻訳者| Sun Wei、編集長| Tu Min

ヘッド図|東ICからCSDNダウンロード

出品 | CSDN(ID:CSDNnews)

以下は翻訳です:

現代の企業は大量のデータを処理する必要があります。これらのデータは、ドキュメント、スプレッドシート、録音、電子メール、JSONなど、さまざまな形式で提供されます。このようなデータを記録する最も一般的な方法の1つは、テキストを使用する方法です。テキストは、通常、私たちが毎日使用する自然言語と非常によく似ています。

自然言語処理(NLP)は、コンピュータープログラミングの研究であり、大量の自然テキストデータを処理および分析する方法を模索しています。テキストは非常に使いやすく、データストレージで一般的に使用されるメディアであるため、自然言語処理の知識はデータサイエンティストにとって重要です。

テキストデータの分析とモデル構築のタスクに直面すると、テキストデータのクリーニング、フォーマット、解析、分析、視覚化の実行、モデリングなどの基本的なデータサイエンスタスクの実行方法を知る必要があります。データがまだ元の数値の形式である場合、これらのタスクの従来の方法に加えて、追加の手順が必要です。

このガイドでは、NLTKやScikit Learnなどのテキストデータを処理するときに最もよく使用される7つのテクノロジを含む、データサイエンスでの自然言語処理の使用についての基本的な紹介を行います。

(1)トークン化

トークン化とは、テキストを文または単語に分割することを指します。このプロセスでは、句読点や冗長な記号も破棄します。

このステップは、見かけほど簡単ではありません。例:上記の例では、単語「ニューヨーク」は2つのタグに分割されていますが、ニューヨークは代名詞であり、分析で非常に重要になる可能性があるため、1つのタグのみを保持することをお勧めします。このステップでは、これに注意してください。

トークン化の利点は、テキストを、実際の処理により適した、元の数値に変換しやすい形式に変換することです。これは、テキストデータ分析の明らかな最初のステップでもあります。

import nltk
sentence = "My name is George and I love NLP"
tokens = nltk.word_tokenize(sentence)
print(tokens)

# Prints out ['My', 'name', 'is', 'George', 'and', 'I', 'love', 'NLP']

(2)ストップワードの削除(ストップワードの削除)

トークン化後の次のステップは、当然ながらストップワードを削除することです。このステップの目標は、前のステップと同様です。これは、テキストデータを処理しやすい形式に変換することです。この手順では、「and」、「the」、「a」など、英語の一般的な前置詞を削除します。その後、データを分析するときに、干渉を排除し、実用的な意味を持つ単語に焦点を当てることができます。

事前定義されたリスト内の単語を比較することにより、ストップワードの削除を実行するのは非常に簡単です。注意すべき重要なことは、普遍的なストップワードリストがないということです。したがって、このリストは通常​​、最初から作成され、処理されるアプリケーション用にカスタマイズされます。

import nltk
from nltk.corpus import stopwords

sentence = "This is a sentence for removing stop words"
tokens = nltk.word_tokenize(sentence)

stop_words = stopwords.words('english')
filtered_tokens = [w for w in tokens if w not in stop_words]
print(filtered_tokens)

# Prints out ['This', 'sentence', 'removing', 'stop', 'words']

(3)ステム抽出

テキストデータをクリーンアップするもう1つの方法は、バックボーンを抽出することです。この方法は、単語をルート形式に復元することを目的としています。目的は、コンテキストによってわずかに異なる単語を減らすことですが、同じ意味の単語は、統一処理のために同じマークに削減されます。例:文で「cook」という単語を使用する場合を考えてください。コンテキストに応じて、cookという単語を書く方法はたくさんあります。

上の画像のcookのすべての意味は基本的に同じであるため、理論的には、分析中にそれを同じマークにマップできます。この例では、cook、cooks、cooked、cookingを「cook」としてマークします。これにより、テキストデータの詳細な分析が大幅に簡略化されます。

import nltk

snowball_stemmer = nltk.stem.SnowballStemmer('english')

s_1 = snowball_stemmer.stem("cook")
s_2 = snowball_stemmer.stem("cooks")
s_3 = snowball_stemmer.stem("cooked")
s_4 = snowball_stemmer.stem("cooking")

# s_1, s_2, s_3, s_4 all have the same result

(4)単語の埋め込み

上記の3つのステップから、データをクリーンアップし、実際の処理に使用できる形式に変換できるようになりました。

単語の埋め込みは、単語を数値で表現する方法であるため、類似した意味を持つ単語も同様に表現されます。今日の単語の埋め込みは、単一の単語を事前定義されたベクトル空間の実数値ベクトルとして表します。

すべての単語のベクトルの長さは同じですが、値が異なります。2つの単語のベクトル間の距離は、それらの意味的近接度を表します。たとえば、「cook」と「bake」という単語のベクトルは非常に接近していますが、「football」と「bake」という単語のベクトルは完全に異なります。

単語の埋め込みを作成する一般的な方法は、「グローバルベクトル」を表すGloVeと呼ばれます。GloVeは、テキストコーパスのグローバルおよびローカルの統計情報をキャプチャして、単語ベクトルを作成します。

GloVeは、いわゆる共起行列を使用します。共起行列は、単語の各ペアがコーパスに一緒に出現する頻度を示します。たとえば、次の3つの文の共起行列を作成するとします。

  • 私はデータサイエンスが好きです(データサイエンスが大好きです)。

  • 私はコーディングが好きです(コーディングが大好きです)。

  • 自然言語処理を学ぶ必要があります(NLPを学ぶ必要があります)。

テキストライブラリの共起行列は次のとおりです。

実際のデータセットでは、マトリックスははるかに大きくなります。利点は、埋め込みという単語がデータを1度カウントするだけで済み、それをディスクに保存できることです。

その後、各単語の固定長ベクトルを学習するようにGloVeをトレーニングする必要があります。これにより、2つの単語の内積は、共起行列内の対数語の共起確率に等しくなります。次の論文の目的関数で表されます:

式では、Xは共起行列の位置(i、j)の値を表し、wは導出される単語ベクトルです。したがって、この目的関数を使用すると、GloVeは2つの単語ベクトルの内積と共起との差を最小限に抑えることができるため、取得するベクトルがマトリックス内の共起値に確実に関連付けられます。

過去数年間、GloVeは、単語のセマンティクスと類似性を非常に効果的にエンコードするため、非常に強力で用途の広い単語埋め込み技術であることが証明されています。データサイエンスアプリケーションの場合、これは単語を処理および分析できる形式に変換する実証済みの方法です。

PythonでGloVeを使用する方法の完全なチュートリアルについては、ここをクリックしてください。

https://medium.com/analytics-vidhya/basics-of-using-pre-trained-glove-vectors-in-python-d38905f356db

(5)用語頻度-逆ドキュメント頻度(TF-IDF)

「単語頻度-逆ドキュメント頻度」(TF-IDFとも呼ばれる)という用語は、情報検索やテキストマイニングなどのアプリケーションでよく使用される重み付け係数です。TF-IDFは統計データを使用して、特定のドキュメントに対する単語の重要度を測定します。

  • TFワード頻度:文書内の特定の文字列の頻度を測定します。計算方法:(標準化するために)ドキュメント内の合計出現回数をドキュメントの全長で割ります。

  • IDF-Inverse document frequency:ドキュメント内の文字列の重要性を測定します。たとえば、「is」、「of」、「a」などの特定の文字列は、多くのドキュメントに何度も出現しますが、実用的な意味はほとんどなく、形容詞や動詞ではありません。したがって、IDFは重要度に応じて各文字列に重みを付けます。計算方法は次のとおりです。データセット内のドキュメントの総数を、文字列を含むドキュメントの数で割ります(分母は、分母0を避けるために+1にする必要があります)。の商は対数を取って計算されます。

  • TF-IDF:最終的な計算結果は、単純にTFとIDFを乗算したものです。

TF-IDFは、ターゲットワードのローカルおよびグローバルな統計レベルを考慮して、完璧なバランスを実現できます。単語がドキュメントに頻繁に出現するほど、その重みは高くなりますが、その単語はドキュメント全体に頻繁に出現しないことが前提です。

その強力な程度により、TF-IDFテクノロジーは通常、キーワードの入力とランク付けに使用される特定のドキュメントの関連性を指定するために検索エンジンによって使用されます。データサイエンスでは、この手法を使用して、テキストデータ内のどの単語と関連情報がより重要であるかを理解できます。 

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

def get_tf_idf(vectorizer):
  feature_names = vectorizer.get_feature_names()
  dense_vec = vectors.todense()
  dense_list = dense_vec.tolist()
  tfidf_data = pd.DataFrame(dense_list, columns=feature_names)
  return tfidf_data


vectorizer = TfidfVectorizer()

doc_1 = "TF-IDF uses statistics to measure how important a word is to " \
        "a particular document"
doc_2 = "The TF-IDF is perfectly balanced, considering both local and global " \
        "levels of statistics for the target word."
doc_3 = "Words that occur more frequently in a document are weighted higher, " \
        "but only if they're more rare within the whole document."
documents_list = [doc_1, doc_2, doc_3]

vectors = vectorizer.fit_transform(documents_list)

tfidf_data = get_tf_idf(vectorizer)

print(tfidf_data)
# Prints the TF-IDF data for all words across all documents

(6)トピックモデリング(トピックモデリング)

自然言語処理では、トピックモデリングはテキストデータまたはドキュメントのコレクションからメイントピックを抽出するプロセスです。本質的に、これは次元削減の一種です。これは、大量のテキストデータを少数のトピックに削減するためです。トピックモデリングは、多くのデータサイエンスシナリオで役立ちます。

以下にいくつかの例を示します。

  • テキストデータ分析-潜在的な傾向とデータの主要なコンポーネントを抽出します。

  • 分類されたテキスト-テキストを主要な関数に圧縮するため、次元削減が古典的な機械学習の問題を処理する方法と同様に、トピックモデリングもここで役立ちます。

  • ビルド推奨システムトピックモデリングは、テキストデータの基本的なグループ化を自動的に提供し、モデルの作成とトレーニングのための追加機能を提供します。

トピックモデリングは通常、陰的ディリクレ分布(LDA)によって行われます。LDAを利用して、トピックの複数の分布に従って各テキストドキュメントをモデル化し、各トピックは単語の複数の分布(トークン化、ストップワードの削除、トランクの抽出などの複数の手法でクリーンアップされた単一の文字)に従ってモデル化します。

LDAは、ドキュメントが複数のトピックで構成されていることを前提としています。これらのトピックは、確率分布に基づいて単語を生成します。

最初に、各ドキュメントが持つべきトピックの数と、各トピックを構成する単語の数をLDAに伝えます。指定されたドキュメントのデータセットについて、LDAはトピックのどの組み合わせと分布が対応するドキュメントとその中のすべてのテキストを正確に再構築できるかを決定しようとします。実際のドキュメントは、どのトピックが有効であるかを決定するために構築できます。指定されたトピックの場合、単語の確率分布に従って単語がサンプリングされ、構築が完了します。

LDAがデータセット内のすべてのドキュメントとそのコンテンツを正確に再構築できるトピックの分布を見つけたら、最終的に適切な分布のトピックを決定します。

from sklearn.decomposition import LatentDirichletAllocation as LDA

NUM_TOPICS = 3

# Here we create and fit the LDA model
# The "document_word_matrix" is a 2D array where each row is a document
# and each column is a word. The cells contain the count of the word within
# each document
lda = LDA(n_components=NUM_TOPICS, n_jobs=-1)
lda.fit(document_word_matrix)

(7)感情分析

感情分析は、テキストデータ内の主観的な情報を識別して抽出することを目的とした自然言語分析テクノロジです。トピックモデリングと同様に、感情分析では、非構造化テキストをデータに埋め込まれた情報の基本的な要約に変えることができます。

ほとんどの感情分析手法は、ルールベースの方法と機械学習方法の2つのカテゴリのいずれかに属しています。ルールベースの方法では、結果を取得するための簡単な手順が必要です。トークン化、ストップワードの削除、トランク抽出などのいくつかの前処理手順を実行した後、ルールベースの方法は次の手順に従う場合があります。

  1. さまざまな感情について、単語リストを定義します。たとえば、段落が否定か肯定かを定義する場合、否定的な感情には「悪い」や「ひどい」などの単語を定義し、肯定的な感情には「素晴らしい」や「驚くべき」などの単語を定義することができます。 ;

  2. テキストを閲覧し、ポジティブとネガティブの感情的な言葉の数を別々に数えます。

  3. ポジティブな感情としてマークされた単語の数がネガティブよりも多い場合、テキストの感情はポジティブであり、逆も同様です。

ルールベースの方法は、感情分析を使用して大まかな意味を取得する場合に適しています。ただし、今日の最も高度なシステムは通常、ディープラーニング、または少なくとも古典的な機械学習技術を使用してプロセス全体を自動化します。

深層学習技術により、感情分析は分類問題に従ってモデル化されます。テキストデータを(上記の単語の埋め込みと同様に)埋め込みスペースにエンコードすることは、関数抽出の1つの形式です。次に、これらの関数を分類モデルに転送して、テキストの感情を分類します。

この学習ベースのアプローチは、最適化問題として自動化できるため、非常に強力です。継続的に改善するためにモデルにデータを継続的に送信しますが、これも大きなメリットです。より多くのデータが機能抽出と感情分類を最適化し続けることができます。

機械学習モデルによる感情分析の使用方法に関する優れたチュートリアルがたくさんありますが、そのうちのいくつかを次に示します。

  • ロジスティック回帰を使用https : //towardsdatascience.com/sentiment-analysis-with-python-part-1-5ce197074184

  • ランダムフォレスト:https : //stackabuse.com/python-for-nlp-sentiment-analysis-with-scikit-learn/

  • ディープラーニングLSTMの場合:https ://towardsdatascience.com/sentiment-analysis-for-text-with-deep-learning-2f0a0c6472b5

オリジナル:https://towardsdatascience.com/an-introductory-guide-to-nlp-for-data- 科学者-と-共通-7-テクニック-584d623c40f0

この記事はCSDNの翻訳です。ソースを指定してください。

【終わり】

よりエキサイティングな推奨事項

中国のGitHub開発者の数は年間37%増加しており、世界で最も速い

静的コード分析を理解するには、この記事を読むだけで十分です。

☞XunfeiIntelligent Voice Pioneer:人間とコンピュータの相互作用が人間のコミュニケーションと同じくらい自然なとき、真のインテリジェント時代が到来します!

☞Google DeepMindとその背後にあるテクノロジーを深く掘り下げる

☞SpringCloud からService Meshへ、マイクロサービスアーキテクチャガバナンスシステムはどのように進化しましたか?

航空機シリーズ構築するためのインタビュー:建築家がマイクロサービスインターフェイスを設計する方法を見る

あなたが注文するすべての「見ている」ことを真剣に受け止めます

リリース1969元の記事 ウォンの賞賛40000 + ビュー1825万+

おすすめ

転載: blog.csdn.net/csdnnews/article/details/105608897