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

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

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

Текстовые данные могут поступать из самых разных источников, таких как всемирная паутина, PDF-файлы, текстовые документы, системы распознавания речи, отсканированные книги, оптические считыватели символов (OCR) и т. д. Наша цель – бесплатное извлечение обычного текста. любой исходной разметки или конструкций, которые не имеют отношения к нашей задаче.

Некоторые особенности языка, такие как пунктуация, использование заглавных букв и общеупотребительные слова, такие как «a», «of» и «the», часто помогают обеспечить структуру документа, но не добавляют многого к смыслу. Поэтому лучше всего удалить их перед анализом текстовых данных и передачей их в наш конвейер обработки естественного языка.

Что такое Стемминг?

Стемминг – это процесс приведения слова к его основе или корневому формату. Возьмем пример. Рассмотрим три слова: «разветвленный», «разветвленный» и «ветви». Все они могут быть сокращены до одного слова «ветвь». В конце концов, все три передают одну и ту же идею чего-то, разделяющегося на множество путей или ветвей. Опять же, это помогает уменьшить сложность, сохраняя суть значения, которое несут эти три слова.

С другой стороны, стемминг должен быть быстрой и грубой операцией, выполняемой с применением очень простых правил стиля поиска и замены.

Другой пример: суффиксы «ing» и «ed» можно опустить, а «ies» заменить на «y». Следуя этим подходам, мы можем получить слова, которые не являются полными словами, но это нормально. Потому что все формы этого слова в корпусе сводятся к одной и той же форме. Таким образом, улавливая общую основную идею.

words = ['first', 'time', 'see', 'second', 'renaissance', 'may', 'look', 'boring', 'look', 'least', 'twice', 'definitely', 'watch', 'part', '2', 'change', 'view', 'matrix', 'human', 'people', 'ones', 'started', 'war', 'ai', 'bad', 'thing']

Кроме того, в NLTK или Natural Language Toolkit есть несколько разных стеммеров, из которых мы можем выбирать, например PorterStemmer, который мы используем здесь, Snowball Stemmer. и другие стеммеры для конкретных языков.





Дополнительную информацию о Porter Stemmer и Snowball Stemmer можно найти по приведенным выше ссылкам. Давайте импортируем сюда PorterStemmer для простой операции извлечения корней.

from nltk.stem.porter import PorterStemmer

Чтобы стеммеры работали, нужно просто передавать по одному слову из корпуса. Обратите внимание, что здесь мы уже удалили из него стоп-слова.

stemmed_words = [PorterStemmer().stem(w) for w in words]
print(stemmed_words)

Запустив этот код, мы получим вывод, похожий на:

['first', 'time', 'see', 'second', 'renaiss', 'may', 'look', 'bore', 'look', 'least', 'twice', 'definit', 'watch', 'part', '2', 'chang', 'view', 'matrix', 'human', 'peopl', 'one', 'start', 'war', 'ai', 'bad', 'thing']

Глядя на результат, мы можем заметить, что некоторые конверсии на самом деле хорошие, например «начало» сокращено до «начало», «люди» потеряли «е» в конце, «единицы» сократились до «единицы». , являются результатом применения очень упрощенных правил.

Введение в лемматизацию

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





Давайте импортируем WordNetLemmatizer и попробуем его на следующем примере! Фактический код и дополнительную информацию о WordNetLemmatizer можно найти в приведенных выше ссылках.

from nltk.stem.wordnet import WordNetLemmatizer
lemmed_words = [WordNetLemmatizer().lemmatize(w) for w in words]
print(lemmed_words)

Лемматизатор по умолчанию в NLTK использует базу данных wordnet для сопоставления слов с их корневой формой. Теперь давайте посмотрим на результат шага лемматизации.

['first', 'time', 'see', 'second', 'renaissance', 'may', 'look', 'boring', 'look', 'least', 'twice', 'definitely', 'watch', 'part', '2', 'change', 'view', 'matrix', 'human', 'people', 'one', 'started', 'war', 'ai', 'bad', 'thing']

Кажется, только слово ones сократилось до one, а все остальные слова не изменились. Если мы внимательно посмотрим на ввод, мы увидим, что «ones» — единственное существительное во множественном числе. Собственно, именно поэтому он и преобразился!

Лемматизация с PoS

Лемматизатор должен знать или делать предположения о части речи для каждого слова, которое он пытается преобразовать обратно в корневую форму. В этом случае WordNetLemmatizer по умолчанию использует значение Существительные, но мы можем изменить и это! Мы можем переопределить это, указав параметр «pos». Давайте передадим «v» для глаголов.

lemmed = [WordNetLemmatizer().lemmatize(w, pos=’v’) for w in words]
print(lemmed)

Давайте проанализируем результат шага лемматизации после установки параметра «pos» для глаголов, т. е. pos='v'.

['first', 'time', 'see', 'second', 'renaissance', 'may', 'look', 'bore', 'look', 'least', 'twice', 'definitely', 'watch', 'part', '2', 'change', 'view', 'matrix', 'human', 'people', 'ones', 'start', 'war', 'ai', 'bad', 'thing']

На этот раз две глагольные формы «скучно» и «начали» были преобразованы.

Здорово! Обратите внимание, что есть и другие глаголы, но они уже в корневой форме. Также обратите внимание, как мы передали выходные данные предыдущего шага лемматизации существительного. Это очень распространенный способ объединения процедур в конвейере обработки и очистки текста.

Вывод

Как мы видели в предыдущих примерах, в результате объединения иногда получаются основы, которые не являются полными словами на английском языке. Но это не имеет значения, потому что все слова приведены к одному и тому же формату.

Лемматизация аналогична корневой системе с одним отличием: окончательная форма также является значащим словом. Таким образом, операция стемминга не нуждается в словаре, подобном лемматизации. Таким образом, в зависимости от имеющихся ограничений, выделение корней может быть вариантом с меньшим объемом памяти, который мы должны рассмотреть.

использованная литература

  1. Введение в встраивание слов (NLP)


Это все, что касается сопоставления стемминга и лемматизации. Спасибо, что прочитали и последовали за нами. Надеюсь, вы хорошо провели время, читая и изучая. Большое спасибо за прочтение!

Мое Портфолио и Linkedin :)