Приглашение для вас, знакомство с НЛП и векторами слов

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

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

Приглашение

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

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

Чтобы присоединиться ко мне, вам нужно иметь небольшой опыт работы с блокнотами Python и Jupyter, и по большей части я даже не буду просить вас устанавливать что-либо на вашем компьютере.

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

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

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

В рамках курса мы будем использовать руководство по материалу Stanford Winter 2020 CS224N, поскольку он имеет комплексный подход, плейлист Youtube, содержащий уроки, и другие ресурсы, предоставленные студентами Стэнфорда. Если вы хотите узнать больше о курсе, вы можете зайти на его сайт.

Сначала мы начнем с основ НЛП и проработаем его ключевые методы: RNN, внимание, трансформеры и т. Д. В конце курса мы сможем создать некоторые из следующих приложений:

  • Значение слова
  • Разбор зависимостей
  • Машинный перевод
  • Ответ на вопрос

Краткое введение в НЛП

Обработка естественного языка (НЛП) - это подполе« лингвистика , информатика и искусственный интеллект , связанная с взаимодействием между компьютером и человеческим языком, в в частности, как программировать компьютеры для обработки и анализа больших объемов данных естественного языка ». - Википедия

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

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

Значение слов

В течение нескольких лет работа в области НЛП была в основном основана на моделировании синонимов слов и гиперонимов. Один из способов выяснить эти наборы - посмотреть определение слова в словаре.

Мы можем сделать это с помощью Python с библиотекой под названием NLTK.

Пробуем НЛТК

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

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

Для начала давайте войдем в систему, чтобы создать «Новый проект» на Deepnote. Открыв записную книжку, давайте установим библиотеку NLTK, введя ячейку и нажав Shift + Enter - для тех из вас, кто использует разные платформы записной книжки Python, ярлыки, которые, как вы знаете, должны работать нормально.

После этого нам нужно импортировать библиотеку NLTK и загрузить базу данных WordNet.

И с этим все готово. Чтобы получить объекты synsets из такого слова, как «язык», мы должны импортировать базу данных WordNet и использовать этот метод. synsets().

Кажется, что полученный объект не дает нам всей необходимой информации о слове, а только некоторую зашифрованную информацию о каждом synset. Для лучшего просмотра мы можем перебрать результаты и отформатировать объект synset, используя его pos() и lemmas(). С помощью настраиваемого список объектов, которые будут «красиво печатать» словесное представление.

Для получения дополнительной информации о пакете WordNet в NLTK вы можете просмотреть эту ссылку

Подводные камни НЛТК

Вы можете видеть, что он правильно работает как словарь, но у него есть несколько проблем при разработке приложений НЛП.

Это очень субъективно; это требует огромного количества человеческого труда, поэтому поддерживать корпус практически невозможно. Он также не может эффективно вычислять сходство слов, что действительно важно для наших приложений. Это может привести к тому, что мы будем писать ненадежные или легко устаревшее программное обеспечение AI.

Дискретные представления

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

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

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

Вы должны знать слово по компании, которую оно составляет (Firth, J. R. 1957: 11).

Концепция векторов слов позволяет нам работать со словами и контекстом (словами, которые находятся рядом) центрального слова. Это позволяет нам работать над сходством слов в разных контекстах.

Векторы слов (также называемые вложениями или представлениями)

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

Если вы хотите расширить свои знания по теме словесных векторов, я рекомендую эту потрясающую записную книжку, написанную Эллисон Пэрриш.

Векторы слов можно создавать разными способами. В Стэнфордском курсе CS224N представлен Word2Vec (Миколов и др., 2013) [1] [2] framework:

Обзор Word2Vec:

  • Соберите большой корпус текста
  • Представляйте каждое слово из фиксированного словаря n-мерным вектором
  • Для каждой позиции в тексте определите центральное слово и контекстные слова.
  • Используйте подобие векторов, чтобы вычислить вероятность контекста, заданного центральным словом.
  • Повторите и просто векторы слов, чтобы максимизировать эту вероятность

Этот процесс в основном реализуется с помощью нейронных сетей для изучения ассоциации между словами. Мы не будем использовать платформу Word2Vec для обучения модели; вместо этого мы будем использовать модель Word2Vec из библиотеки Python gensim.

Gensim - это библиотека Python для моделирования тем, индексации документов и поиска сходства с большими корпусами. Целевая аудитория - сообщество разработчиков обработки естественного языка (NLP) и поиска информации (IR) . - Сайт Gensim

Изучение взаимосвязей векторов Word с помощью библиотеки gensim

В этом примере будут использоваться встроенные модули api и Word2Vec gensim для загрузки корпуса текста и создания модели Word2Vec для визуализации некоторых интересных векторных функций слов. Сначала нам нужно установить пакет gensim.

Теперь нам нужно получить корпус, который мы будем использовать для создания нашей модели Word2Vec. Для этого мы можем использовать модуль api. Мы загрузим корпус text8, созданный из текста, извлеченного из Википедии. После этого нам нужно использовать корпус для создания нашей модели Word2Vec, и мы делаем это, импортируя модель Word2Vec и создав ее экземпляр, передав корпус в качестве параметра конструктора.

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

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

Мы можем выполнять математические операции со словами и модельными выражениями, например: «Король - мужчина + женщина =?»

Чтобы оценить это выражение с помощью gensim, мы можем использовать метод most_similar(), передавая как положительные значения ‘woman’ и ‘king’ и как отрицательное значение ‘man’.

Мы также можем создать функцию analogy, чтобы упростить выполнение этой операции:

Словесные векторы создали основу для современного распределенного представления слов и, следовательно, проложили путь к продвижению НЛП.

Для урока №2 вы можете перейти по этой ссылке:



Заключение

В следующем посте мы обсудим векторы слов и смыслы слов, темы второй лекции Стэнфордского курса. Надеюсь, вам понравилось читать этот пост.

Если да, подпишитесь на меня в Twitter.

Спасибо за уделенное время. Будьте осторожны и продолжайте кодировать!

использованная литература

Программное обеспечение и библиотеки