Natural Language Toolkit-유니 그램 태거

Unigram Tagger는 무엇입니까?

이름에서 알 수 있듯이 유니 그램 태거는 POS (Part-of-Speech) 태그를 결정하는 컨텍스트로 한 단어 만 사용하는 태거입니다. 간단히 말해서 Unigram Tagger는 컨텍스트가 단일 단어 인 Unigram 인 컨텍스트 기반 태거입니다.

어떻게 작동합니까?

NLTK는 UnigramTagger이 목적을 위해. 그러나 그 작업에 깊이 들어가기 전에 다음 다이어그램의 도움으로 계층 구조를 이해합시다.

위의 다이어그램에서 UnigramTagger 물려받은 NgramTagger 의 하위 클래스입니다 ContextTagger, 상속 SequentialBackoffTagger.

작업 UnigramTagger 다음 단계의 도움으로 설명됩니다-

  • 우리가 보았 듯이 UnigramTagger 상속 ContextTagger, 그것은 context()방법. 이context() 메소드는 다음과 같은 세 개의 인수를 사용합니다. choose_tag() 방법.

  • 결과 context()method는 모델을 만드는 데 더 많이 사용되는 단어 토큰입니다. 모델이 생성되면 토큰이라는 단어도 최고의 태그를 찾는 데 사용됩니다.

  • 이런 식으로, UnigramTagger 태그가 지정된 문장 목록에서 컨텍스트 모델을 구축합니다.

유니 그램 태거 훈련

NLTK UnigramTagger초기화시 태그 된 문장 목록을 제공하여 학습 할 수 있습니다. 아래 예에서는 treebank 말뭉치의 태그가 지정된 문장을 사용합니다. 우리는 그 말뭉치에서 처음 2500 개의 문장을 사용할 것입니다.

먼저 nltk에서 UniframTagger 모듈을 가져옵니다.

from nltk.tag import UnigramTagger

다음으로 사용할 말뭉치를 가져옵니다. 여기서 우리는 treebank 말뭉치를 사용하고 있습니다-

from nltk.corpus import treebank

이제 훈련 목적으로 문장을 가져 가십시오. 우리는 훈련 목적으로 처음 2500 문장을 취하고 태그를 붙일 것입니다.

train_sentences = treebank.tagged_sents()[:2500]

다음으로 훈련 목적으로 사용되는 문장에 UnigramTagger를 적용합니다.

Uni_tagger = UnigramTagger(train_sentences)

훈련 목적 즉, 테스트 목적을 위해 2500과 같거나 더 적은 문장을 가져옵니다. 여기서 우리는 테스트 목적으로 처음 1500 개를 사용합니다.

test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sents)

산출

0.8942306156033808

여기서 POS 태그를 결정하기 위해 단일 단어 조회를 사용하는 태거의 정확도는 약 89 %입니다.

완전한 구현 예

from nltk.tag import UnigramTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Uni_tagger = UnigramTagger(train_sentences)
test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sentences)

산출

0.8942306156033808

컨텍스트 모델 재정의

위의 다이어그램에서 UnigramTagger, 우리는 ContextTagger은 자체적으로 학습하는 대신 미리 빌드 된 모델을 사용할 수 있습니다. 이 사전 빌드 된 모델은 단순히 컨텍스트 키를 태그에 매핑하는 Python 사전입니다. 그리고UnigramTagger, 컨텍스트 키는 개별 단어이고 기타 NgramTagger 서브 클래스의 경우 튜플이됩니다.

다른 간단한 모델을 전달하여이 컨텍스트 모델을 재정의 할 수 있습니다. UnigramTagger교육 세트를 통과하는 대신 수업. 아래의 쉬운 예를 통해 이해합시다.

from nltk.tag import UnigramTagger
from nltk.corpus import treebank
Override_tagger = UnigramTagger(model = {‘Vinken’ : ‘NN’})
Override_tagger.tag(treebank.sents()[0])

산출

[
   ('Pierre', None),
   ('Vinken', 'NN'),
   (',', None),
   ('61', None),
   ('years', None),
   ('old', None),
   (',', None),
   ('will', None),
   ('join', None),
   ('the', None),
   ('board', None),
   ('as', None),
   ('a', None),
   ('nonexecutive', None),
   ('director', None),
   ('Nov.', None),
   ('29', None),
   ('.', None)
]

우리 모델에는 'Vinken'이 유일한 컨텍스트 키로 포함되어 있으므로 위의 출력에서이 단어에만 태그가 있고 다른 모든 단어에는 태그로 None이 있음을 확인할 수 있습니다.

최소 주파수 임계 값 설정

주어진 컨텍스트에 대해 가장 가능성이 높은 태그를 결정하려면 ContextTagger클래스는 발생 빈도를 사용합니다. 컨텍스트 단어와 태그가 한 번만 발생하더라도 기본적으로 수행되지만, 다음을 전달하여 최소 빈도 임계 값을 설정할 수 있습니다.cutoff 가치 UnigramTagger수업. 아래 예에서는 UnigramTagger를 학습 한 이전 레시피의 컷오프 값을 전달합니다.

from nltk.tag import UnigramTagger
from nltk.corpus import treebank
train_sentences = treebank.tagged_sents()[:2500]
Uni_tagger = UnigramTagger(train_sentences, cutoff = 4)
test_sentences = treebank.tagged_sents()[1500:]
Uni_tagger.evaluate(test_sentences)

산출

0.7357651629613641