【发布时间】:2017-04-19 10:35:07
【问题描述】:
我正在尝试使用 Python 的 NLTK 进行一些答案类型分类。基本上是在一堆问题上训练它,然后给出一些看不见的问题。
我遇到的问题是,几乎只是将任何问题归类为最常见的答案类型。因此,如果有 200 个问题被标记为“人”,150 个问题被标记为“地点”,那么每个测试问题都被标记为答案类型为“人”。
我知道平衡数据更好,但这似乎是一个非常严格的限制(考虑到我正在使用的测试数据量,这也是不可行的)。我使用的训练数据是这组 5500 个问题:
http://cogcomp.cs.illinois.edu/Data/QA/QC/train_5500.label
这是我的 Python 代码:
import nltk
train = []
with open('data.txt') as f:
content = f.readlines()
for c in content:
parts = c.split(' ', 1)
train.append((dict(q=parts[1].rstrip()), parts[0]))
test = [
(dict(q='When was the congress of Vienna?')),
(dict(q='What is the capital of Australia?')),
(dict(q='Why doesn\'t this classifier work?'))
]
classifier = nltk.classify.NaiveBayesClassifier.train(train)
print classifier.classify_many(test)
它将所有 3 个测试问题分配给“HUM:ind”类,这是训练集中最常见的问题。如果我减少这些 HUM:ind 问题的数量,它就会开始说它是下一个最受欢迎的问题。只需要几个有差异的问题,该答案类型就会压倒所有其他问题。
我错过了什么吗?我没有使用正确的算法吗?考虑到我的训练数据的格式,我应该更改一些参数吗?我的示例与我在网上看到的几个示例非常相似。任何帮助表示赞赏
【问题讨论】:
-
这是#homework 吗?
-
不,这是为了工作
-
我建议跳过
nltk,直接转到sklearn。
标签: python class types classification nltk