私はPythonのNLTKを使用して、ある種の回答タイプの分類をしようとしています。本質的には、質問の束にそれを訓練し、次にいくつかの目に見えない質問をする。Naive Bayesian Classification(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)
それはテストの質問「HUMのすべての3を割り当てます。 ind 'クラスであり、トレーニングセットの中で最も一般的な質問です。私がこれらのHUM:ind質問の数を減らすと、それは次にそれが次の最も人気があると言うことに始まります。答えのタイプが他のすべてのものを圧倒する前に、矛盾の質問が2つしかない。
何か不足していますか?アルゴリズムを正しく使用していませんか?私のトレーニングデータのフォーマットが変わった場合、いくつかのパラメータがありますか?私の例は、私がオンラインで見たいくつかの例にかなり似ています。何か助けていただきありがとうございます
こちらは#homeworkですか? – alvas
nah、それは仕事のためです – Jayce444
私は 'nltk'をスキップし、' sklearn'に直接行くことを提案します。 – alvas