Мы используем файлы cookies для улучшения работы сайта НИУ ВШЭ и большего удобства его использования. Более подробную информацию об использовании файлов cookies можно найти здесь, наши правила обработки персональных данных – здесь. Продолжая пользоваться сайтом, вы подтверждаете, что были проинформированы об использовании файлов cookies сайтом НИУ ВШЭ и согласны с нашими правилами обработки персональных данных. Вы можете отключить файлы cookies в настройках Вашего браузера.
Адрес: 105066, г. Москва,
Старая Басманная ул., д. 21/4
Телефон: +7 (495) 772-95-90 доб. 22734
E-mail: ling@hse.ru
Редакторы сайта — Наталья Борисовна Пименова, Татьяна Борисовна Казакова, Максим Олегович Бажуков, Юлия Геннадьевна Бадрызлова
Школа лингвистики была образована в декабре 2014 года. Сотрудники школы преподают на образовательных программах по теоретической и компьютерной лингвистике в бакалавриате и магистратуре. Лингвистика, которой занимаются в школе, — это не только знание иностранных языков, но прежде всего наука о языке и о способах его моделирования. Научные группы школы занимаются исследованиями в области типологии, социолингвистики и ареальной лингвистики, корпусной лингвистики и лексикографии, древних языков и истории языка. Кроме того, в школе создаются лингвистические технологии и ресурсы: корпуса, обучающие тренажеры, словари и тезаурусы, технологии для электронного представления текстов культурного наследия.
Bangkok: Association for Computational Linguistics, 2024.
Фитискина А. А., Фитискин А. А.
Vox Medii Aevi. 2025. Т. X. № X. С. XXX-XXX.
Anna Leonteva, Toldova S., Fedorov D. et al.
In bk.: Teaching Russian Through STEM: Contexts, Tools, and Approaches. Vol. 1st Edition. L.: Taylor & Francis, 2024.
arxiv.org. Computer Science. Cornell University, 2024
Студенты второго курса магистерской программы «Компьютерная лингвистика» факультета гуманитарных наук НИУ ВШЭ поделились впечатлениями от производственной практики в компьютерно-лингвистических стартапах, крупных международных компаниях и серьезных исследовательских институтах. Мы публикуем первую часть рассказов — о практике в «Лаборатории Касперского», «Lionbridge» и компании «Бабушкин суп из данных». Рассказы публикуются с комментариями и вопросами руководителя магистерской программы Анастасии Александровны Бонч-Осмоловской, прозвучавшими непосредственно во время выступлений.
Я буду вам задавать немножко наивные вопросы, чтобы аудитория все понимала
Я работала в «Лаборатории Касперского», в отделе «Родительский контроль», который защищает детей от некачественной информации в сети: алкоголь, насилие и тому подобное. Устанавливается программа, которая вместо выдачи ссылок и страниц говорит, что вам еще нет 18-ти, и родители вам запретили. Моя задача была на основе текстов «плохих» запросов составить программу, которая могла бы составить новые запросы. В качестве метода мы использовали TF-IDF.
А.А.: Метод TF-IDF позволяет выделять группы документов по тем словам, которые там используются. Этот метод выделяет в документах слова, которые не похожи на те слова, которые встретились в других документах. И в данном случае мы определяем, сколько в документе «плохих» слов, и если их слишком много, блокируем этот документ.
Саша: Концепция была такова: на вход дается файл с запросами по одной тематике, например, по алкоголю: сорта коньяка, вина… Программа использует Google API, который я специально изучила (кстати, всем рекомендую: хотя можно только сто запросов в день сделать и нужно повозиться с ключами, но так получать результаты выдачи на какой-то запрос удобнее, чем вручную искать в Google). По запросам мы составляем список страниц, и у нас было два направления: можно было анализировать метатеги — либо содержимое тега <title>, либо некоторых тегов <meta>, которые тоже несут информацию о странице, — или анализировать полностью текст страницы.
На выходе нужно получить не сайты, а новые запросы, по которым выпадают те же неприятные сайты. То есть мы берем запрос, прогоняем его через сайты, смотрим, на какие страницы они ведут, составляем TF-IDF. Дальше ссылки на эти сайты не показываются детям, если там высокий TF-IDF ненужных слов.
Второй задачей было это все сделать для других языков. Пришлось несколько улучшений сделать, но на английском все тоже хорошо работает. Пришлось долго корпус собирать — это, пожалуй, была самая трудоемкая часть работы. В результате у нас получилась программа, которая может формировать файл запросов по той же тематике, очень хорошо настраиваемая: можно менять язык (но для каждого языка нужно составлять новый корпус), содержимое, длину последовательности — такая многофункциональная программка. Руководители были очень довольны, хотят интегрировать.
Я проходила практику в компании Lionbridge. Я выбрала эту компанию, потому что я там работала и хотела совмещать практику и работу. Компания локализует всевозможные сервисы (если продукт выходит не в России, а потом приходит на рынок, его нужно адаптировать в соответствии с русскими реалиями и языком). Я уже давно работаю в проекте с русским языком, мы делаем проверку правописания и стилистики языка для очень крупной компании.
Когда я написала про практику, мне могли просто дать мне больше часов в тех проектах, в которых я участвую, но я не согласилась, и тогда специально для меня создали проект. Идея была такая: будем использовать статистические методы и методы машинного обучения, и уже не для русского языка, а для английского. Почему для этого понадобился отдельный проект, если для всех языков (их очень много) уже были проекты? Потому что обычно мы пользуемся правилами. Если есть ошибка в согласовании предлога и существительного, то мы прописываем правила, что, например, предлог «у» должен управлять родительным падежом. Мы взяли именно машинное обучение, потому что есть какие-то примеры, которые нельзя описать никакими правилами. Кроме меня, никто этого в компании еще не делал.
Практика проходила в августе, и сейчас я ее заканчиваю. Что я для себя из этого вынесла? Я выучила очень много того, что не смогла выучить за предыдущий год обучения на компьютерной лингвистике, потому что у меня либо не хватало времени, либо я чему-то не уделяла должного внимания. Так получилось, что я узнала очень много нового. А еще я работаю в проекте одна, но у меня есть целых три тимлида, и они дважды в неделю проверяют, что я сделала, и это довольно волнительно. Почему три тимлида? Они сказали, что им всем интересно. Все приходят и слушают, что я делаю, дают советы, и за несколько дней я все переделываю, они дают еще советы, и все это продолжается довольно долго. Из приятного, кроме того, что я выучила вещи, которые раньше не знала: мне сказали, что если все получится очень хорошо, когда мы получим все результаты, то они готовы специально для меня продлить этот проект, выделить ресурсы, чтобы результат потом кому-нибудь продать.
А.А.: А расскажите, пожалуйста, более подробно, содержательно, что вы именно «машинообучаете» и что получается?
Даша: «Машинообучаем» мы пока не так много: в основном, используем статистические методы, и если с ними не очень хорошо получится, то мы действительно подключим машинное обучение. В качестве правила, которое мы сейчас тестируем: использование правильных предлогов для фразовых глаголов английского языка: “I have never been to London” вместо “I have never been in London” — нужно понять, какой предлог должен быть правильным.
А.А.: А вы ведь смотрели какую-нибудь литературу?
Даша: Да, конечно, было условие, что я потрачу определенное количество времени в самом начале на исследование, что где используется, применяется или не применяется. В итоге мы отсеяли несколько вариантов в самом начале, отказались пока что от машинного обучения и решили все-таки использовать статистические методы.
А.А.: А откуда вы берете обучающие корпуса с ошибками?
Мне их дали в компании. Сначала мы думали, где их брать, смотрели на OpenCorpora, а потом мне нашли два корпуса: один в два миллиона, а другой в один миллион предложений.
Область, которой я занимался, — дистрибутивная семантика. Я проходил практику в компании с чудесным названием «Бабушкин суп из данных».
А.А.: Да, это была компания, которая меня немножко удивила, я о ней не слышала. Это стартап?
Миша: Да, она небольшая. Работают со шведскими бизнесами, пробуют по поисковому запросу предсказать доход, который они от него получат.
А.А.: Что значит поисковый запрос? Я буду вам задавать немножко наивные вопросы, чтобы аудитория все понимала. О дистрибутивной семантике я вас тоже спрошу, а что значит «доход от запроса»?
Миша: Если человек перешел по какой-то рекламной ссылке, потратил деньги, заказав путешествие или перелет, то считается, что запрос принес компании доход. И, таким образом, нужно по поисковому запросу предсказать, какая будет выручка у компании. Сперва эта задача вызывала скепсис, потому что мне казалось, что это не очень будет работать. Но они очень хотели, чтобы я это действительно попробовал, и при этом использовал методы дистрибутивной семантики.
А.А.: Да, а что такое дистрибутивная семантика?
Миша: В общем, это попытка представить слово в качестве векторов его контекстов, то есть значение слова моделируется при помощи тех слов, которые его окружают. Например, у нас есть слово и 10 000, скажем, чисел (для соответствующих им слов). Каждое число означает частоту встречаемости слова в определенном окне. Скажем так: минус пять слов слева и минус пять слов справа. Все это в процессе собирается, и у вас получаются вектора чисел, по которым сравниваются слова друг с другом и которые, грубо говоря, дают нам семантические связи.
А.А.: Я попробую дополнить. Дистрибутивная семантика — невероятно модное направление в компьютерной лингвистике с невероятно простой идеей. Идея такая: слова, которые встречаются в одном и том же контексте, по всей видимости, значат близкие вещи. И это такой способ, такая линейка, при помощи которой мы можем измерить близость семантики разных слов. И сравнить их близость: что у нас ближе: «стол» и «стул», «стол» и «обед», или «стол» и «фантастика».
Как мы измеряем эту близость? Мы берем тексты, считаем каждому слову его контексты — мы берем все слова в огромной матрице, и каждое слово соотносим с другими словами, и если другие слова каким-то образом встречаются в контексте другого слова, то мы и пишем то, сколько раз мы это получили, встретили. Таким образом, каждому слову у нас соответствует определенный набор цифр, и это и есть фокус.
Вы все отлично знаете, что когда мы читаем книжку на иностранном языке, мы некоторые слова не смотрим в словаре, а понимаем, что это слово значит, из контекста. Почему? Потому что мы эти же контексты уже много раз встречали, но с другими словами, которые нам знакомы. Эти контексты мы перевели в цифры. А как только мы перевели их в цифры, мы можем воспользоваться условным «транспортиром» и измерить, насколько эти вектора (цифры слов) близки или далеки друг от друга.
И вот это волшебная штука: ага, я вот этого слова не знаю, но знаю, что оно примерно значит «вторник», или день недели. Дни недели — это пример слов, которые встречаются в абсолютно одинаковом контексте. Такие слова, которые не являются синонимами, но значат примерно одно и то же. Суббота и воскресенье немножко подальше лежат, но вот эти дни — среда и четверг — неразличимы.
Соответственно, оказывается, что таким образом могут быть вытащены очень важные характеристики значения. Это и есть этот метод. Для его использования нужно иметь большое количество текстов, которые нам дают контексты, нам нужно использовать определенные библиотеки, которые эти контексты превращают в матрицы, и библиотеки, которые по этим матрицам считают близость между разными словами. Миша, расскажите, пожалуйста, близость каких слов мы меряем в данном случае.
Миша: Для каждого слова из поискового запроса (обычно они состоят из трех-четырех-пяти слов) мы получаем векторное представление (семантический вектор). Обучаться непосредственно на запросах — это немного неправильно, потому что язык запросов очень специфичен, он отличается от обычного языка, поэтому одна из моделей обучалась на шведских твитах, а другая — взята из тех предобученных на Википедии, что предоставляют авторы fastText. Они дают более или менее репрезентативное представление о том, как слово функционирует в больших корпусах, в языке. То есть непосредственно на коллекции запросов это не обучалось.
А.А.: Да, у поисковых запросов всегда очень маленькие контексты, и они нам очень мало дают представления о смысле.
Миша: Да, нужно достаточно много слов встретить, чтобы для него нормальный вектор построить.
А.А.: А мы строим эти вектора для слов, чтобы что?
Миша: Чтобы узнать, насколько семантика некоторых слов позволяет предугадать, что это — более денежный запрос.
А.А.: Правильно ли я понимаю, что мы знаем, предположим, слово «X», что оно очень хорошо срабатывает… Одну секундочку: запрос делает пользователь, а ссылки дает компания. Мы, на самом деле, говорим о списке, который уже есть у компании, на который она должна отреагировать. Так вот, в чем состоит проблема: вы – молодой человек, вы ищете какой-то мобильный телефон, и за вас борются множество интернет-магазинов, которые хотят телефон продать. Соответственно, задача этого магазина — показать вам какую-нибудь сверху оплаченную ссылку, чтобы вы в нее обязательно ткнули. Естественно, за эту ссылку они платят поисковику. Вопрос состоит в том, когда ее показывать. Вилка здесь такая: если модель будет показывать только случаи «мобильный телефон, модель такая-то, цвет голубой», то, возможно, вы не поймаете тех клиентов, которые бы пошли к вам в магазин и купили телефон, но не написали слово «голубой» или написали не «мобильный телефон», а, скажем, «айфон». То есть те клиенты, которые выражают свою мысль как-то по-другому. Если вы будете показывать свою ссылку на все запросы, которые будут включать слово «техника», то вы просто заплатите очень много бессмысленных денег, отдача за ваши запросы будет очень низкая. Поэтому нужно найти такие запросы, которые люди делают с очень ясной мыслью купить. На самом деле, тут откровенная психология: понять, что люди пишут, когда хотят именно что-то купить, а потом посмотреть, как эти запросы можно немножечко видоизменить, пользуясь, например, методами дистрибутивной семантики, то есть подставляя близкие слова, и таким образом найти то самое «золотое дно», те самые запросы, которые приведут на сайт покупателей.
Миша: В общем, можно сказать вещи довольно тривиальные: большая часть запросов доход не приносят. Собраться и посмотреть не значит купить. Самые успешные запросы — со стационарных устройств и планшета, их доля хотя бы что-то приносит.
Вот график: по оси х – величина, предсказанная линейной регрессией, которую я обучил. По оси у – исходное значение. В идеале все точки должны быть ближе к диагонали: предсказание совпадает с исходным, но вышло много нулей. Для оценки качества модели я взял корреляцию Спирмена, среднеквадратичную ошибку и коэффициент детерминации.
А.А.: Вы рассчитывали так: мы посмотрим самые близкие запросы и будем надеяться, что близкие к тем, что принесли доход, тоже будут приносить доход. Тогда мы сможем их выявлять при помощи методов дистрибутивной семантики и продавать компаниям, которые продают вещи.
Миша: Примерно так. Нужно прояснить процесс: мы брали один вектор для каждого слова в запросе, брали эти вектора и получали от всех них средний. Это выглядит очень наивно и глупо, но это работает. На самом деле, все операции с векторами работают, это выглядит так: из России вычтем Москву и прибавим Вашингтон, в результате получим вектор, близкий к слову США.
Кроме того, я использовал метод уменьшения размерности, но пока этот способ тоже не дал ожидаемых результатов. Планирую использовать Doc2Vec — это моделирование не слова, а строки запроса в целом. Еще с Word2Vec можно попробовать использовать не средний вектор, а суммирование векторов, хотя для моделирования слов по векторам его частей оно не помогало — но еще посмотрим.
Окончание следует
Надежда Катричева, 1 курс ОП «Компьютерная лингвистика»
Школа лингвистики: Доцент
Бонч-Осмоловская Анастасия Александровна
Школа лингвистики: Доцент