私は現在個別の感情分析というプロジェクトに取り組んでおり、個別のケースに2および3クラスが存在します。私はコーパスを使用しています。これはユニークワード(約200.000)の意味でかなりrichです。 特徴選択にbag-of-wordsメソッドを使用し、一意の特徴の数を減らすために、しきい値 of 発生頻度。 機能の最終セットには約20.000の機能が含まれます。これは実際には90%減少ですが、テストの精度には不十分 -予測。私はLibSVMとSVM-lightを順番にトレーニングと予測に使用しています(両方ともlinearとRBF kernel)そしてPythonおよびBash一般。
これまでに観測された最高の精度はは約75%と私少なくとも90%が必要です。これは、バイナリ分類の場合です。 マルチクラストレーニングの場合、精度は〜60%に低下します。私は両方の場合で少なくとも90%が必要です、それを増やす方法を理解できません:トレーニングパラメーターの最適化または機能選択の最適化?
テキスト分類で機能選択に関する記事を読みましたが、実際に相互に明確な相関関係がある3つの異なる方法が使用されていることがわかりました。これらのメソッドは次のとおりです。
最初の方法はすでに使用していますが、非常に単純に使用しているため、十分に高い精度を得るためには、より適切に使用するためのガイダンスが必要です。 [〜#〜] ig [〜#〜]および[〜#〜] chi [〜#〜]の実用的な実装に関する知識も不足しており、そのように私を導いてください。
どうもありがとう、そして助けのために追加情報が必要な場合は、私に知らせてください。
@larsmans:Frequency Threshold:例で一意の単語の出現を探しています。Wordが異なる例で十分頻繁に出現する場合、その単語は一意の機能として機能セットに含まれます。
@TheManWithNoName:まず、ドキュメント分類の一般的な懸念事項を説明してくれてありがとう。私はあなたが提唱するすべての方法と他の方法を調べて実験しました。特徴がユニグラムであり、重みがTerm Presence(TP)であるProportional Difference(PD)メソッドが特徴選択に最適であることがわかりました(タグ付けの理由がわかりませんでした) Term-Frequency-Inverse-Document-Frequency(TF-IDF)インデックス方法として、私はむしろそれを機能の重み付けアプローチと考えています)。 前処理も、あなたが述べたようにこのタスクの重要な側面です。 形態素解析および語幹解析と同様に、データを洗練するために特定のタイプの文字列除去を使用しました。また、英語と比較して異なる特性を持つトルコ語に取り組んでいることに注意してください。最後に、binary分類の〜88%精度(f-measure)とmulti-classの〜84%に到達しました。これらの値は、私が使用したモデルの成功の確かな証拠です。これは私がこれまでにやったことです。現在、クラスタリングおよびリダクションモデルに取り組んでおり、[〜#〜] lda [〜#〜]および[〜#〜] lsi [〜#〜]を試し、moVMFおよび多分球体モデル(LDA + moVMF)。これは、ニュースコーパスのような客観的な性質を持つコーパスでより適切に動作するようです。これらの問題に関する情報やガイダンスがあれば、感謝します。 フィーチャスペースの次元削減メソッド(LDA、LSI、moVMFなど)とクラスタリングメソッド(k-means間のインターフェイス(python指向、オープンソース)をセットアップするために特に情報が必要です。 、階層など)。
これはおそらくテーブルに少し遅れていますが、...
Beeが指摘しているように、すでに認識しているように、SVMを分類子として使用することは、分類の前の段階ですでに情報を失っている場合には無駄になります。ただし、テキスト分類のプロセスには、ほんの2、3のステージが必要であり、各ステージは結果に大きな影響を及ぼします。したがって、より複雑な機能選択の手段を検討する前に、一般的にはるかに少ないリソース消費を必要とする多くの単純な可能性があります。
トークン化/表現をバッグオブワード形式で実行する前に、ドキュメントを前処理しますか?ストップワードまたは句読点を削除するだけで、精度が大幅に向上する場合があります。
たとえば、代わりにWordペアやn-gramを使用するように、bag-of-words表現を変更することを検討しましたか?最初からより多くの次元があることに気付くかもしれませんが、それらはさらに凝縮され、より有用な情報を含んでいます。
次元削減が特徴選択/特徴抽出であることにも注意する価値があります。違いは、特徴の選択が単変量の方法で次元を減らすことです。つまり、現在表示されている用語を変更せずに個別に削除しますが、特徴抽出(Ben Allisonが言及していると思います)単一の用語を組み合わせて、(できれば)より多くの情報を含み、特徴空間を削減する、より高い直交する用語を生成します。
文書の頻度の使用に関して、用語を含む文書の確率/割合を使用しているだけですか、それとも文書内の用語密度を使用していますか?カテゴリ1に10個のdoumentsがあり、それぞれに1つの用語が含まれている場合、実際にはカテゴリ1がドキュメントに関連付けられています。ただし、カテゴリ2に同じ用語がそれぞれ100回含まれているドキュメントが10個しかない場合、カテゴリ2は明らかにカテゴリ1よりもその用語との関係がはるかに高くなります。用語密度が考慮されていない場合、この情報は失われ、カテゴリが少ないほどこの損失の影響が大きくなります。同様に、実際には有用な情報を提供していない可能性があるため、高頻度の用語のみを保持することは常に賢明ではありません。たとえば、すべてのドキュメントで用語が100回出現する場合、それはノイズ用語と見なされ、重要に見えますが、機能セットに保持する実用的な価値はありません。
また、どのようにデータにインデックスを付けますか?単純なブールインデックス付けまたはTF-IDFなどのより複雑なメジャーでベクトル空間モデルを使用していますか?シナリオ内のカテゴリの数が少ないことを考慮すると、データセット全体の重要度に関連して各カテゴリの用語の重要度を考慮することができるため、より複雑な測定が有益です。
個人的には、最初に上記の可能性のいくつかを試し、その後、パフォーマンスをさらに向上させる必要がある場合は、複雑な方程式(またはその組み合わせ)で特徴の選択/抽出を調整することを検討します。
追加
新しい情報に基づいて、正しい軌道に乗っているかのように聞こえ、84%以上の精度(F1またはBEP-マルチクラス問題に基づく精度とリコール)は、ほとんどのデータセットで非常に優れていると一般に考えられています。すでにデータからすべての情報豊富な機能を正常に取得している可能性があるか、一部がまだ整理されている可能性があります。
そうは言っても、特定のデータセットに対する積極的な次元削減の程度の予測子として使用できるものは、「外れ値カウント」分析です。この分析では、外れたフィーチャの情報ゲインの低下を使用して、その情報がどの程度発生する可能性があるかを判断します機能の選択中に失われます。未加工のデータおよび/または処理されたデータでこれを使用して、機能をプルーニングする(または場合によってはプルーニングを解除する)ことをどれだけ積極的に目指すべきかを推定できます。それを説明する論文はここにあります:
TF-IDFをインデックス付け方法として説明することに関して、あなたはそれが特徴の重み付け尺度であることは正しいですが、私はそれがインデックス付けプロセスの一部として主に使用されると思います(次元削減にも使用できます)。これの理由は、いくつかの指標は特徴の選択/抽出に向いているが、他の指標は特にドキュメントベクトル(つまり、インデックス付きデータ)の特徴の重み付けに適しているためです。これは一般に、カテゴリごとに決定されるディメンション削減の測定値によるものです。一方、インデックスの重み付け測定値は、より優れたベクトル表現を提供するためにより多くのドキュメント指向になりがちです。
LDA、LSI、およびmoVMFに関して、ガイダンスを提供するには経験が少なすぎるのではないかと心配しています。残念ながら、トルコ語のデータセットやpython言語。
機能選択ではなく次元削減をお勧めします。 特異値分解 、 主成分分析 、またはバッグオブワード表現用に調整されていることを考慮すると、 Latent Dirichlet Allocation のいずれかを検討してください。これにより、すべての単語を含む表現を概念的に保持できますが、それらの単語間の類似性(または同義語タイプ)の関係を活用することで、それらをより少ない次元に折りたたむことができます。
これらすべてのメソッドには、アクセスして実行できるかなり標準的な実装があります。使用している言語を教えていただければ、私や他の誰かがあなたを正しい方向に向けることができます。
高次元のフィーチャには線形svmが推奨されます。私の経験に基づいて、SVMの精度の究極の制限は、プラスとマイナスの「機能」に依存します。グリッド検索を実行して(または線形svmの場合は最適なコスト値を検索するだけで)、最大精度の最適なパラメーターを見つけることができますが、最終的には機能セットの分離可能性によって制限されます。 90%を取得していないということは、クラスのメンバーを説明するためのより良い機能を見つけるための作業がまだあることを意味します。
これはポスターに使用するには遅すぎると思いますが、おそらく他の誰かに役立つでしょう。機能削減へのカイ二乗アプローチの実装は非常に簡単です。 BoWのバイナリ分類がクラスC1およびC2にあると仮定すると、candidate_featuresの各特徴fについて、C1のfの周波数を計算します。総単語C1を計算します。 C2の計算を繰り返します。 p値が特定のしきい値(たとえば、p <0.05)を下回っているかどうかに基づいて、chi-sqaureを決定し、フィルターの候補の機能を決定します。 Pythonとnltkを使用したチュートリアルは、ここで見ることができます。 http://streamhacker.com/2010/06/16/text-classification-sentiment-analysis-eliminate-low- information-features / (ただし、正しく覚えていれば、著者はこの手法をテストデータに誤って適用し、報告された結果に偏りがあると考えています)。