Обновить
57.96

Natural Language Processing *

Компьютерный анализ и синтез естественных языков

Сначала показывать
Порог рейтинга
Уровень сложности

Победители соревнований Dialogue Evaluation – о задачах, языковых моделях, ML и о себе

Время на прочтение9 мин
Количество просмотров2.1K
Недавно завершился «Диалог 2020», международная научная конференция по компьютерной лингвистике и интеллектуальным технологиям. Партнером конференции впервые стала Физтех-школа прикладной математики и информатикии (ФПМИ) МФТИ. Традиционно одно из ключевых событий «Диалога» – это Dialogue Evaluation, соревнования между разработчиками автоматических систем лингвистического анализа текстов. Мы уже рассказывали на Хабре о задачах, которые участники состязаний решали в прошлом году, например, о генерации заголовков и поиске пропущенных слов в тексте. Сегодня мы поговорили с победителями двух дорожек Dialogue Evaluation этого года — Владиславом Корзуном и Даниилом Анастасьевым — о том, почему они решили участвовать в технологических соревнованиях, какие задачи и какими способами решали, чем ребята интересуются, где учились и чем планируют заниматься в будущем. Добро пожаловать под кат!
Читать дальше →

Сущности для платформы Яндекс.Диалоги

Время на прочтение4 мин
Количество просмотров2.8K
В прошлую субботу состоялся онлайн-хакатон по разработке навыков Алисы. Жаль, что никто не написал здесь об итогах, любопытно почитать истории победителей. Но раз желающих не нашлось, то поделюсь своей историей.

Я делаю голосовой интерфейс для управления брокерским счётом, уже писал об этом на Хабре — Алиса, купи акции Яндекс. В какой-то момент мне понадобилось извлекать из запроса цену в разных валютах. Уверен, я не первый, кто столкнулся такой задачей, поэтому попытался найти готовые интенты или именованные сущности на GitHub, но ничего не нашёл. На носу был хакатон, много разработчиков в одном месте, подумал я, если каждый поделится своими наработками, то сущностей наберётся на целую библиотеку. Так родилась идея для репозитория «библиотека сущностей».
Читать дальше →

Голосовой помощник для операций на Московской бирже: «Алиса, купи акции Яндекс»

Время на прочтение5 мин
Количество просмотров4K
— Алиса, купи одну акцию Яндекс.
— Заявка на покупку Яндекс по рыночной цене, тикер: YNDX, количество акций: 1, для подтверждения скажите «подтверждаю», для отмены скажите «нет».
— Подтверждаю.
— Заявка исполнена.


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

Разбор статьи о том, как извлечь смыслы из эмбеддингов

Время на прочтение15 мин
Количество просмотров4.4K

tl;dr: Упрощенный разброр статьи, в которой автор предлагает две интересные теоремы, на базе которых он нашел способ как из матрицы эмбеддингов извлечь скрытые векторы смыслов. Приведен гайд о том, как воспроизвести результаты. Ноутбук доступен на гитхабе.


Введение


В этой статье я хочу рассказать об одной потрясной вещи, которую нашел исследователь Санджев Арора в статье Linear Algebraic Structure of Word Senses, with Applications to Polysemy. Она является одной из серии статей, в которых он пытается дать теоретические обоснования свойства эмбеддингов слов. В этой же работае Арора делает предположение о том, что простые эмбеддинги, такие как word2vec или Glove, на самом деле включают в себя несколько значений для одного слова и предлагает способ как можно их восстановить. По ходу статьи я буду стараться придерживаться оригинальных примеров.


Более формально, за $\upsilon_{tie}$ обозначим некий вектор эмбединга слова tie, которое может иметь значение узла или галстука, а может быть глаголом "завязать". Арора предполагает, что этот вектор можно записать, как следующую линейную комбинацию


$ \upsilon_{tie} \approx \alpha_1 \upsilon_{tie1} + \alpha_2 \upsilon_{tie2} + \alpha_3 \upsilon_{tie3}+... $


где $\upsilon_{tien}$ это одно из возможных значений слова tie, а $\alpha$ — коэффициент. Давайте попробуем разобраться, как же так получается.

