Pythonによる感情分析(センチメント分析)を分かりやすく解説する

スポンサーリンク

Pythonを使ったセンチメント解析のチュートリアルへようこそ。

私たちは皆、人間の感情がしばしば顔の表情、言語コミュニケーション、あるいは書かれた方言やコメントの形で表示されることを認識しています。

Pythonを使って、これをどのように予測するか見てみましょう。

スポンサーリンク

Pythonによるセンチメント分析入門

機械学習のトレンドに伴い、人間の脳と同じような予測をするために、さまざまな技術がデータに適用されています。

このような人工知能のタスクを精緻化することで、深層学習や自然言語処理の奥深さに触れることができます。

センチメント分析は、自然言語処理の一手法です。

自然言語処理とは?

自然言語処理(NLP)は、人工知能のサブセットで、機械がテキストデータを分析するように訓練されています。

センチメント分析は、書き手の感情を予測するNLP技術です。

センチメントとは、一般的に肯定的、否定的、または中立的という意味です。

Before:
Terrible airport with arrogant staff and poor signage.
 
After:
terrible airport arrogant staff poor signage

自然言語処理は広大な領域であり、センチメント検出のタスクはNLTK (Natural Language Tool Kit)などの内蔵ライブラリや他の様々なライブラリを使って行うことができる。

構文解析と処理のためのテキストのクリーニング

生のままのテキストデータは、自然言語処理ライブラリで分析することはできません。

このデータは、以下のような様々なデータ処理技術を使用してクリーニングする必要があります。

  • HTMLタグの除去。HTMLタグの除去:構造化されていないテキストには、多くのノイズが含まれているため、HTMLタグがある場合は除去する必要があります。
  • アクセント記号の除去。NLP は主に英語に対して機能するため、アクセント記号付きの文字の存在は意味をなさないので、削除する必要があります。
  • 短縮形を拡張します。短縮形は、話し言葉でよく使われるので、元の形に拡張する必要があります。
  • 特殊文字を排除します。英数字以外の文字を削除する必要があります。
  • Lemmatization/Stemming。例えば、swimming の基本形は swim です。
  • ストップワードの除去。ストップワードの除去:冠詞、接続詞、前置詞などのストップワードを除去する必要があります。

以上の処理を経て、NLP用語でコーパスと呼ばれるテキストが、感情分析モデルに渡される。

上記の処理を経て変換された例文をいくつか載せておく。

Before:
The airport is huge and has almost all the facilities making the transit smooth.
 
After:
airport huge almost facility make transit smooth
Before:
The display told me that desks 59-62 were for Silkair, but in reality it was from 52-55.
 
After:
display tell desk 59 62 silkair reality 52 55
from textblob import TextBlob
def get_tweet_sentiment(text):
        analysis = TextBlob(textt)
        if analysis.sentiment.polarity > 0:
            return 'positive'
        elif analysis.sentiment.polarity == 0:
            return 'neutral'
        else:
            return 'negative'

上記の前処理をした文章を、以下の感情分析モデルで使用します。

Pythonを使ったセンチメント分析の実行

まず、Pythonを使ってコーディングし、サンプルを渡して結果を確認します。

TextBlob ライブラリを使ってセンチメント分析を行います。

以下の関数では、テキストコーパスを関数に渡し、TextBlobオブジェクトを生成して分析オブジェクトに格納します。

TextBlob()` を通して渡されたテキストは、極性を含むセンチメントのようないくつかのプロパティを獲得します。

これらの極性値はチェックされる。

極性が 0 より大きい場合、センチメントは positive であり、0 に等しい場合は neutral 、0 より小さい場合は negative となる。

Input corpus:
terrible airport arrogant staff poor signage
 
Sentiment:
negative

この例の文の出力は次のようになる。

Input corpus:
display tell desk 59 62 silkair reality 52 55
 
Sentiment:
neutral
Input corpus:
airport huge almost facility make transit smooth
 
Sentiment:
positive
from textblob import TextBlob
def get_tweet_sentiment(text):
        analysis = TextBlob(textt)
        if analysis.sentiment.polarity > 0:
            return 'positive'
        elif analysis.sentiment.polarity == 0:
            return 'neutral'
        else:
            return 'negative'
 
print(get_tweet_sentiment(<your text>))

完全なコード

5 Things You Need to Know about Sentiment Analysis and Classification

私たちのモデルの欠点

我々のセンチメンタル分析モデルは、皮肉なコメントの感情を予測することはできない。

実際、嫌味なツイートを予測することは(現在のところ)NLPの範疇ではない。

まとめ

この記事で、自然言語処理を用いたテキストのセンチメント分析について、いくつかの洞察を得ることができたと思います。

あなた自身の文を試してみて、私たちはコメント欄であなたのフィードバックを教えてください。

タイトルとURLをコピーしました