有一串短文。每个都有推文的大小,或者让我们假设它们都是推文。
用户可以对任何推文进行投票。因此,每条推文都有以下三种状态之一:
相关(正面投票)
默认(中立,即无投票)
无关紧要(反对票)
每当推出一组新推文时,它们都会按特定顺序显示。此订单由用户对所有先前推文的投票决定。目的是为每条新推文分配一个分数。该分数是基于该推文的文本与用户投票的所有先前推文之间的单词相似性或匹配来计算的。换句话说,得分最高的推文将包含以前投票的最大单词数量,以及之前投票的最少单词为负数。此外,具有高分的新推文将触发向用户发出通知,因为它们被认为非常相关。
最后一件事,最少的语义考虑(自然语言处理)会很棒。
我已阅读术语频率 - 反向文档频率,并提出了这个非常简单和基本的解决方案:
提醒:整个集合中单词频率较高且单词总频率较低,因此tf-idf的权重较高。
如果用户对推文投票结果为肯定,则此推文的所有字词都将获得积极意义(对于否定的情况也是如此)。这意味着我们将有一大组单词,其中每个单词具有正点和负点的总数。
如果(鸣叫分数> 0),则此推文将触发通知。
推文得分=本推文所有单词的得分总和
单词分数=单词频率*反向总频率
所有先前投票中的单词频率=(此单词的总正投票 - 此单词的总否定投票)/ 总计投票这个词反向总频率=日志(所有字的总票数/ 此字的总票数)
这种方法足够吗?我对任何更好的方法和任何现成的API或算法持开放态度。
答案 0 :(得分:1)
一种可能的解决方案是在用户投票的推文上训练Naive Bayes等分类器。您可以查看一个Python库scikit-learn的文档,该文档可以解释您如何轻松preprocess your text and train such a classifier。
答案 1 :(得分:1)
我会看看朴素贝叶斯,不过我也会在执行简单分类时查看K-Nearest Neighbors算法 - 这包含在Sci-kit Learn库中并且记录良好。
RE:“无法在GAE上运行SKLearn” - 您需要使用Google Predict API,或者运行VPS作为工作人员来处理您的分类任务;这显然必须住在不同的系统上。
我想说,如果你只是希望对一个适当的小数据集进行简单的分类,你实际上可以在JavaScript中实现一个分类器,比如
`http://jsfiddle.net/bkanber/hevFK/light/`
使用JS实现,如果数据集太大,处理时间将变得无法接受,但是作为一个选项很好,在许多情况下甚至更好。
最终,GAE不是我在构建任何可能需要除最基本的ML技术之外的任何平台时使用的平台。我会在像Digital Ocean,AWS等人这样的地方看Heroku或VPS。