Читать дальше →

Самоучитель клингонского

Время на прочтение9 мин
Количество просмотров15K

Пару лет назад мы рассказали о том, как в системе Антиплагиат устроен поиск русского перевода английских статей. Естественно, без машинного переводчика в алгоритме не обойтись. В основе машинного переводчика, конечно, лежит машинное обучение, которое, в свою очередь, требует весьма значительного количества «параллельных предложений», т.е. одинаковых по смыслу предложений, написанных на двух языках. Значительное количество — это миллионы предложений, и чем больше, тем лучше. Понятно, что для русско-английской пары найти такую базу (в том числе и в открытом доступе) реально. А что делать с теми языковыми парами, для которых параллельных предложений принципиально не может быть слишком много?


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


Источник картинки: Собственное творчество от команды Антиплагиата


А самым подходящим девизом к дальнейшему рассказу о применении Unsupervised Learning будет знаменитая выдержка из Инструкции клингонского почетного караула «Если не можешь контролировать себя, тебе не дано командовать другими».


bISeH'eghlaH'be'chugh latlh Dara'laH'be'

Как предсказать гипероним слова (и зачем). Моё участие в соревновании по пополнению таксономии

Время на прочтение8 мин
Количество просмотров14K

Как может машина понимать смысл слов и понятий, и вообще, что значит — понимать? Понимаете ли вы, например, что такое спаржа? Если вы скажете мне, что спаржа — это (1) травянистое растение, (2) съедобный овощ, и (3) сельскохозяйственная культура, то, наверное, я останусь убеждён, что вы действительно знакомы со спаржей. Лингвисты называют такие более общие понятия гиперонимами, и они довольно полезны для ИИ. Например, зная, что я не люблю овощи, робот-официант не стал бы предлагать мне блюда из спаржи. Но чтобы использовать подобные знания, надо сначала откуда-то их добыть.


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


Читать дальше →

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

Время на прочтение9 мин
Количество просмотров6.4K
Умение модели распознавать намерения собеседника, то есть понимать зачем человек совершил то или иное действие, применимо в большом числе прикладных NLP-задач. К примеру, чат-ботам, голосовым помощникам и другим диалоговые системам это позволит эмоционально реагировать на высказывания собеседника, проявлять понимание, сочувствие и другие эмоции. Кроме того, задача распознавания намерения – это еще один шаг на пути к пониманию человеческой речи (human understanding).



Уже было предпринято несколько попыток решить данную задачу в той или иной форме. Например, на NLP-progress публикуются последние достижения в области commonsense reasoning. Слабость большинства существующих моделей заключается в том, что в их основе лежит supervised подход, то есть им требуются большие размеченные датасеты для обучения. А в силу специфичности задачи разметка часто бывает весьма нестандартной и достаточно сложной.

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

В этом посте мы расскажем, как мы создали датасет для задачи Common Sense Reasoning в одной из ее возможных формулировок, предложенной в статье event2mind, а также адаптировали английскую модель event2mind от AllenNLP для русского языка.
Читать дальше →

ИИ и машинное обучение в медицине, ч.2

Время на прочтение6 мин
Количество просмотров2.9K


Cloud4Y продолжает рассказывать о перспективах использования ИИ в медицине. Это вторая часть, в которой затрагиваются действующие и теоретически возможные варианты использования «умных» компьютерных технологий в здравоохранении. Первая была тут, а третья посвящена рискам внедрения ИИ.
Читать дальше →

Люди ломаются на логике, роботы — на всем понемногу. Экзамены по русскому для NLP-моделей

Время на прочтение9 мин
Количество просмотров10K
Чтобы машины могли обрабатывать текст на русском и «понимать» его, в NLP используются универсальные языковые модели и трансформеры — BERT, RoBERTa, XLNet и другие — архитектуры от 100 миллионов параметров, обученные на миллиардах слов. Все оригинальные модели появляются обычно для английского, показывают state-of-the-art в какой-нибудь прикладной задаче и только спустя полгода-год появляются и для русского языка, без тюнинга архитектуры.



