算法/启发式用于通过“会话”/来自时间戳的隐式会话对聊天消息历史进行分组?

时间:2012-07-24 20:43:31

标签: algorithm heuristics

问题:我有一系列聊天消息 - 两个用户之间 - 带有时间戳。比如说,我可以同时呈现一整天的聊天消息。然而,在一整天中,存在多个离散的对话/会话......对于用户而言,将这些分开而不是作为一个连续流的所有日子将更有用。

是否存在可以“推断”隐式会话/会话从时间戳开始/中断的算法或启发式算法?除了任意'如果差距大于x分钟,它是一个单独的会话'。如果这是唯一的情况,这个间隔是如何确定的?无论如何,我想避免这种情况。

例如,有50条消息在2:00到3:00之间发送,然后休息,然后在4:00到5:00之间发送20条消息。在那之间插入一个休息......但是如何确定休息时间?

我确信已经有关于这个主题的文献,但我只是不知道该搜索什么。

我正在玩边缘检测算法和基于渐变的方法等一段时间。

(请参阅评论以获得更多说明)

1 个答案:

答案 0 :(得分:3)

编辑(更好的主意):

您可以将每封邮件视为两种类型:

  1. 上次会话的延续
  2. 全新的对话
  3. 您可以将这两种类型的消息建模为独立的Poisson processes,其中相邻消息之间的时差为exponential distribution

    然后,您可以手动凭经验确定这两种类型的消息的指数参数(给定一些初始数据不会太难)。现在你有了这两个事件的模型。

    最后,当出现新消息时,您可以计算消息类型为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)您根本不需要计算,因为您只想比较两个概率。


    相邻邮件之间的时间戳差异取决于会话类型和参与人员。因此,您需要一种考虑局部特征的算法,而不是全局阈值参数。

    我的主张如下:

    1. 获取最近10条相邻消息之间的时差。
    2. 计算平均值(或中位数)
    3. 如果到下一条消息的延迟超过平均值的30倍,那就是新的对话。
    4. 当然,我当场想出了这些数字。他们必须调整以适合您的目的。