nlp engineer что это
NLP-разработчик: кто такой и чем занимается?
Are you ready for pain?
Ingredients
Directions
Кто такой NLP-разработчик?
Не путайте с НЛП головного мозга
У многих людей срабатывает неправильный триггер на аббревиатуру NLP (НЛП) — спам и шарлатанство. Действительно, такое направление как нейролингвистическое программирование существует, но никакого отношения к нашей теме не имеет. НЛП в этом понимании — это техника влияние на подсознание человека, изменение процессов на подкорке, чтобы яснее мыслить, прокачать коммуникабельность и контролировать перепады в настроении и вообще горя не знать.
Базовые скиллы
В первую очередь потребуется хорошая математическая база : если ты прогуливал в ВУЗе матанализ, линейную алгебру и теорию вероятностей, придётся всё навёрстывать, т.к. потребуются хорошие (мы бы сказали фундаментальные) знания в математической статистике, формуле Байеса и принципов максимума правдоподобия. Далее по порядку
Программирование
Нужен опыт разработки от года или двух, скорее всего, это будет Python — основа основ для Data Science, здесь тоже понадобиться в полном объеме на уровне хорошего мидла. Так же потребуется экспириенс работы с библиотеками numpy (числовые массивы), scipy (инжиниринг), matplotlib (визуализация данных)
Плюс работа с фреймворками Flask или Django Rest Framework
Машинное обучение
Теория и практика в области машинного обучения: сбор данных, постановка задач и понимание алгоритмов ( логистическая регрессия, boosting, random forest ). Для этого используют библиотеки scikit-learn и LGBM
Основы NLP
Базы данных
Если ты целишь на сеньора, то стоит основательно подготовится — просьба убрать детей от экрана.
Продвинутый NLP
Умение работать с долгой краткосрочной памятью LSTM (Long short-term memory) — архитектура рекуррентных нейронных сетей, BERT (Bidirectional Encoder Representations from Transformers) — техника машинного обучения для предварительного обучения обработке естественного языка, разработанная Google, GPT-2 — нейросеть для генерации связного текста, word2vec или glove — модели для получения и распределения векторных представлений слов
Пригодятся навыки работы с библиотеками nltk (Natural Language Toolkit) — символьная и статистическая обработка естественного языка, StanfordNLP — токенизация, лемматизация, gensim — неконтролируемого моделирования тем и обработки естественного языка, bigartm — тематическое моделирование, fasttext — классификация текста
Продвинутый ML / Deep Learning
Знание и умение пользоваться такими инструментами, как yargy (извлечение фактов и сущностей), pymorphy (морфологический анализ)
Дополнительно может пригодится
Если умеешь с этим работать, то это будет твоим преимуществом:
Что может входить в обязанности?
На данный момент одно из перспективных направлений в NLP — интерактивные голосовые сервисы и помощники. По итогу вышеперечисленных навыков в твой воркфлоу может входить следующее:
Где искать вакансии NLP-разработчика?
Хороший NLP-разработчик сейчас на вес золота. Советуем чекать такие ресурсы, как: Хабр.Карьера и яразработчик.рф. Так же можно пропарсить такие социальные сети как Linkedin и Twitter — там частенько идёт рекрутинг разработчиков разного калибра
NLP: как стать специалистом по обработке естественного языка
Авторизуйтесь
NLP: как стать специалистом по обработке естественного языка
Рассказывает Ирина Смазневич
Вместе с развитием сферы Data Science растёт и востребованность в кадрах для этой отрасли. Как же стать специалистом в такой части анализа данных, как обработка естественного языка (Natural Language Processing)?
Кадровый рынок в этой сфере пока не очень большой. Хотя вакансий по Data Science кажется довольно много, задачи NLP встречаются в запросах работодателей достаточно редко. И в основном специалистов по обработке естественного языка ищут компании в крупных городах — Москве, Санкт-Петербурге, Новосибирске, Екатеринбурге. При этом работодателями выступают не только корпорации, но и небольшие коллективы разработчиков и даже стартапы. Так что в сегменте NLP для начинающих специалистов есть определённые перспективы.
Специальности и задачи по обработке естественного языка
Чтобы понять, как стать специалистом по обработке естественного языка, разберёмся сначала, какие задачи решаются в этой области и в каких сферах бизнеса эти решения востребованы.
Язык — это сложная совокупность различных уровней, таких как синтаксис, морфология, семантика, дискурс.
20–22 декабря, Онлайн, Беcплатно
Для каждого уровня выделяются свои специфические задачи. Но на практике чаще всего задействуются несколько или все уровни языка. Например, классическими задачами синтаксиса и морфологии являются токенизация (деление текста на слова) и лемматизация (приведение слова к начальной форме). Есть задачи синтаксического анализа теста (парсинга), извлечения сущностей — например, имён и географических названий. С семантикой связаны задачи тематического моделирования (выделения тем в большой коллекции документов) и определения эмоциональной окраски. Уровень дискурса затрагивает задача суммаризации текста. Машинный перевод задействует все уровни языка. Распознавание и генерация устной речи также относятся к сфере NLP.
Следующий вопрос — кому нужны все эти задачи? Их упоминание можно увидеть в объявлениях о найме во многих сферах бизнеса. В частности, в обработке естественного языка заинтересованы контактные центры, которым требуется оперировать большим потоком входящих запросов: разбивать их на категории, определять темы, автоматически подбирать варианты ответов.
Интернет-магазины тоже ищут таких специалистов, потому что улучшают поиск по своим каталогам, внедряют диалоговые и рекомендательные системы. Есть запрос в сфере маркетинга и PR: исследовать освещение деятельности компании в медиа и отслеживать, какой образ создаётся у аудитории — позитивный или негативный. Таким же образом исследуют отзывы и комментарии в соцсетях.
Во многих сферах бизнеса используются чат-боты, например, они востребованы у банков, которые ищут специалистов по обработке естественного языка для своих собственных разработок.
Кроме таких компаний, которым нужны собственные системы под обслуживание своих бизнес-процессов, специалистов по обработке естественного языка ищут многие IT-компании сектора B2B. Они разрабатывают программные решения для продажи своим клиентам. В частности, независимо от отрасли, компаниям с большим потоком входящих документов и обращений могут быть полезны системы, оптимизирующие работу. Нужно распределять обращения по темам и отделам, выделять наиболее важные и негативные, ускорять перевод на другие языки и улучшать поиск по базе данных компании. Многим средним и крупным компаниями рано или поздно приходится сегментировать клиентскую базу.
Необходимые навыки для специалиста по NLP
Какие навыки нужны, чтобы освоить профессию специалиста по обработке естественного языка?
Нужно понимать, что обработка естественного языка состоит из нескольких компонентов: знаний о языке, знаний по математике и статистике и навыков в программировании. Причём математика и программирование важнее лингвистики.
Есть общие требования, которые работодатели предъявляют к претендентам на вакансии по NLP. К ним относятся: знание математики, теории вероятностей, статистики, знание сфер применимости, понимание плюсов и минусов различных семейств алгоритмов машинного обучения (таких как логистическая регрессия, различные алгоритмы кластеризации, нейронные сети, бустинг, случайный лес).
Специалисту по NLP нужно уметь работать с базами данных и знать SQL. Иногда требуются знания не только реляционных БД и соответствующих инструментов (PostgreSQL, MySQL, MS SQL, Oracle), но и понимание NoSQL-систем (Cassandra, Redis, MongoDB). Может понадобиться знакомство с фреймворками для работы с большими данными и с различными поисковыми движками.
Обязательным условием является знание структур данных.
Следующая категория навыков связана с языком: необходимо представление о морфологическом, графематическом, синтаксическом анализе. Нужно владеть алгоритмами и техниками, специфическими для задач обработки естественного языка, разбираться в таких вещах, как тематическое моделирование, информационный поиск, дистрибутивная семантика.
Какой язык программирования необходимо освоить? Тут нет однозначного ответа. Наиболее часто встречается запрос на Python, реже специалистам по NLP требуется знание R. Для разработки конечных решений программистам чаще всего нужны Java, C#/C++, Scala.
Наиболее часто встречается запрос на Python, реже специалистам по NLP требуется знание R.
Кроме того, есть набор технологий, с которыми нужно уметь обращаться. Это стек технологий Data Science для Python.
Базовые библиотеки для любого аналитика данных — pandas (для работы с данными в табличном виде), numpy (для работы с большими числовыми массивами) и scipy (для вычислений). Для визуализации могут понадобиться библиотеки matplotlib и seaborn. Для машинного обучения требуется знание основной библиотеки scikit-learn и других специфицированных библиотек (например, XGBoost и LGBM для градиентного бустинга). Для задач обработки естественного языка нужно разбираться в содержании специальных библиотек: nltk, StanfordNLP, spacy, gensim, bigartm, word2vec, fasttext.
Нужен опыт построения глубоких нейронных сетей с использованием фреймворков Tensorflow, Keras, PyTorch. И, конечно, желательно уметь работать с инструментами, рассчитанными именно на русский язык, такими как pymystem3, pymorphy — для морфологического анализа, Tomita parser, yargy — для извлечения фактов и сущностей. Кроме того, нужно уметь тестировать методы обработки текстовых данных и знать методики оценки качества моделей.
Конечно, это программа-максимум. В зависимости от конкретных задач работодателя может понадобиться тот или иной язык программирования, тот или иной стек технологий. Плюсом для разработчиков решений NLP является наличие собственных проектов на GitHub, а также сертификатов об участии в Kaggle и других соревнованиях по машинному обучению. Также от претендентов ожидают достаточного уровня английского, но это универсальное требование.
Где освоить профессию специалиста по NLP?
В вакансиях по NLP в большинстве случаев требуется профильное образование по информатике, вычислительной математике, физике или связанным областям. Иногда — не ниже магистратуры или специалитета.
Но есть и другие варианты: например, обучение в вузе по специальности «компьютерная лингвистика». Выпускником такой образовательной программы является Полина Казакова, Data Scientist в проекте IRELA, сотрудник Центра анализа больших данных МИСиС. Она занимается разработкой систем анализа данных для различных компаний, то есть как раз обработкой естественного языка.
«Я училась в Высшей школе экономики на программе “Фундаментальная и компьютерная лингвистика”, которая работает в рамках филологического направления, — рассказывает Полина. — Эта программа совмещает в себе теоретическую лингвистику, то есть фундаментальные научные знания о самом языке, и прикладные методы анализа данных, а также программистские навыки. Таким штукам мало где учат в России».
Кроме указанной программы по компьютерной лингвистике ВШЭ (которая также открыта в двух филиалах вуза), в России есть ещё несколько учебных программ по компьютерной лингвистике.
Магистратура по специальности NLP есть в СПбГУ на кафедре информационных систем в искусстве и гуманитарных науках. Несмотря на то, что кафедра относится к гуманитарному факультету, программа «Инженерия гуманитарных знаний» рассчитана на программистов.
В МФТИ на кафедре распознавания изображений и обработки текста факультета инноваций и высоких технологий (ФИВТ) действует магистратура по компьютерной лингвистике. Кафедра была основана в 2006 году компанией ABBYY.
В МГУ на филологическом факультете действуют программы бакалавриата и магистратуры по направлению «Фундаментальная и прикладная лингвистика».
В РГГУ открыта магистратура по этому же направлению с профилем «Фундаментальная и компьютерная лингвистика».
Стоит ли поступать на компьютерную лингвистику ради работы в NLP?
«Сама эта программа по компьютерной лингвистике преследует благую цель: совместить теорию с практикой, — говорит Полина. — У нас были теоретические дисциплины, связанные с синтаксисом, фонетикой, морфологией и прочим, и были попытки ввести точные дисциплины, такие как математический анализ, линейная алгебра, статистика, основы программирования и даже машинного обучения. А машинное обучение, как вы догадываетесь, в последнее время очень активно применяется в обработке естественного языка (хотя и не во всех задачах, кое-где до сих пор обходятся rule-based подходом).
Возвращаясь к программе, кажется, что идея прикольная — столько всего совместить. Но на практике получается, что в одинаковой степени дать два фундаментальных образования в одном не получается, поэтому у нас было очень неплохое фундаментальное лингвистическое образование и… была какая-то математика.
Наверное, этого достаточно для того, чтобы начать работать в области NLP, но дальше всё равно понадобятся более глубокие знания. После окончания бакалавриата я поняла, что мне не хватает фундаментальных знаний из основного курса математики. Поэтому сейчас я, например, самостоятельно занимаюсь матанализом и линейной алгеброй.
Мой совет людям, которые хотят заниматься обработкой естественного языка: идите на техническую специальность и параллельно изучайте какие-то лингвистические штуки, потому что на самом деле узкоспецифические знания о языке очень редко пригождаются в практических задачах машинного обучения. Особенно сейчас, когда есть нейросети, которые на большом наборе хорошо размеченных данных сами выводят все правила, которые лингвисты могли бы составить вручную. Можно сказать, что хорошая квалификация в лингвистике иногда может дать какой-то профит в NLP, но в большинстве случаев скорее нужна хорошая квалификация в машинном обучении. Так считаю не только я, но и мои коллеги-технари».
Идите на техническую специальность и параллельно изучайте какие-то лингвистические штуки
Кто же занимается разметкой текстовых данных для нейросетей и вообще для тренировки моделей машинного обучения?
«Это хороший вопрос. Разметка — это общая боль всех — и лингвистов, и специалистов по машинному обучению и обработке естественного языка», — говорит Полина Казакова. Хорошую разметку достаточного объёма получить непросто, для этого нужны люди, которые вручную будут размечать массив данных. И составлением методологии разметки текста должны заниматься как раз лингвисты. Например, для задачи токенизации они должны сформировать правила деления текста на слова (учитывая сложные случаи типа «диван-кровать», «какой-нибудь», «90-й год»). И после этого можно уже привлечь почти случайных людей, которые будут размечать текст в соответствии с заданными правилами. Кстати говоря, этой задачей — разметкой данных — могут заниматься стажёры, которые хотят дальше развиваться в направлении Data Science/NLP. Время от времени такие вакансии появляются.
Несмотря на всеобщую потребность в выпускниках технических специальностей, иногда в команды программистов и математиков требуются именно эксперты по языку. Полина вспоминает один такой случай: «У компании Samsung есть голосовой помощник, и недавно они начали в России активно набирать на работу именно лингвистов. Они занимаются распознаванием и синтезом речи, и взяли на работу мою однокурсницу — крутого фонетиста-теоретика, при том что у неё не было никакого опыта программирования и она не знала, что такое нейросети. Её взяли из-за специфических лингвистических знаний, но по моему ощущению, это исключительный случай».
Дополнительное образование в сфере NLP
Какое бы базовое образование вы ни получили — лингвистическое или математическое — вы всегда можете обнаружить, что каких-то знаний не хватает, тем более что NLP и Data Science активно развиваются. Как получить дополнительное образование?
Школа анализа данных (ШАД) — программа «Яндекса», обучение по которой работодатели часто упоминают в качестве преимущества потенциального кандидата. Как следует из названия, там даются основы машинного обучения и анализа данных. По формату школа больше похожа на полноценную магистратуру, чем на дополнительное образование. Программа рассчитана на два года, обучение — очное в вечернее время (филиалы есть в Москве, Минске, Екатеринбурге и Нижнем Новгороде) и заочное для иногородних студентов. В ШАД можно бесплатно поступить по конкурсу (что довольно сложно, конкурс большой), а в случае недобора баллов учиться платно — правда, только в Москве и только очно.
Записи лекций ШАД по некоторым предметам доступны для всех желающих. Некоторые из избранных курсов пригодятся будущему специалисту по NLP:
Чтобы дополнить свое образование, можно пройти онлайн-обучение, например, на платформе Coursera.
Есть несколько вариантов обучения на российской платформе «Открытое образование». Особенность этой платформы в том, что она создана при участии ведущих российский вузов, все курсы доступны там бесплатно, но при этом есть возможность получить сертификат и зачесть прохождение этих курсов в своём университете. На зарубежных платформах часто курсы можно пройти бесплатно, но за сертификат придётся заплатить.
NLP. Основы. Техники. Саморазвитие. Часть 1
Привет! Меня зовут Иван Смуров, и я возглавляю группу исследований в области NLP в компании ABBYY. О том, чем занимается наша группа, можно почитать здесь. Недавно я читал лекцию про Natural Language Processing (NLP) в Школе глубокого обучения – это кружок при Физтех-школе прикладной математики и информатики МФТИ для старшеклассников, интересующихся программированием и математикой. Возможно, тезисы моей лекции кому-то пригодятся, поэтому поделюсь ими с Хабром.
Поскольку за один раз все объять не получится, разделим статью на две части. Сегодня я расскажу о том, как нейросети (или глубокое обучение) используются в NLP. Во второй части статьи мы сконцентрируемся на одной из самых распространенных задач NLP — задаче извлечения именованных сущностей (Named-entity recognition, NER) и разберем подробно архитектуры ее решений.
Что такое NLP?
Это широкий круг задач по обработке текстов на естественном языке (т. е. на языке, на котором говорят и пишут люди). Существует набор классических задач NLP, решение которых несет практическую пользу.
Первый и один из самых важных с практической точки зрения способов применения — классификация писем на спам и хам (не спам).
Другой классический вариант — многоклассовая классификация новостей по категориям (рубрикация) — внешняя политика, спорт, шапито и т. п. Или, допустим, вам приходят письма, и вы хотите отделить заказы из интернет-магазина от авиабилетов и броней отелей.
Третий классический вариант применения задачи текстовой классификации — сентиментный анализ. Например, классификация отзывов на положительные, отрицательные и нейтральные.
Примерами других часто выделяемых отношений являются отношения купли/продажи (Purchase and Sale), владения (Ownership), факт рождения с атрибутами — датой, местом и т. д. (Birth) и некоторые другие.
Задача кажется не имеющей очевидного практического применения, но, тем не менее, она используется при структуризации неструктурированной информации. Кроме того, это важно в вопросно-ответных и диалоговых системах, в поисковиках — всегда, когда вам нужно анализировать вопрос и понимать, к какому типу он относится, а также, какие ограничения есть на ответ.
Почему решать задачи NLP сложно?
Формулировки задач не очень сложные, однако сами задачи вовсе не являются простыми, потому что мы работаем с естественным языком. Явления полисемии (многозначные слова имеют общий исходный смысл) и омонимии (разные по смыслу слова произносятся и пишутся одинаково) характерны для любого естественного языка. И если носитель русского хорошо понимает, что в теплом приеме мало общего с боевым приемом, с одной стороны, и теплым пивом, с другой, автоматической системе приходится долго этому учиться. Почему «Press space bar to continue» лучше перевести скучным «Для продолжения нажмите пробел», чем «Бар космической прессы продолжит работу».
Как решают задачи NLP
В отличие от обработки изображений, по NLP до сих пор можно встретить статьи, где описываются решения, использующие не нейросетки, а классические алгоритмы типа SVM или Xgboost, и показывающие результаты, не слишком сильно уступающие state-of-the-art решениям.
Тем не менее, несколько лет назад нейросети начали побеждать классические модели. Важно отметить, что для большинства задач решения на основе классических методов были уникальные, как правило, не похожие на решения других задач как по архитектуре, так и по тому, как происходит сбор и обработка признаков.
Однако нейросетевые архитектуры намного более общие. Архитектура самой сети, скорее всего, тоже отличается, но намного меньше, идет тенденция в сторону полной универсализации. Тем не менее, то, с какими признаками и как именно мы работаем, уже практически одинаково для большинства задач NLP. Отличаются только последние слои нейросеток. Таким образом, можно считать, что сформировался единый пайплайн NLP. Про то, как он устроен, мы сейчас расскажем подробнее.
Pipeline NLP
Этот способ работы с признаками, который более-менее одинаков для всех задач.
Когда речь идет о языке, основная единица, с которой мы работаем, это слово. Или более формально «токен». Мы используем этот термин, потому что не очень понятно, что такое 2128506 — это слово или нет? Ответ не очевиден. Токен обычно отделен от других токенов пробелами или знаками препинания. И как можно понять из сложностей, которые мы описали выше, очень важен контекст каждого токена. Есть разные подходы, но в 95% случаев таким контекстом, который рассматривается при работе модели, выступает предложение, включающее исходный токен.
Многие задачи вообще решаются на уровне предложения. Например, машинный перевод. Чаще всего, мы просто переводим одно предложение и никак не используем контекст более широкого уровня. Есть задачи, где это не так, например, диалоговые системы. Тут важно помнить, о чем систему спрашивали раньше, чтобы она могла ответить на вопросы. Тем не менее, предложение — тоже основная единица, с которой мы работаем.
Поэтому первые два шага пайплайна, которые выполняются практически для решения любых задач – это сегментация (деление текста на предложения) и токенизация (деление предложений на токены, то есть отдельные слова). Это делается несложными алгоритмами.
Дальше нужно вычислить признаки каждого токена. Как правило, это происходит в два этапа. Первый – вычислить контекстно-независимые признаки токена. Это набор признаков, которые никак не зависят от окружающих наш токен других слов. Обычные контекстно-независимые признаки – это:
Один из самых часто использующихся признаков — часть речи или POS-тег (part of speech). Такие признаки могут быть важны для решения многих задач, например задачи синтаксического парсинга. Для языков со сложной морфологией, типа русского языка, также важны морфологические признаки: например, в каком падеже стоит существительное, какой род у прилагательного. Из этого можно сделать разные выводы о структуре предложения. Также, морфология нужна для лемматизации (приведения слов к начальным формам), с помощью которой мы можем сократить размерность признакового пространства, и поэтому морфологический анализ активно используется для большинства задач NLP.
Когда мы решаем задачу, где важно взаимодействие между различными объектами (например, в задаче relation extraction или при создании вопросно-ответной системы), нам нужно многое знать про структуру предложения. Для этого нужен синтаксический разбор. В школе все делали разбор предложения на подлежащее, сказуемое, дополнение и др. Синтаксический разбор – это что-то в этом духе, но сложнее.
Еще одним примером дополнительного признака является позиция токена в тексте. Мы можем априори знать, что какая-то сущность чаще встречается в начале текста или наоборот в конце.
Все вместе – эмбеддинги, символьные и дополнительные признаки – формируют вектор признаков токена, который не зависит от контекста.
Контекстно-зависимые признаки
Контекстно-зависимые признаки токена — это набор признаков, который содержит информацию не только про сам токен, но и про его соседей. Есть разные способы вычислить эти признаки. В классических алгоритмах люди часто просто шли «окном»: брали несколько (например, три) токенов до исходного и несколько токенов после, а затем вычисляли все признаки в таком окне. Такой подход ненадежен, так как важная информация для анализа может находиться на расстоянии, превышающем окно, соответственно, мы можем что-то пропустить.
Поэтому сейчас все контекстно-зависимые признаки вычисляются на уровне предложения стандартным образом: с помощью двухсторонних рекуррентных нейросетей LSTM или GRU. Чтобы получить контекстно-зависимые признаки токена из контекстно-независимых, контекстно-независимые признаки всех токенов предложения подаются в Bidirectional RNN (одно- или несколько- слойный). Выход Bidirectional RNN в i-ый момент времени и является контекстно-зависимым признаком i-того токена, который содержит информацию как о предыдущих токенах (т.к. эта информация содержится в i-м значении прямого RNN), так и о последующих (т.к. эта информация содержится в соответствующем значении обратного RNN).
Дальше для каждой отдельной задачи мы делаем что-то свое, но первые несколько слоев — вплоть до Bidirectional RNN можно использовать для практически любых задач.
Такой способ получения признаков и называется пайплайном NLP.
Стоит отметить, что в последние 2 года исследователи активно пытаются усовершенствовать пайплайн NLP — как с точки зрения быстродействия (например, transformer — архитектура, основанная на self-attention, не содержит в себе RNN и поэтому способна быстрее обучаться и применяться), так и с точки зрения используемых признаков (сейчас активно используют признаки на основе предобученных языковых моделей, например ELMo, или используют первые слои предобученной языковой модели и дообучают их на имеющемся для задачи корпусе — ULMFit, BERT).
Словоформенные эмбеддинги
Давайте подробнее разберем, что же такое эмбеддинг. Грубо говоря, эмбеддинг — это сжатое представление о контексте слова. Почему важно знать контекст слова? Потому что мы верим в дистрибутивную гипотезу — что похожие по смыслу слова употребляются в сходных контекстах.
Давайте теперь попытаемся дать строгое определение эмбеддинга. Эмбеддинг – это отображение из дискретного вектора категориальных признаков в непрерывный вектор с заранее заданной размерностью.
Каноничный пример эмбеддинга – это эмбеддинг слова (словоформенный эмбеддинг).
Что обычно выступает в роли дискретного вектора признаков? Булев вектор, соответствующий всевозможным значениям какой-то категории (например, все возможные части речи или все возможные слова из какого-то ограниченного словаря).
Для словоформенных эмбеддингов такой категорией обычно выступает индекс слова в словаре. Допустим, есть словарь размерностью 100 тысяч. Соответственно, каждое слово имеет дискретный вектор признаков – булев вектор размерности 100 тысяч, где на одном месте (индексе данного слова в нашем словаре) стоит единичка, а на остальных – нули.
Почему мы хотим отображать наши дискретные вектора признаков в непрерывные заданной размерности? Потому что вектора размерностью 100 тысяч не очень удобно использовать для вычислений, а вот вектора целых чисел размерности 100, 200 или, например, 300, — намного удобнее.
В принципе, мы можем не пытаться накладывать никаких дополнительных ограничений на такое отображение. Но раз уж мы строим такое отображение, давайте попытаемся добиться, чтобы вектора похожих по смыслу слов также были в каком-то смысле близки. Это делается с помощью простой feed-forward нейросетки.
Обучение эмбеддингов
Как эмбеддинги обучаются? Мы пытаемся решить задачу восстановления слова по контексту (или наоборот, восстановления контекста по слову). В простейшем случае мы получаем на вход индекс в словаре предыдущего слова (булев вектор размерности словаря) и пытаемся определить индекс в словаре нашего слова. Делается это с помощью сетки с предельно простой архитектурой: два полносвязных слоя. Сначала идет полносвязный слой из булева вектора размерности словаря в скрытый слой размерности эмбеддинга (т.е. просто умножение булева вектора на матрицу нужной размерности). А потом наоборот, полносвязный слой с softmax из скрытого слоя размерности эмбеддинга в вектор размерности словаря. Благодаря функции активации softmax, мы получаем распределение вероятностей нашего слова и можем выбрать самый вероятный вариант.
Эмбеддингом i-го слова будет просто i-я строка в матрице перехода W.
В используемых на практике моделях архитектура сложнее, но ненамного. Главное отличие в том, что мы используем не один вектор из контекста для определения нашего слова, а несколько (например, все в окне размера 3). Несколько более популярным вариантом является ситуация, когда мы пытаемся предсказать не слово по контексту, а наоборот контекст по слову. Такой подход называется Skip-gram.
Давайте приведем пример применения задачи, которая решается во время обучения эмбеддингов (в варианте CBOW — предсказания слова по контексту). Например, пусть контекст токена состоит из 2 предыдущих слов. Если мы обучались на корпусе текстов про современную русскую литературу и контекст состоит из слов “поэт Марина”, то, скорее всего, самым вероятным следующим словом будет слово “Цветаева”.
Подчеркнем еще раз, эмбеддинги только обучаются на задаче предсказания слова по контексту (или наоборот контекста по слову), а применять их можно в любых ситуациях, когда нам нужно вычислить признак токена.
Какой бы вариант мы ни выбрали, архитектура эмбеддингов очень несложная, и их большой плюс в том, что их можно обучать на неразмеченных данных (действительно, мы используем только информацию о соседях нашего токена, а для их определения нужен только сам текст). Получившиеся эмбеддинги — усредненный контекст именно по такому корпусу.
Эмбеддинги словоформ, как правило, обучаются на максимально большом и доступном для обучения корпусе. Обычно это вся Википедия на языке, потому что ее всю можно выкачать, и любые другие корпуса, которые получится достать.
Похожие соображения используются и при предобучении для современных архитектур, упомянутых выше — ELMo, ULMFit, BERT. Они тоже используют при обучении неразмеченные данные, и поэтому обучаются на максимально большом доступном корпусе (хотя сами архитектуры, конечно, сложнее, чем у классических эмбеддингов).
Зачем нужны эмбеддинги?
Как уже было упомянуто, для использования эмбеддингов есть 2 основные причины.
В следующей части нашей статьи мы поговорим о задаче NER. Мы расскажем о том, что это за задача, зачем она нужна и какие подводные камни могут скрываться в ее решении. Мы расскажем подробно про то, как эту задачу решали с помощью классических методов, как ее стали решать с помощью нейросетей, и опишем современные архитектуры, созданные для ее решения.