gpt4 book ai didi

python - 如何在NLTK中调用ClassifierBasedTagger()

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:02 26 4
gpt4 key购买 nike

我遵循 nltk 书中的文档(第 6 章和第 7 章)以及其他想法来训练我自己的命名实体识别模型。像这样构建特征函数和 ClassifierBasedTagger 后:

class NamedEntityChunker(ChunkParserI):
def __init__(self, train_sents, feature_detector=features, **kwargs):
assert isinstance(train_sents, Iterable)
tagged_sents = [[((w,t),c) for (w,t,c) in
tree2conlltags(sent)]
for sent in train_sents]

#other possible option: self.feature_detector = features
self.tagger = ClassifierBasedTagger(tagged_sents, feature_detector=feature_detector, **kwargs)

def parse(self, tagged_sent):
chunks = self.tagger.tag(tagged_sent)

iob_triplets = [(w, t, c) for ((w, t), c) in chunks]

# Transform the list of triplets to nltk.Tree format
return conlltags2tree(iob_triplets)

从加载训练和测试数据的另一个脚本调用分类器标记器时遇到问题。我使用训练数据中的一部分来调用分类器以进行测试:

chunker = NamedEntityChunker(training_samples[:500])

无论我在分类器中进行什么更改,我都会收到错误:

   self.tagger = ClassifierBasedTagger(tagged_sents, feature_detector=feature_detector, **kwargs)
TypeError: __init__() got multiple values for argument 'feature_detector'

我在这里做错了什么,我假设功能函数工作正常,并且在调用 NamedEntityChunker() 时不需要传递任何其他内容。

我的第二个问题,有没有办法保存正在训练的模型并在以后重用它,我该如何解决这个问题?这是我的 last question on training data 的后续内容

感谢您的建议

最佳答案

我终于意识到我错过了什么:定义 BasedTagger 时,您必须传递“tagged_sents”参数,如下所示:

#self.tagger = ClassifierBasedTagger(train=train_sents, feature_detector=features, **kwargs) 

现在,当我调用分块器 NamedEntityChunker() 时,一切正常。

关于python - 如何在NLTK中调用ClassifierBasedTagger(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com