用 n-gram 获取更细粒度信息

Python 中的情感分析

Violeta Misheva

Data Scientist

上下文很重要

我很_开心_,不难过

我很_难过_,不开心

  • 在词前加"not"(否定)是上下文影响含义的一个例子。
Python 中的情感分析

用 BOW 捕捉上下文

  • Unigram:单个标记

  • Bigram:成对标记

  • Trigram:三个标记

  • n-gram:长度为 n 的标记序列

Python 中的情感分析

用 BOW 捕捉上下文

今天的天气很好。

  • Unigram:{ 今天, 的, 天气, 很, 好 }

  • Bigram:{今天 的, 的 天气, 天气 很, 很 好}

  • Trigram:{今天 的 天气, 的 天气 很, 天气 很 好}

Python 中的情感分析

用 CountVectorizer 生成 n-gram

from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer(ngram_range=(min_n, max_n))
# 仅 unigram
ngram_range=(1, 1)
# uni- 和 bigram
ngram_range=(1, 2)
Python 中的情感分析

最佳的 n 是多少?

更长的标记序列
  • 产生更多特征
  • 提高模型精度
  • 过拟合风险更高
Python 中的情感分析

指定词表大小

CountVectorizer(max_features, max_df, min_df)
  • max_features:如指定,仅保留词表中最常见的若干词
    • 若 max_features = None,则包含所有词
  • max_df:忽略高于设定频率的词项
    • 设为整数表示绝对计数;设为浮点数表示占比
    • 默认 1.0,表示不忽略任何词项
  • min_df:忽略低于设定频率的词项
    • 设为整数表示绝对计数;设为浮点数表示占比
    • 默认 1.0,表示不忽略任何词项
Python 中的情感分析

Vamos praticar!

Python 中的情感分析

Preparing Video For Download...