NLP – это весело! Обработка естественного языка на Python


Оглавление (нажмите, чтобы открыть):

С чего начать: обработка естественного языка и AI с использованием Python

Моя цель — написать программу, способную извлечь тон, личность и намерение из запросов на человеческий язык (например, я печатаю: как вы поживаете сегодня? И система AI реагирует на что-то вроде: Хорошо. Как вы?)

Я знаю, что это нетривиальная проблема, поэтому какие темы глубокого изучения я должен начать знакомиться и какие модули Python наиболее полезны? Я уже начал смотреть на NLTK. Благодарю.

artificial-intelligence deep-learning nlp

2 ответа

3 AbtPst [2020-01-14 17:48:00]

отличные предложения от @alvas

для углубленного изучения взгляните на алгоритм Google Word2Vec. Это особенно подходит для проблем НЛП. Вот вводный вариант использования

Недавно Google выпустила библиотеку python под названием Tensorflow для машинного обучения, а Word2Vec тоже является частью этого

наконец, лучшее место для грязных рук — это соревнования Kaggle. Попробуйте прочитать вступительные варианты использования, чтобы получить представление о том, что NLP и Machine Learning могут сделать

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

счастливое обучение 🙂 счастливое обучение

3 alvas [2020-01-14 17:24:00]

Канонической книгой по искусству были бы Стюарт Рассел и Питер Норвиг Искусственный интеллект и сопровождающий его курс: https://www.udacity.com/course/intro-to-artificial-intelligence—cs271

Машиноведение (ML)

Хорошей отправной точкой для теоретического для машинного обучения (ML), который будет полезен для более популярной задачи обработки естественного языка (NLP), будет курс машинного обучения Andrew Ng.

И хорошим практическим применением машинного обучения и внутренней работы был бы курс Университета Вашингтона ML с Эмили Фокс и Карлосом Уотрином

Обработка естественного языка (НЛП)

Что касается НЛП, популярной книгой для введения будет Джурафский и Мартин Речь и обработка текстов

Что касается более статистической перспективы НЛП, книга/курс Статистической НЛП Мэннинга и Шутце

Для более практичного подхода к НЛП книга NLTK является хорошей отправной точкой:

Для хорошего обзора технологий НЛП на протяжении многих лет в антологии ACL хранится архив большинства значимых опубликованных статей НЛП.

И еще один хороший ресурс — пройти через конференции NLP/ML/AI, Joel Tetreaul ведет обновленный список связанных конференций и даты их подачи: http://www.cs.rochester.edu/

Другие источники

Есть тонны ресурсов AI, ML, NLP онлайн и более поздних нейронных сетей. Хороший форум, на котором вы можете спросить что угодно (в отличие от Stackoverflow, который может быть ограниченным) — https://www.reddit.com/r/MachineLearning/, и, возможно, более подходящий stackexchange будет datascience.stackexchange.com

Удивительные списки

Вы легко можете легко найти ресурсы для AI/ML/NLP с помощью Googling для awesome списков в github, например:

NLP – это весело! Обработка естественного языка на Python

Только за прошлую неделю ко мне обратились сразу два человека с одним и тем же вопросом: «Посоветуй книжки по Natural Language Processing». Так как я не готовился отвечать на этот вопрос, я называл пару книжек, которые помню, а за остальными просил написать мне.

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

Основы

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

Вы удивитесь, но приведенные ниже книги не посвящены NLP (хотя и содержат его части). Это действительно так, однако именно то, что они не связаны с NLP позволяет новичкам дочитать их до конца, получив понимание «зачем» и «да это же круто» и не испугавшись хардкорного матана.

После недальновидных советов «читать Кнута» с вероятностью 146% никто не дочитает даже до третьей главы.

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

[ru] Введение в информационный поиск (К. Маннинг, П. Рагхаван, Х. Шютце) Как и многие, я пришел в Natural Language Processing из области Информационного Поиска. Сам по себе поиск — очень обширная область, которая, однако, всерьез полагается на несколько других: машинное обучение, статистика, обработка языка, распределенные системы, и.т.д. Так что начав изучать поиск каждый в какое-то время начинает углубляться в смежные, не менее интересные области. Введение в ИП очень хорошо покрывает основные аспекты именно поиска, не углубляясь в детали, однако давая необходимую базу и вдохновляя двигаться дальше. [ru] Программируем коллективный разум (Т. Сегаран) По началу показавшаяся мне «слишком простой» книжка на самом деле чаще других лежала у меня на столе именно потому что в ней сделан упор на практические задачи, а не теорию. Но голая практика без теории рождает похапешников, так что обязательно дополняйте всё прочитанное дополнительными рисерчами на тему. Еще у книги имеются, назовем их так, «аналоги» с более модными названиями типа «Алгоритмы Современного Интернета», в которых описывается хорошо если пара глав из Коллективного Разума. Относитесь к таким с осторожностью. Гуглить После прочтения приведенных книг, у вас должно появиться страстное желание гуглить. Не отказывайте себе в нем, простое гугление по названиям алгоритмов на данном этапе уже заметно повышает скиллы.


Основы++: дополнительное чтиво

Книги, которые вероятно заинтересуют вас на данном этапе и будут доступны для понимания, однако в зависимости от подготовки могут и не принести ничего нового.

[en] Taming Text: How to Find, Organize, and Manipulate It (Grant S. Ingersoll, Thomas S. Morton, . ) Небольшая книжка, которая вводит в суть дела по поводу обработки текстов. Под конец впервые в вашей жизни появляются продукты Apache (Mahout, Solr, OpenNLP), которые достаточно популярны в области, но скорее всего пока вам будут не нужны. А еще все примеры на Java, для кого-то это будет плюсом, для кого-то нет. [en] Machine Learning in Action (Peter Harrington) Годное и современное введение в Машинное Обучение, не содержит занудств и глубинного матана с шестерными интегралами, на трёх страницах объясняющего откуда взят коэффициент 0.41, как 99% учебников по этому делу. Я вообще очень ленивый и пугливый, потому как только я вижу начинающийся ад вида «из [формула на пол страницы] очевидно, что [формула на целую страницу]» я закрываю и убегаю прятаться. Моя беда, но я такой. Если мне интересно откуда взят коэффициент 0.41, я найду сам, но для начала меня просто устроит принять его на веру и переварить остальную, более полезную информацию.

