これはかなり大きなトピックです。人々がここで思いつく答えに加えて、いくつかの情報検索クラスのシラバスを追跡し、それらに割り当てられた教科書とレポートをチェックすることをお勧めします。とはいえ、ここに私自身の大学院時代の簡単な概要があります。
最も単純なアプローチは、bag of wordsと呼ばれます。各ドキュメントは{word: wordcount}
ペアのスパース ベクトルに縮小され、ドキュメントのセットを表すベクトルのセットで NaiveBayes (またはその他の) 分類子をスローするか、各バッグと他のすべてのバッグの間の類似度スコアを計算できます (これは、 k 最近傍分類)。KNN はルックアップが高速ですが、スコア マトリックス用に O(n^2) ストレージが必要です。ただし、ブログの場合、n はそれほど大きくありません。大きな新聞のサイズの場合、KNN は急速に実用的でなくなるため、オンザフライ分類アルゴリズムの方が優れている場合があります。その場合、ランキング サポート ベクター マシンを検討できます。SVM は、線形の類似性測定に制約されないため優れており、それでも非常に高速です。
ステミングは、bag-of-words 手法の一般的な前処理ステップです。これには、"cat" と "cats"、"Bob" と "Bob's"、または "similar" と "similarly" などの形態学的に関連する単語を語根まで減らしてから、単語のバッグを計算します。世の中にはさまざまなステミング アルゴリズムがたくさんあります。ウィキペディアのページには、いくつかの実装へのリンクがあります。
bag-of-words の類似性が十分でない場合は、レイヤーを bag-of-N-grams の類似性に抽象化して、単語のペアまたはトリプルに基づいてドキュメントを表すベクトルを作成できます。(4 タプルまたはさらに大きなタプルを使用することもできますが、実際にはこれはあまり役に立ちません。)これには、はるかに大きなベクトルを生成するという欠点があり、それに応じて分類に多くの作業が必要になりますが、得られる一致ははるかに近くなります。構文的に。OTOH、セマンティックの類似性のためにこれはおそらく必要ありません。盗作の検出などには適しています。チャンキング、またはドキュメントを軽量の解析ツリーに縮小することも使用できます (ツリーには分類アルゴリズムがあります) が、これは作成者の問題 (「出所が不明なドキュメントが与えられた場合、
ユース ケースでより役立つのは、単語を概念にマッピングし ( WordNetなどのシソーラスを使用)、使用されている概念間の類似性に基づいてドキュメントを分類する概念マイニングです。単語から概念へのマッピングは還元的であるため、これは多くの場合、単語ベースの類似性分類よりも効率的になりますが、前処理ステップはかなり時間がかかる可能性があります。
最後に、談話構文解析があります。これには、文書の意味構造の構文解析が含まれます。チャンクされたドキュメントと同じように、談話ツリーで類似性分類子を実行できます。
これらはほとんどすべて、非構造化テキストからメタデータを生成することを伴います。生のテキスト ブロック間で直接比較を行うのは扱いにくいため、最初に文書をメタデータに前処理します。