Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichni_vkazivki.doc
Скачиваний:
13
Добавлен:
21.02.2016
Размер:
951.3 Кб
Скачать

Практична робота №5. Використання n-грамів в автоматичному морфологічному аналізі

5.1.Уніграм аналізатор

Уніграм аналізатор (Unigramtaggers) реалізовує простий статистичний алгоритм маркування слів. Кожному слову (tokens) ставиться у відповідність тег, який є найбільш імовірний для цього слова. Наприклад, згідно цього алгоритму тегjjбуде поставлений у відповідність до кожного словаfrequentв тексті, оскільки це слово частіше використовується, як прикметник (afrequentword) і рідко, як дієслово (Ifrequentthislecture).

Перед використанням уніграм аналізатора для аналізу тексту потрібно провести його тренування (навчання) на розміченому корпусі текстів. Аналізатор використовує корпус для визначення тегів, які властиві кожному слову. В наступному прикладі, здійснюється ініціалізація і тренування аналізатора #1. При створенні (ініціалізації) аналізатора промарковані речення вказуються, як параметр аналізатора, що і забезпечує тренування аналізатора. Процес тренування полягає в перегляді тегів кожного зі слів і збереження найбільш імовірних тегів (тегів, які найчастіше зустрічаються з кожним зі слів) у словнику, який зберігається в аналізаторі. Далі застосовується даний аналізатор для попередньо визначеного тексту і проводиться аналіз точності роботи створеного аналізатора:

 

>>> from nltk.corpus import brown

>>> brown_tagged_sents = brown.tagged_sents(categories='news')

>>> brown_sents = brown.sents(categories='news')

>>> unigram_tagger = nltk.UnigramTagger(brown_tagged_sents) #1

>>> unigram_tagger.tag(brown_sents[2007])

[('Various', 'JJ'), ('of', 'IN'), ('the', 'AT'), ('apartments', 'NNS'),

('are', 'BER'), ('of', 'IN'), ('the', 'AT'), ('terrace', 'NN'), ('type', 'NN'), (',', ','), ('being', 'BEG'), ('on', 'IN'), ('the', 'AT'), ('ground', 'NN'), ('floor', 'NN'), ('so', 'QL'), ('that', 'CS'), ('entrance', 'NN'), ('is', 'BEZ'), ('direct', 'JJ'), ('.', '.')]

>>> unigram_tagger.evaluate(brown_tagged_sents)

0.9349006503968017

Уніграм аналізатор ставить тегNone всім словам, які не зустрічаються в текстах на основі яких тренувався аналізатор.

5.2. Розділення даних для тренування та тестування аналізаторів

Оскільки, для створення аналізатора необхідно здійснювати його тренування на певних даних, то тестувати аналізатор та оцінювати точність його роботи потрібно на інших даних. Для отримання реальної точності роботи аналізатора дані для тренування та тестування не повинні бути одними і тими ж, як в останньому прикладі. Оцінюючи точність аналізатора на даних, які використовувались для його тренування будуть отримані високі результати, які не відповідають дійсності. Пререважно дані діляться у співідношенні 90% для тренування і10%для тестування:

 

>>> size = int(len(brown_tagged_sents) * 0.9)

>>> size

4160

>>> train_sents = brown_tagged_sents[:size]

>>> test_sents = brown_tagged_sents[size:]

>>> unigram_tagger = nltk.UnigramTagger(train_sents)

>>> unigram_tagger.evaluate(test_sents)

0.81202033290142528

Точність аналізу є нижча, але вона краще характеризує роботу аналізатора при маркуванні довільного тексту.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]