А вот теперь уже основные интересности. Как я уже говорил, хороших книг по NLP мало. Я попытался собрать те, которые лично смог хотя бы выборочно просмотреть, возможно упустил какие-то, я не со зла. Пишите в комментарии, буду дополнять.

[en] Natural Language Processing with Python (Steven Bird, Ewan Klein, and Edward Loper) Самая простая из приведенных здесь книжек, однако я люблю простые вещи. Книга сочетает как теорию, так и практику, а все примеры приведены на нормальном языке программирования. Из минусов — книжка написана как гайд по популярной библиотеке NLTK, она дает хорошее введение в сам NLTK, однако про алгоритмы, непосредственно внутри NLTK, вы не узнаете практически ничего. Без знания этих алгоритмов вполне можно было бы жить (вы ведь не пишете с нуля хеш-таблицы или сортировку), однако NLTK не поддерживает русский язык, потому скорее всего вы будете писать свои велосипеды, а здесь уже понимание внутренней работы ой как пригодится. Книга хороша тем, что структурирует в мозгу то, чем занимается NLP. То есть она уже описывает все основные вещи, но ровно настолько, насколько это нужно для начинающих. И еще она небольшая, читается легко и быстро. [en] Natural Language Processing for Online Applications: Text Retrieval, Extraction and Categorization (Dr. Peter Jackson, Isabelle Moulinier) А вот с неё уже можно начинать хардкор. Практика закончилась на предыдущей книжке, далее — голая теория и матан. Книга предполагает, что вы знакомы с алгоритмами и машинным обучением, потому в основном не повторяется. Плюсы этой книги перед, например, следующей — она тонкая, всего 220 страниц. Но осилить ее не так-то просто. [en] Foundations of Statistical Natural Language Processing (Christopher D. Manning, Hinrich Schütze) На данный момент, в условиях бедности, считается чуть ли не библией NLP. В основном из-за своего размера:

720 страниц настоящего матана и никаких примеров на ваших гейских питончиках. Я читал главы выборочно. Погружение гарантировано, но без подготовки открывать это нельзя 🙂 [ru] Автоматическая обработка текстов на естественном языке и компьютерная лингвистика (Большакова Е.И., Клышинский Э.С.) Случайно найденное на NLPub учебное пособие на русском языке. Всего 220 страничек, для меня полезной оказалась ровно первая половина. Уникальность в том, что оно написано для русского языка. Нормальных трудов по компьютерной лингвистике именно русского языка практически не существует. Здесь, конечно, тоже местами налито Научной Воды, но это всяко лучше, чем ничего. Гуглить Да, снова пункт про гуглить. Но здесь вы уже будете знать что именно гуглить, в какие системы погружаться, и.т.д. Всё дело в том, что не существует серебряной пули, эдакой золотой книжки, которую прочитал — и сразу знаешь всё про NLP. Большинство информации разбросано по просторам сети, по чужим проектам, и.т.д.

NLP: вне конкурса

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

[ru] Общение с ЭВМ на естественном языке (Попов Е. В.) Очень старая книжка, на которую однако очень много ссылаются другие научные статьи. Ссылаются в основном потому что она про русский язык и написана давно. Я тоже сошлюсь, однако я даже выборочно её не осилил, слишком она уж написана в стиле старых советских ученых, все эти пятибуквенные сокращения и введение новых слов на каждой странице. Может быть кто-то сможет распарсить и напишет выжимку из нее. [ru] АОТ АОТ — самый крупный проект в России, связанный с NLP. Однако что там происходит сейчас я не знаю, последняя новость написана в 2012 году, а предпоследняя в 2010-м. Пока я так и не смог извлечь какую-то пользу из него, может кто подскажет где смотреть?

NLP: непроверенное, но рекомендованное подписчиками

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

Ресурсы

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

[ru] tech.yandex.ru Подборка научных публикаций от сотрудников Яндекса за разные годы. Начиная от самых первых статей Ильи Сегаловича про мечты о поисковике с учетом русской морфологии, до самых современных систем медиапоиска. Очень полезно именно для понимания где находится и чем занимается сейчас индустрия. Hint: статьи маркетологов и всяких девочек можно пропускать. [ru] Публикации РОМИП Конференция РОМИП выкладывает некоторые доклады и публикации у себя на сайте, примерно то же самое, чем занимается Яндекс в предыдущем пункте, однако там тусят все заинтересованные ребятки. Даже, прости господи, мейл.ру. [en] research.google.com То же самое, но от гугла.

Дополнения как обычно в комментариях.

Читал «Speech and Language Processing»; в целом сравнимо с «Foundations of Statistical Natural Language Processing», тоже серьезная книга на тысячу страниц. Основных отличий у Журафски и Мартина я заметил два: 1) Меньше математики, больше объяснений на интуитивном уровне. Не то чтобы совсем уж всё абстрактно, но взять и закодить что-то по книге должно быть тяжело. Зато легко читается и особой подготовки для чтения не требуется. 2) Больше площадь покрытия, например, описываются распознавание/генерация речи и семантический анализ. Вообще учебник, как мне показалось, хорошо подходит для знакомства с задачами в NLP и подходами к их решению. После него можно читать список публикаций с какой-нибудь конференции и примерно понимать, о чем там идет речь.

Мастер Йода рекомендует:  7 бесплатных онлайн-редакторов кода для веб-разработчиков

А я тут недавно нашёл «Тестелец Я.Г. — Введение в общий синтаксис-2001.pdf». Рекомендую.

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

Обработка естественного языка (Natural Language Processing, NLP) — пересечение машинного обучения и математической лингвистики [1] , направленное на изучение методов анализа и синтеза естественного языка. Сегодня NLP применяется во многих сферах, в том числе в голосовых помощниках, автоматических переводах текста и фильтрации текста. Основными тремя направлениями являются: распознавание речи (Speech Recognition), понимание естественного языка (Natural Language Understanding [2] ) и генерация естественного языка (Natural Language Generation [3] ).

Содержание

Задачи [ править ]

Определение:
Корпус — подобранная и обработанная по определённым правилам совокупность текстов, используемых в качестве базы для исследования языка.

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

  • Распознавание текста, речи, синтез речи (сигнал);
  • Морфологический анализ, канонизация (слово);
  • POS-тэгирование, распознавание именованных сущностей, выделение слов (словосочетание);
  • Синтаксический разбор, токенизация предложений (предложение);
  • Извлечение отношений, определение языка, анализ эмоциональной окраски (абзац);
  • Аннотация документа, перевод, анализ тематики (документ);
  • Дедубликация, информационный поиск (корпус).

