n-gramで粒度を上げる

Pythonで学ぶSentiment Analysis

Violeta Misheva

Data Scientist

文脈は重要

I am happy, not sad.

I am sad, not happy.

  • 語の前の「not」(否定)は、文脈の重要性を示す一例です。
Pythonで学ぶSentiment Analysis

BOWで文脈を捉える

  • Unigram: 単語1個のトークン

  • Bigram: 2語の組

  • Trigram: 3語の組

  • n-gram: n語の連続トークン

Pythonで学ぶSentiment Analysis

BOWで文脈を捉える

The weather today is wonderful.

  • Unigram: { The, weather, today, is, wonderful }

  • Bigram: {The weather, weather today, today is, is wonderful}

  • Trigram: {The weather today, weather today is, today is wonderful}

Pythonで学ぶSentiment Analysis

CountVectorizerでのn-gram

from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer(ngram_range=(min_n, max_n))
# ユニグラムのみ
ngram_range=(1, 1)
# ユニグラム+バイグラム
ngram_range=(1, 2)
Pythonで学ぶSentiment Analysis

最適なnは?

より長いトークン列
  • 特徴量が増える
  • モデル精度が上がる可能性
  • 過学習のリスク
Pythonで学ぶSentiment Analysis

語彙サイズの指定

CountVectorizer(max_features, max_df, min_df)
  • max_features: 指定すると、出現頻度の高い語から上位のみを語彙に含めます
    • max_features = None の場合、すべての語を含めます
  • max_df: 指定頻度より高い語を無視します
    • 整数なら絶対回数、浮動小数なら比率を指定
    • 既定値は 1.0(語を無視しません)
  • min_df: 指定頻度より低い語を無視します
    • 整数なら絶対回数、浮動小数なら比率を指定
    • 既定値は 1.0(語を無視しません)
Pythonで学ぶSentiment Analysis

練習しましょう!

Pythonで学ぶSentiment Analysis

Preparing Video For Download...