11

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

因此,我最终在我的数据库中收到了几个无用的问题,例如:“谁在乎?”、“这是什么?” 等等,还有一些有用的,比如:“篮球比赛多久打一次?”、“北极熊有多重?” ETC

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

我有大约 3000 个问题,其中约 2000 个没有用,其中约 1000 个有用,我手动标记了它们。我正在尝试使用朴素贝叶斯分类器(NLTK 附带)来尝试自动对问题进行分类,这样我就不必手动挑选有用的问题。

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

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

关于我应该如何选择功能或继续进行的任何建议?

谢谢。

4

2 回答 2

13

一些随机的建议。

添加预处理步骤并删除停用词,如this, a, of,and等。

  篮球比赛多久打一次

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

  篮球打架的频率

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

对于像上面这样的句子,你计算每个单词的 tf-idf 分数:

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

可能很有用。

为您的分类器尝试以下附加功能

  • 平均 tf-idf 分数
  • 中位 tf-idf 分数
  • 最大 tf-idf 分数

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

>>> 导入 nltk
>>> text = nltk.word_tokenize("篮球比赛多久打一次")
>>> nltk.pos_tag(文本)
[('How', 'WRB'), ('often', 'RB'), ('is', 'VBZ'), ('there', 'EX'), ('a', 'DT') , ('篮球', 'NN'), ('战斗', 'NN')]

然后,您可能有其他功能可以尝试与 pos-tags 相关的功能。

其他一些可能有用的功能,请参阅论文 - qtweet(这是一篇用于识别推文问题的论文)以获取详细信息。

  • 推文是否包含任何 url
  • 推文是否包含任何电子邮件或电话号码
  • 是否有强烈的感觉,如!以下问题。
  • 推文的上下文中是否存在一元词。
  • 推文是否提及其他用户的姓名
  • 推文是否为转推
  • 推文是否包含任何标签#

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

希望他们有所帮助。

于 2013-01-15T09:13:52.600 回答
1

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

于 2013-01-15T20:30:58.393 回答