Основные подходы [ править ]

Предобработка текста [ править ]

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

  • Перевод всех букв в тексте в нижний или верхний регистры;
  • Удаление цифр (чисел) или замена на текстовый эквивалент (обычно используются регулярные выражения);
  • Удаление пунктуации. Обычно реализуется как удаление из текста символов из заранее заданного набора;
  • Удаление пробельных символов (whitespaces);
  • Токенизация (обычно реализуется на основе регулярных выражений);
  • Удаление стоп слов;
  • Стемминг;
  • Лемматизация;
  • Векторизация.

Стемминг [ править ]

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

Лемматизация [ править ]

Данный подход является альтернативой стемминга. Основная идея в приведении слова к словарной форме — лемме. Например для русского языка:

  • для существительных — именительный падеж, единственное число;
  • для прилагательных — именительный падеж, единственное число, мужской род;
  • для глаголов, причастий, деепричастий — глагол в инфинитиве несовершенного вида.


Векторизация [ править ]

Большинство математических моделей работают в векторных пространствах больших размерностей, поэтому необходимо отобразить текст в векторном пространстве. Основным походом является мешок слов (bag-of-words): для документа формируется вектор размерности словаря, для каждого слова выделяется своя размерность, для документа записывается признак насколько часто слово встречается в нем, получаем вектор. Наиболее распространенным методом для вычисления признака является TF- >[4] (TF — частота слова, term frequency, IDF — обратная частота документа, inverse document frequency). TF вычисляется, например, счетчиком вхождения слова. IDF обычно вычисляют как логарифм от числа документов в корпусе, разделённый на количество документов, где это слово представлено. Таким образом, если какое-то слово встретилось во всех документах корпуса, то такое слово не будет никуда добавлено. Плюсами мешка слов является простая реализация, однако данный метод теряет часть информации, например, порядок слов. Для уменьшения потери информации можно использовать мешок N-грамм (добавлять не только слова, но и словосочетания), или использовать методы векторных представлений слов это, например, позволяет снизить ошибку на словах с одинаковыми написаниями, но разными значениями.

Дедубликация [ править ]

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

Семантический анализ [ править ]

Семантический (смысловой) анализ текста — выделение семантических отношений, формировании семантического представления. В общем случае семантическое представление является графом, семантической сетью, отражающим бинарные отношения между двумя узлами — смысловыми единицами текста. Глубина семантического анализа может быть разной, а в реальных системах чаще всего строится только лишь синтаксико-семантическое представление текста или отдельных предложений. Семантический анализ применяется в задачах анализа тональности текста [5] (Sentiment analysis), например, для автоматизированного определения положительности отзывов.

Распознование именованных сущностей и извлечение отношений [ править ]

Именованные сущности — объекты из текста, которые могут быть отнесены к одной из заранее заявленных категорий (например, организации, личности, адреса). Идентификация ссылок на подобные сущности в тексте является задачей распознавания именованных сущностей.

Определение семантических отношений между именованными сущностями или другими объектами текста, является задачей извлечения отношений. Примеры отношений: (автор,книга), (организация,главный_офис).

Эти два подхода применяются во многих задачах, например, извлечение синонимов из текста, автоматическом построении онтологий и реализованы во многих работающих системах, например, NELL [6] и Snowball [7] .

Использование N-грамм [ править ]

Определение:
N-грамма — последовательность из [math]n[/math] элементов.

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

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

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

Библиотеки для NLP [ править ]

NLTK (Natural Language ToolKit) [8] [ править ]

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

  • Самая известная и полная по функционалу библиотека для NLP;
  • Большое количество сторонних расширений;
  • Быстрая токенизация предложений;
  • Поддерживается множество языков.
  • Медленная;
  • Сложная в изучении и использовании;
  • Работает со строками;
  • Не использует нейронные сети;
  • Нет встроенных векторов слов.

spaCy [9] [ править ]

Библиотека, написанная на языке Cypthon, позиционируется как самая быстрая NLP библиотека. Имеет множество возможностей, в том числе, разбор зависимостей на основе меток, распознавание именованных сущностей, пометка частей речи, векторы расстановки слов. Не поддерживает русский язык.

  • Самая быстрая библиотека для NLP;
  • Простая в изучении и использовании;
  • Работает с объектами, а не строками;
  • Есть встроенные вектора слов;
  • Использует нейронные сети для тренировки моделей.
  • Менее гибкая по сравнению с NLTK;
  • Токенизация предложений медленнее, чем в NLTK;
  • Поддерживает маленькое количество языков.

scikit-learn [10] [ править ]

Библиотека scikit-learn предоставляет реализацию целого ряда алгоритмов для обучения с учителем и обучения без учителя через интерфейс для Python. Построена поверх SciPy. Ориентирована в первую очередь на моделирование данных, имеет достаточно функций, чтобы использоваться для NLP в связке с другими библиотеками.

  • Большое количество алгоритмов для построения моделей;
  • Содержит функции для работы с Bag-of-Words моделью;
  • Хорошая документация.
  • Плохой препроцессинг, что вынуждает использовать ее в связке с другой библиотекой (например, NLTK);
  • Не использует нейронные сети для препроцессинга текста.


gensim [11] [ править ]

Python библиотека для моделирования, тематического моделирования документов и извлечения подобия для больших корпусов. В gensim реализованы популярные NLP алгоритмы, например, word2vec. Большинство реализаций могут использовать несколько ядер.

  • Работает с большими датасетами;
  • Поддерживает глубокое обучение;
  • word2vec, tf-idf vectorization, document2vec.
  • Заточена под модели без учителя;
  • Не содержит достаточного функционала, необходимого для NLP, что вынуждает использовать ее вместе с другими библиотеками.

Балто-славянские языки имеют сложную морфологию, что может ухудшить качество обработки текста, а также ограничить использование ряда библиотек. Для работы со специфичной русской морфологией можно использовать, например, морфологический анализатор pymorphy2 [12] и библиотеку для поиска и извлечения именованных сущностей Natasha [13]

Обработка языковых данных в Python 3 с помощью NLTK

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