Чтобы корректнее обучать свою модель для русского или другого языка и адаптировать её, хорошо бы иметь какие-то объективные метрики. Их существует не так много, а для нашей локали и вовсе не было. Но мы их сделали, чтобы продолжить развитие русских моделей для общей задачи General Language Understanding.

Мы — это команда AGI NLP Сбербанка, лаборатория Noah’s Ark Huawei и факультет компьютерных наук ВШЭ. Проект Russian SuperGLUE — это набор тестов на «понимание» текста и постоянный лидерборд трансформеров для русского языка.
Читать дальше →

Открываем историю Большого. Часть вторая

Время на прочтение9 мин
Количество просмотров2.6K
image

Привет, Хабр. Хорошие новости: мы успешно завершили краудсорсинговый проект «Открой историю Большого» по оцифровке программ, афиш и фотографий, которые хранятся в музее Большого театра. Итогами делимся на сайте openbolshoi.ru, а в этом посте рассказываем, как технически был организован проект.

О том, почему мы начали заниматься этим проектом и что сделали на первом этапе, можно почитать здесь. А что же было дальше? После первой части проекта мы благодаря ABBYY FineReader PDF и с помощью волонтеров подготовили файлы программ и афиш в формате PDF с вычитанным текстовым слоем и передали их музею Большого театра. Теперь все данные хранятся в электронном виде, и сотрудники используют их, чтобы искать и копировать нужную информацию. Это быстрее и удобнее, чем перебирать документы в шкафах и перепечатывать текст из оригиналов.

Но как узнать больше о представлениях, а также о людях, чьи судьбы тесно связаны с историей театра? Как собрать статистику:


Помогли технологии Natural Language Processing (NLP), разработанные в ABBYY. Сегодня мы расскажем, как на втором этапе проекта алгоритмы извлекли из программ и афиш необходимые сведения, заполнили поля базы данных, а затем 7500 волонтеров проверили и дополнили информацию. А в конце поста читайте, как сейчас создается электронный архив музея с удобным поиском по всем представлениям и персонам.
Читать дальше →

Искусственный интеллект в области юриспруденции

Время на прочтение31 мин
Количество просмотров31K

Введение


Тема искусственного интеллекта сегодня — одна из самых обсуждаемых. Перспектива «обеспечить монополию в сфере искусственного интеллекта и стать властелином мира» заставила всех соревноваться в данной области. IT-гиганты, финансовые компании, бизнес-аналитики, университеты и научное сообщество предлагают собственное видение инструментов и методологии решения основных задач при их создании. Однако результаты удручают, особенно в сфере LegalTech.



Что такое настоящий LegalTech, а что скрывается под громкими рекламными слоганами? Почему никому из IT-разработчиков не удалось создать действительно прорывной и функциональный продукт, близкий к цифровому юристу? Какой подход позволил нам решить данные задачи и существенно приблизиться к созданию настоящего юридического искусственного интеллекта?

Читать дальше →

«Диалог» компьютерных лингвистов и специалистов по анализу данных впервые пройдет онлайн и бесплатно

Время на прочтение4 мин
Количество просмотров2.1K
Текущая ситуация в мире не повод останавливать диалог, особенно если его можно вести онлайн. С 17 по 20 июня состоится 26-ая Международная научная конференция по компьютерной лингвистике и интеллектуальным технологиям «Диалог». В этот раз она пройдет онлайн и будет бесплатной. Много лет основным организатором конференции выступает ABBYY: мы заинтересованы в развитии компьютерной лингвистики, обработки естественного языка (Natural Language Processing, NLP) и проведении исследований в этих областях. Подробнее о том, что такое «Диалог» и зачем он нужен, мы уже говорили на Хабре.

Сегодня расскажем об интересных событиях, которые запланированы на предстоящей конференции: докладах, темах дискуссий и трех технологических соревнованиях в рамках Dialogue Evaluation – по извлечению семантических отношений из деловых текстов, автоматическому поиску гиперонимов и морфосинтаксическому анализу текстов. Поехали!
Читать дальше →

Краткий обзор NLP библиотеки SpaСy

Время на прочтение5 мин
Количество просмотров39K

Обработка естественного языка(Natural Language Processing — NLP) сегодня становится очень востребованной, так как людям несомненно проще общаться с машинами также, как они общаются с людьми.


