53

私は現在、プロジェクトに取り組んでいます。これは、別々のケースで2 つと 3 つのクラスが存在するような単純なセンチメント アナライザーです。私は、ユニークな単語の手段がかなり豊富なコーパスを使用しています(約 200.000)。特徴選択には bag-of-words法を使用し、ユニークな特徴の数を減らすために、出現頻度のしきい値による除去が行われます。最終的な機能セットには約 20,000 の機能が含まれており、実際には90 % 減少していますが、十分ではありませんテスト予測の意図された正確さのために。私はLibSVMSVM-lightをトレーニングと予測 (線形RBF カーネルの両方) に順番に使用し、 PythonBashも一般的に使用しています。

これまでに観察された最高の精度は約 75%、少なくとも 90% が必要です。これは二項分類の場合です。マルチクラス トレーニングの場合、精度は~60%に低下します。両方のケースで少なくとも 90% が必要ですが、それを増やす方法がわかりません:トレーニング パラメーターの最適化または機能選択の最適化を介して?

テキスト分類における特徴選択に関する記事を読んだことがありますが、3 つの異なる方法が使用されていることがわかりました。これらの方法は、実際には相互に明確な相関関係があります。これらの方法は次のとおりです。

  • bag-of-words (BOW)の頻度アプローチ
  • 情報取得(IG)
  • X^2 統計(CHI)

最初の方法はすでに私が使用している方法ですが、私は非常に単純に使用しており、十分に高い精度を得るためには、より適切に使用するためのガイダンスが必要です. また、 IGCHIの実際の実装に関する知識が不足しており、そのように導くための助けを探しています。

ありがとうございました。さらに詳しい情報が必要な場合はお知らせください。


  • @larsmans: Frequency Threshold : 単語が異なる例で十分頻繁に発生している場合、その単語が一意の機能として機能セットに含まれるように、例で一意の単語の発生を探しています。

  • @TheManWithNoName: まず、文書分類の一般的な懸念事項を説明してくれてありがとう。私はあなたが提案したすべての方法と他の方法を調べて実験しました。特徴選択には比例差(PD) 法が最適であることがわかりました。特徴はユニグラムであり、重み付けには用語存在(TP) です (用語-周波数-逆-文書-周波数(TF- IDF) をインデックス作成方法として使用するのではなく、機能の重み付けアプローチ と見なします)。おっしゃったように、前処理もこのタスクの重要な側面です。データの精緻化と形態学的解析のために特定のタイプの文字列除去を使用し、ステミング。また、英語とは異なる特徴を持つトルコ語に取り組んでいることにも注意してください。最後に、バイナリ分類で最大 88% の精度(f 測定) 、マルチクラス最大 84%の精度に到達することができました。これらの値は、私が使用したモデルの成功の確固たる証拠です。これは私がこれまで行ってきたことです。現在、クラスタリングとリダクション モデルに取り組んでおり、LDALSIを試し、 moVMFとおそらく球面モデルに移行しています。(LDA + moVMF) は、ニュース コーパスのような客観的な性質を持つコーパスでうまく機能するようです。これらの問題に関する情報やガイダンスがあれば、よろしくお願いします。特に、特徴空間の次元削減方法 (LDA、LSI、moVMF など) とクラスタリング方法(k-means、階層型など)の間のインターフェイス (Python 指向、オープンソース) をセットアップするための情報が必要です。

4

5 に答える 5

39

これはおそらくテーブルに少し遅れていますが...

Bee が指摘しているように、既にご承知のとおり、分類の前の段階で情報が失われている場合、SVM を分類器として使用しても無駄です。ただし、テキスト分類のプロセスには、数段階だけではなく、さらに多くの段階が必要であり、各段階が結果に大きな影響を与えます。したがって、より複雑な機能選択の測定を検討する前に、通常ははるかに少ないリソース消費を必要とする、より単純な可能性がいくつかあります。

bag-of-words 形式へのトークン化/表現を実行する前に、ドキュメントを前処理しますか? ストップ ワードや句読点を削除するだけで、精度が大幅に向上する場合があります。

たとえば、代わりに単語ペアや n-gram を使用するために、bag-of-words 表現を変更することを検討しましたか? 最初はより多くの次元があることに気付くかもしれませんが、それらはさらに凝縮され、より有用な情報を含んでいることに気付くかもしれません。

次元削減は特徴選択/特徴抽出であることも注目に値します。違いは、特徴選択が一変量の方法で次元を削減することです。つまり、現在表示されている用語を変更せずに個別に削除するのに対し、特徴抽出 (Ben Allison が言及していると思います) は、1 つ以上を組み合わせた多変量です。単一項を組み合わせて、(うまくいけば) より多くの情報を含み、特徴空間を縮小する、より高い直交項を生成します。

