"Нельзя сказать, что Google Summer of Code — это исключительно для кодеров"
Расскажи сначала, как ты попала на компьютерную лингвистику и где училась до этого?
Я окончила МГУ, факультет иностранных языков. Давно интересовалась компьютерной лингвистикой, а в магистратуру Вышки поступила по олимпиаде. Олимпиада — это, по-моему, очень интересная опция. Мне всегда очень нравилось, когда тебе даются данные, дается описание процедуры, и ты придумываешь что-то, реализуешь какой-то мини-проект.
Ты уже занималась компьютерной лингвистикой до этого?
Занималась самостоятельно. Вообще в школе я очень серьезно изучала немецкий, выиграла Всероссийскую олимпиад по этому языку и поступила на факультет иностранных языков МГУ; но там скоро поняла, что мне хочется еще чего-то, потому что мне очень нравились информатика и математика. Где-то ко второму курсу я осознала, что это не просто хобби и нужно это все как-то совмещать. Как раз тогда я попала на семинары «Яндекса», которые проводились у нас на ВМК, там рассказывали о Natural Language Processing, и я поняла, что хочу этим заниматься. После этого я начала готовиться к олимпиаде и узнавать, где есть походящие магистерские программы.
Сейчас есть несколько мест, где учат компьютерной лингвистике. Как ты решила поступать в Вышку?
Мне очень понравился план программы, я смотрела предметы, которые у нас будут. Разумеется, я слышала отзывы о Вышке, о том, как здесь замечательно. К тому же Вышка проводила олимпиаду, и я подумала, почему бы не попробовать? В итоге больше никуда не пробовала поступать, кроме Вышки.
И как тебе первый курс?
Мне сразу очень понравилось. Не знаю ничего такого, в чем бы я разочаровалась. Очень понравилось, что у нас есть проекты, что у нас хорошее программирование, что если ты хочешь что-то большее — то ты это получишь. Нас изначально разбили на две группы, и тем, кто раньше занимался программированием и не ходил на вводные курсы, сразу давали задания, связанные с лингвистикой. Здесь в принципе очень индивидуально относятся: хочется чего-то, есть какая-то идея — подошел, поговорил, узнал, можно ли такое сделать, сделал.
У меня еще был очень интересный старт, наш проект начинался очень быстро, потому что нам нужно было успеть к соревнованию по извлечению именованных сущностей Dialogue Evaluation. Мы стартовали в октябре, а в начале февраля уже было соревнование, и мы уже после нового года мы очень срочно все доделывали, чтобы что-то работало.
Сначала писали систему на правилах, потому что с машинным обучением надо гораздо дольше все настраивать. Мы сделали правила, написали шаблоны, вытащили газетиры из Википедии — просто сидели и часами это делали. А потом, когда нам прислали гигантский корпус, 37 тысяч текстов, я поняла, что за два дня, которые даются на сдачи результатов, я на своем ноутбуке просто не успею все это обработать. И мы организовали «распределенный анализ» — искали людей, которые у себя на компьютерах обработают часть текстов.
Сейчас мы планируем завершить наш проект и выложить его в виде сервиса для разметки текстов на портал лингвистических ресурсов Школы.
Здорово! И параллельно со всем этим ты подавалась на Google Summer of Code? Как это происходило?
Google Summer of Code начинается где-то в феврале. Сначала организации публикуют проекты, в которых можно участвовать. У тебя есть неделя-две, чтобы посмотреть проекты и выбрать не больше трех. Потом начинается процесс подачи заявок. Ты должен списываться с ментором, рассказывать, «какой ты молодец», показывать, что ты понимаешь, что делают в этой организации, какой там стиль программирования, какой стиль общения, для чего они все это делают. Они очень трепетно ко всему этому относятся, то есть нельзя просто говорить: «эй, ребят, можно я у вас тут что-нибудь поделаю?». Подается заявка, результаты объявляют где-то в марте, я ждала почти месяц.
Расскажи вкратце, что ты там делала?
Вообще все устроено так: Google находит организации с полезными open-source проектами, и они в партнерстве с Google открывают на свои проекты запись. Организация, в которую я подавалась, называется Apertium и занимается правиловым машинным переводом. У них есть платформа для обработки и словари как отдельные компоненты системы. Есть словари для каждого языка и есть двуязычные пакеты. То есть перевод существует только между теми языками, для которых существуют двуязычные пакеты.
У меня был особый случай, потому что я выбрала испанский и сицилийский языки. В Apertium есть такое правило: если ты не сможешь сделать перевод для пары языков лучше, чем «Google Переводчик», лучше не берись. Для английского, немецкого и других очень популярных языков обычно достаточно того качества, которое дает «Google Переводчик», и не нужно пытаться с ним бороться. Сицилийский — гораздо более редкий язык, и мне нужно было сделать как отдельный сицилийский пакет, так и двуязычный испанско-сицилийский.
Тестовым заданием было, во-первых, установить Apertium (который очень долго устанавливается, нужно разбираться с виртуальными машинами и так далее), а во-вторых — сделать первые версии этих пакетов, чтобы моя система смогла перевести самые простые тестовые предложения вроде «Хорхе идет гулять». В качестве теста используется маленькие текст про детей, которые играют в саду.
У меня не было знания сицилийского языка, но я очень хорошо знаю испанский и немного — итальянский. Пришлось срочно искать все грамматики сицилийского языка, какие только есть — их оказалось невероятно мало. За время выполнения тестового задания я успела написать в несколько европейских университетов. В итоге мне прислал отсканированную грамматику студент-итальянец из Мюнхенского университета.
А как измеряется качество системы?
Нужно брать корпус текстов — мы брали Википедию на сицилийском, и вообще в Apertium чаще всего используется Википедия — и измерять, насколько перевод покрывает корпус, то есть какая доля предложений переводится, какие леммы оказались знакомыми, какие — незнакомыми. У меня получилось так, что уже за время тестового задания я успела сделать 50-60% всего проекта. Потому меня и взяли — я была очень увлечена всем этим: скачивала кучу словарей, парсила их, приходилось даже из PDF вытаскивать данные. Нужно было подключаться к API Википедии, чтобы достать викисловари сицилийского, пришлось автоматически переводить через итальянский на испанский… В общем, много было интересного.
И ты сделала эту пару языков в одиночку?
Да. В Apertium невероятно разработанный испанский словарь, потому что ребята, создавшие Apertium, сами из испанского Университета Аликанте . Испанский там безумно хороший, им занимается очень много разработчиков, поэтому мне не пришлось ничего для него делать. Зато над сицилийским и над двуязычным пакетом я работала одна, и это было приятно. Мне немного помогал ментор из Apertium Фрэнсис Тайерс (Francis Tyers), один из основных разработчиков системы, мы с ним встречались летом. И был еще один ментор, уже из Испании, который контролировал качество испанского языка. Но и сам Фрэнсис тоже очень хорошо говорит по-испански, поэтому я общалась с ним наполовину на испанском. Они оба очень много помогали мне с сицилийским и испанским.
И этим ты занималась все лето?
Сама программа стартует в апреле. Первый месяц идет community bounding program, когда ты должен познакомиться с организацией, с ее правилами. Но это официально, а неофициально в это время уже все работают. Я по сути продолжала делать то, что я делала как тестовое задание. Но официальное начало — это 23 мая, а окончание — 23 августа, это final evaluation.
А 23 августа у тебя был уже готовый переводчик?
Да. Не на 100% готовый, конечно, но он получился очень хороший. Изначально мы запланировали финальное покрытие 90%, потому что первый рывок был очень сильным. Но потом возникло много сложных и интересных лингвистических проблем. Во-первых, разреженность данных, когда по закону Ципфа ты сначала быстро накрываешь все частотные слова, а остаток добирать невероятно трудно.
Да, вот этот длинный хвост трудно было добавлять. Еще возникла проблема в связи с тем, что у сицилийского языка нет письменного стандарта, и каждый пишет, говоря научно, по фонетическому признаку, то есть как слышится. В результате получается до 10-15 вариантов написания одного слова, их все нужно было собрать из корпуса, при этом не зацепив случайно другие слова, чтобы в переводчике не было конфликтов. А анализировать он должен любой текст. В общем с этим тоже возникли сложности, я писала специальный алгоритм, основанный на расстоянии Левенштейна, но использующий много дополнительных параметров. Фрэнсис даже представил меня одному исследователю, который занимается сложными вариантами расстояния Левенштейна, и я в своей работе опиралась на его статью. Это как раз тема, которую я хочу добить: как выделять разные написания одного и того же слова в текстах на языках, у которых нет письменного стандарта. Это очень крутая тема, потому что там очень много морфологии, очень много орфографии. А в сицилийском к тому же подвижная система ударения…
В общем, как я написала в своем финальном отчете, возникло очень много научных проблем. И это проблемы, которыми я хочу сейчас заниматься. Вообще я продолжаю над ним работать,
Вообще чтобы пройти final evaluation, мне нужно было перевести текст в 2000 слов. Я брала статью из Википедии переводила ее с испанского на сицилийский или наоборот, и нужно было, чтобы ошибок оказалось достаточно мало . У меня было около 8-9% ошибок, но есть над чем еще работать.
Это отличный результат. А можно я задам такой вопрос: многие, в том числе и я, никогда бы не подумали подаваться на Google Summer of Code, потому что считают, что это что-то такое исключительно для звездных программистов. Ты можешь как-то прокомментировать это? Ведь твой пример показывает, что это все-таки не совсем так, что туда можно попасть, не будучи супер-кодером.
Программирование знать все равно нужно, без знания необходимых технологий не пройдешь. В моем случае требовалось знать Python, уметь работать с XML, еще мне внезапно понадобилось процедурное программирование, потому что в Apertium используется свой формализм для написания правил. Но вообще нельзя сказать, что Google Summer of Code — это исключительно для кодеров. Туда можно попасть, если ты лингвист и любишь технологии. В таком случае можно найти себе проект по душе. Однако таких проектов не так уж много, в основном все же нужны программисты на С++ и т.п.
А сколько всего проектов, сколько человек берут?
Там все устроено по разному в разных организациях. Некоторые заявляют очень жесткие и строгие требования — например, ищут конкретного человека, который за лето исправит им баг. Так часто делают известные организации вроде Mozilla или Python Software Foundation, которая тоже берет студентов, чтобы те, к примеру, вместе разрабатывали какой-то модуль или делали красивую сложную функцию для Python. А есть другие организации, которые подходят к проектам очень гибко. Один из примеров — как раз Apertium. Ты можешь либо создавать новую языковую пару, либо писать парсер, либо улучшать уже существующую пару, скажем, поднимать качество с 40-50% до 90%, тоже очень сложная задача... Такие организации могут взять много людей в зависимости от того, кто к ним приходит. Если они видят, что пришел очень интересный человек, носитель какого-то нужного редкого языка, который к тому же разбирается в технологиях, конечно, его возьмут, даже если не выделена квота.
Вот, кстати, по поводу владения языком: наверняка ожидается, что редкие языки для Apertium описывают их носители?
Дело как раз в том, что сам факт владения языком ничего не гарантирует. Вот мы все носители русского языка, но написать правила, создать грамматики мало кто сможет. Нужно и владеть языком, и быть теоретиком языка . Мне помогло, что у меня была теория языка, то есть я не отношусь к языку только как к практическому инструменту, который ты учишь, чтобы общаться в отпуске за границей.
При этом ты никуда не ездила, это все происходило удаленно?
Да, удаленно. И в этом, по-моему, есть прелесть — поучаствовать в Google Summer of Code, сидя дома за своим ноутбуком.
Ты сказала, что продолжаешь заниматься нечетким сопоставлением разных вариантов одного слова. А магистерскую диссертацию ты об этом будешь писать?
Я пока не уверена насчет магистерской, но мне кажется, это очень интересная тема. Я бы, возможно, попробовала реализовать имеющиеся подходы и сравнить их с моим на материале сицилийского языка, посмотреть, что лучше.
Очень хотелось бы приплести туда машинное обучение. Думаю, если найти хорошие признаки, может получиться неплохо. Есть хорошие фонологические алгоритмы, например, Soundex. Его, в частности, использовали в ФБР для нечеткого поиска по фамилиям террористов. Такие алгоритмы основаны не на написании, а на звучании слов. Кроме того, могут добавляться особенности написания и произношения в разных странах, соответствия между фонемами разных языков, например, как это может быть записано и произнесено человеком из Польши или Чехии и т.д.
Что скажешь тем, кто думает об участии в Google Summer of Code?
Буду рада, если кто-то еще из Вышки будет принимать участие. Потому что пока там очень мало людей отсюда. И девушек очень мало — у всех какие-то стереотипы. Сам Google об этом очень много пишет.
У них ведь даже есть стипендия для девушек, которую получила наша Екатерина Агеева?
Да, стипендия Аниты Борг. Я тоже узнала об этом от Кати Агеевой, как и о Google Summer of Code — она участвовала три года подряд. Катя всем сказала: «ребята, почему бы нет, пробуйте». И я подумала, почему бы и нет?