image


Поэтому сейчас, вместе с быстрым развитием этой области, всё больше сервисов используют NLP: чат-боты, в которых больше не нужно выбирать готовые ответы, голосовые ассистенты, электронная почта, чтобы автоматически сортировать письма и так далее. В этом посте я хочу рассказать об относительно новой Python библиотеке SpaCy, которая стала, если не индустриальным стандартом, как кричат заявляют сами создатели на сайте библиотеки: https://spacy.io/, то как минимум одним из самых популярных и удобных решений. Приятного чтения!

Читать дальше →

Ближайшие события

Что умеет Dialogflow?

Время на прочтение11 мин
Количество просмотров43K


26 ноября в Москве прошла третья в своей истории Conversations – конференция по разговорному искусственному интеллекту для разработчиков и бизнеса, на которой был представлен новый доклад компании «Аэроклуб ИТ». В прошлый раз речь шла об одном из наших исследовательских проектов, теперь же рассказ был сосредоточен вокруг инструмента, который мы применяем для чат-ботов. Сперва я планировал просто написать статью по мотивам доклада, но получился целый tutorial, так что под катом вас ждёт довольно подробное описание некоторых возможностей Dialogflow, и даже попадутся неочевидные «хаки».
Читать дальше →

Сравнение российской рэп сцены используя R и техники Text Mining. Noize Mc, Oxxxymiron, Дядя Женя. Эпизод 2

Время на прочтение8 мин
Количество просмотров11K

R. Text Mining. Rap. Episode 2


Данная статья является продолжением материала «Сравнение российской рэп сцены используя R и техники Text Mining. Noize Mc and Kasta vs Pharaoh and Morgenshtern» и сейчас я постараюсь детально проанализировать творчество Нойз Мс и Оксимирона. Однако, хочу отметить, что это не будет сравнение между ними. Цель этой статьи не показать кто из них круче, а передать глубину и разнообразие их музыки, которой мы имеем возможность наслаждаться в реальном времени. Нам очень повезло, что мы можем следить за их успехами и ходить на их концерты. В этом материале не будет сопоставления как в первой части, не будет такого сильного контраста.

В этот раз анализ также делался при помощи R, Python и API Genius.com Подробнее можно прочитать в первой части, так как не хочу повторяться.
Читать дальше →

Рисуем речь: Software Automatic Mouth

Время на прочтение9 мин
Количество просмотров14K
Прошлогоднюю статью «Рисуем звук» я завершил признанием: «А можно ли нарисовать звук с чистого листа, не обводя спектрограмму аудиозаписи? Скажу честно, у меня не полу­чилось.» Но недавно я узнал про S.A.M. — выпущенный в 1982 г. компанией Don’t Ask Software, он стал первой коммерчески успешной программой для синтеза речи на ПК. В середине 2000-х немецкие демосценщики Tobias Korbmacher и Sebastian Macke взяли ассемблерный листинг S.A.M. для Commodore 64 и сконвертировали его в нечитаемый, но работоспособный код на Си; затем в 2014 г. британец Vidar Hokstad постарался привести код на Си в читаемый вид — вручную давая переменным осмыс­ленные названия и заменяя goto на циклы и ветвления; и наконец, в 2017 г. ещё один немец Christian Schiffler переписал код с Си на JavaScript. Испробовать его в действии как «чёрный ящик» можно на discordier.github.io/sam.

По-моему, примитивный синтезатор речи на JavaScript — самый удобный подопытный образец для тех, кто хочет разобраться, как в целом работает синтез речи. Мой форк S.A.M. с существенно почищенным кодом и комментариями доступен на github.com/tyomitch/sam. К сожалению, у предыдущих авторов интерес к S.A.M. успел угаснуть, и им сейчас не до разбора пулл-реквестов в хобби-проект многолетней давности.