Твиты в Twitter помогают найти популярные темы и новости. Отзывы на разных сайтах типа Amazon помогают пользователям приобрести лучшие продукты (согласно рейтингу). Организация и структурирование знаний и опыта пользователей является задачей обработки естественного языка (NLP).

NLP (Natural Language Processing, обработка естественного языка) – это область вычислительных наук, которая изучает взаимодействие между компьютером и человеком. Техники, разработанные NLP, используются для анализа текста, предоставляя компьютерам возможность понять человеческий язык. NLP используется в автоматическом суммировании и анализе тональности высказываний.

Данное руководство ознакомит вас с инструментом NLP для Python, который называется Natural Language Toolkit (NLTK).

Требования

  • Предварительно установленный Python 3;
  • Базовые навыки работы с языком программирования Python.

Дополнительные инструкции по работе с Python 3 можно найти в этом разделе нашего Информатория.

1: Импортирование NLTK

Для начала нужно установить модуль NLTK.

Чтобы узнать, установлен ли модуль NLTK, запустите команду:

python -c «import nltk»

Если инструмент NLTK установлен, команда будет выполнена без ошибок. После этого нужно обновить модуль до последней версии:

python -c «import nltk; print(nltk.__version__)»

Теперь у вас будет версия 3.2.1 (пакет NLTK от Twitter требует именно эту версию).

Если модуль NLTK не установлен, команда выдаст ошибку:

Traceback (most recent call last): File » «, line 1, in ImportError: No module named ‘nltk’

В таком случае просто загрузите библиотеку с помощью pip:

pip install nltk

2: Загрузка данных и разметчика NLTK

В данном руководстве мы попробуем загрузить с помощью NLTK корпус данных Twitter под названием twitter_samples. Загрузите корпус:

python -m nltk.downloader twitter_samples

Если команда выполнена успешно, на экране появится такой вывод:

[nltk_data] Downloading package twitter_samples to
[nltk_data] /Users/8host/nltk_data.
[nltk_data] Unzipping corpora/twitter_samples.zip.

Затем загрузите разметчик частей речи. Частеречная разметка (POS tagging) – это процесс маркировки слов в тексте при помощи POS-тегов (по сути, определение части речи того или иного слова). В руководстве будет использоваться averaged_perceptron_tagger. Этот разметчик использует алгоритм персептрона, чтобы определить, какой POS-тег присвоить тому или иному слову. Чтобы загрузить этот инструмент, введите:


python -m nltk.downloader averaged_perceptron_tagger

Команда должна вернуть:

[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data] /Users/8host/nltk_data.
[nltk_data] Unzipping taggers/averaged_perceptron_tagger.zip.

Убедитесь в том, что корпус загружен правильно. Откройте интерактивную среду Python с помощью терминала.

Теперь импортируйте корпус twitter_samples:

from nltk.corpus import twitter_samples

Данный корпус содержит около 20 000 твитов, извлеченных из Twitter Streaming API. Твиты хранятся в виде отдельных строках в JSON.

Читайте также: Основы работы с JSON

Чтобы узнать, сколько JSON-файлов хранится в корпусе, используйте метод twitter_samples.fileids():

twitter_samples.fileids()
[u’negative_tweets.json’, u’positive_tweets.json’, u’tweets.20150430-223406.json’]

Чтобы запросить строку, используйте ID файлов:

Эта команда вернёт объемный вывод, вот его фрагмент:

