选择功能以将Twitter问题标识为“有用”

时间:2013-01-14 03:00:38

标签: machine-learning classification nltk feature-selection

我通过使用正则表达式从Twitter的流中收集一堆问题来挑选包含以问题类型开头的文本的任何推文:谁,什么,何时,何地等结束带问号。

因此,我最终在我的数据库中得到了几个无用的问题:“谁在乎?”,“这是什么?”等一些有用的东西,比如:'篮球比赛的频率是多少?','北极熊的重量是多少?'等

但是,我只对有用的问题感兴趣。

我有大约3000个问题,其中〜2000个没用,〜其中1000个是有用的,我手动标记它们。我试图使用一个朴素贝叶斯分类器(随NLTK一起)尝试自动分类问题,这样我就不必手动挑选出有用的问题。

首先,我尝试选择问题的前三个单词作为功能,但这并没有多大帮助。在100个问题中,分类器仅预测大约10%-15%对于有用的问题是正确的。它也未能从预测无效的问题中挑选出有用的问题。

我尝试了其他功能,例如:包括所有单词,包括问题的长度,但结果没有显着变化。

有关如何选择功能或继续进行的任何建议?

感谢。

2 个答案:

答案 0 :(得分:13)

一些随机的建议。

添加预处理步骤,并删除thisaofand等停用词。

  How often is there a basketball fight

首先你删除一些停用词,你得到

  how often basketball fight 

计算每个单词的tf-idf分数(将每个推文作为文档处理,计算分数,您需要整个语料库才能获得文档频率。)

对于上述句子,您可以计算每个单词的tf-idf分数:

  tf-idf(how)
  tf-idf(often)
  tf-idf(basketball)
  tf-idf(fight)

This可能有用。

尝试以下分类器的其他功能

  • 平均tf-idf得分
  • 中位数tf-idf得分
  • max tf-idf score

此外,尝试pos-tagger并为每条推文生成一个分类句子。

>>> import nltk
>>> text = nltk.word_tokenize(" How often is there a basketball fight")
>>> nltk.pos_tag(text)
[('How', 'WRB'), ('often', 'RB'), ('is', 'VBZ'), ('there', 'EX'), ('a', 'DT'), ('basketball', 'NN'), ('fight', 'NN')]

然后你可能有其他功能来尝试与pos-tags相关的功能。

其他一些可能有用的功能,请参阅论文 - qtweet(这是一篇关于推文问题识别的论文)了解详情。

  • 推文是否包含任何网址
  • 推文是否包含任何电子邮件或电话号码
  • 是否有任何强烈的感觉,例如!跟随问题。
  • 是否在推文的上下文中出现单字组词。
  • 推文是否提及其他用户的姓名
  • 推文是否转发
  • 推文是否包含任何标签#

FYI,qtweet的作者尝试了4种不同的分类器,即随机森林,SVM,J48和Logistic回归。随机森林中表现最好。

希望他们有所帮助。

答案 1 :(得分:1)

您可以尝试构建的一个非常强大的功能(不确定是否可能)是否有回复相关推文。