Что утверждает закон
Возьмите достаточно длинный текст. Посчитайте, сколько раз встречается каждое слово. Расставьте слова по убыванию частоты и пронумеруйте: самое частое — номер один, следующее — номер два.
Ципф заметил, что частота слова примерно обратно пропорциональна его номеру.
Второе слово встречается вдвое реже первого. Десятое — вдесятеро реже. Сотое — в сто раз реже.
Если отложить по обеим осям логарифмы — номер и частоту, — точки лягут почти на прямую.
Работает это в русском, английском, китайском; в романе, в газете, в переписке; и даже в текстах на давно мёртвых языках. Настолько повсеместно, что это назвали законом.
Опыт 1: посчитать
Что нужно: текст подлиннее и способ считать. Годится книга из открытого доступа, а считать можно вручную или программой.
Вручную
Возьмите страницу-другую. Выпишите каждое слово, ставя палочку при повторе. Хватит и первых двадцати самых частых — закономерность видна уже на них.
Скучно, но полезно: считая руками, вы своими глазами увидите, насколько неравномерно распределены слова. Несколько служебных слов занимают заметную долю всего текста.
Программой
Пятнадцать строк на Python:
import re, collections
text = open('book.txt', encoding='utf-8').read().lower()
words = re.findall(r'[а-яё]+', text)
freq = collections.Counter(words)
for rank, (word, n) in enumerate(freq.most_common(30), 1):
print(f'{rank:3} {word:15} {n:6}')
print('всего слов:', len(words), '| различных:', len(freq))
Что построить. График: по горизонтали — номер слова, по вертикали — частота, обе оси логарифмические. В любой таблице это делается галочкой «логарифмическая шкала».
Ожидание: точки лягут примерно на прямую с наклоном около −1.
Опыт 2: контроль — вот ради чего всё затевалось
Здесь начинается настоящая работа, и большинство рассказов о законе Ципфа до неё не доходит.
Задайте себе вопрос: а что, собственно, доказывает эта прямая?
Проверим. Сделаем текст, в котором нет ни языка, ни смысла, ни какого-либо закона: просто случайные буквы, изредка пробел.
import random, re, collections
alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
chars = []
for _ in range(300000):
chars.append(' ' if random.random() < 0.18 else random.choice(alphabet))
words = re.findall(r'[а-яё]+', ''.join(chars))
freq = collections.Counter(words)
for rank, (word, n) in enumerate(freq.most_common(30), 1):
print(f'{rank:3} {word:15} {n:6}')
Постройте по этим числам такой же график и положите рядом с первым.
Вы увидите такую же прямую.
Это не ошибка и не подвох. Это установленный результат: Джордж Миллер указал на него ещё в 1957 году, а Вэньтянь Ли в 1992-м разобрал строго. Название его статьи не оставляет места для толкований: «Случайные тексты дают распределение частот слов, похожее на закон Ципфа».
Что из этого следует
Вывод, к которому вы пришли своими руками, стоит сформулировать точно, потому что его легко утащить в обе крайности.
Неверно: «Закон Ципфа — ерунда, язык тут ни при чём».
Неверно и обратное: «Прямая на графике доказывает глубокое свойство языка».
Верно: сам факт прямой линии доказывает меньше, чем кажется. Прямую даёт и механизм, в котором нет ничего языкового: длинные «слова» при случайном наборе просто реже выпадают, и этого достаточно.
Значит, объяснять надо не наличие прямой, а что именно в настоящем тексте от неё отличается: точный наклон, отклонения на концах, поведение при росте объёма.
Это общий приём, и он ценнее самого закона Ципфа: прежде чем объяснять закономерность, проверьте, не получается ли она сама собой. Контрольный опыт — то, чем измерение отличается от впечатления.
Опыт 3: где настоящий текст всё-таки отличается
Если первые два опыта получились, беритесь за этот — здесь начинается разница.
Растёт ли словарь. Возьмите первую тысячу слов текста и посчитайте, сколько среди них различных. Потом первые две тысячи, четыре, восемь. Постройте: различных слов в зависимости от прочитанных.
У настоящего текста словарь растёт всё медленнее: автор пользуется ограниченным набором слов, и новые появляются всё реже. У случайного текста новые «слова» лезут без конца — комбинаций букв бесконечно много.
Наклон. Померьте наклон прямой у обоих. У настоящего текста он обычно близок к −1. У случайного зависит от того, какую вероятность пробела вы задали, — попробуйте 0,10 и 0,25 и посмотрите, как наклон поедет.
Концы кривой. Присмотритесь к самым частым и к самым редким словам. У настоящего текста точки на концах отходят от прямой сильнее. Именно эти отклонения и есть то, что требует объяснения.
Остриё науки
Почему закон держится — не выяснено. Объяснений предлагалось много, и ни одно не принято окончательно.
Сам Ципф объяснял его принципом наименьшего усилия: говорящему выгодно обходиться немногими словами, слушающему — чтобы слов было много и они были точны; равновесие двух давлений и даёт такое распределение. Красиво, но проверить трудно, а случайный набор букв, у которого никаких усилий нет вовсе, даёт похожую картину.
Предлагали также накопление преимущества (частое слово чаще попадается и потому чаще употребляется дальше) и оптимальное кодирование — здесь работал Бенуа Мандельброт, ещё до того, как занялся фракталами; его обобщение закона носит два имени. Степенные законы — общая нить между частотой слов и фрактальной геометрией: и там и там нет выделенного масштаба.
Современный разбор Стивена Пьянтадози (2014) показывает, что каждое объяснение что-нибудь да не объясняет, а разные тексты и разные языки дают систематически разные отклонения.
Открытым остаётся не «есть ли закон», а «что он означает». Это разные вопросы, и путать их не стоит.
И ещё одно. Похожие степенные распределения находят далеко за пределами языка: размеры городов, доходы, ссылки между страницами, размеры лавин. Общее ли это явление или совпадение внешне похожих кривых с разными причинами — тоже открытый вопрос.
Что записать в отчёт
| Что | Настоящий текст | Случайный текст |
|---|---|---|
| Всего слов | ||
| Различных слов | ||
| Частота слова № 1 | ||
| Частота слова № 10 | ||
| Частота слова № 100 | ||
| Наклон прямой | ||
| Растёт ли словарь без конца |
Главный вывод записывайте одной фразой: удалось ли отличить настоящий текст от случайного — и по какому именно признаку. Если не удалось ни по одному, так и напишите: это честный и осмысленный результат.
Читать дальше
→ Теория информации Шеннона: сколько информации несёт буква и почему нельзя сжать дальше → Фракталы в природе: степенные законы и величины, у которых нет одного масштаба → Закон Бенфорда: ещё одна закономерность в числах, которая кажется невозможной → Множество Мандельброта: чем ещё занимался человек, обобщивший закон Ципфа