gpt4 book ai didi

nlp - 如何以编程方式确定单词的词性标签?

转载 作者:行者123 更新时间:2023-12-01 23:14:11 25 4
gpt4 key购买 nike

一直想知道如何准确判断一个词的词性标记。我使用了斯坦福 NLP 等词性标注器,但它们时好时坏,因为像“respond”这样的词有时在动词 (VB) 时被标记为 NN(名词)。

查询 wordnet 或字典转储会更准确吗?例如“respond”这个词是一个动词,也可以是一个名词。或者也许从 ngram 推断或添加基于频率的健全性检查?

最佳答案

词性标注器传统上基于语料库中单词的概率分布。因此,将用例扩展到新的文本体通常会产生更高的错误率,因为单词的分布不同。

其他模型并不是严格意义上的概率分布,例如神经网络,需要进行训练,但两者的逻辑相同。

例如,如果我使用 Hamlet 中的标记句子为 Shakespeare 文本制作 POS 标记器来定义我的概率分布,然后尝试对 Biomedical 进行 POS 标记 文本,它可能不会表现良好。

因此,为了提高准确性,您应该使用与您的特定域类似的文本正文进行训练。

NLTK 中当前性能最好的词性标注器是 Perceptron Tagger,它是默认设置并使用预先训练的模型。以下是您如何训练自己的模型以提高准确性。

import nltk,math
# get data to train and test
tagged_sentences = [sentence for sentence in nltk.corpus.brown.tagged_sents(categories='news',tagset='universal')]
# hold out 20% for testing, get index for 20% split
split_idx = math.floor(len(tagged_sentences)*0.2)
# testing sentences are words only, list(list(word))
testing_sentences = [[word for word,_ in test_sent] for test_sent in tagged_sentences[0:split_idx]]
# training sentences words and tags, list(list(word,tag))
training_sentences = tagged_sentences[split_idx:]
# create instance of perceptron POS tagger
perceptron_tagger = nltk.tag.perceptron.PerceptronTagger(load=False)
perceptron_tagger.train(training_sentences)
pos_tagged_sentences = [perceptron_tagger.tag([word for word,_ in test_sentence]) for test_sentence in testing_sentences]

perceptron_tagger.train()完成training_sentences后,您可以使用perceptron_tagger.tag()来获取pos_tagged_sentences 这对您的域更有用并且产生更高的准确性。

如果做得正确,它们将产生高精度的结果。来自 my basic tests ,他们显示以下结果:

Metrics for <nltk.tag.perceptron.PerceptronTagger object at 0x7f34904d1748>
Accuracy : 0.965636914654
Precision: 0.965271747376
Recall : 0.965636914654
F1-Score : 0.965368188021

关于nlp - 如何以编程方式确定单词的词性标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40860220/

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