Как на самом деле определять автора с помощью компьютера?

Как делается атрибуция?

Атрибуция — определение авторства — имеет много применений как в науке, так и в приземленных задачах, например, в судебной практике. Ниже мы будем говорить о текстовой атрибуции, и иногда от того, кто автор текста, зависит судьба крупной суммы денег, иногда — карьера или свобода человека, а иногда людям просто интересно, кто же написал то или иное произведение. Так, с точки зрения науки о литературе, строго говоря, всё равно, является автором «Тихого Дона» Михаил Шолохов или Фёдор Крюков, но общественность этот вопрос волновать не перестанет, наверное, уже никогда.

Атрибуция может выглядеть по-разному. Надежнее всего такая, которая основана на документах. Если бухгалтерия в своей строгой отчетности зафиксировала выплату денег за определенный текст некоторому лицу, очень высока вероятность, что получатель денег и есть автор этого текста. Вероятность этого выше, чем при любом другом способе выяснить, кто автор.

Но у нас не всегда есть надежные документы. И даже чаще их нет. Тогда единственным способом докопаться до истины будет сам текст, и люди верят, что, опираясь только на содержащиеся в нем косвенные свидетельства, можно установить, кто его написал. Хотя вообще-то это не более чем самонадеянная гипотеза, но мифы эпохи модерна слишком сильны.

Но вокруг атрибуции в принципе много мифов. Например, может показаться, что установить авторство можно по одному-единственному слову. Так, были те, кто считал, что автором известного произведения русской литературы XVIII в. «Отрывок путешествия в*** И*** Т***» является А.Н. Радищев потому что Радищев написал другое, самое известное, произведение русской литературы, содержащее в своем заглавии слово «путешествие». Так себе доказательная база. Чтобы всерьез об этом рассуждать, нужно забыть, что были и другие авторы, писавшие про путешествия. Например, Василий Алексеевич Лёвшин создал роман «Новейшее путешествие» (1784) и Михаил Михайлович Щербатов написал «Путешествие в землю Офирскую господина С…, шведского дворянина» (тоже 1784).

Вообще, такое заметное слово, как «путешествие», вряд ли годится как аргумент, оно входит в топ 2700 самых частотных слов русского языка. Так что опираться только на него в рассуждениях наивно. Кто угодно может употребить это слово, язык для всех общий.

Итак, предположим (а это легко, потому что обычно так и бывает), что мы оказались в ситуации, когда никаких документов у нас нет (воспоминания или какие-нибудь письменные признания — это, кстати, не документы, это, как говорят историки, «источники личного происхождения», доверять им полностью нельзя), а остался только текст, относительно которого есть подозрение, что с его авторством не все чисто. Или текст просто анонимный.

Как следует поступить?

Ответ на этот вопрос пытались найти уже много десятилетий. Ходили разными путями. Одни никуда не привели, другие дали кое-какой результат.

Эта область чрезвычайно похожа на доказательную медицину. Тут надо все проверять и всякие «общие соображения» могут оказаться пустышкой.

Не нужно использовать методы атрибуции без доказанной эффективности

Не нужно использовать методы атрибуции без доказанной эффективности

Каждый второй «знает», как вычислять авторство в тексте, потому что это кажется ему очевидным, или он что-нибудь читал про это много лет назад (например, у родителей академика Фоменко), но никто не знает, насколько эти методы действительно работают. Проверять слишком скучно.

Вот пара примеров того, как люди игнорируют многодесятилетнюю работу ученых по выявлению работающих методов атрибуции и развлекаются на эту тему, потому что почему бы и нет.

Как вычисляется авторство с точки зрения тех, кто не в теме?

