ドキュメントのコレクションを表すためにドキュメント用語ベクトルを使用しています。 TF * IDF を使用して、各ドキュメントベクトルの用語の重みを計算します。次に、このマトリックスを使用して、ドキュメント分類用のモデルをトレーニングできます。
将来、新しいドキュメントを分類するのを楽しみにしています。しかし、それを分類するには、最初にドキュメントをドキュメント用語ベクトルに変換する必要があり、ベクトルもTF * IDF値で構成されている必要があります。
私の質問は、1つのドキュメントだけでTF * IDFを計算するにはどうすればよいですか?
私の知る限り、TFは単一のドキュメント自体に基づいて計算できますが、IDFはドキュメントのコレクションでのみ計算できます。現在の実験では、実際に全体ドキュメントのコレクションのTF * IDF値を計算しています。次に、someドキュメントをトレーニングセットとして使用し、othersをテストセットとして使用します。
これは実際の生活にはあまり当てはまらないようだと突然気づきました。
したがって、実際には、分類には2つの微妙に異なるシナリオがあります。
1の場合、ラベル付きとラベルなしの両方でallドキュメントを組み合わせることができます。そして、それらすべてに対してTF * IDFを取得します。このように、トレーニングにドキュメントラベル付きのみを使用しても、トレーニング結果にはドキュメントラベルなしの影響が含まれます。
しかし、私のシナリオは2です。
trainingセットの要約から用語[〜#〜] t [〜#〜]について次の情報があるとします。コーパス:
unseenドキュメントDのtのIDFを次のように計算する必要がありますか?
IDF(t、D)= log((N + 1)/(n + 1))
また、新しいドキュメントで、以前はトレーニングコーパスに表示されなかった用語に遭遇した場合はどうなりますか? doc-termベクトルでその重みをどのように計算する必要がありますか?
TF-IDFは、コーパスに関係なく、単一のドキュメントには意味がありません。それは基本的に、比較的まれで有益な言葉を強調することです。
TF-IDFの重みを計算するには、コーパスの要約情報を保持する必要があります。特に、各用語のドキュメント数とドキュメントの総数が必要です。
トレーニングセット全体とテストセットの要約情報をTF-IDFに使用するか、トレーニングセットのみに使用するかは、問題の定式化の問題です。内容はあるがラベルがないドキュメントに分類システムを適用するだけの場合(これは実際にはかなり一般的です)、コーパス全体にTF-IDFを使用しても問題ありません。トレーニング後に分類システムを完全に見えないドキュメントに適用する場合は、トレーニングセットのTF-IDF要約情報のみを使用する必要があります。
TFは明らかに新しいドキュメントにのみ依存しています。
IDF、トレーニングコーパスでのみ計算します。
IDF計算にスラック項を追加するか、提案どおりに調整することができます。しかし、妥当なトレーニングセットの場合、一定の+1項はそれほど効果がありません。 AFAICT、古典的なドキュメント検索(考えてみてください:検索)では、これをわざわざ行う必要はありません。多くの場合、彼らはドキュメントをクエリしますnotあなたのコーパスの一部になるのに、なぜそれはIDFの一部になるのでしょうか?
TFはドキュメント固有のメトリックであるため、目に見えない単語の場合、TFの計算は問題になりません。 IDFの計算中に、平滑化された逆ドキュメント頻度手法を使用できます。
IDF = 1 + log(total documents / document frequency of a term)
ここで、IDFの下限は1です。したがって、トレーニングコーパスに単語が表示されない場合、そのIDFは1です。tf-idfまたはidfを計算するための普遍的に合意された単一の式がないため、tf-idfの式計算も合理的です。
多くの場合、目に見えない用語は、分類タスクにあまり影響を与えない場合は無視されることに注意してください。時々、人々は見えないトークンをUNKNOWN_TOKEN
のような特別な記号に置き換えて計算を行います。
TF-IDFの代替:ドキュメントの各項の重みを計算する別の方法は、最尤推定を使用することです。 MLEの計算中に、ラプラス平滑化とも呼ばれる 加法平滑化 手法を使用して平滑化できます。 MLEは、ドキュメント分類にNaive Bayesアルゴリズムのように 生成モデル を使用している場合に使用されます。