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

bil*_*ili 11 classification machine-learning nltk feature-selection

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

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

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

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

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

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

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

谢谢.

gre*_*ess 12

一些随机的建议.

添加一个预处理步骤和除去等停止的话this,a,of,and,等.

  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)
Run Code Online (Sandbox Code Playgroud)

可能很有用.

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

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

此外,尝试使用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(这是一篇用于推文问题识别的论文)以获取详细信息.

  • 这条推文是否包含任何网址
  • 该推文是否包含任何电子邮件或电话号码
  • 是否有任何强烈的感觉如!跟随问题.
  • 是否在推文的背景下出现了单词.
  • 推文是否提到其他用户的名字
  • 推文是否转发
  • 推文是否包含任何主题标签 #

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

希望他们帮忙.