问题:我有一系列聊天消息 - 两个用户之间 - 带有时间戳。比如说,我可以同时呈现一整天的聊天消息。然而,在一整天中,存在多个离散的对话/会话......对于用户而言,将这些分开而不是作为一个连续流的所有日子将更有用。
是否存在可以“推断”隐式会话/会话从时间戳开始/中断的算法或启发式算法?除了任意'如果差距大于x分钟,它是一个单独的会话'。如果这是唯一的情况,这个间隔是如何确定的?无论如何,我想避免这种情况。
例如,有50条消息在2:00到3:00之间发送,然后休息,然后在4:00到5:00之间发送20条消息。在那之间插入一个休息......但是如何确定休息时间?
我确信已经有关于这个主题的文献,但我只是不知道该搜索什么。
我正在玩边缘检测算法和基于渐变的方法等一段时间。
(请参阅评论以获得更多说明)
答案 0 :(得分: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)
您根本不需要计算,因为您只想比较两个概率。
相邻邮件之间的时间戳差异取决于会话类型和参与人员。因此,您需要一种考虑局部特征的算法,而不是全局阈值参数。
我的主张如下:
当然,我当场想出了这些数字。他们必须调整以适合您的目的。