-1

タイトルと本文の内容に基づいて、同様のHTMLページを見つけようとしています。類似とは、意味的に類似している、つまり同じコンテンツ/テーマ/トピックに関連していることを意味します。

私は、HTMLページのペアのセマンティックな近接性を主張するための信頼できる「バリデーター」メソッドを持っています。つまり、一度に2つのHTMLページに対してのみ機能します。ただし、データセットには約100万のHTMLページが含まれており、2つのページのすべての可能な組み合わせを比較することは非常に不可能です...

したがって、ペアベースのバリデーターの「候補」のリストを作成するための、比較的迅速であるが許容できるほど不完全な種類の「分類子」を探しています。このような分類子/フィルターは、データセットから[比較的短い] HTMLページのリストを生成します。これは、特定のHTMLページに意味的に近い可能性があります。次に、この第1層フィルターからの出力は、参照ページに効果的に類似したHTMLページのサブセットを生成するために、ペアごとに既存のバリデーターメソッドに送られます。

この第1層のフィルターは、適合率と再現率の特性に関して不完全である可能性がありますが、もちろん、適合率が悪い(つまり、比較的多くの誤検知を生成する)ことは許容されますが、再現率は小さすぎてはなりません。 、あまりにも多くの効果的に類似したページが省略されないようにします。

これらの候補者を選択するための最良の方法は何でしょうか?

背景情報:
既存のバリデーターロジックをサポートするために、データセット内の各HTMLページは、タイトルと本文をユニグラムとバイグラムにトークン化することによって前処理されました。追加された処理の計算コストが、フィルターロジックの有効性を向上させるために提供するサポートと釣り合っている場合は、追加の前処理の提案を歓迎します。

これは第1層フィルターの設計にはほとんど関係がないかもしれませんが、「バリデーター」は次のように機能し
ます。HTMLページのペアに対して、それらに対応する特徴ベクトルを生成し、分類器にフィードします。それらが類似しているかどうかを取得するために。
コーディングにはPythonを使用し、分類器としてSVMを使用しています。

4

1 に答える 1

1

これは監視されていないタスクであり、分類タスクではありません。私が最初に試みることは、ページから構築されたtf-idfベクトルの単純な古いコサイン類似性です(つまり、古い学校の情報検索)。

つまり、ドキュメントセット全体をベクトル化して(実行可能である必要があります。大規模な場合は、を検討してくださいHashingVectorizer)、マトリックスを取得Xtrainし、同じベクトライザーを使用して受信ドキュメントをベクトル化して生成しXnew、両方がCSR形式であることを確認します(ハッシュが処理します)これも)そしてそれらの間の余弦類似度を計算します:

cosine_sim = (Xtrain * Xnew.T).toarray()

これは、類似度スコアのn_train×n_newマトリックスです。トレーニングドキュメントは、テストドキュメントiとの類似性によって次のように並べ替えることができます。

most_similar = np.argsort(cosine_sim[:, i])[::-1]
candicates = most_similar[:100]  # or however many you desire

別のアプローチは、k -meansモデルをトレーニング文書に適合させ、入ってくる文書に最も類似した文書のクラスターを候補として選択することです。k -meansモデルを適合させた場合、それは次kmのようになります。

# get closest clusters for new documents
closest = km.predict(Xnew)

および各ドキュメント/行Xnew[i, :]についてnp.where(km.labels_ == closest[i])、候補を示します。

使用を検討してくださいMiniBatchKMeans; 最先端バージョンのscikit-learnは、非常に大量のドキュメントセットを処理できます。パラメータの設定n_clustersは少しブラックアートなので、試行錯誤が必要になる場合があります。

于 2013-03-15T11:08:41.840 に答える