Мечтают ли голосовые ассистенты о электропоэзии? Интервью с Татьяной Ландо: лингвистом-аналитиком Google
24 августа мы поговорили в прямом эфире с Татьяной Ландо, лингвистом-аналитиком в Google. Татьяна работает над Google-ассистентом и занимается проектами между продакшеном и рисерчем. Она исследует, как люди разговаривают друг с другом и какие стратегии используют, чтобы использовать это в обучении ассистента более человеческому поведению. В Google пришла работать над ассистентом для русского рынка и русского языка. До этого 8 лет работала в Яндексе. Занималась лингвистическими технологиями, извлечением фактов из неструктурированного текста. Татьяна одна из основателей конфернции AINL: Artificial Intelligence and Natural Language Conference.
Делимся с вами расшифровкой эфира.
Когда я говорю, что я лингвист, в лучшем случае меня спрашивают, читала ли я Стругацких, где было про «структуральнейших лингвистов». В худшем случае меня спрашивают, сколько языков я знаю. Лингвисты — это не те люди, которые знают много языков. Много языков могут знать люди с любой специальностью, это не связано. Лингвист — это такой человек, который понимает, как устроен язык, как устроено общение между людьми. Это большая научная дисциплина, в ней очень много аспектов кроме того, чем занимаюсь я. Есть анализ текстов для установления авторства, есть лингвистика в криминалистике — когда лингвисты определяют, есть ли в тексте экстремизм, например. Это как пример.
Компьютерная лингвистика, которой занимаюсь я, в основном направлена на разработку речевых интерфейсов между технологиями, компьютерами и людьми, с одной стороны, а также внедрением численных методов в обработку языка. Есть целое направление корпусной лингвистики — когда мы пытаемся автоматически обрабатывать тексты в больших количествах, чтобы сделать выводы о том, как устроен язык, на основе полученных данных. Я занимаюсь Google-ассистентом — это такой голосовой интерфейс между телефоном или компьютером и человеком.
До того, как переехать в Лондон и начать работать в Google, я 7.5 лет работала в Яндексе, где тоже занималась компьютерной лингвистикой. Задачи, которыми я занималась в Яндексе, покрывали довольно широкий спектр задач компьютерной лингвистики. Мы занимались морфологией, синтаксисом — то, как слова изменяются, то, как слова сочетаются; русский язык в этом плане сложнее английского, так как в английском нет падежей, есть только две формы существительных, все сравнительно просто (в русском — 6–9 падежей, странное образование множественного числа — ну, все носители языка знают эти особенности). Поэтому, когда я перешла в Google, меня взяли как специалиста по русскому языку, хотя теперь я уже занимаюсь другим.
Есть ли вакансии, связанные с разработкой русской версии Google-ассистента? Как попасть к вам на работу, связанную с Google-ассистентом?
Специальных вакансий, связанных с русской версией Google-ассистента, нет. Google старается разрабатывать методологии, направленные на максимальное количество языков сразу, и специфика языков должна решаться с помощью данных, а не с помощью специальных методологий. То есть, алгоритмы для русского, английского, немецкого, китайского — всех поддерживаемых языков сделаны одинаково, хотя и с нюансами. Там очень много общих частей, и люди, которые занимаются определенным языком, в основном следят за качеством данных и добавляют специальные модули для отдельных языков. Например, для русского и других славянских языков нужна морфология (это то, о чем я только что говорила — падежи, образование множественного числа, сложные глаголы). А в турецком языке еще более сложная морфология — если в русском языке только 12 форм существительных, то в турецком намного больше. Поэтому нужны какие-то специальные модули, которые обрабатывают языкозависимые части. Но это делается с помощью лингвистов, которые знают свой родной язык, и языковых инженеров широкого профиля, которые пишут алгоритмы с помощью данных; мы вместе работаем над качеством этих алгоритмов и данных. Соответственно, специальных вакансий для русского языка у нас нет, но есть вакансии в разработке Google-ассистента, в основном, в Цюрихе, в Калифорнии, в Нью-Йорке, совсем немного — Лондоне.
Почему Лондон, а не Европа или США?
4 года назад, когда я переезжала, Лондон все еще был Европой. Собственно, он и сейчас Европа, хотя и не ЕС. Мне очень нравится Лондон, все говорят по-английски, не нужно учить другой язык. Не то чтобы мне не хотелось учить другой язык, но вхождение в переезд было минимальным. Еще здесь отличные театры, я очень люблю ходить в театр. Конечно, сейчас этот все плюсы Лондона с культурой и развлечениями несколько нивелируются, но будем надеяться на лучшее. К тому же, с визой здесь гораздо проще, чем в Цюрихе — в Швейцарии почему-то регулярно меняется визовое законодательство. Оказалось гораздо проще посадить меня и еще нескольких ребят в Лондон, и мы тут осели. Мне здесь нравится, никуда не хочу переезжать. Командировки в Калифорнию меня вгоняют в тоску — там нужно брать машину, огромные расстояния. Хотя карьерных возможностей там больше.
Сложный ли русский язык?
Он сложнее, чем английский. Собственно, почти все языки сложнее, чем английский. У этой сложности есть две разных стороны. Во-первых, та самая сложная морфология. Кроме того, в русском языке свободный порядок слов, что усложняет работу при построении алгоритма. Если он фиксирован, то для условного «мама мыла раму» нужно одно предложение, чтобы научить систему понимать «подлежащее-сказуемое-дополнение». Но если эти слова могут стоять в любом порядке, данных нужно больше. При этом для английского языка есть очень много готовых ресурсов; весь научный мир занимается английским языком, все корпорации занимаются английским языком, потому что конкурируют на американском рынке. А другими языками занимаются гораздо меньше, там меньше финансирования, меньше компаний. Если для немецкого или французского еще есть готовые куски или готовые данные, которые можно переиспользовать, то с русским языком хуже. Готовые корпуса есть, но они небольшие и не для всего подходят. То есть, данных для русского языка требуется гораздо больше, чем для английского, но их меньше доступно. Плюс дополнительные грамматические слои; ту же морфологию можно пытаться понимать отдельно, тогда можно сократить количество данных, которые нужны для качественной работы парсера на русском (по сравнению с английским).
Поэтому получается, что русский язык довольно тяжелый, как и другие славянский языки. Тюркские языки еще тяжелее; у восточных языков есть другие проблемы: например, у китайского нет пробелов между словами, надо понимать, как разбивать массив текста на кусочки, чтобы определять, что в каждом кусочке говорится. В общем, у каждого языка -свои приколы, но все в основном можно решить за счет больших объемов языковых данных, на которых решаются задачи. Все упирается в то, что для русского языка их не очень много, и поэтому с ним тяжело работать, а для английского — наоборот.
Может ли компьютерная лингвистика восстанавливать непонятные места, например, в переговорах пилотов с землей?
Да, конечно. В принципе, алгоритм, который бы это делал, был бы похож на поисковые подсказки. Когда вы вводите запрос в поиск (для любого языка), система предлагает вам самые популярные запросы, с некоторой фильтрацией. Алгоритм, конечно, несколько более сложный, но замнем для ясности. Система подсказывает наиболее частые комбинации слов в запросе, начиная с тех, что вы уже ввели. Похожую методику можно использовать для восстановления непонятных мест. Переговоров очень много, это огромный корпус текстов, и их можно анализировать и смотреть, какие куски чаще всех встречаются. Я сама никогда не занималась темой переговоров летчиков с землей, но я подозреваю, что похожих предложений должно быть много, структура информации довольно кодифицирована, способ общения стандартен — такие вещи довольно легко предсказывать, поэтому можно легко восстановить.
Расскажите про акустику и очищение звукового сигнала в голосовых ассистентах
Про это я почти ничего не знаю, я занимаюсь только письменным текстом. Фонетика, акустика — это не мои области. Но я уверена, что есть звуковые методы, которые помогают очистить сигнал, и на пересечении между звуковыми сигналами и предсказательным механизмом можно отфильтровать гипотезы и восстановить текст.
Какой язык самый сложный в плане обработки и понимания?
Они все сложные. Нет такого, что какой-то из них сложнее или проще сам по себе; для английского есть очень много данных, поэтому работать с ним проще, и им все занимаются.
Получается замкнутый круг: когда люди на конференциях хотят опробовать новый алгоритм, они берут известные корпуса и смотрят, как растут цифры на метриках. Чтобы померить свой алгоритм, нужен хороший корпус; на английском есть много хороших корпусов, поэтому они гоняют алгоритмы на английском на них, получают прирост, и тем самым стимулируют других исследователей делать еще больше корпусов, чтобы находить дырки в алгоритмах. Это задача, на которую легко получить грант. Например, есть 10 алгоритмов автоматического ответа на вопросы; на имеющихся корпусах эти алгоритмы более-менее похожи, и исследователи решают сделать новый корпус, чтобы увидеть разницу между ними. Это хорошая задача, она позволяет лучше настроить алгоритмы. Они это делают, и появляется еще больше корпусов для английского –, а чем больше корпусов, тем больше появляется алгоритмов. Если посмотреть на работы в области NLP за последние несколько лет — на конференциях измеряются даже не проценты, а доли процента прироста качества.
В целом, это не слишком помогает в практических задачах, и это — не совсем компьютерная лингвистика. Это — то, как инженеры занимаются языком, если они не работают с лингвистами (то есть, или посредственно, или очень теоретически).
Почему для русского языка мало данных?
Меня этот вопрос мучает все годы занятия русским языком, с университета, в котором я училась прикладной лингвистике.
Я не знаю. Может, в русской науке просто мало денег, и поэтому для русского языка делается мало данных. Конференции в России в целом немного устаревшие; есть конференции по прикладной лингвистике, по автоматической обработке естественного языка, но очень мало больших коллективов, которые этим занимаются. Ученые уходят в большие компании — Яндекс, ABBYY, сейчас МТС тоже нанимает лингвистов; профессия стала более востребована с появлением голосовых ассистентов. За рубеж тоже уезжают; лингвистов много в стартапах, в Amazon и Google.
Единственный большой корпус — это «Национальный корпус русского языка». Есть еще корпус, который сделали мои приятели — «Открытый корпус русского языка»; но, в целом, под это очень сложно получить финансирование, и это мало кому интересно.
Были соревнования алгоритмов, под которые создавались небольшие корпуса под конкретные задачи — например, сравнение того, как система отвечает на вопросы на русском языке или понимает команды на русском языке –, но этих данных недостаточно для тренировки больших систем. Получается тоже замкнутый круг в другую сторону: тренировать не на чем, поэтому тренировать нечего, поэтому мерить тоже нечего, поэтому нет данных. Плюс, данных нужно больше, чем для английского. После получения диплома я почти сразу ушла в Яндекс, поэтому мне сложно сказать, почему здесь не получается.
Какой подход в обработке языка больше используется Google? Нейросети или алгоритмы?
Нейросети — это тоже алгоритмы. Немного не понимаю дихотомию, но попробую рассказать, какие у нас (и вообще) есть подходы в аналитической обработке языка в компьютерной лингвистике.
Самые исторически старые подходы — это подходы, основанные на правилах. Лингвисты руками пишут правила, практически как язык программирования. Допустим, в воспринимаемом тексте сначала стоит подлежащее, потом — глагол, потом — сказуемое; если сказуемое в одном падеже, тогда — один вывод, и так далее. Например, для случаев, когда пользователь говорит что-то вроде «окей Гугл, поставь будильник на 7 утра», можно сделать такое правило: поставь — любое слово — будильник — на — цифра — утра. Это шаблон, который можно описать и научить систему: если ты применяешь такой шаблон, и он срабатывает, то надо поставить будильник на указанное в виде цифры время. Конечно, это очень примитивный шаблон, можно делать гораздо сложнее. Они могут комбинироваться: например, один шаблон извлекает дату и время, потом поверх него пишется шаблон для установки будильника.
Это очень старый подход, ему лет 70 уже — так была написана Элиза, первый чат-бот, притворявшийся психоаналитиком, в 1966 году. Тогда люди очень удивлялись. Ходили байки, что создатели этого чат-бота показывали его коллегам, и те выгоняли их из комнаты, чтобы поговорить с «настоящим» психоаналитиком. И этот бот был написан только на правилах — тогда это был прорывной подход. Сейчас, конечно, мы не хотим так делать, потому что правил нужно очень много — представьте, сколько разных фраз можно использовать только для того, чтобы ставить будильник, при использовании чистых правил приходилось бы описывать каждую из них вручную. Мы давно перешли на гибридные системы: они могут воспринимать шаблоны, но в целом мы стараемся использовать нейронные сети для машинного обучения и применять supervised-подходы к обучению с учителем. То есть, мы размечаем данные и говорим: ок, в этом массиве того, что может сказать пользователь, эта часть — время, и она нормализуется так-то; эта часть — девайс, на котором пользователь хочет поставить будильник, а эта — допустим, имя будильника. Чтобы можно было конкретно на iPhone поставить будильник на 7 утра с названием «Школа». Дальше мы задаем большой корпус, обучаем на нем парсер, дальше парсер применяется к запросам пользователей, и мы таким образом их распознаем. Так сейчас работает Google-ассистент, и такой подход мы сейчас используем.
Это звучит примитивно, сейчас в литературе и новостях часто проскакивает информация про то, как нейронные сети обучаются сами на огромных корпусах, на все отвечают и поддерживают беседы. Это, конечно, так, и это классно, но подобные подходы бесполезны в случаях, когда нужно, чтобы система не только ответила, но и изменила свое состояние — хотя бы с установкой будильника. Все равно требуется внутреннее представление, к которому надо как-то привести то, что сказал пользователь. Даже если у нас будет огромный массив текстов, в которых пользователь просит поставить будильник, и он не будет размечен, то мы не сможем так обучить парсер, чтобы он менял систему. Мы сможем обучить его так, чтобы он впопад ответил «Да, я ставлю будильник» — и ничего не сделал. Но обучить систему так, чтобы она меняла свое состояние, с использованием неразмеченных данных, пока невозможно. Поэтому то, что недавно выпускали OpenAI и DeepMind — часть Alphabet, родительской компании Google — это круто, это хорошие методики для чат-ботов, которые отвечают человеку, но методик, исключающих ручной труд для изменения состояния системы, нет. Поэтому, к сожалению, сейчас в индустрии довольно низкие стандарты в этом смысле — применительно не только к Google-ассистенту; все ассистенты работают на приблизительно одинаковых подходах с большим количеством ручной работы — либо по обработке данных для парсеров, либо по написанию правил (чего мы не хотим делать). Ручную работу мы стараемся делать с помощью партнерских компаний.
Расскажите о перспективных направлениях в разработке Google-ассистента.
Собственно, то, что мы только что обсуждали. Направление — придумать новую систему обучения, которая могла бы из данных менять состояние системы, не требуя ручной обработки данных. Вот это было бы круто. Но пока, хотя у меня уже есть большой опыт работы с ассистентами, мне трудно представить даже то, как такая система работала бы в принципе. Я понимаю, как сейчас усложняются нейронные сети, методы обучения, гибридные подходы, как усложняется подготовка данных для обучения –, но того, как сделать прямую связку между данными без учителя и изменением системы, я не понимаю. Должно быть какое-то внутреннее представление, которое позволило бы так сделать. Если кто-то сможет произвести революцию и придумать эту часть заново, было бы классно.
Плюс, сейчас много вкладываются в генерацию этого внутреннего представления — то есть, если мы не можем перейти напрямую от данных без разметки к изменению состояния системы, надо сделать алгоритм, который поможет сделать что-то среднее. Допустим, сгенерировать представление системы из текста, а потом люди почистили бы его — вместо того, чтобы создавать с нуля. Это очень перспективное направление, и хотя прогресса в нем пока мало, исследователи смотрят именно туда.
Плюс — новые сигналы для ответов и для разговорной вменяемости ассистентов. И методы оценки. Сейчас у нас (то есть, в индустрии вообще) нет ни одного адекватного метода оценки качества диалоговых систем, ни одной метрики, по которой можно было бы сравнивать Ассистента, Алису, Алексу, Сири и так далее. Можно опрашивать пользователей, пытаться решать однотипные сценарии с разными ассистентами и делать выводы из этого, но ни одной подходящей количественной метрики не существует. Для машинного перевода метрика есть, и более-менее нормальная, а для этого — ничего; это — одна из проблем, которые сейчас обсуждаются в индустрии, на конференциях. Диалоговые корпуса для английского, наконец, начали делать; их тоже очень мало. Метрики считать не на чем, некому и непонятно, как. Если у кого-то появится хорошая идея, то этот человек соберет все лавры на конференциях, сделает стартап и продаст его куда угодно. Я бы с руками оторвала любой проект, который помог бы количественно, в цифрах, измерить разницу между ассистентами.
Отдельно стоит гибридное изучение, которым я занимаюсь больше всего сейчас — в последний год я перешла с русского языка на эту тему. Я занимаюсь проектами по тому, как сделать Ассистента более разговорным, более естественным. Мы смотрим, как люди разговаривают друг с другом. Здесь важно не только то, какие слова используются («поставь/сделай будильник»); собственно, эта части примитивна и уже решена, хотя осталось доделать много рутины. Нерешенные задачи — это, например, когда пользователь говорит в разных формах: «Поставь мне будильник», «Можешь поставить будильник?», «Ты не мог бы поставить будильник?». Примерно одно и то же, но в одном случае применяется команда, в других — вопросы. Мы смотрим на этот уровень лингвистики — прагматику, то есть то, что идет над смыслом — семантикой. Для тех, кто занимался лингвистикой или языком, семантическая разметка в тексте — это не новый термин, но прагматика добавляет к ней дополнительный контекст; то есть, не только «что говорят», но и «как говорят», «зачем говорят». Грубо говоря, если пользователь говорит ассистенту «ты что, глупый?», он не хочет ответа «да/нет» — это другой сигнал, и надо спросить, что до этого было не так в поведении системы; это надо классифицировать не как вопрос, а как жалобу.
Моя группа — у меня сейчас осталось три лингвиста после перехода в другой отдел — занимается сейчас попыткой понять, как люди взаимодействуют друг с другом, как люди взаимодействуют с ассистентами, и как это превратить в сигналы для машинного обучения и реально натренировать систему на лучшее понимание вещей, передающихся невербально и не напрямую.
Как насчет количества переспросов и выходов на заглушки по отношению к вопросу в постановке задачи?
Это неплохая метрика, но, к сожалению, она учитывает только количество не понятых ассистентом фраз, которые сказал пользователь. Она не говорит нам о том, насколько сложны были эти фразы, насколько приятным был опыт пользователя. Напишите мне потом после эфира все, у кого есть идеи по сравнению ассистентов, об этом можно поговорить отдельно –, но там требуется что-то очень сложное. По отдельным срезам мы уже научились что-то понимать — например, какой процент запросов пользователя система не понимает, или понимает с N-го раза, и где были ошибки — в переводе речи в текст, на самом тексте, где-то дальше при изменении системы. А вот оценить, насколько адекватно ответила система — это уже сложнее: собственно, что такое «адекватный ответ»? Есть еще всякие «вишенки на торте» вроде случаев, когда пользователь обращается к системе на «вы», а она отвечает на «ты» — это хорошо или плохо? Вроде бы плохо, ассистент же подчиненная фигура.
В общем — очень много маленьких фишек, которые сложно учесть в количественных измерениях.
Существует ли промежуточный, общий язык для упрощенной обработки с последующим переходом на нужный язык?
Это прекрасный вопрос, но задавать его следует не мне, а представителям ABBYY, которые много лет пытались сделать именно это. То есть, в лингвистике есть идея о том, что все языки строятся похожим образом, и можно создать универсальную грамматику, словарь и все остальное, чтобы получилось среднее звено между всеми языками. Тогда можно было бы переводить с одного языка на мета-язык и потом на любой другой язык. Очень много человеко-лет было потрачено на эту задачу, но оказалось — несмотря на всю красоту идеи — что языки все-таки довольно разные, и провести подобный маппинг практически невозможно. И непонятно, как это сделать автоматически — не руками. В итоге тема заглохла.
Оказалось, что, если влить очень много данных и напустить нейросеть, то машинный перевод получается достаточно качественным и без мета-языка. Нейросети хорошо вычисляют закономерности, в том числе — грамматические, поэтому, если объем данных достаточен, то они сами справляются без подсказок от промежуточного звена. В машинном переводе все хорошо работает, когда есть хорошие параллельные тексты. Например, между русским и английским есть много параллельных текстов, но между русским и каким-нибудь языком американских индейцев их вообще нет –, но есть много параллельных текстов между ним и английским, то есть, английский может выполнять роль промежуточного языка. Часто перевод с русского делается сначала на английский, потом — на третий язык; эта техника распространена достаточно, чтобы английский на практике заменял собой тот самый мета-язык — ведь переводных данных больше всего именно на английский язык и с него. Качество страдает, конечно, но это лучше, чем ничего. Если систему не на чем обучать, то лучше обучить на таком пошаговом переводе, чем не делать ничего.
В общем, с теоретической точки зрения идея красивая, но на практике применяется английский.
Можете ли вы привести примеры задач, над которыми работаете в Google? Какое процентное соотношение интересных и рутинных задач?
Когда я запускала русского Ассистента, было очень много рутинных задач — просто потому, что алгоритмы универсальны, и большая часть работы сводилась к ручной правке багов и подготовке данных русского языка. Мы проверяли качество, иногда — руками писали данные; это звучит очень грустно, но мы не могли использовать пользовательские данные, а брать их откуда-то надо было. Для того, чтобы взять данные, можно было еще написать правило и сгенерировать данные; или открытые данные. Из интересного — можно было разбираться с морфологией, смотреть, чтобы генерация и понимание текста были поумнее и не нужно было в столбик выписывать все формы слова «будильник». К сожалению, было очень много циклов «прогнать-посмотреть качество-исправить-снова прогнать-исправить данные-и так далее»; поначалу это было весело, но быстро стало рутиной. Сейчас, так как я больше в research (исследованиях), мы сами себе составляем повестку, в некотором смысле. Я занимаюсь как раз созданием новых данных, которые в будущем могут быть полезны для метрик, и исследованием того, как люди разговаривают друг с другом и с ассистентами, чтобы понять, какие сигналы можно использовать для обучения моделей. Мы анализируем качество. Часть работы, которой я сейчас занимаюсь — продуктовая, мы пытаемся создать дорожную карту проблем в диалоговых взаимодействиях между человеком и ассистентом, понять, как это расклассифицировать, понять, что мы можем решить сейчас, что — потом. То есть, сейчас у меня рутинных задач почти не осталось, и я довольна своим сетапом.
У разных лингвистов этот баланс выглядит по-разному. Недавно у нас был юбилей — 100 лингвистов в компании, сейчас уже немного больше. Это круто, потому что, когда я приходила в компанию 4 года назад, нас было человек 30. Наша востребованность однозначно растет.
Используете ли вы определение контекста для анализа текстов?
Я не знаю, смотрит ли еще автор вопроса — переформулируйте, пожалуйста, я не поняла.
Конечно, мы используем контекст; без него не бывает никакого диалогового взаимодействия. Конечно, мы пытаемся решать проблемы, чтобы пользователь, например, не каждый раз говорил «будильник», а мог использовать естественные местоимения («поставь будильник на 7, нет, поменяй его на 8»). Для английского это уже хорошо работает; не помню, запустили ли уже для русского.
Почему не запущена колонка для русского языка?
Из того, что я могу сказать — у Google очень много разных языков. Приоритеты выстраиваться по объему и ценности рынков, и российский — рынок не самый интересный. Немного стимулирует то, что в России есть Яндекс, и с ним можно конкурировать, но с практической точки зрения никому не хочется. Плюс, Google закрыл офисы разработки в России после принятия закона о персональных данных.
Есть ли открытые библиотеки распознавания и генерации речи, массивы данных для тренировки нейросетей? Насколько эта технология открыта?
Да, полно открытых алгоритмов. Google выпустил недавно Bert — это супер-новая библиотека; теперь конференции полны апдейтов к ней, которые называют разными смешными словами, внутри которых есть «Bert» (Albert). Это все open source, сделали наши прекрасные ученые в Берлине. Можно тренировать что угодно; в научных сообществах есть данные, на которых можно тренировать нейронные сети и смотреть, что получается. Как я уже говорила, для русского этих данных мало, для английского — больше, поэтому все развлекаются с ним.
То есть, у вас нет текстов пользовательских логов?
Мы не можем читать пользовательские логи. Единственное исключение — это те случаи, когда пользователи жалуются, и у них специально запрашивают разрешение на то, чтобы расшарить последние столько-то высказываний. Но даже в таких случаях мы видим только пересказ проблемы от специально обученных саппортов и агрегированную статистику вида «ассистент ответил, что не понимает, такой-то процент раз». Google очень внимательно относится к пользовательским данным. Часть того, чем занимается моя команда — это как раз думать над тем, как можно было бы генерировать реалистичные данные или собирать их со специально оплаченных людей. Это важное направление для всех индустриальных команд, потому что privacy ни в коем случае нельзя нарушать. Нам приходится искать новые методы сбора данных, писать новые инструменты; последние полгода я довольно плотно занимаюсь этим. К сожалению, детали пока не подлежат публикации. Мы хотели написать статью для конференции, но эпидемия помешала. Когда ты работаешь в компании, статья тебе, в принципе, нужна только для того, чтобы за счет компании поехать на конференцию и потусить. А теперь все конференции перешли в онлайн, и потусить не получится — реально пропала мотивация писать статью. Сейчас вот эпидемия закончится, и мы все-таки это сделаем.
Можете рассказать, как проходит собеседование в вашу команду, и показать примеры тестовых заданий?
Тестовых заданий не буду показывать, но рассказать про собеседование могу. Как я говорила, у нас сейчас 100 лингвистов, и собеседования теперь проходят в известном инженерам формате — собеседование в пул. Мы подряд собеседуем лингвистов, и, когда есть хороший лингвист, смотрим, где есть вакансия, и распределяем по командам. У нас есть лингвисты разных профилей; кто-то программирует, кто-то практически не программирует. Я из второй категории: я больше в исследовательской части, модели я сама не тренирую — в команде есть ребята, которые этим занимаются. У нас сейчас 8 команд лингвистов разного размера, и еще есть команда интернализации, в которой я была специалистом по русскому языку: это люди, которые следят за качеством ассистента (сейчас я — просто лингвист-исследователь и занимаюсь задачами, не связанными с конкретным языком). В зависимости от своего профиля, лингвисты попадают в одну из этих команд.
Там, где задачи под конкретный язык, нужны носители конкретных языков; они получают специальные задания по этому языку — мы пытаемся выяснить, хорошо ли человек понимает особенности. Например, если бы мы нанимали на позицию с русским языком (сейчас её нет, правда), мы бы спрашивали, чем русский сложнее английского, какие существуют методы преодоления этих сложностей, как устроена русская морфология, что нужно чтобы компьютер это понимал, как это влияет на объем данных. Если роль общая, то мы будем спрашивать про то, насколько человек хорошо понимает текущие реалии лингвистики, насколько он может обдумывать алгоритмы. Хотя я сама почти не программирую, я хорошо понимаю, как устроен Machine Learning, что нужно, чтобы тренировать систему, про сигналы, supervised / unsupervised learning и так далее. Собственно, это то, что я обычно спрашиваю на собеседованиях. Самый банальный пример: «Как бы вы сделали исправление опечаток? Есть бесконечное количество денег и разработчиков, но продукта еще нет — как построить его с лингвистической точки зрения, какие будут шаги?» В целом, можно спрашивать про любой компонент, который включает в себя естественный язык. Как он построен, по мнению опрашиваемого? Как человек собирается строить аналогичный, какие проблемы видит? Как перенести опыт с английского языка на китайский, с китайского — на русский, с русского — на хинди? Как он будет выстраивать работу с языком, которого он не знает? Вариантов очень много.
Мониторите ли вы пользовательское поведение: какую команду дал пользователь, какое действие выполнилось устройством?
Мы не можем мониторить пользовательское поведение. Мы можем только придумывать методы, чтобы симулировать его и проверять, как отвечает система. Это то, чем мы, собственно, занимаемся: пытаемся придумать, как померить, и пытаемся собрать данные для тренировки алгоритмов.
Каким образом отслеживается контекст беседы? Много ли для этого используется памяти? Есть ли персистентность между сессиями?
Много ли используется памяти — я не знаю деталей, это даже не к тому отделу, где я работаю. Наш отдел больше занимается качеством, но есть отделы, которые смотрят за тем, хватает ли памяти, нет ли утечек, не тупит ли ассистент по 10 минут, чтобы поставить будильник.
Контекст мы отслеживаем. Пока, к сожалению, только внутри одной сессии. Это одна из задач, которые наш отдел — моя команда, соседние команды инженеров — будет решать в течение следующего года. Очень классная и интересная задача: как долго держать контекст, в какой момент считать, что беседа закончилась, сохранять ли контекст пользователя всегда, какую информацию о пользователе система будет хранить в себе. Условно говоря, если пользователь говорит «Я ненавижу пиццу», то, наверно, хорошо сохранить такой контекст навсегда и переспрашивать раз в году, не изменилась ли ситуация. И, если пользователь отвечает, что не изменилась — не предлагать доставку пиццы. Пока ассистенты такого не умеют — к сожалению, они еще очень далеки до совершенства, им пригодилось бы еще много разного контекста.
Сейчас мы умеем понимать местоимения внутри одной сессии («поставь будильник, сделай его на 8 утра»). Мы работаем на тем, чтобы расширить этот контекст, и отдельно ведем исследования, чтобы понять, какой контекст полезен, сколько его нужно, где и сколько его хранить. Конечно, у Google много серверов, поэтому экономить нам не нужно, но — хочется, чтобы ассистент не обрабатывал каждый запрос по 3 часа. Сейчас он довольно быстр, но работает не идеально; и, если мы сделаем его идеальным, хотелось бы, чтобы он продолжал работать быстро.
Есть ли у вас конкуренция между командами?
И да, и нет. Конечно, по тому, как устроена работа внутри Google, можно делать отдельный эфир. У нас много инициативы на местах; люди могут пробовать делать прототипы чего угодно, предлагать это начальству — начальство всегда очень открытое, и оно будет предлагать высшему начальству. Довольно много проектов возникает из того, что кто-то что-то попробовал сделать, у него получилось, и было решено делать в качестве, пригодном для выпуска. Конечно, бывают ситуации, когда в 5 местах одновременно людям приходит одна и та же идея в голов