Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40_алгоритмов_Python.pdf
Скачиваний:
7
Добавлен:
07.04.2024
Размер:
13.02 Mб
Скачать

266

Глава 9. Алгоритмы обработки естественного языка

Библиотека NLTK

NLTK (natural language toolkit, инструментарий естественного языка) — широ­ ко используемая библиотека обработки естественного языка в Python. Это одна из старейших и наиболее популярных библиотек для NLP.

Библиотека NLTK крайне полезна, потому что, по сути, служит основой для построения любого процесса NLP. Она предоставляет базовые инструменты, которые можно объединять по мере необходимости, вместо того чтобы создавать их с нуля. В NLTK содержится множество инструментов, и в следующем раз­ деле мы загрузим библиотеку и разберем некоторые из них.

Теперь рассмотрим NLP на основе модели «мешок слов».

МЕШОК СЛОВ (BoW)

Отображение входного текста в виде мультимножества токенов называется мешком слов (bag-of-words, BoW). Недостатком этого подхода является то, что мы отбрасываем большую часть грамматики, что совместно с токенизацией иногда приводит к потере контекста слов.

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

Существуют три способа количественной оценки значимости слов в контексте документа:

zz Двоичный. Если слово появляется в тексте, функция имеет значение 1, если нет — 0.

zz По количеству. Значение функции равно числу появлений слова в тексте. Если слово отсутствует, значение функции равно 0.

zzЧастота термина/обратная частота документа, TF-IDF (term frequency/ inverse document frequency). Значение функции представляет собой от­ ношение того, насколько уникальным является слово в одном документе, к тому, насколько оно уникально во всем корпусе документов. Очевидно, что для распространенных слов, таких как «в» или «т. д.» (известных как стоп-слова), оценка TF-IDF будет низкой. Для более уникальных слов — например, терминов, относящихся к конкретной области, — оценка будет выше.

Мешок слов (BoW)

267

Обратите внимание, что, используя BoW, мы отбрасываем часть информации, а именно порядок слов в тексте. Этот подход работает, но может привести к сни­ жению точности.

Рассмотрим конкретный пример. Подготовим модель, которая сможет распо­ знавать хорошие и плохие отзывы о некотором ресторане. Входной файл пред­ ставляет собой набор отзывов‚ которые будут классифицированы как положи­ тельные или отрицательные.

Сначала обработаем входные данные.

Этапы обработки представлены на следующей диаграмме (рис. 9.1).

 

-

 

 

( )

• •

Рис. 9.1

Пайплайн обработки включает следующие шаги.

1. Прежде всего импортируем необходимые библиотеки:

import numpy as np import pandas as pd

2. Затем импортируем набор данных из CSV-файла (рис. 9.2).

268

Глава 9. Алгоритмы обработки естественного языка

 

 

 

 

Рис. 9.2

3. Далее очистим данные:

# Очистка текста import re import nltk

nltk.download('stopwords')

from nltk.corpus import stopwords

from nltk.stem.porter import PorterStemmer corpus = []

for i in range(0, 1000):

review = re.sub('[^a-zA-Z]', ' ', dataset['Review'][i]) review = review.lower()

review = review.split() ps = PorterStemmer()

review = [ps.stem(word) for word in review if not word in set(stopwords.words('english'))]

review = ' '.join(review) corpus.append(review)

4. Определим признаки (представленные y) и метку (представленную X):

from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer(max_features = 1500)

X = cv.fit_transform(corpus).toarray() y = dataset.iloc[:, 1].values

5. Разделим данные на обучающие и контрольные:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size

= 0.20, random_state = 0)

6.Для обучения модели используем наивный байесовский классификатор:

from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(X_train, y_train)