2.使用本章所述的3种分类器之一,以及你能想到的任何特征。尽可能好地建立一个名字性别分类器。从将名字语料库分成3个子集开始:500个词为测试集,500个词为开发测试集,剩余6900个词为训练集。然后从示例的名字性别分类器开始,逐步改善。使用开发测试集检查你的进展。一旦对分类器感到满意,在测试集上检查它的最终性能。相比在开发测试集上的性能,它在测试集上的性能如何?这是你期待的吗?
import nltkfrom nltk.corpus import namesimport randomnames=[(name,'male') for name in names.words('male.txt'), (name,'female') for name in names.word('female.txt')] #已经分好类的数据集 random.shuffle(names) #随机排列元素 def gender_features(word): return {'lastword':word[-1]} #函数:对数据进行处理test_names=names[:500] #测试集原始数据devtest_names=names[500:1000] #开发测试集原始数据train_names=names[1000:] #训练集原始数据
test_set=[(gender_features(n),g) for (n,g) in test_names] #测试集dev_test=[(gender_features(n),g) for (n,g) in devtest_names] #开发测试集train_set=[(gender_featutes(n),g) for (n,g) in train_names] #训练集classifier=nltk.NaiveBayesClassifier.train(train_set) #训练贝叶斯分类器classifier.classify(gender_features('Neo')) #测试分类器print nltk.classify.accuracy(classifier,devtest_set #1.0 测试评估print nltk.classify.accuracy(classifier,test_set) #1.0 测试评估
3.Senseval2语料库包含了旨在训练词-词义消歧分类器的数据。它包含4个词的数据:hard,interest,line和serve。选择这4个词中的一个,加载相应的数据。
from nltk.corpus import senseval
instances=senseval.instances('hard.pos')
size=int(len(instances)*0.1)
tarin_set,test_set=instances[size:],instances[:size]
使用这个数据集建立一个分类器,使其能正确预测出一个给定实例的词意标签。
4.