6

問題: 2 人のユーザー間で、タイムスタンプ付きの一連のチャット メッセージがあります。たとえば、丸一日分のチャット メッセージを一度に表示できます。しかし、一日中、複数の個別の会話/セッションがありました...そして、すべての日を 1 つの連続したストリームとして見るのではなく、これらを分割して見る方がユーザーにとって便利です。

タイムスタンプから暗黙のセッション/会話の開始/中断を「推測」できるアルゴリズムまたはヒューリスティックはありますか? 任意の「ギャップが x 分を超える場合は、別のセッションです」のほかに。それが唯一のケースである場合、この間隔はどのように決定されますか? いずれにせよ、これは避けたいと思います。

たとえば、2:00 から 3:00 の間に 50 件のメッセージが送信され、その後休憩があり、4:00 から 5:00 の間に 20 件のメッセージが送信されます。そこにブレークが挿入されます...しかし、ブレークはどのように決定されますか?

このテーマに関する文献はすでにあると思いますが、何を検索すればよいかわかりません。

しばらくの間、エッジ検出アルゴリズムや勾配ベースのアプローチなどをいじっていました。

(より明確にするためにコメントを参照してください)

4

1 に答える 1

3

編集(より良いアイデア):

各メッセージを次の 2 つのタイプとして表示できます。

  1. 前回の会話の続き
  2. まったく新しい会話

これら 2 種類のメッセージは、隣接するメッセージ間の時間差が指数分布である独立したポアソン過程としてモデル化できます。

次に、これら 2 種類のメッセージの指数パラメータを経験的に決定できます (初期データがあれば、それほど難しくありません)。これで、これら 2 つのイベントのモデルができました。

最後に、新しいメッセージが届いたときに、メッセージがタイプ 1 またはタイプ 2 である確率を計算できます。タイプ 2 の場合は、新しい会話があります。

説明:

遅延がある程度の時間である場合に、メッセージが新しい会話である確率T

P(new conversation | delay=T) = P(new conversation AND delay=T)/P(delay=T)

ベイズの法則を使用する:

= P(delay=T | new conversation)*P(new conversation)/P(delay=T)

についても同様の計算ですP(old conversation | delay=T)

P(delay=T | new conversation)モデルに由来します。P(new conversation)モデルの生成に使用したデータから簡単に計算できます。P(delay=T)2 つの確率を比較するだけなので、計算する必要はまったくありません。


隣接するメッセージ間のタイムスタンプの違いは、会話の種類と参加者によって異なります。したがって、グローバルなしきい値パラメーターではなく、ローカルの特性を考慮したアルゴリズムが必要になります。

私の提案は次のようになります。

  1. 直近の 10 件の隣接するメッセージ間の時間差を取得します。
  2. 平均 (または中央値) を計算する
  3. 次のメッセージまでの遅延が平均の 30 倍を超える場合、それは新しい会話です。

もちろん、これらの数字はその場で思いつきました。目的に合わせて調整する必要があります。

于 2012-07-24T21:08:02.777 に答える