Читать нас в Telegram
Иллюстрация: Женя Родикова

Введение

Стилометрия — это количественное исследование стилистики, обычно включающее частотный анализ письменного текста. «Системный Блокъ» рассказывал о ней здесь и здесь, и делал подборку материалов о стилометрических исследованиях.  В основе стилометрии лежит гипотеза о том, что у авторского стиля есть как осознаваемая, так и неосознаваемая составляющая. На практике её можно применять во многих областях: в судебной лингвистике и вопросах авторских прав, в изучении корреляции между полом и возрастом автора и индивидуальными характеристиками текста.

Если вас заинтересовал этот метод и вы хотели бы его применить, но не знаете, с чего начать, не страшно — сейчас мы всё расскажем с нуля. Самый распространенный инструмент для стилометрических исследований — stylo, библиотека языка программирования R. В основе stylo — вычисление Дельты Берроуза, эффективность которой была доказана в множестве исследований. Но не пугайтесь слов «программирование» и «вычисление», преимущество stylo — удобный и понятный пользовательский интерфейс, чем и объясняется популярность инструмента. 

Установка R

Для работы со stylo вам потребуется установить интерпретатор (программу, которая «переводит» код на языке программирования в команды, понятные машине) языка R и среду для написания кода, которая называется RStudio. Если у вас он уже есть, этот шаг можно пропустить.

Важное примечание: R плохо понимает кириллицу. Если у вас на компьютере пользователь назван кириллическими буквами («Маша», «Иван Иванов» или дефолтное «Пользователь»), R не сможет прочитать полное имя папки, где хранятся новые библиотеки при установке новых пакетов, — в частности, нашего stylo, — и работать с ними не сможет. 

Проблему можно решить так:

  1. Переименовать пользователя в настройках: для этого потребуются права администратора. Не подходит, если компьютер, которым вы пользуетесь, не ваш;
  2. Создать второго пользователя на компьютере: выйти из своего пользователя, создать нового и зайти в него. У нового пользователя не будет доступа к данным старого и придётся скачивать всё необходимое отдельно. Не очень удобно, если вы собираетесь часто пользоваться R, но иметь отдельного пользователя для работы и отдельного для развлечений может быть в теории удобно для тайм-менеджмента. 

Если у вашего пользователя имя на кириллице, но у вас уже установлен R и он нормально работает, лучше всё равно переименовать пользователя или сделать другого.

Последнюю версию интерпретатора можно всегда найти вот по этой ссылке — здесь хранятся различные версии языка R. Здесь имеются версии для Linux, Windows и Mac.

Если у вас Windows

В разделе «Download and install R» переходим по ссылке «Download R for Windows» и жмём на «install R for the first time», а затем на «Download R-4.2.2 for Windows»: 

Затем откройте сам файл, дайте программе разрешение на внесение изменений, и у вас откроется установщик. В процессе установки ничего менять не надо, просто жмите «Далее».

Конечным итогом должно быть вот такое окно:

Если у вас Linux или Mac

По той же ссылке предлагается много различных версий в зависимости от того, какой у вас именно Linux или Mac. Выберите нужный вам вариант, и загрузка начнётся. 

Установка Rstudio

Теперь, помимо интерпретатора, нам нужно установить среду для работы с языком R. Она называется Rstudio. Если и она у вас имеется, этот шаг можно также пропустить.

Rstudio можно установить здесь — выберите свою операционную систему в списке и нажмите на ссылку.

Если у вас Windows

Выберите «Windows 10/11» и нажмите на ссылку. Затем откройте файл в загрузках и запустите его. Точно так же, как и на прошлом шаге, менять ничего не требуется, и конечным результатом должно быть такое же окошко, где вам говорят, что установка успешно завершена. Если после запуска RStudio долго не загружается, нажмите и удерживайте клавишу Ctrl, среда разработки должна открыться. Последние версии RStudio поддерживают даже программирование на Python, но нам, чтобы работать со stylo, нужен только R. Главное убедиться, что вы установили R версии 3.3.0+, а на описание ошибок, связанных с Python, можно не обращать внимание. Также можно установить не самую новую версию RStudio, а, например, версию 2022.07.2.

Если у вас Linux или Mac

По указанной выше ссылке предлагается несколько вариантов установки — выберите нужный вам и скачайте его. 

Установка и первая попытка запуска stylo

После того, как вы открыли Rstudio, нужно будет установить stylo. При открытии программы вы сразу увидите консоль; найдите синий значок «>» и введите команду

install.packages("stylo") 

