📜  自然语言处理 |基于分类器的标记

📅  最后修改于: 2022-05-13 01:54:47.246000             🧑  作者: Mango

自然语言处理 |基于分类器的标记

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

自定义特征检测器检测特征
有两种方法可以做到:

  1. 子类 ClassifierBasedTagger 并实现 feature_detector() 方法。
  2. 在初始化时将函数作为 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