Авторы: Аника Тахсин Сьеда, Бхавна Арья, Мохамед Анан Анаикар, Неха Борулкар

Этот блог создается и поддерживается студентами программы магистра наук в области профессиональных компьютерных наук в Университете Саймона Фрейзера в рамках их курса обучения. Чтобы узнать больше об этой уникальной программе, посетите {sfu.ca/computing/mpcs}.

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

Удивительная простота использования, великолепная поддержка отладки, исключительная точность на безумных скоростях — чего еще можно желать?

spaCy — это готовый к производству инструмент, который позволяет извлекать данные для приложений обработки естественного языка (NLP), предварительно обрабатывать текстовые данные для приложений глубокого обучения и включать анализ текста в ваши программные приложения. Разработанная на Python и Cython, это библиотека с открытым исходным кодом для продвинутого НЛП. Менее чем за десятилетие он обострил конкуренцию в экосистеме НЛП. Мы поражены spaCy, потому что с момента своего выпуска он очень хорошо догнал своих сверстников и даже затмил их во многих областях.

Мы все любим простое решение, и spaCy — это именно то, что нужно.

Посмотрите на эти две строки кода ниже. Да это оно. Они будут выполнять наиболее важные задачи предварительной обработки текста.

spaCy был запущен в 2015 году; Актуально ли говорить об этом в 2022 году?

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

Благодаря постоянно растущему сообществу и последнему выпуску spaCyV3.2 он предлагает довольно интересные функции, которыми мы не можем перестать восхищаться.

Модели и конвейеры spaCy

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

Итак, у вас есть необработанный текст; что будет дальше?

Этот базовый шаблон пайплайна можно настроить в соответствии с возможностями, необходимыми для вашей проблемы с данными, какой бы сложной она ни была.

Токенизация

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

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

  1. Проверьте правило исключения токенизатора для подстроки.
  2. Проверить, разделены ли префиксы, суффиксы и инфиксы?

Это помогает spaCy разделить сложные вложенные токены. Кроме того, эти правила исключений зависят от языка.

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

Выход:

Лемматизация

Лемматизация — это приведение токенов к их базовой форме, лемме. Это форма, в которой будет отображаться токен, если он будет введен в словарь.

Выход:

Тег части речи

Тег части речи определяет, к какой части речи принадлежит каждое слово во фразе (существительное, глагол и т. д.). Они содержат точную информацию о токене. (Время (прошедшее, настоящее или будущее), вид (простой, прогрессивный или совершенный), лицо (1-е, 2-е или 3-е))

Выход:

Парсер

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

Выход:

НЭР

Термин «именованный объект» относится к фактическому элементу, которому присвоено имя. Это может быть человек, организация, местоположение или сущность. Именованный объект полезен в НЛП, поскольку он указывает на обсуждаемое местоположение или организацию.

Выход:

НЕОБЫЧНЫЙ ДИСПЛЕЙ!

Прекрасно визуализировать данные; еще круче, когда это помогает нам отлаживать наш код.

spaCy визуализирует наши данные в виде двух разных стилей, используя displaCy, передавая параметр «dep» или «ent» в аргументе «style».

«dep» — это сокращение от парсера зависимостей, в котором все слова в предложении разбиваются по отдельности и отображаются с частью речи под каждым словом. Это дает нам быстрый взгляд на структуру или отношения между словами в предложении.

«ent» означает названную сущность. Эта визуализация на месте выделяет тексты и сопоставляет их объектам с соответствующими категориями.

spaCy TextBlob

spaCy включил TextBlob — библиотеку для обработки текстовых данных, созданную с использованием NLTK и Pattern. Три его расширения лучше всего подходят для анализа настроений данного предложения.

Вот рабочий пример spaCy TextBlob:

Полярность

Полярность помогает вернуть качество («состояние»), то есть отношение, связанное с данным утверждением. Полярность возвращает диапазон значений от -1 до 1, соответствующий уровню, связанному с данным оператором.

Выход:

Полярность: 0,16666666666666666

Субъективность

Субъективность стремится вернуть релевантность данного предложения контексту. Он возвращает диапазон значений от 0 до 1, при этом контекст предложения может быть личным, объективным или оценочным.

Выход:

Субъективность: 0,6666666666666666

Оценки

Оценки возвращают ключевые слова и уровень влияния конкретного слова или комбинации слов на данное утверждение.

Выход:

Оценки: [(['наиболее'], 0,5, 0,5, нет), (['сложно'], -0,5, 1,0, нет), (['лучше'], 0,5, 0,5, нет)]

