Пошаговое руководство по НЛП с использованием Python для новичков

В этом посте я познакомлю вас с одной из самых известных областей искусственного интеллекта под названием Обработка естественного языка. После введения я проведу вас через практическое упражнение, в ходе которого мы извлечем ценную информацию с определенного веб-сайта. Для практического проекта мы будем использовать специальный модуль NLP под названием NLTK (Natural Language Toolkit), который будет рассмотрен после вводного раздела. Прочитав эту статью, вы лучше поймете, как работают приложения для обработки естественного языка. Не теряя времени, приступим!

Оглавление

  • Введение
  • NLTK (набор инструментов для естественного языка)
  • BS4 (Красивый суп 4)
  • Шаг 1. Импорт библиотек
  • Шаг 2. Чтение страницы
  • Шаг 3. Очистка данных
  • Шаг 4 - токенизация
  • Шаг 5 - Визуализация данных
  • Демонстрация видео

Вступление

Естественный язык относится к языку, который мы используем в повседневной жизни. Эта область существует уже давно, но связанные с искусственным интеллектом исследования в этой области увеличились с ростом информатики и программирования. Интернет изменил наш образ жизни и способы общения друг с другом. Например, вместо отправки бумажных писем и писем мы начали использовать текстовые сообщения, электронные письма, голосовые сообщения и т. Д. Вы можете узнать больше об этой области, проведя небольшое исследование в Интернете.

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

  • Google Переводчик. Машинный интеллект, стоящий за Google Translate, понимает слова и переводит их слово за словом на нужный вам язык. И делает перевод, не теряя смысла предложения.
  • Грамматика. Машинный интеллект, стоящий за этой службой, хорошо разбирается в грамматике и словах. Это отличный пример развития языковой обработки за последние пару лет. Он проверяет грамматику предложений и даже дает некоторые рекомендации, как повысить качество статьи.
  • Голосовые помощники. Это поле также присутствует в большинстве областей, в которых обработка языка значительно улучшилась. В основном технология распознавания речи используется при обработке слов. В настоящее время наиболее известными из них являются Apple Siri, Google Assistant и Amazon Alexa.
  • Чат-боты. Еще один отличный пример языковой обработки - чат-боты. Они очень похожи на виртуальных помощников, но с более конкретными целями. Чаще всего они используются на веб-сайтах, которые посещают клиенты. Они помогут вам получить нужную информацию, не разговаривая с реальными людьми. Сначала они пытаются понять вашу потребность, а затем доводят до вас результаты.
  • Очистка веб-страниц. Очистка веб-страниц - это еще одна область, в которой обычно используется языковая обработка. Он используется для извлечения информации с веб-страницы, даже не тратя время на копирование каждого абзаца один за другим. Веб-скрапинг - отличный способ собрать ценные данные и обучить вашу модель машинного обучения. Веб-скрапинг также является очень полезным инструментом при работе с поисковой оптимизацией.

NLTK (набор инструментов для естественного языка)

NLTK - ведущая платформа для создания программ Python для работы с данными на человеческом языке. Он предоставляет простые в использовании интерфейсы для более чем 50 корпусных и лексических ресурсов, таких как WordNet, а также набор библиотек обработки текста для классификации, токенизации, выделения корней, тегов, синтаксического анализа и семантического обоснования, а также оболочки для промышленных библиотек NLP.

Ссылка: http://www.nltk.org

Нам нужно установить модуль NLTK, чтобы мы могли использовать его в нашем проекте. Запуск следующей строки в вашем терминале выполнит установку за вас:

pip install nltk

Красивый суп 4

Beautiful Soup - это библиотека Python для получения данных из HTML, XML и других языков разметки. Beautiful Soup поможет вам извлечь определенный контент с веб-страницы, удалить разметку HTML и сохранить информацию. Это инструмент для парсинга веб-страниц, который помогает вам очищать и анализировать документы, которые вы извлекли из Интернета.

Ссылка: https://programminghistorian.org/en/lessons/intro-to-beautiful-soup

Теперь давайте установим последнюю версию прекрасной библиотеки супа с помощью pip:

pip install beautifulsoup4

Шаг 1 - Импорт библиотек