и нажмите Enter. Команда install.packages() используется для установки библиотек, в скобках же нужно уточнить, что именно устанавливаем. Если ​вам предложит выбрать зеркало, берите любое, например, первое (Cloud) или выберите страну, которая сравнительно недалеко.

Теперь введите команду

library(stylo)

этим вы вызовете библиотеку stylo. В ответ вам будет сказано, какая это версия: что-то вроде

### stylo version: 0.7.4 ###

Возможно, вам также выдаст инструкцию, как ссылаться на авторов. Выглядит она вот так:

If you plan to cite this software (please do!), use the following reference:
Eder, M., Rybicki, J. and Kestemont, M. (2016). Stylometry with R:
a package for computational text analysis. R Journal 8(1): 107-121.
<https://journal.r-project.org/archive/2016/RJ-2016-007/index.html>
To get full BibTeX entry, type: citation("stylo")

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

Если вы — пользователь Мака, и у вас такая ошибка:

tcltk DLL is linked to '/opt/X11/lib/libX11.6.dylib'
Error: package or namespace load failed for ‘stylo’:
 .onLoad failed in loadNamespace() for 'tcltk', details:
 call: fun(libname, pkgname)
 error: X11 library is missing: install XQuartz from www.xquartz.org

– надо пойти сюда и поставить XQuartz, перезагрузиться и снова выполнить действия выше.

Теперь, когда библиотека работает, можно запустить графический интерфейс, вызвав команду

stylo()

Выглядеть это должно примерно так:

Загрузка текстов, выбор рабочей папки и другие параметры

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

В последних своих версиях интерфейс при запуске сам предлагает вам выбрать папку, из которой он возьмёт данные для анализа. Но у stylo есть два чётких требования:

  • В рабочей папке обязательно должна лежать подпапка corpus, а в ней — ваши тексты.
  • Например, если вы изучаете авторство, и вам важно отличать тексты одного автора от текстов другого, то файлы с текстами должны иметь названия вида Фамилияавтора_Название: stylo анализирует названия файлов и всё, что он встретит до первого нижнего подчёркивания, он считает фамилией автора. (например, если вы сравниваете Толстых, следует писать ТолстойА_ и ТолстойЛ_, иначе stylo подумает, что это один и тот же человек, и очень удивится). Не подумайте, по названию файла stylo авторство не определяет: названия он использует только для построения графика. Все названия с одинаковым префиксом до подчеркивания stylo для наглядности раскрашивает одинаковым цветом (это мы увидим ниже). 

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

Для начала надо понять, в какой папке мы работаем: сделать это можно с помощью команды

getwd()

Вы увидите полный путь к вашей текущей рабочей директории. Если вас она устраивает и тексты лежат в ней, то ничего менять не надо, но если тексты лежат не в ней, то вызовите команду

setwd('новая/директория')

где можно прописать путь до нужной папки, например,

C:\Users\User\Documents\stylometry

Можно только название, если она лежит в текущей директории, но если она находится где-то ещё, то нужно прописывать полный путь — его можно узнать в Проводнике. И только после этого мы можем запускать stylo:

Теперь, когда тексты на месте, нужно сказать, что именно с ними делать. Нам откроется окошко параметров, где будет множество разных вкладок. На самой первой из них stylo попросит указать язык и кодировку: русский в дефолтный список не входит, поэтому надо удостовериться, что кодировка файлов — utf-8, и выбрать язык Оther, иначе вместо списка частотности мы получим кракозябры.

Во вкладке features нас ожидают несколько параметров, но рассмотрим мы только те, которые нас интересуют. 

  • features: параметр анализа, нас интересует анализ именно слов
  • MFW settings: можно выбрать количество самых частотных слов, по которым и будет производиться анализ. Можно выбрать разное минимальное и максимальное значение, но начинающим пользователям рекомендуется использовать одно и то же число. Значение, равное 100, может оказаться недостаточным для хорошего и репрезентативного результата, поэтому если вам кажется, что анализ был недостаточно чувствителен к деталям, можно увеличить его.
  • culling: количество наименее частотных слов, которое мы не учитываем в анализе, считая нерелевантными. 

Во вкладке statistics можно выбрать тип анализа, который мы хотим провести (и, соответственно, тип графика, который мы хотим построить), а также метрику, которую мы хотим применить. Более подробно о том, что, собственно, такое дельта, и в чём разница между косинусной дельтой и дельтой Берроуза, можно прочесть тут.

