5

そこで、Weka SVM を使用してテキストを分類しようとしています。これまでのところ、SVM のトレーニングに使用する特徴ベクトルは、トレーニング テキストに表示されるユニグラムとバイグラムの TF-IDF 統計で構成されています。しかし、トレーニング済みの SVM モデルをテストして得た結果はまったく正確ではありませんでした。誰か私の手順についてフィードバックをいただけませんか? テキストを分類するために、次の手順に従っています。

  1. トレーニング テキストから抽出されたユニグラムとバイグラムで構成される辞書を構築する
  2. 各ユニグラム/バイグラムが各トレーニング テキストに出現する回数と、ユニグラム/バイグラムがトレーニング テキストに出現する回数を数えます
  3. ステップ 2 のデータを使用して、各ユニグラム/バイグラムの TF-IDF を計算します。
  4. ドキュメントごとに、辞書の長さである特徴ベクトルを構築し、ベクトルの各要素に対応する TF-IDF 統計を格納します (たとえば、ドキュメント 1 の特徴ベクトルの最初の要素は TF に対応します)。 -ドキュメント 1 に関連する辞書の最初の単語の IDF)
  5. 各特徴ベクトルにクラス ラベルを追加して、どのテキストがどの作者のものかを区別します
  6. これらの特徴ベクトルを使用して SVM をトレーニングします
  7. テスト テキストの特徴ベクトルは、トレーニング テキストと同じ方法で構築され、SVM によって分類されます。

また、より多くの機能を使用して SVM をトレーニングする必要があるのでしょうか? もしそうなら、この場合、どの機能が最も効果的ですか? どんな助けでも大歓迎です、ありがとう。

4

2 に答える 2

8

通常、自然言語文書には、 Hapax Legomenonとしても知られる、一度しか現れない多くの単語が含まれています。たとえば、Moby-Dick の個別の単語の 44% は 1 回だけ表示され、17% は 2 回表示されます。

したがって、通常、コーパスのすべての単語を含めると、特徴量が過剰になります。この特徴空間のサイズを縮小するために、NLP システムは通常、次の 1 つ以上を採用します。

  • ストップ ワードの削除 -- 著者の分類では、これらは通常、 istheatwhichなどの短くて一般的な単語です。
  • ステミング -- 一般的なステマー (Porter ステマーなど) は、一連のルールを使用して単語の語形変化を正規化します。たとえば、walkWalkingwalksはすべてステムwalkにマッピングされます。
  • 相関/有意性しきい値 -- クラス ラベルに関する各機能のピアソン相関係数または p 値を計算します。次に、しきい値を設定し、そのしきい値を下回る値をスコアリングするすべての機能を削除します。
  • カバレッジしきい値 -- 上記のしきい値と同様に、少なくとも t 個のドキュメントに表示されないすべての機能を削除します。ここで、t はコーパス全体のサイズに対して非常に小さい (< 0.05%) です。
  • 品詞に基づくフィルタリング - たとえば、動詞のみを考慮したり、名詞を削除したりします。
  • システムのタイプに基づくフィルタリング -- たとえば、臨床テキストの NLP システムは、医学辞書にある単語のみを考慮する場合があります。

ステミング、ストップ ワードの削除、コーパスのインデックス作成、および tf_idf またはドキュメントの類似性の計算には、Luceneの使用をお勧めします。lucene の使用に関する迅速で簡単なチュートリアルについては、Google の「Lucene in 5 minutes」を参照してください。

于 2013-06-08T23:45:02.407 に答える
2

これらのタイプの分類では、ベクトルがあまり大きくないことが重要です。これは、ベクトルに多数のゼロが含まれる可能性があり、これらのベクトルが近すぎて正しく分離するのが難しいため、結果に悪影響を与える可能性があるためです。また、すべてのバイグラムを使用しないことをお勧めします。ベクターのサイズを縮小し、十分な情報を保持するために、(テキスト内で) 頻度が最も高いものを選択してください。推奨される理由の一部: http://en.wikipedia.org/wiki/Curse_of_Dimensionityそして最後に重要なのは、データの量です。ベクトルが大きいほど、より多くのデータを使用する必要があります。

于 2013-06-07T22:00:28.460 に答える