Дэвид Робинсон из Heap 6 лет назад задался вопросом, кто написал колонку в «New York Times», представившись сотрудником администрации Трампа. Робинсону показалось, что будет удачной идеей найти специфичные для каждого твиттер-аккаунта представителя администрации Трампа слова с помощью метрики TF-IDF и посчитать косинусную близость между статьей и твитами разных близких к Трампу людей. Вышло, что наиболее вероятный кандидат на авторство колонки — сам Трамп. Или кто-то из Госдепа. Про некоторые наборы научных идей говорят, что элементы в них либо тривиальны, либо неверны. Это как раз тот случай.

В полезной книге «Python для хакеров: нетривиальные задачи и проекты» (2023) Л. Вогана, про которую даже на Хабре писали, внезапно (потому что где атрибуция, а где хакеры; хотя это не совсем далекие друг от друга области, если нужно деанонимизировать самого хакера) одной из задач ставится определение авторства (Глава 2, стр. 57—84). Начинается глава с дефиниции:»Стилометрия — это статистический анализ стилистики посредством компьютерного анализа текста». Это, несмотря на неуклюжую формулировку, близко к истине, но только если мы смотрим на предмет из современности, и совершенно ошибочно, если мы помним историю. Стилометрия началась (самое позднее, а есть мнения, что и раньше) в середине XIX века, когда никаких компьютеров еще не было. А само слово «стилометрия» придумал современник Ленина.

Ну ладно, а как нам предлагают анализировать стилистику?

Ставка делается среди прочего на среднюю длину слов. Действительно, такая идея была в конце XIX века, но себя она не оправдала. Подробнее про это: Grzybek, P. (2007). History and Methodology of Word Length Studies. In: Grzybek, P. (eds) Contributions to the Science of Text and Language. Text, Speech and Language Technology, vol 31. Springer, Dordrecht. https://doi.org/10.1007/978–1–4020–4068–9_2

Именно история вопроса дает понимание, почему в книге Вогана такие странные графики. Более уместными были бы столбчатые диаграммы, которые показывали бы, какое количество слов той или иной длины употребляют наши авторы;, но нет, диаграммы там линейные, предназначение которых в том, чтобы демонстрировать динамику:

Графики из книги Л. Вогана, стр. 70

Графики из книги Л. Вогана, стр. 70

Все дело в том, что — осознанно или нет — Воган опирается здесь на работы геофизика Томаса Менденхолла 1880-х годов, который предполагал, что частотность слов в идиостиле автора должна работать как-то так же, как и открытый незадолго до этого спектральный анализ химических элементов.

Хорошо про это рассказала в своей лекции о стилометрии Ольга Алиева из НИУ ВШЭ:

Вот какие графики рисовал Менденхолл. Даже сетка у Вогана осталась по наследству от тех работ из конца XIX века:

График распределения частот слов разной длины у Бэкона и Шекспира из работы Т. Менденхолла 1880-х годов

График распределения частот слов разной длины у Бэкона и Шекспира из работы Т. Менденхолла 1880-х годов

Но с 1880-х годов научная мысль все-таки несколько ушла вперед, и все это из 2024-го выглядит достаточно наивно. Да и некритично воспринятый формат графиков показывает, что в питоне автор понимает больше, чем в количественной атрибуции (как видно из дальнейшего, это тоже слишком щедрый аванс).

Спектральный анализ, геофизики, графики — это все, конечно, интересно, но можно ли доверять этому методу? В книге Вогана есть пример, где он показывает, что «Затерянный мир», вроде как, несколько больше похож на «Собаку Баскервилей», чем на «Войну миров», но это неточно. Не очень убедительно, честно говоря. На трех текстах? Камон!

Давайте возьмем, во-первых, побольше текстов, во-вторых, на русском языке.

Я немного модифицировал код из книги Вогана, потому что он не масштабируется на большее число текстов и нарушает принцип, согласно которому не следует копировать свой код. Вот:

strings_by_author = dict()
strings_by_author['doyle'] = text_to_string('hound.txt')
strings_by_author['wells'] = text_to_string('war.txt')
strings_by_author['unknown'] = text_to_string('lost.txt')

(стр. 63)

Не делайте так.

