2

ストリーミングデータで以下の情報を特定するための効果的なアルゴリズム/データ構造を知りたいです。

Twitterのようなリアルタイムのストリーミングデータを考えてみましょう。実際のデータを保存するのではなく、主に以下のクエリに関心があります。

実際のデータでクエリを実行する必要がありますが、重複は必要ありません。

完全なデータを保存することに興味がないので、重複する投稿を特定するのは難しいでしょう。ただし、すべての投稿をハッシュして確認することはできます。しかし、重複している投稿も特定したいと思います。どうすればこれを達成できますか。

ユーザーが話し合っている上位kのトピックを特定します。

ユーザーが議論している上位のトピックを特定したいと思います。ツイッターで見られるような最高頻度の単語は欲しくない。代わりに、最も頻繁に使用される単語の高レベルのトピック名を付けたいと思います。

システムをリアルタイムにしたいと思います。つまり、私のシステムはあらゆる量のトラフィックを処理できるはずです。

マップリデュースアプローチを考えることはできますが、同期の問題を処理する方法がわかりません。たとえば、重複する投稿は異なるノードに到達する可能性があり、両方がそれらをインデックスに保存する可能性があります。

典型的なニュースソースでは、データ内のストップワードを削除します。私のシステムでは、幅広いトピックで最も頻繁に使用される単語を特定して、ストップワードリストを更新したいと思います。

これを達成するための効果的なアルゴリズム/データ構造は何でしょうか。

データ内の興味深いパターンを取得するために、トピックを一定期間保存したいと思います。たとえば、金曜日の夜は誰もが映画に行きたがっています。このデータを保存するための効率的な方法は何でしょうか。

Hadoop分散ファイルシステムに保存することを考えていますが、時間の経過とともにこれらのインデックスが大きくなり、I/Oが大きなボトルネックになります。

世界中のツイートからの多言語データを検討してください。地理的領域全体で議論されている同様のトピックを特定するにはどうすればよいですか?

ここには2つの問題があります。1つは、使用されている言語を識別することです。ツイートした人に基づいて識別できます。ただし、この情報はユーザーのプライバシーに影響を与える可能性があります。他のアイデアは、トレーニングアルゴリズムを介してそれを実行することができます。このために現在行われている最良の方法は何ですか。他の問題は、実際に辞書で単語を検索し、それを英語などの一般的な中間言語に関連付けることです。同じ単語が異なるコンテストで使用されているように、語義の曖昧性解消を処理する方法。

単語の境界を特定する

1つの可能性は、ある種のトレーニングアルゴリズムを使用することです。しかし、最善のアプローチは何ですか。これは、実際の文に基づいて単語の境界を識別できるため、語義の曖昧性解消に似ています。

具体的な実装ではなく、プロトタイプの開発とシステムの評価を考えています。リアルタイムのツイッターデータを廃棄することは不可能だと思います。このアプローチは、オンラインで無料で入手できるいくつかのデータでテストできると思います。このデータを入手できるアイデア。

フィードバックをいただければ幸いです。

御時間ありがとうございます。

-バラ

4

3 に答える 3

1

ここにはいくつかの異なる質問が埋め込まれています。あなたの質問のすべてを理解することはできませんが、私が理解している大きな問題は次のとおりです。トピックごとにメッセージを分類したいと考えています。また、重複を削除したいと考えています。

重複の削除は (比較的) 簡単です。「近い」重複を削除するには、最初にデータから興味のない部分を削除します。大文字と句読点を削除することから始めることができます。最も一般的な単語を削除することもできます。次に、結果のメッセージをブルーム フィルターに追加できます。ハッシュ化されたメッセージは完全なメッセージよりもはるかに小さくならないため、ハッシュ化は Twitter には十分ではありません。メモリに収まらないハッシュになってしまいます。そのため、代わりにブルーム フィルターを使用します。非常に大きなブルーム フィルターが必要になる場合がありますが、それでもハッシュ テーブルよりも小さくなります。

もう 1 つの部分は、分類が難しい問題です。おそらく、この部分を自分で書きたくないでしょう。分類できるライブラリやプログラムは数多くありますが、ニーズに合ったものを見つけるのは難しいかもしれません。例として、カテゴリ化のための高速なオンライン アルゴリズムである Vowpal Wabbit プロジェクトがあります。ただし、一度に 1 つのカテゴリでしか機能しません。複数のカテゴリの場合、複数のコピーを実行して個別にトレーニングする必要があります。

言語を識別することはそれほど難しくないように思えます。「トレーニング」のような賢いことをしようとするのではなく、各言語の最も一般的な単語を辞書に入れます。メッセージごとに、単語が最も頻繁に表示される言語を使用します。

アルゴリズムが独自にカテゴリを作成するようにしたい場合は、頑張ってください。

于 2010-01-22T04:27:27.697 に答える
0

主な質問に答えているかどうかはよくわかりませんが、2 つのメッセージ間のレーベンシュタイン距離を計算することで、2 つのメッセージの類似性を判断できます。これは、2 つの文字列間の「編集の違い」と考えることができます (つまり、一方を他方に変換するには、一方を何回編集する必要があるか)。

于 2010-01-22T04:03:04.277 に答える
0

こんにちは、 api.cortical.io機能を使用して非常によく似たデモを作成しました。そこで、各ツイートのセマンティック フィンガープリントを作成できます。(実際にツイートの一部である必要のない上位のキーワードや類似の用語を抽出することもできます)。フィンガープリントを使用して、コンテンツに基づいて Twitter ストリームをフィルタリングしました。twistiller.comで結果を見ることができます。公開の 1% Twitter ストリームは、4 つの異なるトピック分野で監視されています。

于 2014-11-12T21:37:23.483 に答える