n-gram モデルの構築

Pythonで学ぶNLPの特徴量エンジニアリング

Rounak Banik

Data Scientist

BoW の短所

review label
'The movie was good and not boring' positive
'The movie was not good and boring' negative

 

  • BoW 表現は同一です。
  • 単語の文脈が失われます。
  • 感情は「not」の位置に依存。
Pythonで学ぶNLPの特徴量エンジニアリング

n-gram

  • 文書内の連続する n 個の要素(語)。
  • n = 1 → bag-of-words
    'for you a thousand times over'
    
  • n = 2 の n-gram:
    [
    'for you',
    'you a',
    'a thousand',
    'thousand times',
    'times over'
    ]
    
Pythonで学ぶNLPの特徴量エンジニアリング

n-gram

'for you a thousand times over'
  • n = 3 の n-gram:
    [
    'for you a',
    'you a thousand',
    'a thousand times',
    'thousand times over'
    ]
    
  • さらに文脈を捉える。
Pythonで学ぶNLPの特徴量エンジニアリング

用途

  • 文の補完
  • スペル補正
  • 機械翻訳の補正
Pythonで学ぶNLPの特徴量エンジニアリング

scikit-learn で n-gram モデルを構築

バイグラムのみを生成。

bigrams = CountVectorizer(ngram_range=(2,2))

ユニグラム、バイグラム、トライグラムを生成。

ngrams = CountVectorizer(ngram_range=(1,3))
Pythonで学ぶNLPの特徴量エンジニアリング

短所

  • 次元の呪い
  • 高次の n-gram はまれ
  • n は小さく保つ
Pythonで学ぶNLPの特徴量エンジニアリング

Let's practice!

Pythonで学ぶNLPの特徴量エンジニアリング

Preparing Video For Download...