Все, что вам нужно знать, чтобы начать работать с анализом текста с помощью Python

Мы живем в интересную эпоху. Организации стремятся использовать данные в своей деятельности. Большинство, хотя и не все, избегают интуитивного принятия решений и принимают решения, основанные на данных. Отрасли промышленности начинают осознавать реальность того, что данные - это новое топливо, необходимое им для поддержки их операций и рыночных стратегий для достижения огромной прибыльности. McKinsey - глобальные консалтинговые гиганты - указывает, что «организации, управляемые данными, имеют в 23 раза больше шансов привлечь клиентов, в шесть раз больше шансов удержать этих клиентов и в 19 раз больше шансов получить прибыль». Я посетил несколько саммитов данных и общался с несколькими руководителями бизнеса. Я был проворным, чтобы заметить, что они время от времени бросают такие цитаты, как: «Мы верим в Бога, все другие приносят данные», «Данные - это новая нефть», «Без больших данных вы слепы и глухи и находитесь посреди автострады», «Данные бьют эмоции», «Прежде всего, показать данные »и многое другое. Дело в том, что мы больше не живем в эпоху, когда наука о данных была загадкой. Сегодняшний рынок отличается высоким уровнем владения операциями и данными о клиентах. Тот, кто разбирается в данных о клиентах, имеет больше шансов завоевать клиентов, сердце.

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

В чем разница между структурированными и неструктурированными данными?

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

С другой стороны, неструктурированные данные - это информация, которая плохо организована или отформатирована. Википедия определяет неструктурированные данные как информацию, которая либо не имеет заранее определенной модели данных, либо не организована заранее определенным образом. Неструктурированная информация обычно содержит много текста, но также может содержать такие данные, как даты, числа и факты. Распространенные примеры неструктурированных данных включают PDF-файлы, файлы Word, аудио-, видеофайлы или базы данных без SQL.

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

Что такое обработка естественного языка?

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

Хотя эта область очень интересна, я должен признать, что обучить машину понимать, как мы общаемся, - непростая задача.

Использование НЛП

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

  • Чат-боты
  • Анализ настроений
  • Наем и набор
  • Реклама
  • Исследование рынка

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

1. Загрузка необходимых пакетов

  • Natural Language Toolkit (NLTK) - это ведущий модуль для обработки естественного языка в Python. Он предоставляет простые в использовании интерфейсы и очень богат библиотеками и функциями.
  • StopWords- Stopwords - это часто используемые слова, которые не придают особого значения предложению или нашей модели, «the», «a», «is», «on». Модуль Stopword содержит все английские стоп-слова, игнорировать которые мы будем обучать нашу модель.
  • Sklearn - Sklearn - самый популярный модуль машинного обучения и прогнозной аналитики в Python. Он предлагает широкий спектр функций для подготовки функций, создания контролируемых и неконтролируемых моделей и измерения производительности модели.
  • WordCloud - это пакет, который мы будем использовать для создания некоторых визуальных представлений текста наших данных.
  • Pandas и Numpy- Мы требуем, чтобы два пакета работали с фреймами данных.
  • Matplotlib и Seaborn - создание пакетов на Python. Я подробно обсудил их в этом крутом блоге здесь!

2. Загрузка и подготовка данных.

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

## Importing the dataset
df=pd.read_csv("spam.csv",encoding="latin-1")
df.head()

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

  • избавиться от безымянных столбцов со значениями NaN
  • Переименуйте столбцы
  • Затем добавьте столбец с ярлыками, где 0 обозначает ветчину, а 1 обозначает спам.
## Droping the unceccesary columns and renaming 
df.drop(["Unnamed: 2","Unnamed: 3","Unnamed:4"],axis=1,inplace=True)
df.columns=["Class","Text"]
df["Lable"]=df.Class.map({"ham":0,"spam":1})
df.head()

3. Изучение данных

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

df.groupby('Class').describe(include='O')

У нас есть 4825 строк, классифицированных как любительские сообщения с 4516 неповторяющимися строками. 747 спам-сообщений, из них 653 уникальных. Мы можем использовать seaborn countplot function для визуализации частот.

Считая частые слова в каждом

