NLP |三元组标签(TnT)标记

原文:https://www . geesforgeks . org/NLP-trigramsntags-TNT-taging/

TnT Tagger : 它是一个在二阶马尔可夫模型上工作的统计 Tagger。

  • 它是一个非常高效的词性标注器,可以在不同的语言和任何标注集上进行训练。
  • 对于参数生成,组件在标记的语料库上训练。它结合了不同的平滑和处理未知单词的方法
  • 线性插值用于平滑,相应的权重由删除的插值确定。

TnT 标记器与普通标记器有不同的 API。可以在创建 train()方法后显式使用它。

代码#1:使用列车()方法

from nltk.tag import tnt
from nltk.corpus import treebank

# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]

# initializing tagger
tnt_tagging = tnt.TnT()

# training
tnt_tagging.train(train_data)

# evaluating
a = tnt_tagging.evaluate(test_data)

print ("Accuracy of TnT Tagging : ", a)

输出:

Accuracy of TnT Tagging : 0.8756313403842003

了解 TnT tagger 的工作情况:

  • 它保持了
    • 内部频率分布
    • ConditionalFreqDist,它基于训练数据。
  • 频率分布(FreqDist)计算单项式、二元式和三元式。
  • 这些频率用于计算每个单词的可能标签的概率。
  • TnT tagger 将所有 ngram 模型一起使用来选择最佳标签,而不是构建 NgramTagger 子类的退避链。
  • 基于每个可能标签的概率,它为整个句子选择最可能的模型。

代码#2:对未知单词使用 tagger 作为‘unk’

from nltk.tag import tnt
from nltk.corpus import treebank
from nltk.tag import DefaultTagger

# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]

# initializing tagger
unk = DefaultTagger('NN')
tnt_tagging = tnt.TnT(unk = unk, Trained = True)

# training 
tnt_tagging.train(train_data)

# evaluating
a = tnt_tagging.evaluate(test_data)

print ("Accuracy of TnT Tagging : ", a)

输出:

Accuracy of TnT Tagging : 0.892467083962875
  • unknown tagger 的 tag()方法仅用单个单词句子调用。
  • TnT tagger 可以将未知单词的 tagger 作为 unk 传入。
  • 如果这个标记已经被训练过了,你可以通过训练=真。
  • 否则,它将调用 unk.train(数据),其数据与传递给 train()方法的数据相同。

控制波束搜索:

  • 要为 TnT 修改的另一个参数是 N ,即它控制标记器维护的可能解决方案的数量。
  • 默认情况下,N = 1000。
  • 如果增加 N 的值,内存量会增加,但精度不会有任何具体的增加。
  • 如果减少 N 的值,内存量会减少,但会降低精度。

代码#3:使用 N = 100

from nltk.tag import tnt
from nltk.corpus import treebank
from nltk.tag import DefaultTagger

# initializing training and testing set    
train_data = treebank.tagged_sents()[:3000]
test_data = treebank.tagged_sents()[3000:]

# initializing tagger
tnt_tagger = tnt.TnT(N = 100)

# training 
tnt_tagging.train(train_data)

# evaluating
a = tnt_tagging.evaluate(test_data)

print ("Accuracy of TnT Tagging : ", a)

输出:

Accuracy of TnT Tagging : 0.8756313403842003