После того, как установка библиотек будет завершена, мы можем приступить к программированию. В этом проекте я буду использовать Jupyter Notebook. Хорошо, первым делом давайте импортируем библиотеки в записную книжку.

import nltk

from nltk.corpus import stopwords
from bs4 import BeautifulSoup
import urllib.request
import plotly.io as pio

Шаг 2 - Чтение страницы

На этом этапе мы откроем веб-страницу, используя метод запроса urllib. После его открытия мы прочитаем весь код веб-страницы. Как вы знаете, веб-страницы содержат код, работающий в фоновом режиме. Вы можете щелкнуть правой кнопкой мыши любую веб-страницу и щелкнуть «проверить элемент», чтобы получить некоторое представление о коде.

Я выбрал страницу википедии об обработке естественного языка.

page =  urllib.request.urlopen('https://en.wikipedia.org/wiki/Natural_language_processing')
html_plain = page.read()
print(html_plain)

Вот как это выглядит, когда мы печатаем простой html-код:

Шаг 3 - Очистка данных

Как видно на скриншоте, простой html-код нуждается в некоторой очистке. BeautifulSoup поможет нам в этом процессе очистки данных. Нам нужно избавиться от множества ненужных символов, таких как двойные кавычки, косые черты, знаки больше и меньше и многое другое. Не волнуйтесь, он также очищает синтаксические слова HTML 😊

Давайте посмотрим на магическую силу BS4 (Beautiful Soup 4), выполнив следующие строки:

soup = BeautifulSoup(html_plain,'html.parser')
soup_text = soup.get_text(strip = True)

Большой! Еще одна вещь, прежде чем мы перейдем к разделению слов: для повышения качества обработки я рекомендую уменьшить регистр всех символов. Будет полезно, когда мы начнем считать частоту слов. В противном случае машина будет воспринимать «Natural» и «natural» как разные слова из-за их разных значений Ascii.

ready_text = soup_text.lower()
print(ready_text)

Смотрится намного лучше! Теперь перейдем к следующему шагу, где мы разбиваем каждое слово на элемент списка. Этот процесс известен как токенизация.

Шаг 4 - Токенизация

Этот шаг имеет решающее значение при работе над проектом обработки естественного языка. Сначала мы будем токенизировать каждое слово, разделив их на элементы списка. После этого мы проведем некоторую чистку слов. NLTK (Natural Language Toolkit) будет использовать для очистки стоп-слов. Это оставит нам ключевые слова, которые дадут нам лучшее представление о странице. Таким образом, мы не учитываем стоп-слова, такие как a, and, of, that, the, with и т. Д..

tokens = []
for t in ready_text.split():
    tokens.append(t)
print(tokens)

#Run this line if you get an error message in the next code block
nltk.download()

Теперь давайте очистим стоп-слова в нашем списке токенов.

stop_words = stopwords.words('english')
clean_tokens = tokens[:]
for token in tokens:
    if token in stop_words:
        clean_tokens.remove(token)
print(clean_tokens)

Шаг 5 - Визуализация данных

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

Давайте посчитаем частоту слов с помощью функции FreqDist от NLTK.

freq = nltk.FreqDist(clean_tokens)
for key, val in freq.items():
    print('Word: ' + str(key) + ', Quantity:' + str(val))

Теперь мы определим новый словарь и получим токены, которые использовались на странице более 10 раз. Эти ключевые слова более ценны, чем другие:

high_freq = dict()
for key, val in freq.items():
    if (val > 10):
        high_freq[key] = val

Идеально! Теперь у нас есть новый словарь под названием high_freq. Перейдем к последнему шагу и создадим гистограмму. Я думаю, что столбчатая диаграмма будет лучше работать с количественным представлением данных. Я также отсортировал их по убыванию, чтобы слово с наибольшей частотой было первым. Вот код визуализации:

#Note: to pass keys and values of high_freq dictionary, I had to convert them to list when passing them
fig = dict({
    "data": [{"type": "bar",
              "x": list(high_freq.keys()),
              "y": list(high_freq.values())}],
    "layout": {"title": {"text": "Most frequently used words in the page"}, "xaxis": {"categoryorder":"total descending"}}
})
pio.show(fig)

Видео демонстрация

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

Следите за моим блогом и youtube каналом, чтобы оставаться вдохновленным. Спасибо,