NLPでのテキスト前処理に関する完全なチュートリアル

データサイエンスプロジェクトのライフサイクルでは、データのクリーニングと前処理が最も重要なパフォーマンスの側面です。たとえば、すべてのデータで複雑な非構造化テキストデータを処理していて、同じモデリングを行う場合、2つのことが起こります。大きなバグが発生するか、モデルが期待どおりに動作しません。Google Assist、Alexa、Siriなどの最新の音声支援システムが人間の言語をどのように理解、処理、応答するのか疑問に思われるかもしれません。ここでは、大事な自然言語処理について説明します。

自然言語処理(NLP)は、コンピューターサイエンスと人工知能の助けを借りて、データのセマンティック分析から派生した手法です。これは基本的に生データから意味のある情報を抽出する技術であり、その目的は自然言語とコンピューターの相互接続を作成することです。つまり、大量の自然言語データを分析およびモデル化することを意味します。NLPの力を利用することで、ドキュメントの要約、ヘッドラインジェネレーター、ヘッドラインジェネレーター、不正検出、音声認識、そして重要なことにニューラル機械翻訳など、実際のビジネス上の問題を解決できます。

テキスト処理は、NLPでテキストをクリーンアップし、モデルを構築するための準備をするために使用される方法です。用途が広く、感情、句読点、数字や特殊文字で書かれたテキストなど、さまざまな形式のノイズが含まれています。機械はそれらを理解せず、番号を尋ねるだけなので、これらの主要な質問に対処する必要があります。テキスト処理から始めて、Pythonで記述された特定のライブラリはこのプロセスを簡素化し、それらの単純な構文は多くの柔軟性を提供します。1つ目はNLTKです。これは、Natural Language Toolkitの略で、ステミング、POS、トークン化、字句化などのすべてのタスクに役立ちます。

あなたはおそらく略語を知っているでしょう;頭字語のない文はありません。つまり、私たちは毎回単語を使用する傾向があります。 ''t'を実行し、それらの単語については何もできません。そのような単語を処理するために、略語と呼ばれるライブラリがあります。BeautifulSoupはWebスクレイピング用のライブラリですが、HTMLタグとURLを使用してデータを取得する傾向があり、これを処理するために、BeautifulSoupが使用されます。また、数値をテキストに変換するには、inflectライブラリを使用します。

テキスト前処理を実装する

次のPythonコードでは、Twitterの感情分析データセットの生のテキストデータからノイズを削除します。その後、単語の削除、ステミング、および語彙処理を停止します。

すべての依存関係をインポートします。
! pip install contractions
import nltk
import contractions
import inflect
from nltk import word_tokenize, sent_tokenize
from nltk.corpus import stopwords
from nltk.stem import LancasterStemmer, WordNetLemmatizer
from bs4 import BeautifulSoup
import re, string, unicodedata
复制代码
ノイズを取り除きます。

最初のステップは、データからノイズを除去することです。テキストドメインでは、ノイズとは、人間の言語のテキストに関係がなく、特殊文字、括弧の使用、角かっこ、空白などのさまざまなプロパティを持つものを指します。 URL、および句読点。

以下は、私たちが扱っているサンプルテキストです。

ご覧のとおり、最初に多くのHTMLタグとURLがあります。これらを削除する必要があります。このために、BeautifulSoupを使用します。以下のコードスニペットは両方を削除します。

# to remove HTML tag
def html_remover(data):
  beauti = BeautifulSoup(data,'html.parser')
  return beauti.get_text()

# to remove URL
def url_remover(data):
  return re.sub(r'https\S','',data)

def web_associated(data):
  text = html_remover(data)
  text = url_remover(text)
  return text

new_data = web_associated(data)
复制代码

HTMLタグとURLを削除した後も、句読点と空白、および角かっこで囲まれたテキストデータのノイズが残っています。これも処理する必要があります。

def remove_round_brackets(data):
  return re.sub('\(.*?\)','',data)

def remove_punc(data):
  trans = str.maketrans('','', string.punctuation)
  return data.translate(trans)

def white_space(data):
  return ' '.join(data.split())

def complete_noise(data):
  new_data = remove_round_brackets(data)
  new_data = remove_punc(new_data)
  new_data = white_space(new_data)
  return new_data

new_data = complete_noise(new_data)
复制代码

ご覧のとおり、テキストからすべてのノイズを正常に削除しました。

テキストを正規化します。

通常、テキストの正規化はテキストをトークン化することから始まります。長いコーパスはいくつかのチャンクに分割され、NLTKのトークナイザークラスがこれを実行できます。その後、コーパス内の各単語を小文字にし、数字を単語に変換し、最後に頭字語の置換を行う必要があります。

def text_lower(data):
  return data.lower()

def contraction_replace(data):
  return contractions.fix(data)

def number_to_text(data):
  temp_str = data.split()
  string = []
  for i in temp_str:
    # if the word is digit, converted to 
    # word else the sequence continues
    if i.isdigit():
      temp = inflect.engine().number_to_words(i)
      string.append(temp)
    else:
      string.append(i)
  return temp_str

def normalization(data):
  text = text_lower(data)
  text = number_to_text(text)
  text = contraction_replace(text)
  nltk.download('punkt')
  tokens = nltk.word_tokenize(text)
  return tokens

tokens = normalization(new_data)
print(tokens)
复制代码

基本的なテキストの前処理が終わりに近づいています。重要なのはストップワードだけです。テキストデータを分析する場合、一時停止の単語はまったく意味がなく、装飾目的でのみ使用されます。したがって、次元をさらに減らすには、コーパスからストップワードを削除する必要があります。

最後に、コーパスを語幹形式またはフレーズ形式で表すための2つのオプションがあります。ステミングは通常、単語をその語根形式に変換しようとしますが、ほとんどの場合、単語を切り取るだけで変換されます。また、ステミングはステミングを行うタスクでもありますが、適切な方法では、「シーン」が「シーン」に変換されるように、単語をルート形式に変換することを意味します。ステミングとアフィックスのどちらかを選択できます。

def stopword(data):
  nltk.download('stopwords')
  clean = []
  for i in data:
    if i not in stopwords.words('english'):
      clean.append(i)
  return clean

def stemming(data):
  stemmer = LancasterStemmer()
  stemmed = []
  for i in data:
    stem = stemmer.stem(i)
    stemmed.append(stem)
  return stemmed

def lemmatization(data):
  nltk.download('wordnet')
  lemma = WordNetLemmatizer()
  lemmas = []
  for i in data:
    lem = lemma.lemmatize(i, pos='v')
    lemmas.append(lem)
  return lemmas  

def final_process(data):
  stopwords_remove = stopword(data)
  stemmed = stemming(stopwords_remove)
  lemm = lemmatization(stopwords_remove)
  return stemmed, lemm
stem,lemmas = final_process(tokens)
复制代码

以下に、語幹と接辞の単語を示します。

結論。

この投稿では、モデル構築にテキストの前処理がどのように必要かについて説明します。最初から、HTMLタグを取り除き、URLからノイズを取り除く方法を学びました。まず、ノイズを除去するために、コーパスのプロファイルを作成してノイズ構成をカスタマイズする必要があります。ステミングとレンマ化の間には大きなトレードオフが見られます。常にレンマ化された単語を使用する必要があります。

参照。

NLPでのテキスト前処理に関する完全なチュートリアルの投稿は、 AnalyticsIndiaMagazineに最初に掲載されました。

おすすめ

転載: juejin.im/post/7086657753749405726