В Национальном корпусе русского языка есть подкорпус Русская классика (он пока в режиме беты). Будем ориентироваться на авторов и произведения оттуда. Тексты, с которыми можно работать, и код я положил вот в этот репозиторий. Код оттуда под спойлером:

Код

import os # импортируем нужное
from string import punctuation, digits
from bs4 import BeautifulSoup # наши тексты в XML

punctuation = punctuation + '«»—–…"”\n\t' + digits # с помощью этого набора отрежем от слов все лишнее

def text_to_string(filename):
    """Читаем XML и возвращаем текстовую строку."""
    append_text = []
    with open(filename, encoding='utf-8') as infile:
        soup = BeautifulSoup(infile.read(), "html.parser")
        for p in soup.find_all('p'):
            append_text.append(p.text)
    return '\n'.join(append_text)

strings_by_author = dict()
dir = 'texts'
for fl_name in os.listdir(dir):
    strings_by_author[fl_name.split('.')[0]] = text_to_string(os.path.join(dir, fl_name))

def make_word_dict(strings_by_author):
    """Возвращаем словарь слов-токенов корпусов по автору.
    Не используем токенайзер из NLTK, потому что для русского 
    его подключать сложно и не нужно"""
    words_by_author = dict()
    for text in strings_by_author:
        tokens = strings_by_author[text].split()
        words_by_author[text] = ([token.lower().strip(punctuation) 
                                  for token in tokens if token.strip(punctuation)]
    return words_by_author

# Угадывать будем авторство повести Лескова «Смех и горе»

strings_by_author['unknown'] = strings_by_author['leskov_013']
del strings_by_author['leskov_013']

# Дальше почти все как у Вогана

def find_shortest_corpus(words_by_author):
    """Вернуть длину самого короткого корпуса."""
    word_count = []
    for author in words_by_author:
        word_count.append(len(words_by_author[author]))
        print('\nNumber of words for {} = {}\n'.
              format(author, len(words_by_author[author])))
        len_shortest_corpus = min(word_count)
        print('length shortest corpus = {}\n'.format(len_shortest_corpus))
        return len_shortest_corpus

len_shortest_corpus = find_shortest_corpus(words_by_author)

# Output:
#Number of words for turgenev_otsy_i_deti = 46101

#length shortest corpus = 46101

# Это, кстати, правда, у Тургенева действительно короткие романы, это вам не Толстой.
# Так что если ищете, что бы такое легкое почитать и управиться за вечер, то вот вариант.

import matplotlib.pyplot as plt
from collections import Counter

def CountFrequency(my_list):
    """Составляем частотный словарь длин"""
    c = Counter()
    for word in my_list:
        c[word] += 1
    return count

by_author_length_freq_dist = dict()
for i, author in enumerate(words_by_author):
    word_lengths = [len(word) for word in words_by_author[author]
                [:len_shortest_corpus]]
    by_author_length_freq_dist[author] = CountFrequency(word_lengths)
by_author_length_freq_list = dict()
for author in by_author_length_freq_dist:
    by_author_length_freq_list[author] = []
    i = 0
    for word in sorted(by_author_length_freq_dist[author]):
        by_author_length_freq_list[author].append(by_author_length_freq_dist[author][word])
        i += 1 
        if i > 9:
            break

def word_length_test(words_by_author, len_shortest_corpus):
    """Распределение частотности длины слов в корпусах по автору, по самому
    короткому корпусу."""
    by_author_length_freq_dist = dict()
    plt.figure()
    plt.figure(figsize=(18,12))
    plt.ion()
    
    for author in by_author_length_freq_list:
        plt.plot(by_author_length_freq_list[author], label=author)
        
    plt.title('Длина слова')
    plt.xlabel("Образцы")
    plt.ylabel("Количество")
    plt.legend()
    plt.show()

word_length_test(words_by_author, len_shortest_corpus)

Если применить подход Вогана не к 3 текстам, а к 25

Если применить подход Вогана не к 3 текстам, а к 25

Честно говоря, из этого графика понять невозможно ничего. И это с 30- текстами. А для хорошей проверки метода нужно было бы добавить сотни, а лучше тысячи текстов. И что потом, в это спагетти вглядываться, что ли? Это какая-то бессмыслица. Вот что бывает, когда игнорируешь полтора столетия развития науки. Впрочем, эта же наука гуманитарная. А кому такая нужна? Инженерам всё наше нипочём, у них своя наука, как в этой статье.

Наша моська лает, их караван идёт.

Да, книга Вогана учебная (как и статья Робинсона, насчет чего он оговаривается), спору нет, и учат в ней другому, но тем ситуация хуже — в головы учащимся незаметно проникает идея, что эти методы определения авторства работают, когда на самом деле они не работают.

А есть ли такие, которые работают?

Да, они есть. Про них дальше и поговорим.

Что ученые имеют нам предложить?

В эпоху больших языковых моделей и других мощных нейросетей кажется, что нужна вундервафля с сотнями тысяч (как минимум) параметров, включающих сведения о частях речи, частотности всех слов и большой сложной статистикой. Но выясняется, что вполне эффективно работает сравнительно простая схема подсчета, в которой участвует от 100 до 500 самых частотных слов.

Это открытие 20 лет назад сделал Джон Берроуз, написав статью Burrows J.F. Delta: A Measure of Stylistic Difference and a Guide to Likely Authorship // Literary and Linguistic Computing 2002. 17(3): 267 — 287

Он предложил рассчитывать расстояние между текстами по этой формуле, а сам метод подсчета назвал Delta:

\Delta = \sum \limits_{i=1}^{n} \frac{|z(x_i) - z(y_i)|}{n}

При этом за основу мы берем не частотность слов, а z-score:

z =  \frac{x - \mu}{\sigma}

Все это значит, что 

До начала расчетов необходимо задать некоторое количество наиболее частотных словоформ для всего корпуса. Например, 100. В большинстве случаев этого хватает для успешной атрибуции. Дальнейшие расчеты проводятся только для этих слов. Разумеется, самыми частотными в корпусе являются служебные, а не полнозначные слова. Таким образом, в фокус внимания метода не попадает тематика текста, выраженная с помощью имен и глаголов. Далее для каждого из этих слов в каждом из текстов корпуса вычисляется z-score — отношение разницы взятой в процентах от общего числа слов в тексте частотности слова в данном тексте и общей частотности слова по всему корпусу (то есть вычисленной для всех текстов выборки сразу, как если бы они вместе составляли один текст) к стандартному отклонению частотности слова по корпусу. Среднее арифметическое взятых по модулю разниц между z-score у двух сравниваемых текстов — это и есть искомое значение Delta. Эмпирически установлено, что это значение оказывается меньше у текстов, принадлежащих одному автору (стилистически гомогенных), и больше у текстов, принадлежащих разным авторам (стилистически гетерогенных).

Б.В. Орехов «Илиада» Е.И. Кострова и «Илиада» А.И. Любжина: стилеметрический аспект

Есть видео, где я, предельно упрощенно, практически на пальцах показываю, как производится расчет:

Почему это работает, никто не знает, но это работает, что проверено на множестве разных кейсов и языков — от арабского до древнеанглийского. И даже с китайским все получается, хотя там все не так, как мы привыкли, и со словами, и с графикой.

Для русского это тоже работает, первыми, кто это выяснил, были цифровые филологи А.А. Бонч-Осмоловская и Д.А. Скоринкин в статье Скоринкин Д. А., Бонч-Осмоловская А. А. «Особые приметы» в речи художественных персонажей: количественный анализ диалогов в «Войне и мире» Л.Н. Толстого // Электронный научно-образовательный журнал «История». 2016. Т. 7. № 7 (51)

За эти 20 лет многое в сфере ПО стало лучше, а расчет дельты был включен в весьма качественный пакет для языка R, который называется `stylo`. В пакете есть GUI, так что даже язык знать не нужно, порог вхождения очень низкий.

install.packages('stylo') # ставим пакет

Надо установить рабочую директорию. Пакет ожидает, что внутри нее будет папка, которая называется corpus (имя захардкожено). Поработаем с теми же самыми текстами, только «Ревизор» я оттуда уберу, потому что это пьеса, а все остальное — обычная повествовательная проза, они сильно разные.

У stylo есть еще одна фишка: на визуализации он умеет отрисовывать одним цветом тексты одного и того же автора (что удобно), если имя автора дать в имени файла до подчеркивания: lermontov_bela.txt — тут stylo поймет, что автор lermontov. На подсчеты это не повлияет, но отрисует в конце красиво. Это тоже соблюдем.

setwd('R_stylo') # см. соотв. папку в репе https://github.com/nevmenandr/delta_illustr/
library(stylo) # подключаем библиотеку
stylo() # вызываем GUI

GUI пакета stylo

GUI пакета stylo

Тут можно выбрать язык, если он поддерживается (для русского — Other), разные тонкие настройки, интересные только глубоко погруженным в тему, а на вкладке output — вывод визуализации результата.

Дефолтная визуализация stylo

Дефолтная визуализация stylo

Что значит этот график? Это дендрограмма, которая показывает, насколько разные тексты близки друг к другу по дельте. Stylo рассчитывает матрицу расстояний между всеми текстами, но так как работать с этой матрицей не проще, чем с графиком по мотивам фантазий Вогана и Менденхолла, матрица становится основой для кластерного анализа. Листья на этом дереве — тексты. Благодаря удобному цветовому кодированию мы видим, что тексты под одним авторством, в основном, группируются вместе. С одной ошибкой: чеховский рассказ «Ненужная победа» уехал к Лермонтову. Видимо, так произошло потому что текст это ранний, из первого тома собрания сочинений, а остальные тексты Чехова более зрелые, с переосмысленными стилевыми установками. Дельта — тонкий инструмент, и способна улавливать изменения стиля одного автора в процессе творческой эволюции. Зато наш главный вопрос получил верный ответ: unknown текст действительно кластеризовался вместе с Лесковым. Тут уж сами решайте, наполовину полон или наполовину пуст ваш стакан, и это плохо, что дельта один раз ошиблась, ли это хорошо, что в остальных 23 случаях она дала верный результат. Ничего лучше у нас все равно нет, и вряд ли будет.

Правда, этот тип визуализации не самый удачный, его много критикуют.

Начнем с температурной карты.

import pandas as pd # импортируем модули
import seaborn
from matplotlib import pyplot

# берем данные и задаем лейблы

data = pd.read_csv('./distance_table_100mfw_0c.txt', sep = ' ')
DISTR_TITLE = 'Distributions of stylometric distances'
DIST_LABEL = 'Leskov and Unknown'

pyplot.figure(figsize=(10,8)) # рисуем температурную карту
seaborn.heatmap(data, cmap='coolwarm')

Температурная карта межтекстовых расстояний по дельте

Температурная карта межтекстовых расстояний по дельте

Но лучшие графики для результатов, которые выдает stylo, придумал мой коллега Даниил Скоринкин, и они идейно близки первоначальному ходу мысли Берроуза. Мы берем расстояния между текстами заведомо разных авторов, берем расстояния между текстами, которые заведомо написал один человек, строим гистограмму, и смотрим, в какую зону попал случай, который нас интересует. Давайте посмотрим, как визуализируются расстояния от Лескова до «неизвестного» Лескова.

Код лучшей визуализации

# систематизируем межтекстовые расстояния

def update_pairs_dict(pairs_dict, some_author_name, some_author_distances):
    for index, distance in enumerate(some_author_distances):
        second_author = some_author_distances.index[index]
        pair = tuple(sorted((some_author_name, second_author)))
        if pair not in pairs_dict and distance !=0:
            pairs_dict[pair] = distance

pairs_dict = {}
for some_author_name in data:
    some_author_distances = data[some_author_name]
    update_pairs_dict(pairs_dict, some_author_name, some_author_distances)

def is_same_author(author1, author2):
    name1 = author1.split('_')[0]
    name2 = author2.split('_')[0] 
    return(name1 == name2)

intra_distances = []
inter_distances = []
unknown_distances = []

for pair in pairs_dict:
    distance = pairs_dict[pair]
    author1, author2 = pair
    if is_same_author(author1, author2):
        intra_distances.append(distance)
    elif author1.startswith('leskov') and author2.startswith('unknown'):
        unknown_distances.append(distance)
    else:
        inter_distances.append(distance)

# рисуем гистограмму

from matplotlib import pyplot
pyplot.figure(figsize=(10, 8))
pyplot.title(DISTR_TITLE)

pyplot.hist(intra_distances, alpha=0.9, label='single author distances')
pyplot.hist(inter_distances, alpha=0.3, label='inter-author distances')
pyplot.hist(unknown_distances, alpha=0.9, label=DIST_LABEL)

pyplot.legend(loc='upper left')
pyplot.show()

Диаграмма Скоринкина. Расстояния между Лесковым и «неизвестным» такие, какие должны быть между текстами, созданными одним автором

Диаграмма Скоринкина. Расстояния между Лесковым и «неизвестным» такие, какие должны быть между текстами, созданными одним автором

Ну хорошо, у нас есть инструмент, он неидеально, но неплохо работает (уже само по себе то, что он в принципе работает, большая удача). Что с ним дальше делать?

Роулинг и Гэлбрейт

Стилометрия в 2013 году попала в газеты. `stylo` тогда еще не было, он появится только в 2016. Дж. Роулинг закончила с Гарри Поттером (как тогда казалось, навсегда) и села писать романы под псевдонимом Роберт Гэлбрейт. Газетчики что-то заподозрили, отнесли роман стилометристам, и те высчитали, что наиболее вероятный кандидат на авторство романов Гэлбрейта — Роулинг. Считается, что под давлением этих неоспоримых фактов писательница во всем созналась. Хотя кто знает, может, она просто решила, что уже пора, а ученые зря себе приписывают эти заслуги. Как бы там ни было, «случай Роулинг» считается модельным кейсом для стилометрии и в `stylo` даже включены данные, которые позволяют повторить это исследование самостоятельно.

data(galbraith)
stylo(frequencies = galbraith, gui = FALSE, write.png = TRUE)

Но я проверил этот случай и понял, что всё не совсем так. Данные там специально подобраны, чтобы быть ярким контрастом Роулинг: писатели из других эпох и других жанров. Это не совсем честная игра. Есть и препринт на эту тему. Более качественные данные, чтобы с ними поиграть, можно взять тут.

Что там с «Тихим Доном»?

Вообще-то с точки зрения и науки, и повседневных практик чтения совершенно не важно, кто написал «Тихий Дон».

Страсбургский реформатор Хедио, отмечая спорность изобретения Гутенберга — в 1537 г. в пользу Фуста, в 1549 г. в пользу Шеффера, оба раза отделывается поговоркой: когда медведь уже здесь, зачем искать его следы. Ну, Шолохов. Ну, не Шолохов. Вам нравится роман? Читайте и наслаждайтесь. Не нравится? Не читайте. Григорий все равно полюбит Аксинью, чье бы имя ни стояло на обложке.

Уже и Фуко с Бартом убеждали-убеждали публику в смерти автора, уже и все профессиональные гуманитарии в своих предметных областях дрейфуют в сторону идеи уменьшения значимости индивидуума по сравнению с его школой, средой и окружением. Но публика не унимается. Народ все равно интересуется, кто что написал. Убедить людей в справедливости своей точки зрения ученые мужи не смогли.

Иногда, как в случае с «Тихим Доном», спор густо замешан на политике. Кажется, что если роман принадлежит Шолохову, то это дает дополнительные очки одной партии и идеологии. Если не Шолохову, то другой. Хотя на самом деле не дает это все никому никаких очков.

Данные тут. Статья тут или тут.

Вкратце: это точно не Крюков. И не Севский. А «Донские рассказы» и «Тихий Дон» написал один человек. Ну, а дальше думайте что хотите.

Пелевин

Уже больше трети века писатель Пелевин будоражит своей прозой умы русскоязычных читателей. Версия, что за него эту прозу пишет компьютер, появилась почти сразу, еще в 1990-е, до всяких GPT. А вот уже в новом веке возникла идея, что Пелевин в 1990-х и сейчас — разные авторы. Или сейчас это вообще не Пелевин, а пишущие под его именем литературные негры. Особенно углубляться не буду, про все это я уже написал в 2021 году.

Особенно забавно было, когда, разбирая Пелевина, это исследование (без упоминания авторства) упомянули в подкасте «Что бы мне поделать, только бы не почитать», но спикер на 45-й минуте запнулся, когда нужно было определить, к какой сфере это исследование относится. Остановился на лингвистической.

TL; DR Пелевин пишет свой тексты сам, сейчас это тот же самый Пелевин, который был в 1990-х.

Биткоин

Кобаяши Мару Хикару Накамура Сатоши Накамото.

Ну ладно, а теперь к действительно важным вопросам. Кого я обманываю, кому нужен этот «Тихий Дон», тем более на Хабре? А вот что дельта скажет про Сатоши нашего Накамото? Вот вопрос. Вопрос вопросов.

Проверим несколько подозреваемых: Ник Сабо (The Origins of Money), Крейг Райт (The Illusion of Scale in Segregated Witness), Вилли Лехдонвирта (Why are citizens migrating to Uber and Airbnb, and what should governments do about it?), Майкл Клир (Multi-Identity and Multi-Key Leveled FHE from Learning with Errors), а также группу Нил Кинг, Чарльз Брай и Владимир Оксман (Updating and distributing encryption keys).

Как и для любой статистической методики, тут нужны объемные тексты. Не всегда такие есть. Сам текст про биткоин — это 3756 слов, меньше минимального порога тысячи на полторы. Но что поделать? Попробовать нам ничто не мешает.

Получается так:

С. Накамото  кластеризуется вместе с К. Райтом

С. Накамото кластеризуется вместе с К. Райтом

Белая книга биткоина кластеризуется с Райтом. Верить этому результату, разумеется, нельзя, как и любому, полученному на текстах объемом менее 10 000 слов. Но было интересно. Спасибо, дельта!

Бывает, что дельта и на достаточных объемах работает плохо. Не справляется она с текстами разного жанра (выше я просто удалил файл с «Ревизором», включать его в выборку было бессмысленно). И еще среди многих успешных экспериментов вдруг обнаружилось, что дельта регулярно ломается на теологических текстах. Уж не знаю, какие дискурсивные растяжки там заготовлены, но дельта путается в показаниях, кластеризует не то, что нужно, и вообще демонстрирует воинственный атеизм. Хотя казалось бы.

А особенно любознательным могу посоветовать увлекательную книжку Lennon, B. (2018). Passwords: Philology, Security, Authentication. Harvard University Press. Там автор, в частности, указывает на историческое и идейное родство криптографии и филологии: «Но революции 1848 года cмели многие европейские «черные кабинеты», и когда в 1917 году имперские Соединенные Штаты создали свою первую криптоаналитическую службу военной разведки, она набирала персонал из двух, казалось бы, маловероятных мест: Riverbank Laboratories, частный исследовательский фонд в Иллинойсе, среди сотрудников которого были ученые-любители, трудившиеся над расшифровкой якобы тайного авторства Фрэнсиса Бэкона пьес Шекспира; и университетские кафедры английского языка, особенно в Чикаго и Йеле, где среди преподавателей были стратфордианские оппоненты бэконианцев в шекспироведении» (стр. XVII).

© Habrahabr.ru