2016-10-20 10 views
0

私はテキストマイニングとNLP関連のものを初めて使っています。私はいくつかのドキュメントから情報を抽出しようとしている小さなプロジェクトに取り組んでいます。私は基本的にposタグ付けを行い、次にパターンを見つけるためにこのPOSタグ付けを行う前にストップワードを使用する必要がありますか?ストップワードを使用するとPOSタグリーダーの精度に影響しますか?POSタギングの前にストップワードフィルタリングを使用する必要がありますか?

+3

POSタグ付けはシーケンス分類として実行されるため、ストップワードを削除してシーケンスを変更すると、残りのワードのPOSタグが変更される可能性が非常に高くなります。 POSタグは通常、ストップワードを含む完全なテキストで訓練されます。 – lenz

答えて

1

@lenzは何を言った。 がチャンクを訓練していて、掃除されたテキストに訓練して(そしてそれを使用する)ことを決定していない限り、その問題に関してタグ付けする前に、またはチャンクする前にストップワードを削除しないでください。しかし、私はそれをお勧めしません。ストップワード除去は、TF-IDFのような語彙の処理には適しているが、決定子や前置詞のような一般的な言葉は、文章構造、ひいては言葉の一部についての重要な手がかりを提供する。文単位を検出したい場合は、それらを削除しないでください。

しかし、なぜ私の言葉をそれに服用しますか?タグ付きデータのビットを取り、ストップワード除去の有無にかかわらずタグャーとチャンクを評価することで、これを簡単に確認できます。とにかく残りのパイプラインでこれを行うことをお勧めします。

2

のは、鬼をテスト/訓練する例としてthisを使用してみましょう:

まずコーパスとストップリスト

>>> import nltk 
>>> nltk.download('stopwords') 
>>> nltk.download('cess_esp') 

はNLTK

でラッパー
>>> from nltk.corpus import cess_esp as cess 
>>> from nltk.corpus import stopwords 

# Import the function to train a tagger. 
>>> from nltk import UnigramTagger, BigramTagger 
# Load the Spanish stopwords 
>>> stoplist = stopwords.words('spanish') 
# Load the Spanish tagger 
>>> cess_sents = cess.tagged_sents() 

分割コーパスへのロードを取得列車/テストセット

>>> len(cess_sents) 
6030 
>>> test_set = cess_sents[-int(6030/10):] 
>>> train_set = cess_sents[:-int(6030/10)] 
>>> range(10) 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> range(10)[-2:] 
[8, 9] 
>>> range(10)[:-2] 
[0, 1, 2, 3, 4, 5, 6, 7] 

ストップワードを使用せずにalternate train_setを作成します。

>>> train_set_nostop = [[(word,tag) for word, tag in sent if word.lower() not in stoplist] for sent in train_set] 

違いを参照してください:

>>> train_set[0] 
[(u'El', u'da0ms0'), (u'grupo', u'ncms000'), (u'estatal', u'aq0cs0'), (u'Electricit\xe9_de_France', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EDF', u'np00000'), (u'-Fpt-', u'Fpt'), (u'anunci\xf3', u'vmis3s0'), (u'hoy', u'rg'), (u',', u'Fc'), (u'jueves', u'W'), (u',', u'Fc'), (u'la', u'da0fs0'), (u'compra', u'ncfs000'), (u'del', u'spcms'), (u'51_por_ciento', u'Zp'), (u'de', u'sps00'), (u'la', u'da0fs0'), (u'empresa', u'ncfs000'), (u'mexicana', u'aq0fs0'), (u'Electricidad_\xc1guila_de_Altamira', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EAA', u'np00000'), (u'-Fpt-', u'Fpt'), (u',', u'Fc'), (u'creada', u'aq0fsp'), (u'por', u'sps00'), (u'el', u'da0ms0'), (u'japon\xe9s', u'aq0ms0'), (u'Mitsubishi_Corporation', u'np00000'), (u'para', u'sps00'), (u'poner_en_marcha', u'vmn0000'), (u'una', u'di0fs0'), (u'central', u'ncfs000'), (u'de', u'sps00'), (u'gas', u'ncms000'), (u'de', u'sps00'), (u'495', u'Z'), (u'megavatios', u'ncmp000'), (u'.', u'Fp')] 
>>> train_set_nostop[0] 
[(u'grupo', u'ncms000'), (u'estatal', u'aq0cs0'), (u'Electricit\xe9_de_France', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EDF', u'np00000'), (u'-Fpt-', u'Fpt'), (u'anunci\xf3', u'vmis3s0'), (u'hoy', u'rg'), (u',', u'Fc'), (u'jueves', u'W'), (u',', u'Fc'), (u'compra', u'ncfs000'), (u'51_por_ciento', u'Zp'), (u'empresa', u'ncfs000'), (u'mexicana', u'aq0fs0'), (u'Electricidad_\xc1guila_de_Altamira', u'np00000'), (u'-Fpa-', u'Fpa'), (u'EAA', u'np00000'), (u'-Fpt-', u'Fpt'), (u',', u'Fc'), (u'creada', u'aq0fsp'), (u'japon\xe9s', u'aq0ms0'), (u'Mitsubishi_Corporation', u'np00000'), (u'poner_en_marcha', u'vmn0000'), (u'central', u'ncfs000'), (u'gas', u'ncms000'), (u'495', u'Z'), (u'megavatios', u'ncmp000'), (u'.', u'Fp')] 
>>> 

電車鬼:

>>> uni_tag = UnigramTagger(train_set) 

電車ストップワードなしコーパスとタグ付け:

>>> uni_tag_nostop = UnigramTagger(train_set_nostop) 

は言葉にtest_setを分割し、タグ:

>>> test_words, test_tags = zip(*[zip(*sent) for sent in test_set]) 

タグのテスト文:あなたここに不公平である多くのものがある

>>> sum([ sum(1 for (word,pred_tag), (word, gold_tag) in zip(pred,gold) if pred_tag==gold_tag) for pred, gold in zip(tagged_sents, test_set)]) 
11266 
>>> sum([ sum(1 for (word,pred_tag), (word, gold_tag) in zip(pred,gold) if pred_tag==gold_tag) for pred, gold in zip(tagged_sents_nostop, test_set)]) 
5963 

注:

>>> uni_tag.tag_sents(test_words) 
>>> uni_tag_nostop.tag_sents(test_words) 

は精度を(ちょうど今の真陽性をやらせる)評価しますタガーを訓練する前にストップワードを削除しました。完全ではありません。

  • あなたの訓練セットは、文章中の単語のタグ付けがストップワードのタグを学びませんので、テストセットがストップワード

  • を含んでいますので、あなたのタグ付けの精度が低下、すべてのストップワードのためにNoneを返します

  • ストップワードを削除した後に小さく、

    ストップワードを使わずに高次のngramを訓練する場合、全く意味をなさないかもしれません。文法や感性が正確性を説明しているわけではありません(今日のNLPでは特にそうです)。例えば、 、 "猫はテーブルにあります" - > "猫テーブル"、ストップワードなし。

しかし@alexiaとして別名、別名分散モデルとして(袋のワードに基づくベクトル空間モデルのために、と指摘した。別名、モデル「あなたは隣人で単語を知ることができる」。非神経予測埋め込みモデル)では、ストップワードを削除すると精度の面でいくらかのマイレージが得られる可能性があります。しかし、TF-IDFの場合、(統計的に)魔法のように、ストップワードは自動的にTF-IDFスコアが低くなります。なぜなら、ほとんどのドキュメントで頻繁に出現するので、各ドキュメントを差別化するための差別的属性が少ないからです彼らはそれほど重要ではない、それは魔法をやっているIDFの部分だ)。

関連する問題