S.A.M. состоит из четырёх функциональных компонентов:

  1. Reciter переводит текст на английском в фонемную запись: например, «A LITTLE TOO LOW» (пример из приложенной к S.A.M. демо-программы) превращается в «AH LIHTUL TUW5 LOW».
  2. Parser превращает фонемную запись в фонетическую: из «AH LIHTUL TUW5 LOW» получается "AH, ,L,IH,DX,AX,LX, ,T,*,*,UX,WX, ,L,OW,WX". Для каждого выводимого фона Parser задаёт также длительность и тон.
  3. Renderer строит по фонетической записи массив частот, амплитуд и прочих акустических характеристик;
  4. Последний, безымянный компонент (функция ProcessFrames) превращает массив частот и амплитуд в PCM-поток для аудиовывода.

В этой статье я разберу все четыре компонента по очереди.
Читать дальше →

Сравниваем работу open source Python — библиотек для распознавания именованных сущностей

Время на прочтение13 мин
Количество просмотров25K

Введение


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

Для решения это задачи я опробовал десятки решений в области обработки естественного языка, в том числе решения с открытым кодом и хотел бы поделиться опытом работы с open source Python — библиотеками для распознавания именованных сущностей.

Распознавание именованных сущностей


Несколько слов о самой проблеме. Named Entity Recognition (NER) — это направление технологии обработки человеческого языка, программная реализация которой позволяет находить в речи и тексте опредмеченные категории слов и словосочетаний. Сначала это были географические наименования, имена людей, организаций, адреса, однако в настоящее время это понятие сильной расширилось и с помощью NER мы ищем в тексте относительные и абсолютные даты, числа, номера и т.д.
Выявление именованных сущностей — это «ворота» в человеческий язык, оно позволяет выявлять и обрабатывать намерения человека, устанавливать связи слов в его речи и реальным миром.

Читать дальше →

Сравнение российской рэп сцены используя R и техники Text Mining. Noize Mc and Kasta vs Pharaoh and Morgenshtern

Время на прочтение8 мин
Количество просмотров37K

R. Text Mining. Rap


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

Генерация под контролем: как обуздать мощные языковые модели

Время на прочтение5 мин
Количество просмотров3.3K

Intro


Если вы не проспали последние пару-тройку лет, то вы, конечно, слышали от трансформерах — архитектуре из каноничной Attention is all you need. Почему трансформеры так хороши? Например, они избегают рекуррентности, что дает им возможность эффективно создавать такое представление данных, в которое можно запихнуть очень много контекстной информации, что положительно сказывается на возможности генерации текстов и непревзойденной способности к transfer learning.


Трансформеры запустили лавину работ по language modelling — задаче, в которой модель подбирает следующее слово, учитывая вероятности предыдущих слов, то есть выучивая p(x), где x — текущий токен. Как можно догадаться, это задача совсем не требует разметки и потому в ней можно использовать огромные неаннотированные массивы текста. Уже обученная языковая модель может генерировать текст, да так хорошо, что авторы подчас отказываются выкладывать обученные модели.


Но что если мы хотим добавить немного “ручек” к генерации текста? Например, делать условную генерацию, задавая тему или контролируя другие атрибуты. Такая форма уже требует условной вероятности p(x|a), где a — это желаемый атрибут. Интересно? Поехали под кат!

Читать дальше →

Альтернативное понимание контекста с помощью статистической языковой модели

Время на прочтение20 мин
Количество просмотров7.5K
ALM

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

Есть KenLM, SriLM и IRSTLM. Они популярны и используются во многих крупных проектах. Но есть проблемы:

  1. Библиотеки старые, не развиваются.
  2. Плохо поддерживают русский язык.
  3. Работают только с чистым, специально подготовленным, текстом
  4. Плохо поддерживают UTF-8. Например, SriLM с флагом tolower ломает кодировку.

Из списка немного выделяется KenLM. Регулярно поддерживается и не имеет проблем с UTF-8, но она также требовательна к качеству текста.

Когда-то мне потребовалась библиотека для сборки языковой модели. После многих проб и ошибок пришёл к выводу, что подготовка датасета для обучения языковой модели — слишком сложный и долгий процесс. Особенно, если это русский язык! А ведь хотелось как-то всё автоматизировать.

В своих исследованиях отталкивался от библиотеки SriLM. Сразу отмечу, что это не заимствование кода и не fork SriLM. Весь код написан полностью с нуля.
Читать дальше →