选择特征以识别Twitter问题是否“有用”

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

因此,我的数据库中最终包含了一些无用的问题,如:“谁在乎?”,“这是什么?”等,也有一些有用的问题,如:“篮球斗殴有多频繁?”,“北极熊有多重?”等

然而,我只对有用的问题感兴趣。

我收集了大约3000个问题,其中大约2000个无用,大约1000个有用,我已经手动标记了这些问题。我试图使用NLTK自带的朴素贝叶斯分类器来自动分类问题,这样我就不必手动挑选出有用的问题。

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

我还尝试了其他特征,例如:包括所有词,问题长度等,但结果没有显著变化。

关于如何选择特征或继续进行的任何建议?

谢谢。


回答:

一些随机建议。

添加一个预处理步骤,去除像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)

这个可能会有帮助。

尝试为你的分类器添加以下特征

  • 平均tf-idf分数
  • 中位tf-idf分数
  • 最大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标签相关的其他特征可以尝试。

其他可能有用的特征,请查看论文 – qtweet(这是一篇关于推文问题识别的论文)以获取详细信息。

  • 推文是否包含任何URL
  • 推文是否包含任何电子邮件或电话号码
  • 问题后是否有强烈的感情表达如!
  • 推文上下文中是否存在单字词
  • 推文是否提及其他用户的名字
  • 推文是否为转发
  • 推文是否包含任何标签#

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

希望这些对你有帮助。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注