Мы хотим видеть, какие слова используются в любительских сообщениях, а какие - в спам-сообщениях. Прежде чем мы создадим слово частое резюме, нам нужно очистить данные. Под чисткой я имею в виду;

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

Мы создаем words_cleaner функцию с одним очищаемым аргументом data и возвращаем набор чистых слов.

def words_cleaner(data):
    words=[re.sub('[^a-zA-Z]', ' ',i) for i in df['Text']]
    words=[i.lower() for j in data for i in j.split()
    words=[i for i in words if not i in   set(stopwords.words('english'))]
    words=[i for i in words if len(i)>2]
    return words

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

Ham_texts=df.query("Class=='ham'")['Text']
ham_words=words_cleaner(Ham_texts)
ham_words_freq=nltk.FreqDist(ham_words)
ham_words_freq=pd.DataFrame(ham_words_freq.most_common(10),
                            columns=['Top_Words','Frequency'])

Идеально! Теперь у нас есть фреймворк из 10 самых часто используемых слов в сообщениях Ham. Теперь мы можем создать гистограмму для визуализации частот.

plt.figure(figsize=(8,6))
sns.set_style('whitegrid')
ax=sns.barplot(x='Top_Words',y='Frequency',data=ham_words_freq)

Да, я знаю, это круто! 😎Теперь вы можете делать то же самое со спам-сообщениями.

Создание MindMaps

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

Облако слов сообщения ветчины

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

wc(words_cleaner(Spam_texts),’black’)

Спам сообщения Wordcloud

wc(words_cleaner(Spam_texts),'black')

Спам-сообщения в основном содержат такие слова, как «Бесплатно», «Позвонить», «СМС», «Мобильный», «Требовать» и «Позвонить сейчас».

Машинное обучение

Создание модели классификации сообщения как спама или радиолюбителя.

Перед созданием классификатора нам нужно очистить наши функции / независимую переменную, т.е. (столбец Текст). Чтобы очистить наши функции, мы будем следовать следующей простой процедуре:

  • Удалите все знаки препинания в каждом текстовом сообщении.
  • Преобразование текстового сообщения в нижний регистр
  • Разделите каждое сообщение на отдельные слова
  • Удалите все игнорируемые слова
  • Остановите слова, используя PorterStemmer function. Это включает в себя сокращение каждого слова до его корневой формы. например, основа этих слов: [автомобиль, автомобили, машины, автомобили] - автомобиль. Стебель для [любящего, `любящего, прекрасного любовника] - Любовь
  • Соединяем очищенные слова в предложения.

Для этого мы создадим функцию, которая просматривает наши данные, очищая каждое сообщение за раз, а затем возвращает массив очищенных слов.

Посмотрите, как выглядит набор данных после очистки

Думаю, разница очевидна! 😊

Обучение модели.

Мы будем использовать наивный байесовский классификатор, который, как доказано, дает статистически удовлетворительные результаты в классификации текста, особенно в фильтрации электронной почты.
Ниже приведен набор функций для подготовки (Векторизация CountVectorizer) и модели поезда.

cv=CountVectorizer() 
X=cv.fit_transform(X)
X_train,X_test,y_train,y_test=train_test_split(X,y,
                                               test_size=0.25,
                                               random_state=50)
classifier=MultinomialNB() 
classifier.fit(X_train,y_train)
y_pred=classifier.predict(X_test)

Проверка точности модели

accuracy_score(y_pred,y_test)

Наша модель имеет точность 97,77%. Это похвальное выступление.
Мы также можем создать матрицу путаницы, чтобы увеличить производительность модели. Ведущие диагональные значения указывают на правильно предсказанное тестовое значение нашей моделью.

confusion_matrix(y_test,y_pred)

Вы можете получить доступ ко всему скрипту здесь.

Рекомендация

Этот блог был вдохновлен программой с автоматическим реагированием на запросы пользователей, которую я помог разработать для Esque Kenya. Они являются ведущими поставщиками решений для управления школами и логистики . Вы можете проверить их здесь.

Если вам понравился этот блог, не забудьте 👏🏼👏🏼👏🏼 и подписаться на него, чтобы узнать больше.

Оставайтесь в безопасности!