我正在尝试判断给定的URL是否属于某种活动。所谓“活动”,我指的是诸如conference
(会议)、summit
(峰会)、convention
(大会)等活动。以下是我为此设计的初步算法:
我发现了以下(请看最后)的标记,如果这些标记出现在页面内容中(我使用第三方库从HTML中提取内容),我就会将其标记为活动。当然,这还不够。我为每个标记分配了一个权重,权重表示该标记有多大可能表明给定的URL是一个活动。例如,如果我在内容中找到了conference
,它比registration
(注册)更能让我确信这是一个活动,因为registration
可能在其他类型的文章中也经常出现。
因此,我按以下方式计算每篇文章的得分:标记在内容中的频率乘以其权重之和。然后,如果这个得分> EVENT_THRESHOLD
,我就会将文章标记为活动。这种方法的问题是:如果我得到了20次‘event’(这是一个低置信度,即低权重的标记)的出现,得分就会跳跃并突破EVENT_THRESHOLD
,从而将文章标记为活动。有什么更好的实现方法吗?我希望我不是在重新发明轮子。谢谢。附注:我不是数据科学家 🙁
活动的标记如下:
("event", 0.4),("workshop", 1.0),("registration", 0.4),("register", 0.3), ("conference", 1.0),("tickets", 1.0), ("summit", 0.5), ("speaker", 0.5),("training", 0.5),("session", 0.4),("convention", 1.0),("webinar", 1.0),("duration", 0.6)
回答:
你确实是在重新发明轮子。如果你想让生活简单一些,最好是看看朴素贝叶斯模型。它与你的模型非常相似,但有统计学基础。
基本思想是,你为每种类型的活动学习一个先验概率,例如P(conference)
,这基本上是conference
类别文档的比例。此外,你计算特定活动页面包含某个词的概率,例如registration
,这是conference
页面中包含该词的比例P(registration|conference)
。注意:如果该词未包含,你需要纳入逆概率1-P(registration|conference)
。所有概率的乘积给你的是页面属于某个活动类别的(未归一化)概率。
如果你考虑registration
和conference
这两个词,
对于conference
,文档{registration}
的概率将是
P(registration|conference)* (1-P(conference | conference) )*P(conference)
其中,从该文档估计的概率将是
P(registration|conference)= 1P(conference | conference) =1
然而,还有许多其他算法你可以使用,例如多类支持向量机、决策树等。