我该怎么做“相关标签”?

时间:2011-06-29 08:04:16

标签: algorithm database-design language-agnostic machine-learning tagging

我的网站上有标签,我在创建博客文章时逐个输入。我喜欢gmail的新功能,它会询问您是否要在邮件中包含X,如果您输入Y的名称,并且您经常将它们包含在同一邮件中。

我想在我的网站上做类似的事情,但我不知道如何在对象或数据库中表示“related-ness”标签......想法?

4 个答案:

答案 0 :(得分:5)

这一切都归结为在帖子和某些标签的某些特征之间建立关联,然后 - 当您按下“发布”按钮时 - 分析新帖子并提出与您的帖子特征匹配的所有标签。

这可以通过几种方式完成,从“完全硬编码”的关联到某种“学习AI”......以及介于两者之间的所有内容。

硬编码解决方案

这是最简单的算法。您应首先确定您的帖子的哪些特征与标记相关(例如:如果您将其标记为“短”或“长”,则为长度;如果您将其标记为“多媒体内容”,则存在照片或视频等等... )。然而,最明显的是关注帖子中使用的单词。例如,您可以构建如下映射:

tag_hint_words = {'code-development' : ['programming', 
                                        'language', 'python', 'function', 
                                        'object', 'method'],
                  'family' : ['Theresa', 'kids', 
                              'uncle Ben', 'holidays']}

然后,您会检查自己的帖子中是否存在列表中的字词([]之间的代码),并将标记(:之前的字词)建议为可能的候选人。

一种常见的方法是给出“得分”,或换句话说,给出一个数字,表示给定标签是正确的概率。例如:如果您的帖子包含句子......

  

经过几个月的编程,我们终于在Ben叔叔的小屋度过了暑假。特丽莎和孩子们欣喜若狂!

...尽管存在“编程”这个词,但程序应该指出 family 是最有可能使用的标签,因为还有更多的单词提示。

学习AI

上述方法的一个明显局限性是 - 比如有一天你在python旁边拿起java - 你可能需要更改你的代码并包含像“java”或“oracle”这样的词。如果您创建新标签,则同样适用。

为了规避这个限制(并且有一些乐趣!!)你可以尝试实现学习算法。学习算法是那些使用它们的人越多就越好(因此他们确实......学习!)。某些算法需要初始培训(许多垃圾邮件过滤器和语音识别程序需要这个初始“入门”)。有些人没有。

我绝对不是这方面的专家,但是两个常见的AI是: Naive Bayes Classifier 和某些 Neural network

尽管WP页面可能看起来很吓人,但它们实现起来却非常容易(至少在Python中)。以下是PyCon 2009关于“Easy AI with Python”主题的演讲录音。我发现它非常有用,甚至有点鼓舞人心! :)

HTH!

答案 1 :(得分:1)

你应该看一下这篇文章: Any suggestions for a db schema for storing related keywords?

如果您正在寻找存储相关标签的架构,那将会有所帮助。

答案 2 :(得分:1)

通常使用Collaborative filtering来完成多个代理人参与的相关性搜索。你可能想看一看。

答案 3 :(得分:1)

查找Clustering(机器学习算法)。不要被数学吓倒,这是一个非常简单的算法。查看Machine Learning for Hackers以获得对许多机器学习算法和方法的简单解释。