Изменения

Перейти к: навигация, поиск

Обработка естественного языка

61 байт убрано, 20:53, 14 января 2021
Частеречная разметка
Алгоритмы частеречной разметки делятся на несколько групп:
* ''Стохастический метод''. Такой метод имеет два похожих друг на друга подхода. Первый подход основывается на частоте встречаемости слова с конкретным тэгом: если определенное слово встречается чаще всего с тэгом "существительное", то скорее всего и сейчас оно будет иметь такой тэг. Второй вариант использует n-граммы {{---}} анализируя входную последовательность, алгоритм высчитывает вероятность, что в данном контексте будет определенный тэг. В конце просчета вероятностей выбирается тэг, который имеет наибольшую вероятность. TextBlob<ref>[https://textblob.readthedocs.io/en/dev/ TextBlob]</ref> библиотека для Python в своей основе использует стохастический метод.
* ''Основанные на правилах''. Метод основан на заранее известных правилах. Алгоритм состоит из двух стадий. Сначала расставляются потенциальные тэги всем словам на основе словаря или по какому-либо другому принципу. Далее, если у какого-нибудь слова оказалось несколько тэгов, правильный тэг выбирается на основе рукописных правил. Правил должно быть много, чтобы решить все возникшие неопределенности и учесть все случаи. Например, правило: слова длиной меньше трех символов являются частицами, местоимениями или предлогами. Однако такое правило не учитывает некоторые короткие слова из других частей речи. В библиотеке NLTK <ref>[https://www.nltk.org/ NLTK]</ref> используется данный метод.* ''С использованием [[Скрытые Марковские модели|скрытой марковской модели]]''. Пусть в нашей Марковской модели ''тэги'' будут '''скрытыми состояниями''', которые производят '''наблюдаемое событие''' {{---}} ''слова''. С математической точки зрения, мы хотим найти такую ''последовательность тэгов (C)'', которая будет максимизировать условную вероятность <tex>P(C|W)</tex>, где <tex>C = C_1, C_2, \dots C_T</tex> и <tex>W = W_1, W_2, \dots W_T</tex>. Воспользовавшись формулой Байеса получим, что максимизировать необходимо следующее выражение: <tex>p(C_1, C_2, \dots C_T) \cdot p(W_1, W_2, \dots W_T | C_1, C_2, \dots C_T)</tex>. Библиотека spaCy <ref>[https://spacy.io/ spaCy]</ref> основана на скрытой марковской модели.
POS-тэгирование является неотъемлемой частью обработки естественного языка. Без частеречной разметки становится невозможным дальнейший анализ текста из-за возникновения неопределенностей в значениях слов. Данный алгоритм используется при решении таких задач как перевод на другой язык, определение смысла текста, проверка на пунктуационные и речевые ошибки. Также можно автоматизировать процесс определения хештегов у постов и статей, выделяя существительные в приведенном тексте.
Благодаря частому использованию POS-тэгирования на практике, существует много встроенных библиотек с готовыми реализациями. Например, NLTK<ref>[https://www.nltk.org/ NLTK]</ref>, scikit-learn<ref>[https://scikit-learn.org scikit-learn]</ref>, spaCy<ref>[https://spacy.io/ spaCy]</ref>, TextBlob<ref>[https://textblob.readthedocs.io/en/dev/ TextBlob]</ref> и другие. Примеры использования некоторых библиотек:
* TextBlob (''стохастический метод''):
from textblob import TextBlob
101
правка

Навигация