Как простая статистика раскрывает визуальные особенности 20 языков
Делиться

Даже если вы не знаете ни слова на каком-либо языке, вы часто можете догадаться, о каком языке идёт речь, просто заметив определённые сочетания символов. Например, я не говорю по-исландски, но мгновенно узнаю исландский текст, когда вижу буквы вроде «ð» или «þ», поскольку в других местах эти символы встречаются крайне редко. Аналогично, я заметил, что если в тексте много «ijk», то это, скорее всего, голландский текст.
В этой статье рассматривается, как можно использовать простую статистику для изучения этих визуальных «отпечатков пальцев» — последовательностей символов, которые наиболее точно указывают на то, какой язык вы изучаете, — в 20 различных европейских языках.
Как изучать лингвистические отпечатки с помощью статистики
Чтобы изучить визуальные «отпечатки» языка, нам сначала нужен способ оценить, насколько уникален тот или иной шаблон символа. Естественной отправной точкой может стать рассмотрение наиболее распространённых шаблонов символов в каждом языке. Однако этот подход быстро становится неэффективным, поскольку шаблон символа может быть очень распространённым в одном языке и также часто встречаться в других. Частота сама по себе не отражает уникальность. Вместо этого мы хотим спросить:
«Насколько вероятнее, что эта закономерность появится в одном языке по сравнению со всеми остальными?»
Вот тут-то и вступает в дело статистика! Формально, пусть:
- L — набор всех 20 изученных языков
- S — это набор всех наблюдаемых шаблонов символов в этих языках.
Чтобы определить, насколько сильно заданный шаблон символа s∈ S идентифицирует язык l∈ L , мы вычисляем отношение правдоподобия:
[LR_{s,l} = frac{P(s|l)}{P(s|neg l)}]
Это позволяет сравнить вероятность встретить шаблон символа s в языке l по сравнению с любым другим языком. Чем выше это соотношение, тем более однозначно этот шаблон связан с данным языком.
Расчет отношения правдоподобия на практике
Чтобы на практике вычислить отношение правдоподобия для каждого шаблона символа, нам необходимо перевести условные вероятности в величины, которые мы можем измерить. Вот как мы определяем
соответствующие пункты:
- cl(s): количество раз, когда шаблон символа s встречается в языке l
- c¬l(s): количество раз, когда шаблон символа s встречается во всех других языках
- Nl: общее количество вхождений шаблонов символов в языке l
- N¬l: общее количество случаев употребления шаблона во всех других языках
Используя их, условные вероятности становятся:
[P(s|l) = frac{c_l(s)}{N_l},~P(s|neg l)=frac{c_{neg l}(s)}{N_{neg l}}]
и отношение правдоподобия упрощается до:
[LR_{s,l} = frac{P(s|l)}{P(s|neg l)} = frac{c_l(s)cdot N_{neg l}}{c_{neg l}(s)cdot N_l}]
Это дает нам числовую оценку, которая количественно определяет, насколько более вероятно появление шаблона символа s в языке l по сравнению со всеми другими.
Обработка нулевых отсчетов
К сожалению, в нашей формуле отношения правдоподобия есть проблема: что произойдет, если c¬l(s) = 0?
Другими словами, что, если определённая комбинация символов s встречается только в языке l и ни в одном другом? Это приводит к делению на ноль в знаменателе и к отношению правдоподобия, равному бесконечности.
Технически это означает, что мы нашли совершенно уникальный шаблон для данного языка. Но на практике это не очень полезно. Шаблон символа может встречаться только один раз в одном языке и никогда больше, и ему будет присвоен бесконечный рейтинг. Это не очень полезно в качестве надёжного «отпечатка» языка.
Чтобы избежать этой проблемы, мы применяем метод, называемый аддитивным сглаживанием. Этот метод немного корректирует исходные значения, чтобы исключить нули и снизить влияние редких событий.
В частности, мы добавляем небольшую константу α к каждому значению в числителе и α| S | к знаменателю, где | S | — общее количество наблюдаемых шаблонов символов. Это предполагает, что каждый шаблон символов имеет небольшой шанс встретиться в каждом языке, даже если он ещё не встречался.
После сглаживания скорректированные вероятности становятся:
[P'(s|l) = frac{c_l(s) + alpha}{N_l + alpha|S|},~P'(s|neg l)=frac{c_{neg l}(s) + alpha}{N_{neg l} + alpha|S|}]
И окончательное отношение правдоподобия, которое необходимо максимизировать, равно:
[LR_{s,l} = frac{P'(s|l)}{P'(s|neg l)} = frac{(c_l(s) + alpha)cdot(N_{neg l} + alpha|S|)}{(N_l + alpha|S|)cdot(c_{neg l}(s) + alpha)}]
Это сохраняет стабильность и гарантирует, что редкий шаблон не станет автоматически доминировать только потому, что он исключительный.
Набор данных
Теперь, когда мы определили метрику для выявления наиболее отличительных особенностей символов (наших языковых «отпечатков пальцев»), пришло время собрать реальные языковые данные для анализа.
Для этого я использовал библиотеку Python wordfreq, которая составляет списки частоты употребления слов для десятков языков на основе таких крупных источников, как Википедия, книги, субтитры и веб-тексты.
Одна из особенно полезных функций для такого анализа — top_n_list(), которая возвращает отсортированный список из n самых распространённых слов в заданном языке. Например, чтобы получить 40 самых распространённых слов исландского языка, мы бы вызвали:
wordfreq.top_n_list(«is», 40, ascii_only=False)
Аргумент ascii_only=False гарантирует, что символы, не входящие в кодировку ASCII, например, исландские «ð» и «þ», будут сохранены в выводе. Это важно для данного анализа, поскольку мы ищем уникальные для данного языка шаблоны символов, включая отдельные символы.
Для создания набора данных я извлек 5000 самых частых слов из каждого из следующих 20 европейских языков:
Каталанский, чешский, датский, голландский, английский, финский, французский, немецкий, венгерский, исландский, итальянский, латышский, литовский, норвежский, польский, португальский, румынский, испанский, шведский и турецкий.
Это дает большой многоязычный словарь, насчитывающий в общей сложности 100 000 слов, достаточно богатый для извлечения значимых статистических закономерностей в разных языках.
Для извлечения шаблонов символов, используемых в анализе, из каждого слова в наборе данных были сгенерированы все возможные подстроки длиной от 1 до 5. Например, слово «язык» будет содержать такие шаблоны, как l, la, lan, lang, langu, a, an, ang и т. д. Результатом является полный набор S , содержащий более 180 000 уникальных шаблонов символов, наблюдаемых в 20 изученных языках.
Результаты
Для каждого языка показаны пять наиболее характерных шаблонов символов, ранжированных по отношению правдоподобия. Константа сглаживания была выбрана равной α=0,5.
Поскольку исходные коэффициенты правдоподобия могут быть довольно большими, я вместо этого привел десятичный логарифм коэффициента правдоподобия (log10(LR)). Например, логарифм коэффициента правдоподобия, равный 3, означает, что шаблон символа в данном языке встречается в 103 = 1000 раз чаще, чем в любом другом. Обратите внимание, что из-за сглаживания эти коэффициенты правдоподобия являются приблизительными, а не точными, и крайности некоторых оценок могут быть сглажены.
Каждая ячейка отображает шаблон символа с наивысшим рейтингом и его логарифмическое отношение правдоподобия.
| Язык | #1 | #2 | #3 | #4 | #5 |
|---|---|---|---|---|---|
| каталонский | ènc 3.03 | ènci 3.01 | ционы 2.95 | ència 2.92 | высота 2.77 |
| чешский | ě 4.14 | ř 3.94 | не 3.65 | … 3.59 | ře 3.55 |
| датский | øj 2.82 | æng 2.77 | сёг 2.73 | скаб 2.67 | øge 2.67 |
| Голландский | ijk 3.51 | lijk 3.45 | элийк 3.29 | ijke 3.04 | вур 3.04 |
| Английский | союзник 2.79 | тли 2.64 | ох 2.54 | инь 2.54 | цитируемый 2.52 |
| финский | ааа 3.74 | ään 3.33 | тээ 3.27 | llä 3.13 | сся 3.13 |
| Французский | êt 2.83 | эвкс 2.78 | rése 2.73 | dép 2.68 | prese 2.64 |
| немецкий | эйх 3.03 | тлик 2.98 | тлич 2.98 | шл 2.98 | ичен 2.90 |
| венгерский | о 3.80 | ű 3.17 | гье 3.16 | szá 3.14 | ész 3.09 |
| исландский | ð 4.32 | идентификатор 3.74 | объявление 3.64 | þ 3.63 | ði 3.60 |
| итальянский | ционе 3.41 | цион 3.29 | Сион 3.07 | агги 2.90 | циони 2.87 |
| латышский | а 4.50 | я 4.20 | ē 4.10 | та 3.66 | на 3.64 |
| литовский | ė 4.11 | ų 4.03 | ių 3.58 | я 3.57 | ес 3.56 |
| норвежский | сьон 3.17 | asj 2.93 | øy 2.88 | асьон 2.88 | асджо 2.88 |
| польский | ł 4.13 | ś 3.79 | ć 3.77 | ż 3.69 | ал 3.59 |
| португальский | ão 3.73 | çã 3.53 | ção 3.53 | асан 3.32 | açã 3.32 |
| румынский | а 4.31 | ț 4.01 | ți 3.86 | ș 3.64 | тэ 3.60 |
| испанский | цион 3.51 | действие 3.29 | ион 3.14 | сион 2.86 | ьенто 2.85 |
| шведский | для 2.89 | ларек 2.72 | сталь 2.72 | ång 2.68 | öra 2.68 |
| турецкий | я 4.52 | ş 4.10 | ğ 3.83 | в 3.80 | ли 3.60 |
Обсуждение
Ниже приведены некоторые интересные интерпретации результатов. Это не исчерпывающий анализ, а лишь несколько наблюдений, которые я счёл заслуживающими внимания:
- Многие из шаблонов символов с самыми высокими коэффициентами правдоподобия представляют собой отдельные символы, уникальные для соответствующего языка, например, упомянутые ранее исландские «ð» и «þ», румынские «ă», «ț» и «ș» или турецкие «ı», «ş» и «ğ». Поскольку эти символы практически отсутствуют во всех других языках в наборе данных, они бы давали бесконечные коэффициенты правдоподобия, если бы не аддитивное сглаживание.
- В некоторых языках, особенно в голландском, многие из первых результатов являются подстроками друг друга. Например, топовая модель «ijk» также встречается в следующих по рангу моделях: «lijk», «elijk» и «ijke». Это показывает, как часто определённые сочетания букв используются повторно в более длинных словах, что делает их ещё более характерными для данного языка.
- Английский язык имеет одни из наименее выраженных особенностей среди всех исследованных языков: максимальное логарифмическое отношение правдоподобия составляет всего 2,79. Это может быть связано с наличием английских заимствований в списках 5000 самых распространённых слов многих других языков, что снижает уникальность специфических для английского языка особенностей.
- Существует несколько случаев, когда основные окончания отражают общие грамматические структуры разных языков. Например, испанский «-ción», итальянский «-zione» и норвежский «-sjon» выполняют функции суффиксов номинализации, аналогичных английскому «-tion», превращая глаголы или прилагательные в существительные. Эти окончания ярко выражены в каждом языке и показывают, как разные языки могут следовать схожим закономерностям, используя разные варианты написания.
Заключение
Этот проект начался с простого вопроса: что делает язык похожим на себя? Проанализировав 5000 самых распространённых слов в 20 европейских языках и сравнив их характерные особенности, мы выявили уникальные «отпечатки пальцев» каждого языка — от букв с диакритическими знаками, таких как «ş» и «ø», до повторяющихся сочетаний букв, таких как «ijk» или «ción». Хотя результаты не претендуют на окончательную точность, они предлагают увлекательный и статистически обоснованный способ изучить визуальные различия языков, даже не понимая ни единого слова.
Полный код реализации этой методики смотрите в моем репозитории GitHub.
Спасибо за прочтение!
Ссылки
библиотека Python wordfreq:
- Робин Спир. (2022). rspeer/wordfreq: v3.0 (v3.0.2). Зенодо. https://doi.org/10.5281/zenodo.7199437
Источник: towardsdatascience.com



























