素朴な「キーワード抽出アルゴリズム」を実装しています。私は独学なので、オンライン文献で一般的な用語や数学が不足しています。
ドキュメントの「最も関連性の高いキーワード」を次のように見つけています。
- 各用語が現在のドキュメントで使用されている頻度を数えます。これをtfとしましょう。
- これらの各用語がドキュメントのデータベース全体でどのくらいの頻度で使用されているかを調べます。これをdfとしましょう。
- r = tf / dfによって、各用語の関連性の重みrを計算します。
各ドキュメントはコーパスの適切なサブセットであるため、コーパスにない用語を含むドキュメントはありません。これは、ゼロ除算について心配する必要がないことを意味します。
すべての用語をrで並べ替え、上位の用語の多くを保持します。これらは、このドキュメントに最も密接に関連する上位のキーワードです。このドキュメントで一般的に使用される用語は、より重要です。ドキュメントのデータベース全体に共通する用語は、それほど重要ではありません。
これは単純な形式のtf-idfだと思います。
問題は、用語がデータベース全体で非常にまれであるが、現在のドキュメントで使用されている場合、 r値が高すぎるように見えることです。
これは、サンプル サイズが小さいため、ある種のアーティファクトと考えることができます。これを補うための最善の方法または通常の方法は何ですか?
- データベース全体で特定のしきい値よりも一般的でない用語を破棄します。もしそうなら、そのしきい値はどのように計算されますか? ハードコードされた値になるには、あまりにも多くの要因に依存しているようです。
- 逆二乗やコサインなどの数学関数で加重または平滑化できますか?
私はウェブを検索してtf-idfを読んでみましたが、私が興味を持っていないドキュメントの比較を扱っていることがわかりました。さらに、それらのほとんどは、説明と専門用語や公式の比率が低くなっています。
(実際、私のプロジェクトはこの問題の一般化です。私は実際に Stack Exchange サイトのタグを扱っているので、用語の総数は少なく、ストップワードは無関係であり、使用頻度の低いタグは使用頻度の低い単語よりも一般的かもしれません。通常のケースです。)