関連記事を提案する実証済みのアルゴリズムにはどのようなものがありますか? 質問する

関連記事を提案する実証済みのアルゴリズムにはどのようなものがありますか? 質問する

かなり一般的な状況だと思います。ブログやニュース サイトを運営していて、たくさんの記事やブログなどがあり、それぞれの下部に、関連していると思われる他の記事を提案したいとします。

各アイテムに関するメタデータはほとんどないと仮定しましょう。つまり、タグやカテゴリはありません。タイトルや著者名を含む 1 つの大きなテキストの塊として扱います。

関連する可能性のある文書をどのように見つけますか?

私は、既成のソリューションではなく、実際のアルゴリズムに興味がありますが、Ruby や Python で実装されたものを調べたり、mysql や pgsql に依存したりしてもかまいません。

編集:現在の回答はかなり良いですが、もっと見たいです。 おそらく、いくつかの非常にシンプルなサンプルコードがあると思います。

ベストアンサー1

これはかなり大きなトピックです。ここで人々が出した答えに加えて、いくつかの情報検索クラスのシラバスを調べ、指定された教科書や論文を確認することをお勧めします。そうは言っても、私の大学院時代の概要は次のとおりです。

最も単純なアプローチは、言葉の袋各文書はペアのスパースベクトルに縮小され{word: wordcount}、文書セットを表すベクトルのセットに NaiveBayes (または他の) 分類器を適用したり、各バッグと他のすべてのバッグ間の類似スコアを計算したりすることができます (これは k 近傍分類と呼ばれます)。KNN は検索が高速ですが、スコア行列に O(n^2) のストレージが必要です。ただし、ブログの場合、n はそれほど大きくありません。大きな新聞のサイズの場合、KNN はすぐに非実用的になるため、オンザフライ分類アルゴリズムの方が適している場合があります。その場合は、ランキングサポートベクターマシンSVM は、線形類似度測定に制限されず、非常に高速であるため便利です。

ステミングこれは、bag-of-words 技法の一般的な前処理手順です。これは、bag-of-words を計算する前に、形態論的に関連する単語 (「cat」と「cats」、「Bob」と「Bob's」、「similar」と「similarly」など) を語源まで縮約することを意味します。世の中にはさまざまなステミング アルゴリズムがあり、Wikipedia のページにはいくつかの実装へのリンクがあります。

bag-of-words 類似度が十分でない場合は、それを 1 層上の bag-of-N-grams 類似度に抽象化できます。ここでは、単語のペアまたは 3 組に基づいてドキュメントを表すベクトルを作成します。(4 組またはそれ以上の大きな組を使用することもできますが、実際にはあまり役に立ちません。) これには、はるかに大きなベクトルが生成され、それに応じて分類に多くの作業が必要になるという欠点がありますが、取得する一致は構文的に非常に近くなります。一方、意味的類似性にはおそらくこれは必要ありません。これは、盗作検出などに適しています。チャンキング、つまり文書を軽量の解析ツリーに縮小する手法も使用できます (ツリーの分類アルゴリズムがあります) が、これは著者問題 (「出所不明の文書がある場合、誰が書いたのか?」) などの場合に便利です。

おそらく、あなたのユースケースにとってより有用なのは、単語を概念にマッピングする概念マイニングです(シソーラスなどを使用して)。ワードネット)、次に、使用される概念間の類似性に基づいてドキュメントを分類します。単語から概念へのマッピングは簡略化されるため、単語ベースの類似性分類よりも効率的になることがよくありますが、前処理のステップにはかなり時間がかかる場合があります。

最後に、談話解析、これは文書の意味構造を解析することを含みます。チャンク化された文書の場合と同じように、談話ツリーに対して類似性分類器を実行できます。

これらはすべて、非構造化テキストからメタデータを生成することを伴います。生のテキスト ブロック間の直接比較は困難なため、まずドキュメントをメタデータに前処理します。

おすすめ記事