自然语言处理 |基于分类器的标记
ClassifierBasedPOSTagger 类:
- 它是 ClassifierBasedTagger 的子类,使用分类技术进行词性标注。
- 从单词中提取特征,然后传递给内部分类器。
- 它对特征进行分类并返回一个标签,即词性标签。
- 特征检测器找到多个长度后缀,进行一些正则表达式匹配,并查看一元、二元和三元的历史,从而为每个单词生成一组相当完整的特征
代码 #1:使用 ClassifierBasedPOSTagger
from nltk.tag.sequential import ClassifierBasedPOSTagger
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
tagging = ClassifierBasedPOSTagger(train = train_data)
a = tagging.evaluate(test_data)
print ("Accuracy : ", a)
输出 :
Accuracy : 0.9309734513274336
ClassifierBasedPOSTagger 类继承自 ClassifierBasedTagger 并且只实现了一个 feature_detector() 方法。所有的训练和标记都是在 ClassifierBasedTagger 中完成的。
代码 #2:使用 MaxentClassifier
from nltk.classify import MaxentClassifier
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
tagger = ClassifierBasedPOSTagger(
train = train_sents, classifier_builder = MaxentClassifier.train)
a = tagger.evaluate(test_data)
print ("Accuracy : ", a)
输出 :
Accuracy : 0.9258363911072739
自定义特征检测器检测特征
有两种方法可以做到:
- 子类 ClassifierBasedTagger 并实现 feature_detector() 方法。
- 在初始化时将函数作为 feature_detector 关键字参数传递给 ClassifierBasedTagger。
代码#3:自定义特征检测器
from nltk.tag.sequential import ClassifierBasedTagger
from tag_util import unigram_feature_detector
from nltk.corpus import treebank
# initializing training and testing set
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]
tag = ClassifierBasedTagger(
train = train_data,
feature_detector = unigram_feature_detector)
a = tagger.evaluate(test_data)
print ("Accuracy : ", a)
输出 :
Accuracy : 0.8733865745737104