Обработка естественного языка становится одним из самых популярных используемых методов. Это метод, используемый для программирования компьютеров для понимания, обработки и анализа огромных объемов данных на естественном языке человека, таких как текст, речь и т. Д.

Предположим, к примеру, мы читаем рецензии на книгу, и мы, люди, можем понять, просто взглянув на рецензии, что это положительный или отрицательный, верно? Но как тогда машины понимают эти настроения?

Здесь на сцену выходит обработка естественного языка.

Библиотеки, которые можно использовать для НЛП, - это SpaCy, NLTK и т. Д.

Примеры используемого NLP: текстовые сообщения WhatsApp, классификатор спама в Gmail и Siri.

ШАГ 1: Предварительная обработка текста

Первый и самый важный шаг к обработке текстовых данных.

1. Токенизация:

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

Например, абзац будет разбит на предложения, предложения можно разбить на слова и так далее, и так далее.

Ниже я показал, как расщепление

Давайте посмотрим на небольшой фрагмент кода, чтобы лучше понять это:

#import the necessary library
import nltk
nltk.download("punkt")
paragraph = "A paragraph is a series of related sentences developing a central idea, called the topic. Try to think about paragraphs in terms of thematic unity: a paragraph is a sentence or a group of sentences that supports one central, unified idea. Paragraphs add one idea at a time to your broader argument"
sentence= nltk.sent_tokenize(paragraph) #List of sentences
for sentences in sentence:
print(sentences)

Каждый элемент в списке предложений - это предложение, которое было разделено токенизатором.

Мы также можем word_tokenize разбивать на слова

2. Стебель:

Стебель в определении означает сокращение слов до их основы.

Давайте разберемся, что это на самом деле означает:

Давайте посмотрим на этот пример оригинальных слов и на то, как они образованы:

Итак, почему это происходит?

Stemming удаляет аффиксы (в основном суффикс), а затем использует это базовое слово для преобразования в слово, которое может иметь или не иметь какое-то значение. Основание не связано с человеческим пониманием, а просто извлекает базовое слово.

(Примечание: существует 3 типа стеммеров: Porter - это наиболее часто используемый и самый щадящий из всех, но требует больших вычислительных ресурсов, Porter2 (Snowball) - это улучшение Портера и меньшее время вычислений, Lancaster - очень агрессивный стемминг. алгоритм, иногда с ошибкой. С портером и снежком, основанные на основе представления обычно довольно интуитивно понятны для читателя, в отличие от Ланкастера, так как многие более короткие слова будут полностью запутаны. Самый быстрый алгоритм здесь и сократит ваш рабочий набор слов в огромной степени, но если вы хотите больше различий, не тот инструмент, который вам нужен.

#Using the same paragraph
#Importing libraries
from nltk.stem.snowball import SnowballStemmer
#Stop words are words that do not add any meaning to a sentence
from nltk.corpus import stopwords
nltk.download('stopwords')
# create an object of stemming
stemmer = SnowballStemmer("english")
for i in range(len(sentence)):
text= nltk.word_tokenize(sentence[i])
text = [stemmer.stem(word) for word in text if word not in set(stopwords.words('english'))]
sentence[i]= " ".join(text)
print(sentence)

Стоп-слова были удалены, и произошла остановка.

3. Лемметизация:

Основные слова не могут быть поняты людьми, когда возникает лемметизация.

По сути, лемметизация удаляет аффиксы (в основном суффикс), а затем использует это базовое слово для преобразования в слово, которое действительно имеет какое-то значение.

Давайте посмотрим на лемметизацию на том же примере:

#importing the library
from nltk.stem import WordNetLemmatizer
# create an object of Lemmatizing function
lemma = WordNetLemmatizer()
for i in range(len(sentence)):
text= nltk.word_tokenize(sentence[i])
text = [lemma.lemmatize(word) for word in text if word not in set(stopwords.words('english'))]
sentence[i]= " ".join(text)
print(sentence)

Каждое слово имеет значение, а стоп-слова удалены.

Итак, если лемметизация намного лучше, чем стемминг, зачем вообще делать стемминг? Потому что в таких случаях, как «Анализ настроений», достаточно только основных слов для определения настроений.

Кроме того, поскольку леммы - это слова со значениями, на их обработку уходит гораздо больше времени, чем на определение основы!

Лемметизацию можно использовать в приложениях Q&A, Siri и ChatBox.

ШАГ 2: Предварительная обработка текста

Мы ориентируемся на преобразование слов в векторы

1. Пакет слов:

Мы можем использовать библиотеку CountVectorizer, присутствующую в библиотеке NLTK, чтобы выполнить это.

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

Предположим, возьмем для примера 4 предложения:

Счетчик-вектор выполнит быстрое кодирование и создаст переменные для каждого отдельного слова. Теперь каждый раз, когда слово отображается, оно будет вводить 1 под этой переменной слова. Таким образом, если имеется 4 предложения и 6 различных слов, матрица будет иметь вид 4x6 или количество предложений x количество различных слов.

Итак, что мы можем сделать дальше из этой матрицы, так это составить гистограмму наиболее употребляемых слов, взяв их значения (количество каждого слова). Например: собака присутствует в этой матрице 3 раза.

Если мы применим стоп-слова и выполним их, то стоп-слова будут удалены, иначе большинство слов с максимальной частотой будут стоп-словами, которые не дадут никакой релевантной информации о предложении.

(Двоичный набор слов: если слово присутствует в предложении, независимо от того, сколько раз оно указано как «1», а если его нет, укажите его как «0», пожалуйста, обратите внимание, что 1 ставится только один раз, независимо от того, сколько раз раз это слово присутствует.)

Отличие BOW от этого заключается в том, что он учитывает количество слов, и поэтому каждый раз, когда встречается слово, оно считается, поэтому, если собака присутствует дважды в предложении, BOW будет принимать 2.

Недостатком BOW является то, что семантика или важность всех слов почти одинаковы, и они не могут быть дифференцированы относительно того, какое слово более важно, чем другое, это не может помочь нам понять тональность документа или предложения вообще. Правильно?

Пример: это хорошая книга

Здесь слово «хорошо» является наиболее важным для понимания настроения, и ему следует придавать большее значение.

Так есть ли у нас лучший способ преодолеть это? Определенно! Я буду обсуждать это в следующей части: TFIDF

2. TF-IDF: (термин "частота - обратная частота документа")

Вес Tf-idf является продуктом двух членов: первый член - это нормализованная частота термина (TF), также известная как. количество раз, когда слово встречается в документе, деленное на общее количество слов в этом документе; второй член - это обратная частота документов (IDF), вычисляемая как логарифм количества документов в корпусе, деленный на количество документов, в которых встречается конкретный термин.

Например: Предложение 1. Это замечательная книга. Предложение 2 - Мне очень понравилась эта книга. Предложение 3 - мне было неинтересно

После удаления стоп-слов они становятся-

Предложение 1 - чудесная книга. Предложение 2 - книга очень нравится. Предложение 3 - не нашел интересного

TF (слово) = (Количество раз, когда слово появляется в предложении) / (Общее количество слов в предложении).

Таблица TF будет выглядеть примерно так:

IDF (слово) = loge (Общее количество предложений / Количество предложений со словом в нем)

Таблица IDF будет выглядеть так:

Окончательный результат дает TF * IDF