Привет в Новом году. Я тут добрался на праздниках до одной темы, которая пылится у меня уже полгода в закладках. Поговорим сегодня о метриках лексического разнообразия. Эти метрики показывают насколько богат текст на разные слова, помогая нам оценить его сложность. В этой небольшой заметке я кратко расскажу историю вопроса, о современных метриках, а в конце покажу результаты предварительных экспериментов. Тетрадка доступна по ссылке.
Пока искал КДВП, нашел вот этот чудесный репозиторий. А КДВП не нашел.
Говоря про оценку сложности текстов, вот как это можно проиллюстрировать [9]:
- Комфортное чтение текста, содержащего большое количество разных слов, подразумевает знание этих слов, иначе придется часто смотреть в словарь.
- Если посмотреть немного с другой стороны, тексты можно разделить по разнообразию на уровни для комфортного чтения. Например, для детей по возрасту или для людей, изучающих второй язык.
- По динамике разнообразия можно судить о патологии развития речевых способностей. Например, в норме ребенок по мере развития будет использовать новая слова, которые он слышит, для описания окружающего мира. Другими словами увеличивается лексическое разнообразие речи.
- Использование разнообразных слов заставляет тратить больше мыслетоплива при чтении, поскольку чаше происходит декодирование новых слов.
- Немного необычный случай. В этой статье [4], авторы попытались измерить рост разнообразия научных идей через лексическое разнообразие ключевых слов из статей, хоть и неудачно.
Давайте приступим к самим метрикам.
Много метрик хороших и разных
TTR
История этих метрик началась в 1944 году, когда впервые была предложена метрика Token-Type Ratio. Это интуитивная метрика придет в голову любому, кто достаточно долго подумает о том, как можно измерить разнообразие слов в тексте. Считается она по следующей формуле
где V — количество уникальных слов, в N — количество всех слов ("токен" и "слово" далее по тексту синонимы). Однако у этой формулы есть фундаментальный недостаток — ее значение нелинейно зависит от размера измеряемого текста. Происходит это потому, что при достаточно большом объеме текста количество уникальных слов является почти константой. Поэтому вместо линейной зависимости, мы получаем что-то похожее на гиперболу.
С тех пор набралась тьма [1] вариантов подсчета TTR с поправками на длину, но идела пока так никто и не нашел. Однако, исходя из этой статьи [2], на данный момент комбинация из трех метрик MTLD, vocd (HD-D) и Maas является лучшим вариантом для измерения лексического многообразия. Кроме того, в этой [3] статье заявлено, что vocd (HD-D) лучше других подходит для корпусов малого размера. Про них я и расскажу.
MTLD
Одна из новейших метрик оценки лексического разнообразия текстов [2]. Создатели руководствовались наблюдениями за динамикой TTR для решения проблемы зависимости от длины. Оказывается, если построить график значений TTR в зависимости от количества токенов, то получится примерно следующая картина.
На этом графике можно выделить три региона. В регионе (а) TTR равняется 1, поскольку в начале все токены уникальны. Как только начинают появляться повторения, значение TTR резко проседает в регионе (b). После этого снова наблюдается рост TTR, что говорит нам о наборе новой порции уникальных токенов. Можно видеть, что такие колебания повторяются несколько раз, пока не настанет т.н. точка стабилизации или насыщения, после которой нет значительных изменений в количестве уникальных токенов или повторении старых. Дальнейшее убывание прямой связано с тем, что повторений будет становиться больше и больше, по стандартному сценарию.
Если поразмыслить, получается, что основная информация о разнообразии лексики содержится как раз до этой точки насыщения, исходя из логики колебаний. Отсюда логично предположить, что чем больше токенов требуется для достижения этой точки, тем более разнообразней получается текст.
Опираясь на это, будем считать MTLD следующим образом. Начиная с первого токена в тексте, будем брать промежуток токенов длинною от единицы и считать его TTR. Если TTR на промежутке не достиг значения точки стабилизации, тогда увеличиваем промежуток на 1 вправо. Если достиг, то увеличиваем счетчик т.н. факторов на один и обозначаем начало нового промежутка там, где был конец предыдущего промежутка. Делаем так по всему тексту. Если последний кусок заканчивается раньше, чем будет достигнута точка стабилизации, то считаем какой процент этот кусок составляет до точки стабилизации и прибавляем это к счетчику факторов. Наконец, поделим количество всех токенов на то, что у нас получилось в счетчике и получим MTLD.
К вопросу о том, что считает MTLD. В этих промежутках-факторах отражено количество токенов, необходимых для достижения точки стабилизации, а MTLD некое усредненное значение.
Стоит упомянуть, что авторы рекомендуют считать MTLD с двух сторон текста, а в качестве результата отдавать среднее.
Преимуществом MTLD над многими другими метриками является внятная интерпретируемость, а также использование всего объема текста, чем страдают другие метрики, основанные на использовании промежутков. Например, они могут отбрасывать слова в конце, если из них нельзя сформировать полное окно. Однако, прежде чем использовать MTLD для конкретного языка или может даже домена, необходимо сначала найти точку стабилизации.
voc-d
Так называется программа в среде Unix для подсчета метрики лексического разнообразия D [5]. Часто можно встретить о ней мнение, как о стандарте подсчета лексического разнообразия. Идея метрики основывается на вероятностной интерпретации TTR, благодаря которой, с историей в несколько работ, появилась аппроксимирующая формула для TTR с одним параметром D
Если нарисовать графики семейства функции, то получится следующее
Это очень похоже на то, как ведет себя реальный TTR.
Идея программы voc-d заключается в построении эмпирического TTR и нахождения такого параметра D, которое бы лучше всего описывало полученную зависимость. Найденное значение D и принимается за оценку разнообразия. Эмпирический TTR строится как набор средних значений 100 подсчетов TTR на отрезках от 35 до 50 токенов. Сами отрезки случайно выбираются из текста. Чем выше D, тем больше разнообразие.
HD-D
Однако, со временем, исследователи заметили [6] интересную вещь в процедуре voc-d, а именно то, что это на самом деле процедура довольно избыточная и вносит шум в результат. Считать тоже самое можно гораздо проще.
Если внимательно рассмотреть процедуру семплирования voc-d, то можно понять, что это ничто иное, как аппроксимация TTR всевозможных комбинаций r слов, где r принимаеи значение от 35 до 50. Рассмотрим отрезок текста из 35 токенов. Каждый новопоявившийся токен в очередном семпле такого отрезка из 35 токенов вносит в TTR 1/35 всего значения. Вполне очевидно, что они не равноправны, ведь явно одни слова появляются чаще других. Чтобы оценить вес каждого токена, мы можем оценить вероятность появления того или иного токена хотя бы один раз в семпле такого размера. Вероятность появления объекта x раз в выборке объема N имеет гипергеометрическое распределение. Для того, чтобы посчитать появление объекта хотя бы один раз нам нужно сложить вероятности появления объекта один раз, два раза, и т.д. до 35 в нашем случае. Чтобы так не мучиться, воспользуемся базовым свойством вероятностей и посчитаем, что нам нужно, как разность между 1 и вероятностью найти ноль таких объектов.
Для примера возьмем слово кротовуха. Допустим, оно 10 раз встречается в тексте длиной в сто слов, тогда вероятность хотя бы раз встретить его в выборке 35 токенов равняется 0.98966. По другому говоря, это слово хотя бы один раз встретится в 98.966% комбинаций из 35 токенов данного текста. Таким образом, вклад нашего слова в TTR всевозможных комбинаций 35 слов будет складываться из части токена в TTR (1/35) и пропорции семплов (0.98966), где оно может появиться, если мы будем рассматривать все комбинации. Тогда вклад кротовухи расчитывается как $1/35*0.98966$. Значение всего TTR для 35 токенов будет сумма вероятностей всех слов в тексте.
Авторы также показали, что эти полученные значения почти идеально коррелируют со значениями D, а расхождения они объясняют шумом, который появляется в процедуре voc-d.
Эксперименты
Я получил массу удовольствия, разбираясь как все эти метрики устроены. Однако, есть проблема. В этих статьях ни слова не сказано, как эти метрики поведут себя на других языках. Более того, MTLD явно нуждается в настройке на язык.
Меня, в первую очередь, интересовало поведения метрики при изменении длины текстов, но, к сожалению, устраивать тесты по всем правилам, которые описаны в статьях, у меня нет возможности. Поэтому я провел простой эксперимент, наглядно показывающий на графике, как изменяется значение трех метрик, а именно MTLD, HD-D и Mass на 10 разных документах длиной в 500 токенов из 3 разных доменов, а именно интервью, новости и википедия.
В качестве источника данных я использовал OpenCorpora. Здесь меня поджидала боль в виде отсутствия внятного разделения корпуса на домены. Они номинально есть, но либо инструмент их неправильно парсил, либо они там действительно номинально. Пришлось вручную фильтровать и собирать подходящие тексты. Однако, в целом, это мелочи. Я очень рад, что существует такой проект. Но, к сожалению, судя по активности, он медленно умирает.
Ниже представлены графики трех метрик плюс TTR на токенах с фильтрованой пунктуацией.
На графике TTR хорошо видно и гиперболоподобную зависимость, и те регионы, которые мы обсуждали в рассказе про MTLD. Интересно, что некоторые документы явно выбиваются из общей картины. Для MTLD здесь точка стабилизации установлена в 0.83. Видно, что, с оговорками графики похожи на линейные, но на некоторых документах метрику не слабо так колбасит. Метрика Mass отражает TTR полностью. HD-D же выглядит самой линейной среди всех, хотя мне кажется подозрительным маленький разброс по значениям. А еще считается она катастрофически долго по сравнению с остальными. Можно сделать общее наблюдение о том, что точка стабилизации прослеживается во всех метриках, поэтому использовать документы длиной раньше, чем эта точка достигается, лучше не стоит.
Смотря на графики выделяющихся документов, я подумал, что возможно стоит лемматизировать слова, все-таки английский не так богат на морфологию. Вооружившись pymorphy2, я повторил эксперимент, результаты ниже
Если сравнивать, то видно, что некоторые выбросы сгладились, но не сильно.
Итоги
Как видно, метрики далеко не идеальны. MTLD и HD-D безусловно обладают большей линейностью, чем TTR, однако, их локальные изменения вызывают вопросы. Однако, нужно помнить, что никто и не говорил, что они идеальны. Существуют работы [8], кстати, которые призывают перестать пытаться запихнуть информацию о таком сложном явлении, как лексическое разнообразие, в одну цифру. Вместо этого предлагается использовать несколько параметров.
Я тут решил создал канал в телеге. Буду там постить выжимки из статей (может быть тогда очередь закончится), мысли, части вот таких статей и анонсы самих статей.
Ссылки
[1] quanteda documentation: Calculate lexical diversity
[2] MTLD, vocd-D, and HD-D. A validation study of sophisticated approaches to lexical diversity assessment
[3] Finding Appropriate Lexical Diversity Measurements for Small-Size Corpus
[4] Combining keyphrase extraction and lexical diversity to characterize ideas in publication titles
[5] Measuring Vocabulary Diversity Using Dedicated Software
[6] vocd. A theoretical and empirical evaluation
[7] Measure Lexical Diversity
[8] Capturing the Diversity in Lexical Diversity
[9] Lexical Diversity an Language Development
Sergey_Kovalenko
Позвольте мне предложить свою точку зрения, из своей очень специфичной области увлечения. Не претендует на вселенскую объективность, а скорее наоборот.
Смотрите, использовать 500 уникальных слов на первой странице, а остальную книгу закончить используя всего 50 - наверное, не эквивалентно тому, чтобы более менее одинаково часто во всем изложении использовать 550 слов. Стандартным инструментом для учете повторений служит мера количества информации. Здесь сразу можно выделить два подхода
Внутренний:
Подсчитаем частоту употребления каждого токена внутри конкретного текста. Пусть p_i - частота i-го токена, а n_i - количество употреблений его в тексте. Вычислим сумму произведений n_i*log(p_i) - это будет полная информация I текста (без учета закономерности в последовательности его токенов). Разделим I на длину теста (в токенах), пусть r - это результат, тогда "приведенным" числом уникальных слов в тексте назовем величину 2^r.
Пример; если текст набран из k одинаково часто встречающихся токенов, то "приведенное" число уникальных слов будет равно k.
Внешний подход:
То же самое, что и внутренний, но p_i - это частота i-го токена не в конкретном тексте, а в типичном для класса этого текста языке (например, художественной литературе, книг по медицине или новостным лентам).
Внешний подход позволит приписывать осмысленные разнообразия даже очень маленьким тестам, внутри которых все токены уникальны. Правда здесь возможна ситуация, когда приведенное число токенов будет больше длины текста.
aarmaageedoon Автор
Меры на основе теории информации есть, я их просто не рассматривал здесь.) Ваш подход тоже можно использовать. Однако, на сколько мне помнится, исследователи не использовали формулу энтропии напрямую, а как-то с ней колдовали.
Sergey_Kovalenko
Всякое число, полученное каким-то осмысленным способом, имеет какой-то смысл. Трудно сказать, какое решение лучше, если не знаешь задачу. Интересно, какую задачу решали Вы, какие задачи решали авторы приведенных вами статей?
Пока я это писал, мне в голову пришла вот какая интересная задачка.
Пусть вам попалась уже разделенная на токены новелла на "древнемарсианском" языке, единственная в своем роде. Сможете ли вы, располагая текстом первых 30 ее страниц (скажем, 500 слов на страницу), оценить число уникальных слов на следующих 300 страницах, назвать вероятный разброс своей оценки и указать правдоподобные условия, в которых использованный вами метод будет оправдан.
aarmaageedoon Автор
Авторы статей искали валидную метрику для лексического разнообразия. Я же тем экспериментом хотел увидеть динамику этих метрик на русском языке. Точнее, я хотел посмотреть насколько эти метрики линейны при изменении длины текста в токенах.
Что касается задачи. К своему стыду, я не смог быстро придумать решение, используя тервер - мало практики. Однако, на основе изложенного можно предложить следующее примерное решение.
Давайте по имеющемуся тексту оценим параметр D по методике voc-d. Далее, немного преобразуя выражение из параграфа про voc-d, можем получить формулу зависимости уникальных токенов от длины текста. Получится формула $$V = D[(1+2\frac{N}{D})^2 -1]$$, по которой мы и сможем оценить количество уникальных токенов данного текста при наперед заданной длине. Вероятностную оценку не назову, но условием применимости, как минимум, будет подчинение распределения токенов закону Ципфа. Это также можно проверить эмпирически.
klimkinMD
А "валидность" по каким критериям определялась? И ещё вопрос: Вы его (коэффициент лексического разнообразия) для чего-то используете (для чего?) или просто интересует?
aarmaageedoon Автор
В данном случае, под валидностью я имел к ввиду отсутствие деградации с увеличением роста числа токенов. Есть более сложные вопросы типа точно ли эти метрики измеряют то, что от них ожидается, но я этих вопросов не касался.
Про второй вопрос. Я собираю разные методы, которые могли бы помочь с характеризацией текстов. В планах, на базе этих характеристик научиться извлекать явные интерпретируемые зависимости.
klimkinMD
Плотность не нравится? (Предельный случай: словарь русского языка и все тексты на нём созданные -- словарь стабилен (относительно), а количество токенов растёт лавинообразно)
Sergey_Kovalenko
Я сам бывает трачу на поиски ответа по нескольку лет и в течении этого времени ответы обычно меняются. Я рад, что у вас был повод задуматься, а насчет решения - Вы сами должны быть мерилом правильности своих рассуждений, главное - не торопитесь.