Если вы хотите работать над проблемой анализа настроений и не знаете, какой инструмент вам следует использовать — доверьтесь нам; дайте spaCy шанс.

Анализ настроений с помощью spaCy

Понять эмоции людей сложно; писать код не следует.

Следующая программа реализует анализ настроений с использованием spaCy. Мы использовали статистическую модель spaCy en_core_web_sm, самую легкую модель, поддерживающую английский язык. Мы использовали spaCy TextBlob для возврата полярности входных данных, которые мы предоставляем. Пожалуйста, найдите фрагмент кода ниже:

Кроме того, мы настроили программу для работы с большими абзацами и отдельными предложениями.

Выходы:

«У меня был действительно ужасный день. Это был худший день в жизни. Но время от времени у меня бывают действительно хорошие дни, которые делают меня счастливым» -› -0,125

Эмоции: умеренно негативные

"У Джона был лучший год в его жизни, но его доход рос в геометрической прогрессии, а личностный рост был огромен" -› 0,5

Эмоция: резко положительная

"Чтобы расти, мы должны бороться темными ночами, чтобы получить солнечный свет и стать счастливыми" -› 0,325

Эмоции: слегка положительные

Код, используемый в этом блоге, можно найти здесь.

Ключевые моменты о превосходстве spaCy

  1. spaCy работает очень быстро (в 5 раз) по сравнению с NLTK. Он работает намного лучше и предлагает современную точность.
  2. Последняя версия (v3) в настоящее время поддерживает 17 языков для статистического моделирования и более 64 языков для «альфа-токенизации». Хотя NLTK поддерживает больше языков, он не обеспечивает истинной интернализации, поскольку его пакеты поддерживают лишь несколько языков.
  3. О нет, ошибки! Не волнуйтесь; Обработка ошибок spaCy более надежна, чем NLTK. Для Python3 он обеспечивает поддержку подсказок типов и средство проверки типов во время компиляции, такое как mypy, для проверки и отображения кратких сообщений об ошибках. «Ошибки по мере их возникновения» — политика, которая невероятно полезна.
  4. spaCy предлагает комплексную архитектуру проекта, отвечающую потребностям вашей отрасли.
  5. Хотя spaCy упрощает работу с NLP и извлечение информации, он не включает какой-либо конкретной поддержки задач генерации языка.
  6. Настройка — модели spaCy предоставляют разработчикам возможности для удовлетворения потребностей приложения, делая акцент на точности или эффективности, но создание модели с нуля невозможно.
  7. spaCy, будучи интенсивной отраслью, использует только один алгоритм, который считает лучшим и постоянно обновляется, вместо множества алгоритмов, которые предоставляет NLTK, которые лучше подходят для исследований.
  8. Объектно-ориентированный подход spaCy к возврату текста в виде объектов работает лучше, чем строковый подход NLTK.

В общем, spaCy — хороший выбор для любого варианта использования, если только вы не хотите создавать что-то с нуля.

Применения spaCy

spaCy лучше работает с небольшими предложениями и тегами, следовательно, для приложений NLP, требующих меньшей обработки текста spaCy.

  1. Чат-бот:

spaCy с его более быстрой обработкой предложений и мелкого текста делает его отличной библиотекой для создания чат-ботов и обработки быстрых ответов.

2. Фильтрация раздела комментариев:

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

3. Реализация приложений НЛП:

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

Заключение

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

spaCy всегда была одной из самых быстрых библиотек NLP, и ее легко развертывать и оптимизировать для производственных рабочих нагрузок.

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

Одним из аспектов spaCy, который следует выделить, является невероятная экосистема плагинов и расширений, созданная вокруг библиотеки. Со всеми захватывающими функциями и гибкостью конфигурации мы наблюдаем дальнейшее развитие экосистемы.

Ссылки

[1] Продвинутый НЛП со spaCy — https://course.spacy.io/en/

[2] Васильев, Юлий. Обработка естественного языка с помощью Python и spaCy: практическое введение. США, No Starch Press, 2020.

[3] Алтинок, Дуйгу. Освоение spaCy: комплексное практическое руководство по реализации приложений НЛП с использованием экосистемы Python. США, Packt Publishing, 2021 г.

[4] Почему spaCy лучше NLTK? — https://iq.opengenus.org/why-spacy-over-nltk/

[5] spaCyTextBlob — https://github.com/SamEdwardes/spaCyTextBlob

[6] Тестирование, профилирование и оптимизация моделей НЛП с помощью Pytest, Cython и spaCy — https://towardsdatascience.com/testing-profiling-and-optimizing-nlp-models-with-pytest-cython-and-spacy- а78а8397f9f3