ドキュメント頻度の使用に関して、用語を含むドキュメントの確率/パーセンテージを使用しているだけですか、それともドキュメント内で見つかった用語密度を使用していますか? カテゴリ 1 に 10 個のドキュメントしかなく、それぞれに 1 つの用語が含まれている場合、カテゴリ 1 は実際にドキュメントに関連付けられています。ただし、カテゴリ 2 に同じ用語をそれぞれ 100 回含む 10 個のドキュメントしかない場合、明らかに、カテゴリ 2 はカテゴリ 1 よりもその用語との関係がはるかに高くなります。用語密度が考慮されていない場合、この情報は失われ、カテゴリが少ないほど、この損失による影響が大きくなります。同様に、頻度の高い用語のみを保持することは、実際には有用な情報を提供しない可能性があるため、必ずしも賢明ではありません。

また、データにどのようにインデックスを付けますか?単純なブール値のインデックス付けまたは TF-IDF などのより複雑なメジャーでベクトル空間モデルを使用していますか? シナリオのカテゴリの数が少ないことを考慮すると、データセット全体での重要性に関連して各カテゴリの用語の重要性を説明できるため、より複雑な測定が有益です。

個人的には、最初に上記の可能性のいくつかを試してから、さらにパフォーマンスを向上させる必要がある場合は、複雑な方程式 (または組み合わせ) を使用して機能の選択/抽出を微調整することを検討します。


追加

新しい情報に基づくと、正しい軌道に乗っているように聞こえ、84% 以上の精度 (F1 または BEP - マルチクラスの問題に基づく精度と再現率) は、ほとんどのデータセットで一般的に非常に優れていると見なされます。データからすべての情報豊富な機能を正常に取得したか、いくつかの機能がまだ削除されている可能性があります。

そうは言っても、特定のデータセットに対して積極的な次元削減がどれほど優れているかの予測因子として使用できるものは、「異常値カウント」分析です。機能の選択中に失われます。生データおよび/または処理済みデータに対してこれを使用して、機能をどれだけ積極的に削減する (または場合によっては削除しない) ことを目指すべきかを見積もることができます。それを説明する論文はここにあります:

外れ値カウント情報を含む論文

TF-IDF をインデックス作成方法として説明することに関しては、それが特徴の重み付けの尺度であるという点で正しいですが、主にインデックス作成プロセスの一部として使用されると考えています (ただし、次元削減にも使用できます)。これは、特徴の選択/抽出に適した尺度もあれば、特にドキュメント ベクトル (つまり、インデックス付きデータ) での特徴の重み付けに適している尺度もあるからです。これは一般に、カテゴリごとに決定される次元削減手段によるものですが、インデックスの重み付け手段は、より優れたベクトル表現を提供するために、よりドキュメント指向になる傾向があります。

LDA、LSI、および moVMF に関しては、残念ながら私は経験が少なすぎてガイダンスを提供できません。残念ながら、私はトルコ語のデータセットや Python 言語も扱ったことがありません。

于 2013-03-17T14:02:27.393 に答える
5

特徴選択の代わりに次元削減をお勧めします。特異値分解主成分分析、またはバッグオブワード表現用に調整されていることを考えると、潜在的なディリクレ割り当てのいずれかを検討してください。これにより、すべての単語を含む表現を概念的に保持することができますが、それらの間の類似性 (または類義語タイプ) の関係を活用することで、それらをより少ない次元に折りたたむことができます。

これらのメソッドはすべて、アクセスして実行できるかなり標準的な実装を備えています。使用している言語をお知らせいただければ、私または他の誰かが正しい方向に向けることができます。

于 2012-11-30T11:30:07.343 に答える
1

これはポスターに使用するには遅すぎると確信していますが、おそらく他の誰かに役立つでしょう. 機能削減へのカイ二乗アプローチは、実装が非常に簡単です。クラス C1 と C2 への BoW バイナリ分類を仮定すると、candidate_features 内の各機能 f について、C1 内の f の頻度が計算されます。合計単語 C1 を計算します。C2 の計算を繰り返します。p 値が特定のしきい値 (たとえば、p < 0.05) を下回っているかどうかに基づいて、カイ二乗決定フィルターの候補_機能を計算します。Python と nltk を使用したチュートリアルは、http://streamhacker.com/2010/06/16/text-classification-sentiment-analysis-eliminate-low-information-features/ (私の記憶が正しければ、著者は、この手法をテスト データに誤って適用したため、報告された結果に偏りが生じました)。

于 2014-06-10T21:02:09.557 に答える
1

高次元の特徴には、線形 svm が推奨されます。私の経験に基づくと、SVM 精度の最終的な制限は、正と負の「機能」に依存します。グリッド検索を実行して (または線形 svm の場合は、最適なコスト値を検索するだけで)、最大精度の最適なパラメーターを見つけることができますが、最終的には機能セットの分離可能性によって制限されます。90% を取得していないということは、クラスのメンバーを説明するためのより良い機能を見つけるために、まだやるべきことがあるということです。

于 2012-11-28T22:37:45.333 に答える