Обработка естественного языка или НЛП — это область компьютерных наук, целью которой является устранение разрыва во взаимодействии между компьютерами и людьми на естественном языке, чтобы понять контекст языка.
Давайте изучим основные концепции, чтобы начать работу с НЛП!
1. Текстовый корпус
Это относится к текстовым данным, используемым для построения модели машинного обучения.
Ознакомьтесь с Tiny Shakespeare, текстовым корпусом, содержащим 40 000 строк Шекспира из различных пьес Шекспира.
Это можно найти в репозитории GitHub Andrej Karpathy:
2. Словарь
Уникальные символы или слова, содержащиеся в текстовом корпусе, вместе называются словарем.
Словарь на основе слов/символов из текстового корпуса Tiny Shakespeare можно получить следующим образом:
#Downloading the text corpus
!wget https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt
#Creating Word Vocabulary
word_vocab = open("names.txt", "r").read().splitlines()
#Creating Character Vocabulary
char_vocab = sorted(list(set("".join(words))))
3. Токенизация
Это процесс разбиения корпуса текста на небольшие фрагменты (то есть слова/символы).
Каждая отдельная единица (слово/символ) называется токеном.
Мы вручную токенизировали Tiny Shakespeare в приведенном выше примере.
Это можно сделать с помощью библиотеки Natural Language Toolkit следующим образом:
import nltk
nltk.download('punkt') #punkt is the tokenizer
from nltk.tokenize import word_tokenize
corpus = "My name is Ashish. I am teaching Natural Language Processing on Medium."
tokens = word_tokenize(corpus)
print(tokens)
#Output:
#['My', 'name', 'is', 'Ashish', '.', 'I', 'am', 'teaching', 'Natural', 'Language', 'Processing', 'on', 'Medium', '.']
4. Стоп-слова
Это слова, которые отфильтровываются из корпуса текстов, потому что они не вносят большого вклада в контекст корпуса.
Общие стоп-слова на английском языке можно найти с помощью Natural Language Toolkit, как показано ниже:
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
stop_words = stopwords.words('english')
print(stop_words)
#Output:
#['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', "you're", "you've", "you'll", "you'd", 'your', 'yours'...]
5. Текст Нормализация
Это процесс преобразования текста в стандартную/каноническую форму, чтобы его можно было легко анализировать.
Некоторые из распространенных методов, используемых для достижения этой цели:
- Перевод токенов в нижний регистр: для этого можно использовать метод
.lower(). - Удаление стоп-слов
- Удаление специальных символов и знаков препинания
- Проверка орфографии
- Преобразование чисел в слова
- Стемминг
- лемматизация
6. Стемминг
Это процесс приведения слова к его корневой/основной форме.
Например, reading и reads можно сократить до read с помощью основы.
Определение основы удаляет префикс и суффикс, связанные со словом.
Стемминг может быть выполнен следующим образом:
import nltk from nltk.stem import PorterStemmer stemmer = PorterStemmer() word_1 = "reading" word_2 = "reads" print(stemmer.stem(word_1)) # Output: read print(stemmer.stem(word_2)) # Output: read
7. Лемматизация
Лемматизация использует словарь и морфологический анализ для определения базовой формы/словарной формы каждого слова.
Это отличается от стемминга, который удаляет префикс и суффиксы, связанные со словом.
Лемматизацию можно выполнить следующим образом:
import nltk
nltk.download('wordnet')
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
word_1 = "feet"
word_2 = "lazier"
print(lemmatizer.lemmatize(word_1)) #Output: foot
print(lemmatizer.lemmatize(word_2)) #Output: lazy
Результаты Stemming этих двух слов:
import nltk from nltk.stem import PorterStemmer stemmer = PorterStemmer() word_1 = "feet" word_2 = "lazier" print(stemmer.stem(word_1)) # Output: feet print(stemmer.stem(word_2)) # Output: lazi
Вы заметили разительную разницу?
8. Слова, не входящие в словарь (OOV)
Когда мы обучаем модель машинного обучения на текстовом корпусе (скажем, для предсказания следующего слова из заданного слова), словарный запас обучающего текстового корпуса может быть ограничен.
Новые слова, которые модель машинного обучения встречает позже и которых она не видела в корпусе обучающих текстов, называются словами вне словарного запаса (OOV).
Большое спасибо за внимание!
Если вы новичок в Python или машинном обучении, ознакомьтесь с моими книгами ниже: