有两种直接的方法可以找到与您的内容相关的推文。第一个是将其视为有监督的文档分类任务,您将训练一个分类器以使用一组预定的主题标签来注释推文。然后,您可以使用标签来选择适合您要扩充的任何内容的推文。如果您不喜欢使用预定的主题集,另一种方法是根据推文与您的内容的语义重叠简单地对推文进行评分。然后,您可以显示语义重叠最多的前n条推文。
监督文件分类
使用有监督的文档分类需要你有一组训练的推文,上面标有你将要使用的主题集。例如,
推文: NBA 总决赛震撼标签:体育
推文: Google 员工现在可以使用 Ruby!标签:编程
推文:吃午餐标签:其他
如果您想收集训练数据而无需手动为推文添加主题标签,您可以使用主题标签将主题标签分配给推文。主题标签可以与主题标签相同,或者您可以编写规则以将具有某些主题标签的推文映射到所需的标签。例如,标记为任一#NFL
或#NBA
全部的推文都可以被分配一个标签sports
。
获得按主题标记的推文后,您可以使用任意数量的现有软件包来训练分类器,将标签分配给新推文。一些可用的软件包包括:
语义重叠
使用与您的内容的语义重叠来查找推文避免了对标记训练集的需要。估计您的内容和您正在评分的推文之间的语义重叠的最简单方法是使用向量空间模型。为此,请将您的文档和每条推文表示为一个向量,向量中的每个维度都对应一个单词。然后分配给每个向量位置的值表示该词对文档含义的重要性。估计这一点的一种方法是简单地使用单词在文档中出现的次数。但是,您可能会通过使用TF/IDF之类的方法获得更好的结果,它会提高稀有术语的权重并降低更常见的术语的权重。
将内容和推文表示为向量后,您可以通过获取内容向量的余弦相似度和每条推文的向量的余弦相似度,根据推文与内容的语义相似度对推文进行评分。
无需自己编写任何代码。您可以只使用 Classifier4J 之类的包,其中包含一个VectorClassifier类,该类使用向量空间模型对文档相似度进行评分。
更好的语义重叠
对于每个维度使用一个术语的向量空间模型,您可能会遇到一个问题,即它们不能很好地处理具有大致相同含义的不同单词。例如,这样的模型会说 和 之间没有相似The small automobile
性A little car
。
有更复杂的建模框架,例如潜在语义分析 (LSA)和潜在狄利克雷分配 (LDA),可用于构建相互比较的文档的更抽象表示。可以将此类模型视为不是基于简单的单词重叠而是根据单词潜在含义的重叠对文档进行评分。
在软件方面,Semantic Vectors包为文档相似性提供了一个可扩展的类似 LSA 的框架。对于 LDA,您可以使用David Blei 的实现或斯坦福主题建模工具箱。