Unigram теги в НЛТК - PullRequest
       57

Unigram теги в НЛТК

1 голос
/ 03 марта 2020

Используя NLTK Unigram Tagger, я тренирую предложения в Brown Corpus

Я пробую разные categories и получаю примерно одинаковое значение. Значение составляет около 0.9328 ... для каждого categories, например fiction, romance или humor

from nltk.corpus import brown


# Fiction    
brown_tagged_sents = brown.tagged_sents(categories='fiction')
brown_sents = brown.sents(categories='fiction')
unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
unigram_tagger.evaluate(brown_tagged_sents)
>>> 0.9415956079897209

# Romance
brown_tagged_sents = brown.tagged_sents(categories='romance')
brown_sents = brown.sents(categories='romance')
unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
unigram_tagger.evaluate(brown_tagged_sents)
>>> 0.9348490474422324

Почему это так? это потому что они из одного corpus? или их теги part-of-speech одинаковы?

1 Ответ

1 голос
/ 03 марта 2020

Похоже, вы тренируетесь, а затем оцениваете обученных UnigramTagger по тем же данным обучения. Взгляните на документацию nltk.tag и, в частности, part об оценке.

С вашим кодом вы получите высокий балл, что вполне очевидно, потому что Ваши данные о тренировках и данные оценки / тестирования совпадают. Если вы измените это, если данные тестирования отличаются от данных обучения, вы получите другие результаты. Ниже приведены мои примеры:

Категория: Художественная литература

Здесь я использовал тренировочный набор как brown.tagged_sents(categories='fiction')[:500], а тест / оценка - brown.tagged_sents(categories='fiction')[501:600]

from nltk.corpus import brown
import nltk

# Fiction    
brown_tagged_sents = brown.tagged_sents(categories='fiction')[:500]
brown_sents = brown.sents(categories='fiction') # not sure what this line is doing here
unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
unigram_tagger.evaluate(brown.tagged_sents(categories='fiction')[501:600])

Это дает вам ~ 0,7474610697359513

Категория: Романтика

Здесь я использовал тренировочный набор как brown.tagged_sents(categories='romance')[:500] и тест / оценка установлена ​​как brown.tagged_sents(categories='romance')[501:600]

from nltk.corpus import brown
import nltk

# Romance
brown_tagged_sents = brown.tagged_sents(categories='romance')[:500]
brown_sents = brown.sents(categories='romance') # not sure what this line is doing here
unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
unigram_tagger.evaluate(brown.tagged_sents(categories='romance')[501:600])

Это дает вам оценку ~ 0,7046799354491662

Я надеюсь, что это поможет и ответит на ваш вопрос.

...