我的网站上有标签,我在创建博客文章时会逐个输入这些标签。我很喜欢Gmail的新功能,当你输入Y的名字时,它会询问你是否想在邮件中包含X,因为你经常在同一邮件中同时包含这两个人。
我想在我的网站上实现类似的功能,但我不知道如何在对象或数据库中表示标签的“相关性”…有什么想法吗?
回答:
这最终归结为在你的文章的某些特征和某些标签之间建立关联,然后——当你按下“发布”按钮时——分析新文章并提出与文章特征匹配的所有标签。
这可以通过多种方式实现,从“完全硬编码”的关联到某种“学习AI”…以及介于两者之间的所有方法。
硬编码解决方案
这些是最简单的算法来实现。你应该首先决定哪些文章特征对标记是相关的(例如:如果标记为“短”或“长”,则文章的长度;如果标记为“多媒体内容”,则是否包含照片或视频等…)。然而,最明显的是关注文章中使用的哪些词。例如,你可以构建这样的映射:
tag_hint_words = {'code-development' : ['programming', 'language', 'python', 'function', 'object', 'method'], 'family' : ['Theresa', 'kids', 'uncle Ben', 'holidays']}
然后你会检查你的文章中是否包含列表中的词(代码中的[
和]
之间的部分),并提出标签(:
前的词)作为可能的候选。
一种常见的方法是给出“分数”,换句话说,就是给出一个数字来表示某个标签是正确标签的概率。例如:如果你的文章包含这样的句子…
经过几个月的编程,我们终于出发去叔本的别墅度过夏季假期。Theresa和孩子们都非常兴奋!
…尽管有“编程”这个词,程序应该指示家庭作为最可能使用的标签,因为有更多词语暗示这一点。
学习AI
上述方法的一个明显限制是——假设有一天你除了Python之外还开始使用Java——你可能需要更改你的代码并包含像“java”或“oracle”这样的词。如果你创建新标签,同样适用。
为了克服这个限制(并获得一些乐趣!!),你可以尝试实现一个学习算法。学习算法是那些你使用得越多,它们的结果就越精确的算法(所以它们确实…学习!)。有些算法需要初始训练(许多垃圾邮件过滤器和语音识别程序需要这种初始“引导”)。有些不需要。
我绝对不是这方面的专家,但两种常见的AI是:朴素贝叶斯分类器和某种形式的神经网络。
尽管WP页面可能看起来很吓人,但它们实现起来出奇地简单(至少在Python中是这样)。这是PyCon 2009年关于“用Python实现简单AI”主题的讲座录音。我发现它非常有信息量,甚至有些启发性!:)
希望对你有帮助!