5

タグのセットで記述されたアイテムの「類似アイテム」システムをどのように実装しますか?

私のデータベースには、Article、ArticleTag、および Tag という 3 つのテーブルがあります。各記事は、多対多の関係を介して多数のタグに関連付けられています。記事ごとに、「この記事が好きなら、これらも好きになる」システムを実装するために、最も類似した 5 つの記事を見つけたいと考えています。

私はコサインの類似性に精通し ており、そのアルゴリズムを使用すると非常にうまく機能します。しかし、それは遅くする方法です。記事ごとに、すべての記事を反復処理し、記事のペアのコサイン類似度を計算してから、類似度が最も高い 5 つの記事を選択する必要があります。

200,000 件の記事と 30,000 件のタグを使用すると、1 つの記事の類似記事を計算するのに 30 分かかります。したがって、コサイン類似度とほぼ同じくらい良い結果を生成するが、リアルタイムで実行でき、毎回ドキュメント コーパス全体を反復処理する必要がない別のアルゴリズムが必要です。

多分誰かがこれに対する既製の解決策を提案できますか? 私が調べた検索エンジンのほとんどは、ドキュメントの類似性検索を有効にしていません。

4

2 に答える 2

1

いくつかの質問、

  • ArticleTag は Tag とどう違うのですか? それとも、M2M マッピング テーブルですか?
  • コサイン マッチング アルゴリズムをどのように実装したかを簡単に説明できますか?
  • 文書 ID を取得するためだけに使用して、何らかの種類のメモリ内データ構造に文書タグを保存してみませんか? このようにして、取得時にのみデータベースにヒットします。
  • ドキュメント追加の頻度に応じて、この構造は高速/低速更新用に設計できます。

答えに向けた最初の直感 - オンライン クラスタリング アルゴリズムだと思います (おそらく、K-means クラスターを近似する共起マトリックスで主成分分析を行いますか?)。上記の質問のいくつかに答えると、より洗練されたものになります。

乾杯。

于 2010-02-04T21:45:45.300 に答える
0

Lemurツールキットを使用してそれを行うことができます。を使用するKeyfileIncIndexと、ソースからドキュメントを再取得する必要があります。インデックスからのドキュメントのIndriIndex取得をサポートします。

ただし、とにかく、ドキュメントにインデックスを付けてから、類似したドキュメントを検索するドキュメントからクエリを作成します。次に、そのクエリを使用して検索を実行すると、他のドキュメントの類似性がスコアリングされます。私の経験ではかなり速いです。ソースドキュメントと基本的なクエリの両方をドキュメントとして扱うため、類似点を見つけることが実際に行われます(Indriパーサーのものを使用している場合を除きます。これは少し異なり、どのように機能するかわかりません)。

于 2010-03-19T01:49:00.260 に答える