Вкладка sampling нас пока что не особо интересует, поскольку там настройки для продвинутого пользователя. В последней же вкладке представлены параметры визуального представления: в каком формате, с какими подписями и какого размера будет граф, а еще там можно выбрать, какие табличные данные мы хотим получить на выходе. Можно отметить, что stylo позволяет сохранять получившиеся графики файлами, а не скринить выдачу. 

Когда мы нажмем на «ОК», stylo построит график выбранного нами типа, а также сохранит в рабочую папку несколько файлов: distance_table — это таблица расстояний между всеми текстами (чем меньше расстояние, тем больше сходство текстов), файл «..EDGES» — данные для построения «стилометрической сети» (как в этом исследовании), а wordlist и table_with_frequencies — это список частотных слов, использованных для анализа, и их частоты в каждом тексте соответственно.

Применим знания на практике

С помощью stylo можно ответить на многие вопросы о художественном стиле. Например, можно применить стилометрические методы к современным сериалам.

Сериал-антиутопия «Черное зеркало» выходит с 2011 года. На момент написания статьи вышли пять сезонов и уже анонсирован шестой, который выйдет в июне 2023. С точки зрения стилометрии сериал интересен тем, что с 2011 по 2014 годы он транслировался по британскому телевидению, а с 2016 года его приобрёл Нетфликс. Несмотря на то, что сценарии всех сезонов в целом написал один и тот же человек — создатель сериала, Чарли Брукер, — логично было бы предположить, что первые два сезона, написанные для британского телеканала, отличаются по стилю от последующих трех, которые были созданы для показа на американском стриминговом сервисе.

Проверить, так это или нет, можно с помощью stylo, причём ничего сверх того, что уже было показано, делать не надо. Для эксперимента мы нашли в открытом доступе расшифровки всех эпизодов на английском языке. Загрузив корпус текстов в нужную папку и настроив stylo, мы просто запустим его и выберем нужные параметры.

При MFW = 100 для Classic Delta заметного результата не будет, поскольку 100 самых частотных слов — это слишком маленькое значение для анализа небольших текстов, которые к тому же ещё и написал один человек. Тип анализа здесь — дефолтный для stylo кластерный анализ (Cluster Analysis). Названия серий раскрашены в зависимости от номера сезона до нижнего подчеркивания.

Зато если поставить MFW = 500, мы сразу получаем заметное разделение: 

Серии 1 и 2 сезонов (зеленый и красный), написанные для британского зрителя, оказываются на одной ветке (в одном кластере), а серии 3-5 сезонов (оранжевый, черный, синий), для американского стримингового сервиса, — на другой. Из общего ряда выбивается только одна серия, Metalhead, про которую фанаты говорят, что она заметно отличается по стилю от остальных. 

Повышение количества самых частотных слов до 1000 особого результата не даёт:

Однако внимательный фанат может заметить, что объединение серий в более мелкие кластеры объяснить уже сложнее: например, жизнерадостная серия Rachel, Jack and Ashley Too соседствует с мрачной Black Museum. 

Если мы поменяем метрику с классической дельты на косинусную, оставив при этом MFW равным 500, то результат будет уже совсем другой, но не менее репрезентативный.

Здесь разделение слегка смешалось, но это поправимо, если сменить тип анализа и графика на метод главных компонент (PCA):

Можно видеть, что общее разделение всё ещё прослеживается, а пересекаются только два эпизода, White Bear и Hated in the Nation, которые довольно похожи по сюжету и тематике. А если выбрать тип графика дерево решений (Consensus Tree), то мы увидим, что и это пересечение незначительно:

Дерево решений — это метод, который позволяет объединить в одной визуализации результаты экспериментов на разных параметрах (разном количестве частотных слов): для этого нужно установить диапазон и шаг (Increment) во вкладкe features, о которой мы писали выше.

Таким образом, на основе полученных данных действительно можно сказать, что эпизоды, написанные для британского телеканала, стилистически отличаются от эпизодов, написанных для Нетфликса. Фанаты сериала тоже почувствовали перемену: в частности, многие предпочитают британскую версию, поскольку считают, что популярность навредила сериалу, и с расширением аудитории «Чёрное Зеркало» утратило свой особенный стиль.

Заключение и полезные ссылки

Таким образом, можно убедиться, что провести простой стилометрический анализ с помощью stylo и вправду не самая сложная задача. Датасет, использованный нами в исследовании, можно найти на нашем гитхабе и поработать с ним самостоятельно — возможно, удастся даже обнаружить что-то, не упомянутое в этой статье. Мы рассказали только об основных функциях stylo и ее базовых настройках, о более продвинутых вещах — в будущих материалах. А ниже ссылки, которые будут полезны как новичкам, так и продвинутым пользователям: