Поиск по сайту:

Обучение Unigram Tagger НЛП


Введение

Отдельный токен называется униграммой. Тегер униграммы — это тип тегера, которому требуется только одно слово для определения частей речи слова. Он имеет контекст одного слова. Библиотека NLTK предоставляет нам UnigramTagger и унаследована от NgramTagger.

В этой статье мы разберемся с процессом обучения Unigram Tagger в НЛП.

Unigram Tagger и его обучение с использованием NLTK

РАБОТАЮЩИЙ

  • UnigramTagger унаследован от ContextTagger. Реализован метод context(). Метод контекста имеет те же аргументы, что и метод Choose_tag().

  • Из метода context() для создания модели будет использоваться токен слова. Это слово используется для поиска лучшего тега.

  • UnigramTagger создаст модель с контекстом.

Реализация Python

import nltk
nltk.download('treebank')
from nltk.tag import UnigramTagger
from nltk.corpus import treebank as tb
sentences_trained = treebank.tagged_sents()[:4000]
uni_tagger = UnigramTagger(sentences_trained)
print("Sample Sentence : ",tb.sents()[1])
print("Tag sample sentence : ", uni_tagger.tag(tb.sents()[1]))

Выход

Sample Sentence :  ['Mr.', 'Vinken', 'is', 'chairman', 'of', 'Elsevier', 'N.V.', ',', 'the', 'Dutch', 'publishing', 'group', '.']
Tag sample sentence :  [('Mr.', 'NNP'), ('Vinken', 'NNP'), ('is', 'VBZ'), ('chairman', 'NN'), ('of', 'IN'), ('Elsevier', 'NNP'), ('N.V.', 'NNP'), (',', ','), ('the', 'DT'), ('Dutch', 'JJ'), ('publishing', 'NN'), ('group', 'NN'), ('.', '.')] 

В приведенном выше примере кода первый Unigram Tagger обучается на первых 4000 предложениях из Treebank. После обучения предложения они помечаются одним и тем же тегом для любого из предложений. В приведенном выше примере кода используется предложение 1.

Приведенный ниже пример кода можно использовать для тестирования и оценки Unigram Tagger.

from nltk.corpus import treebank as tb
sentences_trained = treebank.tagged_sents()[:4000]
uni_tagger = UnigramTagger(sentences_trained)
sent_tested = treebank.tagged_sents()[3000:]
print("Test score : ",uni_tagger.evaluate(sent_tested))

Выход

Test score :  0.96

В приведенном выше примере кода тегировщик униграмм обучается и обрабатывает 4000 предложений, а затем оценивается на последних 1000 предложениях.

Методы сглаживания

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

Виды сглаживания

Сглаживание по Лапласу

Это также известно как сглаживание «добавь 1 на единицу», когда мы добавляем 1 к количеству слов в знаменателе, чтобы не возникало 0-значение или условие деления на 0.

Например,

Problaplace (wi | w(i-1)) = (count(wi w(i-1)) +1 ) / (count(w(i-1)) + N)
N = total words in the training corpus
Prob("He likes coffee")
= Prob( I | <S>)* Prob( likes | I)* Prob( coffee | likes)* Prob(<E> | coffee)
= ((1+1) / (4+6))   *  ((1+1) / (1+8))  *  ((0+1) / (1+5))  *  ((1+1) / (4+8))
= 0.00123

Откат и интерполяция

Он включает в себя два шага

Откатить процесс

  • Начнем с n-граммы,

  • Мы проверяем n-1 грамм, если наблюдений недостаточно.

  • Если у нас достаточно наблюдений, мы используем n-2 грамма.

Процесс интерполяции

  • Мы используем объединение различных моделей n-грамм.

Например, рассматривая предложение, в котором он пошел xxx, мы можем сказать, что триграмма, к которой он пошел, произошла один раз, вероятность слова, к которому он пошел, равна 1, если слово предназначено, и равна 0 для всех остальных слов.

Заключение

UnigramTagger — это полезный инструмент NLTK для обучения тегера, который может использовать всего одно слово в качестве контекста для определения частей речи предложения. UnigramTagger доступен в наборе инструментов NLTK, который использует Ngarm Tagger в качестве родительского класса.

Статьи по данной тематике: