コンテンツに関連するツイートを見つけるには、2 つの簡単な方法があります。1 つ目は、これを教師付きドキュメント分類タスクとして扱うことです。これにより、事前に決められた特定のトピック ラベルのセットでツイートに注釈を付けるように分類子をトレーニングします。次に、ラベルを使用して、拡張するコンテンツに適したツイートを選択できます。事前に決められた一連のトピックを使用したくない場合は、別のアプローチとして、コンテンツとのセマンティック オーバーラップに従ってツイートにスコアを付けるだけです。次に、セマンティック オーバーラップが最も多い上位n 個のツイートを表示できます。
教師付き文書の分類
教師付きドキュメント分類を使用するには、使用するトピックのセットでラベル付けされたツイートのトレーニング セットが必要です。例えば、
つぶやき: NBA ファイナルは衝撃的だったラベル:スポーツ
つぶやき: Google 社員が Ruby を使用できるようになりました! レーベル:プログラミング
つぶやき:ランチを食べるレーベル:その他
ツイートに手動でトピックのラベルを付けずにトレーニング データを収集したい場合は、ハッシュタグを使用してトピック ラベルをツイートに割り当てることができます。ハッシュタグはトピック ラベルと同じにすることも、特定のハッシュタグを含むツイートを目的のラベルにマッピングするルールを作成することもできます。たとえば、 または のいずれ#NFL
かでタグ付けされたツイート#NBA
には、すべて のラベルを割り当てることができますsports
。
トピックごとにラベル付けされたツイートを取得したら、任意の数の既存のソフトウェア パッケージを使用して、新しいツイートにラベルを割り当てる分類子をトレーニングできます。利用可能なパッケージには次のものがあります。
セマンティック オーバーラップ
コンテンツとのセマンティック オーバーラップを使用してツイートを検索すると、ラベル付けされたトレーニング セットが不要になります。コンテンツとスコアリング対象のツイートとの間のセマンティック オーバーラップを推定する最も簡単な方法は、ベクトル空間モデルを使用することです。これを行うには、ドキュメントと各ツイートを、ベクトルの各次元が単語に対応するベクトルとして表します。各ベクトル位置に割り当てられた値は、その単語が文書の意味にとってどれほど重要であるかを表します。これを推定する 1 つの方法は、単純にその単語が文書内で出現する回数を使用することです。ただし、 TF/IDFのようなものを使用すると、より良い結果が得られる可能性があります。これは、まれな用語の重みを上げ、より一般的な用語の重みを下げます。
コンテンツとツイートをベクトルとして表現したら、コンテンツのベクトルと各ツイートのベクトルのコサイン類似度を取得することで、コンテンツとのセマンティックな類似性によってツイートにスコアを付けることができます。
これを自分でコーディングする必要はありません。ベクトル空間モデルを使用してドキュメントの類似性をスコアリングするVectorClassifierクラスを含む Classifier4J のようなパッケージを使用するだけです。
より良いセマンティック オーバーラップ
次元ごとに 1 つの項を使用するベクトル空間モデルで遭遇する可能性のある問題の 1 つは、ほぼ同じことを意味する異なる単語を適切に処理できないことです。たとえば、そのようなモデルは、 と の間The small automobile
に類似性がないことを示しA little car
ます。
相互に比較されるドキュメントのより抽象的な表現を構築するために使用できる、潜在意味分析 (LSA)や潜在的ディリクレ割り当て (LDA)などのより洗練されたモデリング フレームワークがあります。このようなモデルは、単純な単語の重複ではなく、単語の根底にある意味の重複に基づいてドキュメントをスコアリングするものと考えることができます。
ソフトウェアに関して言えば、Semantic Vectorパッケージは、ドキュメントの類似性のためのスケーラブルな LSA のようなフレームワークを提供します。LDA の場合、David Blei の実装または Stanford Topic Modeling Toolbox を使用できます。