Какому языку можно научиться, задавая вопросы поисковой системе? Семинар в Яндексе
Языки, на которых пользователи интернет-поиска составляют свои поисковые запросы, появились на наших глазах. Лексически они слабо отличимы от более привычных нам языков, например, русского или английского, и в начале своего существования совпадали с родительскими языками. Но языки поисковых запросов быстро отошли от родительских и обзавелись собственными наборами идиом, синтаксисом и даже особыми «частями речи». Небольшой размер и простота их грамматик, а также возможность изучать полное множество высказываний, порожденных на таких языках, делают их идеальными модельными объектами для тестирования моделей усвоения языка.Я провел небольшое исследование того языка запросов, на котором пользователи обращаются к поиску Яндекса, и на его основе подготовил доклад. Как это часто бывает, вопросов осталось больше чем ответов. Однако результаты получились достаточно интересными.
Начнем мы не совсем с языка поисковых запросов, а с проблемы усвоения языка и того, почему она так важна для лингвистики, когнитивистики и может заинтересовать любого мыслящего человека. Проблема состоит в том, что мы не до конца понимаем, как дети настолько быстро овладевают достаточно сложным понятийным и грамматическим аппаратом, наращивают словарный запас на таком уровне, на котором мы до сих пор не можем научить машину понимать естественный язык. Загадочность процесса усвоения языка люди осознали еще во времена Платона, а то и раньше. На протяжении всего этого времени в спорах главенствуют два основных направления: нативизм и эмпиризм. Нативисты считают, что при освоении языка большая часть информации у нас в мозгу некоторым образом уже «зашита», а эмпиристы утверждают, что большую часть информации мы получаем в процессе обучения на основе собственного опыта.
Одна из идей, присущих нативизму, заключается в том, что все естественные языки обладают одним и тем же набором черт — универсалий. Также нативизм настаивает на аргументе бедности стимула, который призван объяснить, почему без большого количества врожденных знаний при усвоении языка никак не обойтись. По оценкам к моменту, когда ребенок идет в школу, его словарный запас насчитывает около двух тысяч слов. Это означает, что с момента рождения он усваивал одно-два новых слова в день. Каждое их них он слышит не больше нескольких раз, но ему этого хватает, чтобы понять, как эти слова видоизменяются, сочетаются друг с другом, отличать одушевленные объекты от неодушевленных и т.д.
При попытке повторить это в машинной форме в виде какого-то алгоритма, который мог бы изучать языки хотя бы с долей той же эффективности, возникают некоторые сложности. Во-первых, такой решатель ограничен тем, что ему на вход поступают только положительные примеры, фразы, которые допустимы грамматикой языка, и не поступает никаких опровержений. Кроме того, на алгоритм, который мог бы моделировать усвоение языка, накладываются некоторые алгоритмические ограничения. В частности, мы не можем себе позволить перебирать все контекстно-свободные грамматики, под которые подходили бы все известные нам примеры, и выбрать самую простую. Сделать это нам не позволяет то, что такая задача NP-полна.
Перейдем непосредственно к языку запросов. Моя идея заключается в том, что это более простой лингвистический объект, чем полноценный естественный язык, но при этом не тривиальный набор слов. У него есть своя структура, его логика развития и логика изучения этого языка человеком чем-то напоминает логику изучения естественного языка.
Мы можем наблюдать, как постепенно меняются запросы человека, который только начал пользоваться поисковой системой. Существует две стратегии: первые запросы могут состоять из именования какого-то одного объекта, либо представляют собой хорошо и грамматически верно сформированную фразу на русском языке. Через некоторое время люди замечают, что определенные конструкции приводят их к коммуникативному успеху. Они видят, что машина их поняла, они добиваются искомого результата. Другие же конструкции не срабатывают. Например, длинные фразы, написанные на согласованном русском языке, часто остаются непонятыми машиной. Пользователь начинает приводить свои запросы к успешным конструкциям, перенимать их у других пользователей (в том числе и через саджест). Он замечает, что если в конце запроса добавить волшебные слова «скачать бесплатно», машина его понимает лучше, после чего он может начать добавлять эти слова куда попало, даже если для конкретного запроса они значения не имеют.
Как принято в академической лингвистике, далее я буду обозначать звездочками высказывания, недопустимые с точки зрения грамматики изучаемого языка. В квадратные скобки традиционно заключаются поисковые запросы. Рассмотрим три примера:
[восточная музыка слушать онлайн] [слушать онлайн восточную музыку] *[восточную музыку слушать онлайн] Второй вариант допустим и в русском языке и в языке запросов, второй допустим только в русском языке, а третий недопустим ни в том, ни в другом, хотя согласование там лучше, чем в первом. У нас есть статистика распространенности запросов, и в тех случаях, где мы ставим звездочку и говорим, что вариант запрещен в языке запросов, подразумевается, что такие формы запросов крайне редки.
Русский вариант языка запросов не совпадает с обычным русским языком, хотя по лексическому составу практически идентичен. Он возник примерно в 1997 году и с тез пор достаточно активно развивался. Если в самом начале средняя длина запроса составляла 1,2 слова, то к 2013 году этот показатель достиг уже 3,5 слова.
Еще один аргумент в пользу того, чтобы воспринимать язык запросов как полноценный лингвистический объект — это закон Ципфа. В естественных языках n-ное по частоте употребления слово имеет частоту употребления примерно пропорциональную 1/n. И эта зависимость особенно хорошо видна, если мы расположим график на двойной логарифмической шкале. Мы видим, что слова в языке вопросов идеально ложатся на прямую под наклоном 45 градусов, что по закону Ципфа является признаком естественного языка:
Если сравнивать словарную энтропию (т.е. сколько бит нам нужно в среднем, чтобы описать встречаемость каждого следующего слова) русского языка и языка запросов, то для первого этот показатель составит около 11 бит (на примере текстов Л.Н. Толстого), а для второго — около 12. Т.е. словарный запас всех людей, задающих запросы примерно в 4 раза больше, чем словарный запас Толстого. В то же время очевидно, что язык запросов с точки зрения коммуникаций достаточно странный язык, т.к. с его помощью люди общаются не друг с другом, а обращаются к поисковой машине. Соответственно, прагматика высказываний всегда одна и та же, поэтому доля каких-то конструкций будет заметно отличаться. Например, доля глаголов в языке запросов в языке запросов составляет 5,4%, а в русском — 17,5%. Дело в том, что они используются с другой функцией, обычно это глаголы, отражающие намерение пользователя: «скачать», «смотреть», «слушать». Так что если смотреть на долю 10 самых частых среди всех глаголов, то она будет гораздо выше — 46% против 11,4% в русском. Грамматически язык гораздо проще, так как средняя длина фразы в нем не превышает четырех слов. Это даже не полноценные предложения, а высказывания. Возникает вопрос, можно ли в таком случае вообще говорить о синтаксисе языка запросов? Мы считаем, что можно. В подтверждение этому рассмотрим некоторые примеры, на которых увидим, что в языке запросов можно усмотреть конструкции, нехарактерные для русского языка, но часто встречающиеся в других, например, в японском.
[фото котята] [фото котят] *[котят фото] Пока что не очень понятно, что происходит в первых двух запросах, но мы прекрасно видим, что на третьей позиции у нас традиционная именная группа, согласованная по родительному падежу. Теперь рассмотрим глагольную группу:
[смотреть трейлер семейка крудс] [трейлер семейка крудс смотреть] У нас есть один объект — «трейлер семейка крудс», с которым мы хотим произвести определенное действие — «смотреть». Дальше у нас появляется языковая конструкция, которая в русском языке практически не встречается — топикализация. Она очень распространена, например, в японском. Там можно вывести топик — то, о чем идет речь — вывести в начало предложения. В языке запросов также можно провести топикализацию:
[семейка крудс трейлер смотреть] [семейка крудс смотреть трейлер] Если считать, что происходит именно это, а не какой-то мешок слов, который люди тасуют как попало, то мы можем естественным образом предположить, что остальные конструкции должны быть запрещены. И это действительно так. Конструкции, которые ничем не хуже тех четырех, что мы привели выше, никогда не встречаются или встречаются очень редко:
*[трейлер смотреть семейка крудс] *[смотреть семейка крудс трейлер] Мы можем считать, что наша гипотеза про топикализацию подтвердилась, и попробуем разобраться, что же происходит в первых двух запросах про котят:
[котята фото] [фото котят] Похоже, что первый запрос — это исходная структура, а второй — еще один пример топикализации.
Вычислительные моделиИмея большой корпус языка можно оценить его усвоение статистически при помощи простых тестов. Корпус языка запросов огромен просто по своей природе. Ежедневно в Яндекс приходят сотни миллионов поисковых запросов, соответственно, корпуса на миллиарды высказываний можно брать практически из воздуха. Это позволяет нам не просто оценивать вычислительные модели, но и сравнивать их между собой до достижения статистической значимости разницы и т.п. Давайте придумаем самую простую задачу, которая поможет нам оценить, усвоил ли алгоритм или модель язык и насколько хорошо. Например, задача с восстановлением пропущенного слова:[в лесу * елочка в лесу она росла] [mp3 * бесплатно и без регистрации] Идея состоит в том, что в ста процентах случаев эту задачу решить невозможно, но чем лучше кто-то овладел языком, тем в большем проценте случаев он эту проблему решит. И если у нас примеров достаточно много, сколь бы не была разница между тестируемыми, мы все равно сможем ее увидеть и добиться, чтобы она была статистически значима. При работе с естественными языками это чаще всего невозможно из-за ограниченности корпусов.
Как вообще может быть устроена модель, которая пытается таким образом восстанавливать слова? Самый простой вариант — это N-граммы, когда мы берем последовательность слов и говорим, что вероятность появления следующего слова в цепочке зависит только от скольких-то предыдущих. Затем оцениваем вероятность и подставляем это слово. Такие N-граммы могут давать нам возможность восстанавливать предыдущее слово, идущее следом или слово в середине:
[… скачать без *…] => регистрации […* принцессу карандашом] => нарисовать [… проклятые * дрюон] => короли Это не очень интересная модель. Фактически, мы просто запомнили, какие бывают конструкции в языке и никак явно ничего не обобщаем. Очевидно, что машина, которая использует только такие шаблоны без обобщения, будет владеть языком значительно хуже, чем машина, применяющая более сложные правила. В качестве таких правил попробуем выбрать такие же шаблоны, в которых некоторые слова заменяются на множества разных слов. Например, мы можем заметить, что если после фразы «сокол и *» идут слова, обозначающие книжный контекст (названия форматов файлов, слово «читать» или «автор»), то пропущено, скорее всего, слово «ласточка».
Еще мы можем изучить уровень «знания» языка в зависимости от количества обучающих примеров: 3100 фраз, 6200 фраз, 12 400 фраз, 24 800 фраз, 41 000 фраз. Верхняя граница примерно соответствует количеству фраз, которое слышит ребенок за два первых года жизни. Потенциально можно проследить, в какой именно момент кривая загнется и новая информация перестанет поступать. Но на 41 000 фраз даже на графиках N-граммных моделей видно, что движение не останавливается. Синим цветом на графике отмечено, сколько процентов слов модель угадывает на тестах, а красным и синим — интервалы 3Σ. Что интересно, контексты, стоящие слева от угадываемого слова помогают определить его на один процент лучше. А если использовать правый и левый контексты одновременно, процент угадывания возрастает на десять процентов.
Следующий рывок у нас должен случиться, когда мы начнем использовать генерализованные шаблонные конструкции. В качестве кандидатов на эту роль выберем два разных типа: грамматические и контекстно-концептные. У нас в Яндексе есть прекрасный инструмент — леммер. Он может про каждое слово рассказать, какая у него лемма, и как он из этой леммы пришел к текущей форме. позволяет определить начальную форму любого слова. Таким образом, мы можем добавить грамматический контекст:
[(S, им, ед) * торрент] => скачать [инструкция * (S, дат, ед)] => по В случае с контекстно-концептными шаблонами мы можем попытаться обобщить некоторые множества слов. Например, мы можем выделить X как некоторое множество слов и словосочетаний, для которых допустимы выражения [X тюнинг] и [X цена]:
[стучит * X], допустимы [X тюнинг] и [X цена] => двигатель Далее возникает вопрос, можно ли вывести столько же информации, сколько ее содержится в граммемах, только из контекстов? Было бы просто прекрасно, если бы мы знали, что можно не размечать части речи и не разделять грамматические шаблоны от семантических, а просто свести все к единому концептному типу. Если мы добавим обобщенные шаблоны, использующие всю доступную грамматику, мы получим результат, который гарантирует увеличение на 0,2 процента. Это довольно смешно по сравнению с тем, что мы видели выше, но именно где-то здесь мы стремительно упираемся в тот самый потолок, который пробить очень сложно. Но именно он соответствует тому пониманию языка, к которому все стремятся. Контекстно-концептные шаблоны позволяют добиться еще меньшего результата — 0,04%. Получается, что ответ на наш вопрос отрицательный: в граммемах содержится больше информации. Однако вопрос о том, можно ли вывести эту же информации с помощью каких-то более сильных обобщений, остается открытым. Мы никак не использовали тот факт, что словоформы одного и того же слова друг на друга очень похожи, и суффиксы разных словоформ с одной и той же граммемой часто друг друга напоминают. Можно ли с использованием таких обобщений вывести информацию эквивалентную по своей силе для решения тестовой задачи только из словоупотребления? И если да, то как формализовать этот алгоритм?
Итоги У нас на глазах вырос новый лингвистический объект. Он проще обычного естественного языка. У него одна четкая цель коммуникации, одна и та же прагматика. К тому же, мы знаем его полную статистику словоупотребления, что для любого естественного языка — чистая фантастика. В то же время, он всё ещё достаточно сложный, чтобы оставаться интересным и навести нас на какие-то мысли насчет структуры «настоящих» языков. Множество вопросов еще ждут своих исследователей: Какие в нем «части речи»? Можно ли построить для него полный парсер? На какие естественные языки он похож? Как развивается?