[u’RT @KirkKus: Indirect cost of the UK being in the EU is estimated to be costing Britain \xa3170 billion per year! #BetterOffOut #UKIP’. ]

Теперь вы знаете, что корпус загружен успешно. Закройте интерактивную среду Python (ctrl + D).

Получив доступ к корпусу twitter_samples, вы можете написать сценарий для обработки твиров.

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

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

3: Токенизация

Создайте файл для сценария в текстовом редакторе (файл называется nlp.py).

Импортируйте корпус в файл. Затем создайте переменную tweets и присвойте ей список строк твитов из файла positive_tweets.json

from nltk.corpus import twitter_samples
tweets = twitter_samples.strings(‘positive_tweets.json’)

Читайте также:

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

Токенизация – это процесс разбиения последовательности строк на части: на слова, ключевые слова, фразы, символы и другие элементы, которые называются токенами. Создайте новую переменную, tweets_tokens, и присвойте ей токенизированный список твитов.

from nltk.corpus import twitter_samples
tweets = twitter_samples.strings(‘positive_tweets.json’)
tweets_tokens = twitter_samples.tokenized(‘positive_tweets.json’)

Теперь переменная tweets_tokens содержит список токенов. Каждому токену можно присвоить тег.

4: Присвоение тегов

Импортируйте разметчик NLTK. Все выражения импортирования должны находиться в начале сценария.

from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings(‘positive_tweets.json’)
tweets_tokens = twitter_samples.tokenized(‘positive_tweets.json’)

Теперь можно присвоить токенам теги. NLTK позволяет автоматизировать этот процесс при помощи pos_tag_sents(). Создайте новую переменную tweets_tagged и присвойте ей список тегов. Поместите её в конец сценария:

Помеченные тегами токены имеют такой вид (это первый элемент списка tweets_tagged):

[(u’#FollowFriday’, ‘JJ’), (u’@France_Inte’, ‘NNP’), (u’@PKuchly57′, ‘NNP’), (u’@Milipol_Paris’, ‘NNP’), (u’for’, ‘IN’), (u’being’, ‘VBG’), (u’top’, ‘JJ’), (u’engaged’, ‘VBN’), (u’members’, ‘NNS’), (u’in’, ‘IN’), (u’my’, ‘PRP$’), (u’community’, ‘NN’), (u’this’, ‘DT’), (u’week’, ‘NN’), (u’:)’, ‘NN’)]

Теперь каждый токен имеет свой POS-тег. Пары токенов и тегов можно сохранить в виде кортежа.

В NLTK имя прилагательное помечается как JJ. NLTK помечает имена существительные в единственном числе как NN, а во множественном – NNS. Для простоты работы сценарий будет считать только имена существительные в единственном числе.

5: Подсчёт тегов

Теперь нужно посчитать POS-теги JJ и NN. Добавьте счётчик в конец сценария и присвойте ему значение 0:


from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings(‘positive_tweets.json’)
tweets_tokens = twitter_samples.tokenized(‘positive_tweets.json’)
JJ_count = 0
NN_count = 0

После этого нужно создать два цикла for. Первый будет итерировать каждый твит в списке, а второй – все пары токенов и тегов в твите. При этом нужно использовать индексы кортежа.

После этого нужно проверить, соответствует ли тег строке ‘JJ’ или ‘NN’; это делается с помощью условных операторов. Если тег совпадает, в счетчик выполнит (+= 1).

from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings(‘positive_tweets.json’)
tweets_tokens = twitter_samples.tokenized(‘positive_tweets.json’)
JJ_count = 0
NN_count = 0
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == ‘JJ’:
JJ_count += 1
elif tag == ‘NN’:
NN_count += 1

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

.
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == ‘JJ’:
JJ_count += 1
elif tag == ‘NN’:
NN_count += 1
print(‘Total number of adjectives = ‘, JJ_count)
print(‘Total number of nouns = ‘, NN_count)

Мастер Йода рекомендует:  Как использовать Instagram Giveaway для увеличения количества подписчиков

Теперь программа может считать прилагательные и существительные.

6: Запуск сценария NLP

Сохраните файл nlp.py и запустите сценарий.

Подсчёт займет некоторое время. В результате на экране появится:

Total number of adjectives = 6094
Total number of nouns = 13180

Если вы видите на экране такие строки, это значит, что сценарий работает правильно.

Расширенный код

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

# Import data and tagger
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
# Load tokenized tweets
tweets_tokens = twitter_samples.tokenized(‘positive_tweets.json’)
# Tag tagged tweets
tweets_tagged = pos_tag_sents(tweets_tokens)
# Set accumulators
JJ_count = 0
NN_count = 0
# Loop through list of tweets
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == ‘JJ’:
JJ_count += 1
elif tag == ‘NN’:
NN_count += 1
# Print total numbers for each adjectives and nouns
print(‘Total number of adjectives = ‘, JJ_count)
print(‘Total number of nouns = ‘, NN_count)

В руководстве был использован корпус Twitter, загруженный с помощью NLTK, но вы можете добавить свои данные.

Читайте также:

Заключение

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

С чего начать: Обработка естественного языка и AI с помощью Python

Моя цель состоит в том, чтобы написать программу, способную извлекать тон, личность и намерения от запросов человеческого языка (например, я типа: Как вы делаете сегодня, и система ИИ отвечает что-то вроде. Fine Как вы)

Я понимаю, что это нетривиальная задача, так, что глубоко изучения темы, я должен начать Ознакомившись с и что Python модули являются наиболее полезными? Я уже начал смотреть на NLTK. Благодарю.

Машинное обучение (ML)

Хорошая отправная точка для теоретической для машинного обучения (ML) , которая будет полезна для более популярной обработки естественного языка (NLP) задачи будет машина курс обучения Эндрю Нг .

И хорошее практическое применение машинного обучения и внутренняя работа будет университет ML конечно Вашингтон с Эмили Фокс и Карлос Guestrin

Natural Language Processing (NLP)

Что касается НЛП, популярная книга введения будет Jurafsky и Мартина речи и языка обработки

Что касается более статистической точки зрения НЛП, Мэннинг и Schütze по статистической NLP книги / курса

Для более практического подхода к НЛП, то книга NLTK является хорошей отправной точкой:

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

И еще один хороший ресурс будет проходить конференций по НЛП / ML / AI, Джоэл Tetreaul сохраняет обновленный список соответствующих конференций и даты их представления: http://www.cs.rochester.edu/

Другие источники

Там уже тонны AI, ML, NLP ресурсов в Интернете и в последнее время нейронные сети. Хороший форум , который вы можете спросить что — либо ( в отличие от Stackoverflow , которые могут быть ограничительным) является https://www.reddit.com/r/MachineLearning/ и , возможно , более подходящим stackexchange бы datascience.stackexchange.com

Потрясающие Списки

Вы можете легко найти ресурсы для AI / ML / NLP легко погуглить для awesome списков на GitHub, например:


отличные предложения по @alvas

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

Google недавно выпустил библиотека Python называется Tensorflow для машинного обучения и Word2Vec является частью того , что слишком

наконец, самое лучшее место, чтобы испачкать руки является Kaggle competetions. Попробуйте прочитать через вводные прецедентами, чтобы получить представление о том, что НЛП и Machine Learning можно сделать

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

Обработка естественного языка – Python

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

Следующие функции отличают Python от других языков –

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

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

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

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

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

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

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

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

Предпосылки

Последняя версия Python 3 выпущена на Python 3.7.1 и доступна для Windows, Mac OS и большинства версий ОС Linux.

Для окон мы можем перейти по ссылке www.python.org/downloads/windows/, чтобы загрузить и установить Python.

Для MAC OS мы можем использовать ссылку www.python.org/downloads/mac-osx/ .

В случае Linux разные версии Linux используют разные менеджеры пакетов для установки новых пакетов.

Например, чтобы установить Python 3 в Ubuntu Linux, мы можем использовать следующую команду из терминала:

Для окон мы можем перейти по ссылке www.python.org/downloads/windows/, чтобы загрузить и установить Python.

Для MAC OS мы можем использовать ссылку www.python.org/downloads/mac-osx/ .

В случае Linux разные версии Linux используют разные менеджеры пакетов для установки новых пакетов.

Например, чтобы установить Python 3 в Ubuntu Linux, мы можем использовать следующую команду из терминала:

Чтобы узнать больше о программировании на Python, прочитайте основное руководство по Python 3 – Python 3

Начало работы с NLTK

Мы будем использовать библиотеку Python NLTK (Natural Language Toolkit) для анализа текста на английском языке. Инструментарий естественного языка (NLTK) представляет собой набор библиотек Python, разработанный специально для идентификации и маркировки частей речи, встречающихся в тексте естественного языка, такого как английский.

Установка НЛТК

Перед тем, как начать использовать NLTK, нам нужно его установить. С помощью следующей команды мы можем установить ее в нашей среде Python –

Если мы используем Anaconda, то пакет Conda для NLTK может быть собран с помощью следующей команды –

Загрузка данных НЛТК

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

Теперь загрузите данные NLTK с помощью следующей команды –


Установка всех доступных пакетов NLTK займет некоторое время.

Другие необходимые пакеты

Некоторые другие пакеты Python, такие как gensim и pattern , также очень необходимы для анализа текста, а также для создания приложений обработки естественного языка с использованием NLTK. пакеты могут быть установлены, как показано ниже –

gensim

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

шаблон

Он может быть использован для правильной работы пакета gensim . Следующая команда помогает в установке шаблона –

лексемизацию

Токенизация может быть определена как Процесс разбиения данного текста на более мелкие единицы, называемые токенами. Слова, цифры или знаки препинания могут быть токенами. Это также можно назвать сегментацией слов.

пример

Вход – кровать и стул являются типами мебели.

У нас есть разные пакеты для токенизации, предоставляемые NLTK. Мы можем использовать эти пакеты в соответствии с нашими требованиями. Пакеты и детали их установки:

пакет sent_tokenize

Этот пакет можно использовать для разделения входного текста на предложения. Мы можем импортировать его с помощью следующей команды –

пакет word_tokenize

Этот пакет можно использовать для разделения входного текста на слова. Мы можем импортировать его с помощью следующей команды –

Пакет WordPunctTokenizer

Этот пакет можно использовать для разделения входного текста на слова и знаки препинания. Мы можем импортировать его с помощью следующей команды –

Морфологический

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

Стемминг – это эвристический процесс, который помогает в извлечении базовых форм слов путем измельчения их концов.

Ниже приведены различные пакеты для стемминга, предоставляемые модулем NLTK:

PorterStemmer пакет

Алгоритм Портера используется этим пакетом stemming для извлечения базовой формы слов. С помощью следующей команды мы можем импортировать этот пакет –

Например, «write» будет выводом слова «writing», заданным в качестве входных данных для этого стеммера.

LancasterStemmer пакет

Алгоритм Ланкастера используется этим пакетом stemming для извлечения базовой формы слов. С помощью следующей команды мы можем импортировать этот пакет –

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

SnowballStemmer пакет

Алгоритм Snowball используется этим пакетом stemming для извлечения базовой формы слов. С помощью следующей команды мы можем импортировать этот пакет –

Например, «write» будет выводом слова «writing», заданным в качестве входных данных для этого стеммера.

лемматизации

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

Модуль НЛТК предоставляет следующий пакет для лемматизации –

Пакет WordNetLemmatizer


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

Подсчет POS-тегов – Chunking

Идентификация частей речи (POS) и коротких фраз может быть выполнена с помощью чанкинга. Это один из важных процессов в обработке естественного языка. Поскольку мы знаем о процессе токенизации для создания токенов, то на самом деле разбиение на фрагменты – это маркировка этих токенов. Другими словами, мы можем сказать, что мы можем получить структуру предложения с помощью процесса разбиения на фрагменты.

пример

В следующем примере мы реализуем чанки Noun-Phrase, категорию чанков, которые найдут чанки именных фраз в предложении, используя модуль Python NLTK.

Рассмотрим следующие шаги для реализации разбиения на именные фразы –

Шаг 1: Определение грамматики чанка

На этом этапе нам нужно определить грамматику для разбиения на фрагменты. Он будет состоять из правил, которым мы должны следовать.

Шаг 2: Создание парсера чанка

Далее нам нужно создать парсер чанка. Было бы разобрать грамматику и дать вывод.

На этом шаге мы получим вывод в древовидном формате.

Запуск сценария НЛП

Начните с импорта пакета NLTK –

Теперь нам нужно определить предложение.

DT является определяющим

JJ это прилагательное

NN это существительное

DT является определяющим

JJ это прилагательное

NN это существительное

Далее грамматика должна быть дана в форме регулярного выражения.

Теперь нам нужно определить парсер для разбора грамматики.

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

Далее вывод будет в переменной следующим образом:

Теперь следующий код поможет вам сделать вывод в виде дерева.

Скачай курс
в приложении

О курсе

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

Для кого этот курс

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

Курс предназначен для слушателей, которые обладают базовыми знаниями статистики, машинного обучения, линейной алгебры. Для решения практических задач понадобятся навыки программирования (привязки к языку программирования нет — все задания на обработку данных).

Задачи NLP

Чтобы просмотреть это видео, включите JavaScript и используйте веб-браузер, который поддерживает видео в формате HTML5

Машинное обучение в финансах

Half Faded Star


Машинное обучение (Machine Learning, или ML) — это дисциплина о том, как на основе различных алгоритмов обучить компьютер распознавать, классифицировать и предсказывать объекты. Машинное обучение подарило нам эффективный поиск и персонализированный контент в интернете, а в последнее время активно используется в финансах и банковской сфере — наш курс именно об этом! Применение методов ML помогает банку более оперативно принимать решения. Сможет ли вернуть кредит конкретный клиент? Как изменится объем вкладов и кредитов в ближайшей перспективе? Как оптимизировать внутренние процессы? Эти и многие другие проблемы финансовой сферы помогают решать на практике передовые методы ML. Если вы студент и видите свое будущее в ML в финансах, но еще не до конца понимаете, чем будете заниматься; или уже работаете в банковской/IT сфере и хотите улучшить свои знания и квалификацию, а может быть, вы просто активно интересуетесь последними тенденциями применения ML — добро пожаловать на онлайн-курс «Машинное обучение в финансах» от команды финансистов Сбербанка! Наш курс практико-ориентированный: вы узнаете о внедрении и применении ML на примере трейдинга, прогнозировании операционного дохода банка, автоматизации внутренних процессов и др., а также пройдете несколько практических заданий с использованием языка программирования Python. На второй неделе курса используется вероятностный язык программирования Stan. В лекциях и домашних заданиях по прогнозированию представлены базовые примеры моделей в Stan и ссылки на более детальное ознакомление с языком. Освоив эту программу, слушатель научится применять на практике многие методы ML и получит конкурентное преимущество для трудоустройства в финансовой и IT сфере.

Мастер Йода рекомендует:  Как проверить e-mail в JavaScript, не используя PHP

Получаемые навыки

Machine Learning, Python Programming, Banking, Машинное обучение, Finance

Рецензии

Half Faded Star

Преподаватели

Ия Малахова

Андрей Духовный

Владимир Власов

Текст видео

[МУЗЫКА] [МУЗЫКА] Здравствуйте, меня зовут Дмитрий Козачук, я занимаюсь разработкой моделей машинного обучения в Центре компетенций ERP «Сбербанк». В этом видео мы поговорим про область NLP, которой будут посвящены все дальнейшие видео. Целью NLP является понимание естественного языка в автоматическом режиме. Достижение этой цели позволяет выполнять всевозможные задачи. Так, использование NLP помогло вывести на новый уровень целый ряд прикладных задач из различных областей машинного обучения. Высокие результаты были достигнуты в задачах ранжирования, в информационном поиске теперь учитывается не только набор слов из запроса, но и их смысловое значение. Рекламные баннеры, которые мы видим на интернет-страницах, также учитывают поисковую историю, чтобы лучше соответствовать интересам пользователя. NLP получило развитие и в задачах классификации, к примеру, в задачах определения тональности комментария, нахождения нецензурной лексики. Кроме этого, обработка естественного языка применяется в задачах Named-entity recognition, или в задачах извлечения сущности, когда из корпуса текста необходимо выделить имена и фамилии, даты и прочие сущности. О таких задачах мы подробно поговорим в конце этой недели. Особо выделяется класс задач Sequence-to-sequence, включающий диалоговые вопросно-ответные системы, машинный перевод. О таких задачах мы также поговорим более подробно в видео про рекуррентные нейронные сети. Понимание естественного языка без участия человека является сложной задачей. Глобально существует два подхода к ее решению. Первый подход — это использование стандартного машинного обучения, таких моделей как случайный лес, логистическая регрессия. Подробно о них я расскажу в одной из следующих лекций. Вторым, более сложным методом, является использование deep learning, или глубокого обучения, глубоких нейронный сетей прямого распространения, рекуррентных нейронных сетей и более сложных архитектур. Обзор этих инструментов вы также найдете в нашем курсе. Однако уже сейчас можно говорить о различиях описанных подходов. Давайте рассмотрим различия в построении моделей стандартного и глубокого обучения. Перед применением любой модели текст необходимо представить набором слов, которые в нем встречаются. На слайде вы видите пример разбиения текста: Поеду в командировку в Москву 14 ноября. После такого разбиения нам необходимо выбрать признаки, которые будут использоваться при обучении. Признаками могут быть отдельные, определенным образом выбранные слова, так и более сложные показатели. В нашем примере можно выбрать слова «командировка» и «Москва» как самые информативные слова текста. Затем мы можем образовать признак-тег, сигнализирующий то, что в тексте встречается число. Кроме того, мы можем снабдить слово «Москва» дополнительным тегом, который сигнализирует то, что слово обозначает город, и добавить новый признак: Москва — город. Кроме того, можно придумать множество других признаков, описывающих текст. Следующим шагом будет отбор лучших признаков из большого числа признаков, которые мы образовали на прошлом этапе. Эта задача также является непростой и имеет несколько вариантов решения. В итоге на формирование признаков и их отбор будет потрачена львиная доля времени, затраченного на проект в целом. В глубоком обучении мы не занимаемся отбором признаков. Нейронная сеть сама определяет их значимость и наиболее оптимальный набор, что является существенным преимуществом использования deep learning. Использование глубокого обучения имеет и другие преимущества. Оно позволяет нам работать с неструктурированными данными, такими как тексты, аудиоряды, картинки, в то время как для стандартного машинного обучения необходимо табличное представление данных. С помощью глубокого обучения мы можем получать векторные представления слов, которые помогают различать близкие по смыслу слова от слов, не связанных по смыслу. Более подробно об этом вы узнаете в лекции про технологию word2vec. Также при автоматической обработке текстов важно учитывать порядок слов, важно иметь некоторую память, чтобы связывать слова, которые не стоят в тексте друг за другом, но влияют друг на друга. Это позволяет сделать рекуррентные нейронные сети и сети долгой и краткосрочной памяти, о которых мы тоже поговорим подробнее. На этом наше ознакомление с задачами обработки естественного языка закончено. В следующем видео я расскажу о том, как подготавливать текстовые данные для применения моделей машинного обучения.

NLP – это весело! Обработка естественного языка на Python

Только за прошлую неделю ко мне обратились сразу два человека с одним и тем же вопросом: «Посоветуй книжки по Natural Language Processing». Так как я не готовился отвечать на этот вопрос, я называл пару книжек, которые помню, а за остальными просил написать мне.

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

Основы

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

Вы удивитесь, но приведенные ниже книги не посвящены NLP (хотя и содержат его части). Это действительно так, однако именно то, что они не связаны с NLP позволяет новичкам дочитать их до конца, получив понимание «зачем» и «да это же круто» и не испугавшись хардкорного матана.

После недальновидных советов «читать Кнута» с вероятностью 146% никто не дочитает даже до третьей главы.

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

[ru] Введение в информационный поиск (К. Маннинг, П. Рагхаван, Х. Шютце) Как и многие, я пришел в Natural Language Processing из области Информационного Поиска. Сам по себе поиск — очень обширная область, которая, однако, всерьез полагается на несколько других: машинное обучение, статистика, обработка языка, распределенные системы, и.т.д. Так что начав изучать поиск каждый в какое-то время начинает углубляться в смежные, не менее интересные области. Введение в ИП очень хорошо покрывает основные аспекты именно поиска, не углубляясь в детали, однако давая необходимую базу и вдохновляя двигаться дальше. [ru] Программируем коллективный разум (Т. Сегаран) По началу показавшаяся мне «слишком простой» книжка на самом деле чаще других лежала у меня на столе именно потому что в ней сделан упор на практические задачи, а не теорию. Но голая практика без теории рождает похапешников, так что обязательно дополняйте всё прочитанное дополнительными рисерчами на тему. Еще у книги имеются, назовем их так, «аналоги» с более модными названиями типа «Алгоритмы Современного Интернета», в которых описывается хорошо если пара глав из Коллективного Разума. Относитесь к таким с осторожностью. Гуглить После прочтения приведенных книг, у вас должно появиться страстное желание гуглить. Не отказывайте себе в нем, простое гугление по названиям алгоритмов на данном этапе уже заметно повышает скиллы.

Основы++: дополнительное чтиво

Книги, которые вероятно заинтересуют вас на данном этапе и будут доступны для понимания, однако в зависимости от подготовки могут и не принести ничего нового.

[en] Taming Text: How to Find, Organize, and Manipulate It (Grant S. Ingersoll, Thomas S. Morton, . ) Небольшая книжка, которая вводит в суть дела по поводу обработки текстов. Под конец впервые в вашей жизни появляются продукты Apache (Mahout, Solr, OpenNLP), которые достаточно популярны в области, но скорее всего пока вам будут не нужны. А еще все примеры на Java, для кого-то это будет плюсом, для кого-то нет. [en] Machine Learning in Action (Peter Harrington) Годное и современное введение в Машинное Обучение, не содержит занудств и глубинного матана с шестерными интегралами, на трёх страницах объясняющего откуда взят коэффициент 0.41, как 99% учебников по этому делу. Я вообще очень ленивый и пугливый, потому как только я вижу начинающийся ад вида «из [формула на пол страницы] очевидно, что [формула на целую страницу]» я закрываю и убегаю прятаться. Моя беда, но я такой. Если мне интересно откуда взят коэффициент 0.41, я найду сам, но для начала меня просто устроит принять его на веру и переварить остальную, более полезную информацию.

А вот теперь уже основные интересности. Как я уже говорил, хороших книг по NLP мало. Я попытался собрать те, которые лично смог хотя бы выборочно просмотреть, возможно упустил какие-то, я не со зла. Пишите в комментарии, буду дополнять.

[en] Natural Language Processing with Python (Steven Bird, Ewan Klein, and Edward Loper) Самая простая из приведенных здесь книжек, однако я люблю простые вещи. Книга сочетает как теорию, так и практику, а все примеры приведены на нормальном языке программирования. Из минусов — книжка написана как гайд по популярной библиотеке NLTK, она дает хорошее введение в сам NLTK, однако про алгоритмы, непосредственно внутри NLTK, вы не узнаете практически ничего. Без знания этих алгоритмов вполне можно было бы жить (вы ведь не пишете с нуля хеш-таблицы или сортировку), однако NLTK не поддерживает русский язык, потому скорее всего вы будете писать свои велосипеды, а здесь уже понимание внутренней работы ой как пригодится. Книга хороша тем, что структурирует в мозгу то, чем занимается NLP. То есть она уже описывает все основные вещи, но ровно настолько, насколько это нужно для начинающих. И еще она небольшая, читается легко и быстро. [en] Natural Language Processing for Online Applications: Text Retrieval, Extraction and Categorization (Dr. Peter Jackson, Isabelle Moulinier) А вот с неё уже можно начинать хардкор. Практика закончилась на предыдущей книжке, далее — голая теория и матан. Книга предполагает, что вы знакомы с алгоритмами и машинным обучением, потому в основном не повторяется. Плюсы этой книги перед, например, следующей — она тонкая, всего 220 страниц. Но осилить ее не так-то просто. [en] Foundations of Statistical Natural Language Processing (Christopher D. Manning, Hinrich Schütze) На данный момент, в условиях бедности, считается чуть ли не библией NLP. В основном из-за своего размера:

720 страниц настоящего матана и никаких примеров на ваших гейских питончиках. Я читал главы выборочно. Погружение гарантировано, но без подготовки открывать это нельзя 🙂 [ru] Автоматическая обработка текстов на естественном языке и компьютерная лингвистика (Большакова Е.И., Клышинский Э.С.) Случайно найденное на NLPub учебное пособие на русском языке. Всего 220 страничек, для меня полезной оказалась ровно первая половина. Уникальность в том, что оно написано для русского языка. Нормальных трудов по компьютерной лингвистике именно русского языка практически не существует. Здесь, конечно, тоже местами налито Научной Воды, но это всяко лучше, чем ничего. Гуглить Да, снова пункт про гуглить. Но здесь вы уже будете знать что именно гуглить, в какие системы погружаться, и.т.д. Всё дело в том, что не существует серебряной пули, эдакой золотой книжки, которую прочитал — и сразу знаешь всё про NLP. Большинство информации разбросано по просторам сети, по чужим проектам, и.т.д.

NLP: вне конкурса

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

[ru] Общение с ЭВМ на естественном языке (Попов Е. В.) Очень старая книжка, на которую однако очень много ссылаются другие научные статьи. Ссылаются в основном потому что она про русский язык и написана давно. Я тоже сошлюсь, однако я даже выборочно её не осилил, слишком она уж написана в стиле старых советских ученых, все эти пятибуквенные сокращения и введение новых слов на каждой странице. Может быть кто-то сможет распарсить и напишет выжимку из нее. [ru] АОТ АОТ — самый крупный проект в России, связанный с NLP. Однако что там происходит сейчас я не знаю, последняя новость написана в 2012 году, а предпоследняя в 2010-м. Пока я так и не смог извлечь какую-то пользу из него, может кто подскажет где смотреть?

NLP: непроверенное, но рекомендованное подписчиками

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

Ресурсы

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

[ru] tech.yandex.ru Подборка научных публикаций от сотрудников Яндекса за разные годы. Начиная от самых первых статей Ильи Сегаловича про мечты о поисковике с учетом русской морфологии, до самых современных систем медиапоиска. Очень полезно именно для понимания где находится и чем занимается сейчас индустрия. Hint: статьи маркетологов и всяких девочек можно пропускать. [ru] Публикации РОМИП Конференция РОМИП выкладывает некоторые доклады и публикации у себя на сайте, примерно то же самое, чем занимается Яндекс в предыдущем пункте, однако там тусят все заинтересованные ребятки. Даже, прости господи, мейл.ру. [en] research.google.com То же самое, но от гугла.

Дополнения как обычно в комментариях.

Читал «Speech and Language Processing»; в целом сравнимо с «Foundations of Statistical Natural Language Processing», тоже серьезная книга на тысячу страниц. Основных отличий у Журафски и Мартина я заметил два: 1) Меньше математики, больше объяснений на интуитивном уровне. Не то чтобы совсем уж всё абстрактно, но взять и закодить что-то по книге должно быть тяжело. Зато легко читается и особой подготовки для чтения не требуется. 2) Больше площадь покрытия, например, описываются распознавание/генерация речи и семантический анализ. Вообще учебник, как мне показалось, хорошо подходит для знакомства с задачами в NLP и подходами к их решению. После него можно читать список публикаций с какой-нибудь конференции и примерно понимать, о чем там идет речь.

А я тут недавно нашёл «Тестелец Я.Г. — Введение в общий синтаксис-2001.pdf». Рекомендую.

Forbidden

You don’t have permission to access /Прикладной-анализ-текстовых-данных-ГђВЅГђВ°-python-Машинное-обучение-ГђВё-создание-приложений-обработки-естественного-языка-e187806382.html on this server.

Добавить комментарий