В первой части я упомянул теорию языка, подходы и трудности задач НЛП с использованием эвристики, машинного обучения или глубокого обучения.
Сегодня мы сделаем шаг вперед и узнаем немного больше о том, «как это сделать».
Предварительная обработка.
Представьте, что у вас есть набор данных, полный текста. Это просто плагин для машинного обучения и вуаля! Полученные результаты! Не так быстро, сначала нужно сделать на нем несколько шагов. вам может не понадобиться выполнять все шаги по всем задачам, но, безусловно, некоторые из них.
Вам может понадобиться нормализовать Unicode ваш текст -. Нам также нужно разделить наш текст на слова и предложения, иначе наш компьютер не сможет получить идею из набора слов вместе. В моем случае в португальском языке полно специальных символов, таких как ~ или ç, вам, возможно, придется иметь дело и с ними.
Сегментация предложений
Допустим, у вас есть абзац эссе, полный абзац. Вам нужно создать токены из него. Многие алгоритмы не принимают полный текст! Эта задача обычно выполняется путем разбиения предложений стоп-словами https://en.wikipedia.org/wiki/Stop_word. Это создаст предложения из вашего абзаца
Жетоны слов
Как сегментация предложения, токенизация слов создаст токены из ваших слов.
К счастью, большинство доступных сегодня библиотек НЛП могут легко выполнять эти задачи. Одним из примеров является библиотека NLTK:
from nltk.tokenizers import sent_tokenize, word_tokenize your_sentence = sent_tokenize(your_text)
Стемминг и лемматизация
Чтобы уменьшить сложность, мы могли бы использовать стемпинг. Это означает, что мы будем использовать слова в более простой форме. Например, «Собаке нравится наблюдать за другими собаками в парке», «собака» и «собаки» будут сокращены до «собака».
Это полезно для уменьшения пространства функций в некоторых задачах.
Пример использования класса stem из NLTK
from nltk.stem.porter import PorterStemmer stems = PorterStemmer() word1, word2 = "dogs", "planes" print(stems.stem(word1), stems.stem(word2)) >>dog plane
Лемматизация работает аналогично, мы будем отображать базовую форму слова, но вместо замены «собаки» на «собака» мы изменим, например, «хуже» на «плохо». Посмотрим на практике
import nltk nltk.download('wordnet') nltk.download('omw-1.4') from nltk.stem import WordNetLemmatizer lemmats = WordNetLemmatizer() print(lemmats.lemmatize("worse", pos = "a")) >> bad
Вы также можете попробовать Spacy вместо Nltk. Оба работают нормально.
Другими формами предварительной обработки ваших данных могут быть строчные буквы, удаление знаков препинания, преобразование чисел в слова. Шаги, которые вы предпримете, будут во многом зависеть от ваших потребностей.
Это всего лишь несколько примеров возможностей обработки текста. Опять же, это будет зависеть от ваших потребностей.
Это первый и элементарный шаг предварительной обработки ваших слов. Далее мы углубимся в другие методы, горячее кодирование, Bag of Words и TF-IDF. Это был короткий пост, но я не хотел смешивать первоначальную предварительную обработку с расширенными методами. Оставайтесь с нами для следующего поста.