私はテキストマイニングとNLP関連のものを初めて使っています。私はいくつかのドキュメントから情報を抽出しようとしている小さなプロジェクトに取り組んでいます。私は基本的にposタグ付けを行い、次にパターンを見つけるためにこのPOSタグ付けを行う前にストップワードを使用する必要がありますか?ストップワードを使用するとPOSタグリーダーの精度に影響しますか?POSタギングの前にストップワードフィルタリングを使用する必要がありますか?
答えて
@lenzは何を言った。 がチャンクを訓練していて、掃除されたテキストに訓練して(そしてそれを使用する)ことを決定していない限り、その問題に関してタグ付けする前に、またはチャンクする前にストップワードを削除しないでください。しかし、私はそれをお勧めしません。ストップワード除去は、TF-IDFのような語彙の処理には適しているが、決定子や前置詞のような一般的な言葉は、文章構造、ひいては言葉の一部についての重要な手がかりを提供する。文単位を検出したい場合は、それらを削除しないでください。
しかし、なぜ私の言葉をそれに服用しますか?タグ付きデータのビットを取り、ストップワード除去の有無にかかわらずタグャーとチャンクを評価することで、これを簡単に確認できます。とにかく残りのパイプラインでこれを行うことをお勧めします。
のは、鬼をテスト/訓練する例として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の部分だ)。
- 1. Weka POSタギング+トークン化
- 2. POSタギングとレムマタイザー用の多言語NLTK
- 3. エラー「使用する前にUnitOfWorkManagerを設定する必要があります」
- 4. オンラインゲームにTCPを使用する必要がありますか?
- 5. MVVMにDataTemplatesを使用する必要がありますか?
- 6. ページレイアウトにapplication.html.erbを使用する必要がありますか?
- 7. ctagsにバージョンコントロールを使用する必要がありますか?
- 8. dlopenの前にロックする必要がありますか?
- 9. DreamweaverのSpryを使用する必要がありますか?
- 10. どのレイアウトマネージャを使用する必要がありますか?
- 11. アクティビティのサブクラスを使用する必要がありますか?
- 12. フォントのパスを使用する必要がありますか?
- 13. xlibの "XAllocSizeHints()"を使用する必要がありますか?
- 14. タイプコードのインターフェイスを使用する必要がありますか?
- 15. @synthesizeをまだ使用する必要がありますか?
- 16. IVに使用する必要がありますか?
- 17. Outlook.MailItem.Sendの前にイベントをキャッチする必要があります
- 18. HTML5構文を使用する必要がありますか?
- 19. RecyclerViewでCursorLoaderを使用する必要がありますか?
- 20. DynamoDBでEC2を使用する必要がありますか?
- 21. Rails 3.1:CoffeeScriptを使用する必要がありますか?
- 22. addTestDeviceを使用する必要がありますか?
- 23. なぜvalue.lengthを使用する必要がありますか?
- 24. Parcel.writeSerializableをParcelable.writeToParcelで使用する必要がありますか?
- 25. フォントでwebpackを使用する必要がありますか?
- 26. /csv:WriteAll()でError()を使用する必要がありますか?
- 27. 私はsingletableviewを使用する必要がありますか?
- 28. ユニットテストでAutoMapperを使用する必要がありますか?
- 29. mysql_close(接続)を使用する必要がありますか?
- 30. インテントサービスを使用する必要がありますか?
POSタグ付けはシーケンス分類として実行されるため、ストップワードを削除してシーケンスを変更すると、残りのワードのPOSタグが変更される可能性が非常に高くなります。 POSタグは通常、ストップワードを含む完全なテキストで訓練されます。 – lenz