NLTK Naive Bayes分類器を使用して、arXiv.orgでどの記事が好きかを推測しようとしていますが、実際、約500の記事タイトルから85%を超える精度が得られました。残念ながら、私はそれがすべての記事を「悪い」として分類しているだけだと気づきました
明るい面では、それは私にある種の意味のある有益な機能のリストを与えてくれます。私はこのサイトhttps://stackoverflow.com/search?q=nltk+naive+bayesで検索し、NLTKの本と別のチュートリアル(どちらもNLTK自身のファイルからの映画レビューを扱っています)を見ました。
この分類器のトレーニング方法に明らかに問題がありますか?うまくいけば、下のコードスニペットで十分です。ナイーブベイズに対して正しいすべてのタイトルを拒否することは可能ですか?
def title_words(doc, vocab):
""" features for document classifier"""
words = set([x.lower() for x in doc[0].replace(". ", " ").split(' ')])
features = dict([( 'contains(%s)' % word , (word in words)) for word in vocab] )
return features
def(classify)
# get articles from database
conn = sqlite3.connect('arxiv.db')
c = conn.cursor()
# each row in the database is a 3-tuple: (title, abstract, tag)
articles = c.execute("select * from arXiv").fetchall()
# build vocabulary list
for the in articles:
vocab = vocab | set([x.lower() for x in the[0].split(' ')])
# get feature dictionary from title
titles = [(title_words(x, vocab),x[2]) for x in articles]
n = len(titles)/2
train_set, test_set = titles[:n], titles[n:]
classifier = nltk.NaiveBayesClassifier.train(train_set)
print nltk.classify.accuracy(classifier, test_set)
classifier.show_most_informative_features(20)
conn.close()
機能の数が2000前後の場合、問題はありますか?「the」や「because」などの一般的な単語は、「興味深い」と「退屈な」を区別することはほとんどありません。代わりに、さまざまな組み合わせの専門用語を探していると思います。そのため、分類子が、どの専門用語が私に読んでもらうかを選択してくれることを期待していました...