我通过使用正则表达式从Twitter的流中收集了一批问题,挑选出任何包含以问题类型开头(如:谁,什么,何时,何地等)并以问号结尾的文本的推文。
因此,我的数据库中最终包含了一些无用的问题,如:“谁在乎?”,“这是什么?”等,也有一些有用的问题,如:“篮球斗殴有多频繁?”,“北极熊有多重?”等
然而,我只对有用的问题感兴趣。
我收集了大约3000个问题,其中大约2000个无用,大约1000个有用,我已经手动标记了这些问题。我试图使用NLTK自带的朴素贝叶斯分类器来自动分类问题,这样我就不必手动挑选出有用的问题。
作为开始,我尝试选择问题的前三个词作为特征,但这并没有多大帮助。在100个问题中,分类器预测只有大约10%-15%是有用的问题是正确的。它也未能从那些被预测为无用的问题中挑选出有用的问题。
我还尝试了其他特征,例如:包括所有词,问题长度等,但结果没有显著变化。
关于如何选择特征或继续进行的任何建议?
谢谢。
回答:
一些随机建议。
添加一个预处理步骤,去除像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)
这个可能会有帮助。
尝试为你的分类器添加以下特征
- 平均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和逻辑回归。其中随机森林表现最佳。
希望这些对你有帮助。