POS Tagger традиционно основан на распределении вероятностей слов над корпусом. Поэтому расширение прецедента к новому тексту текста, как правило, приводит к более высоким частотам ошибок, поскольку распределение слов отличается.
Другие модели не являются строго распределением вероятностей, такими как нейронные сети, и их необходимо обучать, но одна и та же логика справедлива для обоих.
Например, если я делаю POS Tagger для Shakespeare
текстов с использованием отмеченных предложениями от Hamlet
определить мое распределение вероятностей, то попробуйте 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
Теггеры PoS проходят обучение по текстам с тегами вручную, поэтому они уже должны иметь представление о том, какие теги идут со словом, и как часто они это делают, и - что важно - какой тег (ы) ему предшествовал. Точность зависит от алгоритма, размера учебного материала и от подобия тренировочного и тестового корпуса (например, с точки зрения жанра и домена). Пометка PoS не идеальна, но если вы получаете действительно плохое качество, тогда может быть неправильная конфигурация (например, различия в токенизации). – lenz