|
|
||
В статье посредством формального анализа текста решается задача определения авторства текста. Новый метод основывается на формальной математической модели последовательности букв текста как реализации цепи А.А. Маркова. Оказывается, частоты употребления пар букв очень хорошо характеризуют автора. Последнее утверждение проверено в объемном статистическом эксперименте на произведениях 82 писателей. |
Истории вопроса определения авторства текста посвящена первая глава книги [4]. Несмотря на то, что среди перечисленных в [4] присутствуют весьма изощренные методики определения структуры авторского стиля, все они страдают, на взгляд автора настоящей статьи, одним общим недостатком. Ни одна из этих методик не проходила проверку на большом числе писателей. Дело в том, что многие из методик имеют трудно формализуемый этап сведения естественно-литературного произведения к предлагаемой математической модели. Например, для некоторых из них необходима классификация всех слов текста по грамматическим классам, что требует участия человека. При таком подходе большой вычислительный эксперимент с целью проверки методики на большом числе авторов практически неосуществим. Поэтому все такие методики пытались использовать на небольшом числе авторов.
Другого подхода придерживались авторы статьи [5]. Они исследовали несколько простых параметров авторского стиля и на огромном числе произведений писателей XVIII-XX веков статистически доказали, что доля всех служебных слов в длинном прозаическом произведении является т.н. авторским инвариантом. В настоящей статье предложен новый, независимый от [5], а также всех методик, перечисленных в [4], формальный метод установления автора текста. Наша постановка задачи отличается от [5]. Мы предполагаем, что в нашем распоряжении имеются достаточно длинные фрагменты прозаических произведений ряда авторов на русском языке. Про некоторый анонимный фрагмент текста известно, что он принадлежит одному из этих авторов, но какому - неизвестно. Требуется узнать - кому именно.
Новый метод основывается на формальной математической модели последовательности букв текста как реализации цепи А.А. Маркова. По тем произведениям автора, которые достоверно им созданы, вычисляется матрица переходных частот употреблений пар букв. Она служит оценкой матрицы вероятностей перехода из буквы в букву. Матрица переходных частот строится для каждого из авторов. Для каждого автора оценивается вероятность того, что именно он написал анонимный фрагмент текста. Автором анонимного текста полагается тот, у которого вычисленная оценка вероятности больше.
Такой метод оказывается удивительно точным для естественно-языковых текстов. Мы обсуждаем здесь особенности применения метода и сравниваем его с методом определения автора на основе частот употребления каждой из букв в отдельности. Проверка метода проводилась на произведениях 82 писателей, среди которых есть русские писатели как XIX, так и XX века.
Задачу определения автора текста можно сформулировать следующим образом. Пусть заданы n классов Ci, где i=0, ..., n-1. В каждом классе Ci находятся последовательности fi,j О A*, где j=1, ..., mi, т.е. Ci={ fi,j | j=1,ј,mi}. Наша задача состоит в том, чтобы отнести x О A* к одному из классов Ci.
Предположим, что последовательности букв fi,j являются реализациями цепи Маркова с переходной матрицей Pi. Построим оценку Pi. Обозначим через hi,j,kl число переходов букв k® l в фрагменте fi,j, положим hi,kl=еjhi,j,kl, а hi,k=еlhi,kl. Положим Pikl=hi,kl/hi,k. Возможно, некоторые Pikl равны нулю. Обозначим через Zi множество таких упорядоченных пар (k,l), что Pikl > 0.
Предположим, что x также является реализацией цепи Маркова с матрицей переходных вероятностей Pq , где q неизвестный параметр, который принимает одно из значений 1, ..., n.
Обозначим через nk,l число переходов k® l в x. Пусть
также nk=еl nk,l.
Обозначим через
|
| (2.1) |
Каждый фрагмент gi,j О B* можно отобразить в A* посредством некоторой функции F: B*® A*. Пусть, например, F превращает все заглавные буквы в маленькие, склеивает перенесенные слова, выбрасывает все знаки пунктуации и излишние знаки пробела, оставляя их по одному между словами, а также вставляет один пробел в начале и один пробел в конце фрагмента в случае отсутствия таковых.
Кроме того, мы будем рассматривать функцию G, которая устроена так же, как и функция F, с тем дополнением, что все слова, которые в фрагменте gi,j начинались с заглавной буквы, отбрасываются. Например, если
y="Кроме того, мы будем рассматривать функцию G,", то
F(y)=" кроме того мы будем рассматривать функцию ", а
G(y)=" того мы будем рассматривать функцию ".
Теперь предположим, что некий фрагмент текста y О B* принадлежит одному из n авторов, и нам неизвестно, кому именно. Наша задача: определить автора фрагмента y. Мы можем найти автора, применяя оценку (2.1) к последовательности x=F(y) или к x=G(y). Следовательно, мы получаем два способа определения автора:
1) истинный автор - t(F(y)),
2) истинный автор - t(G(y)).
Важно отметить, что оценки t(F(y)) и t(G(y)) вычисляются на основе информации о частотах употребления пар букв. Поскольку между словами вставлены пробелы, оценки t(F(y)) и t(G(y)) никак не зависят от порядка самих слов. По-видимому, t(F(y)) и t(G(y)) характеризуют последовательности морфем в словоформах русского языка, но, конечно, совсем не учитывают синтаксисическую информацию (на основе последней пытались устанавливать авторство в [4]).
Обычно ни для одного из естественно-языковых текстов гипотеза о том, что он является реализацией соответствующей цепи А.А. Маркова, не выдерживает статистической проверки. Между тем, мы можем формально произвести все вычисления и найти оценку (2.1). Статистический эксперимент показывает, что авторы определяются очень уверенно.
| (2.2) |
|
Сначала проведем проверку нашей методики на следующем примере. Рассмотрим следующие произведения К. Булычева, А. Волкова, Н.В. Гоголя и В. Набокова.
Мы хотим проверить эффективность оценки t(F(y)). Предлагается следующий способ: выбрать каждого автора i (i = 0,1,2,3) по одному контрольному произведению y i, оценить матрицы Pi по другим произведениям fi,j, а затем найти t(F(yi)). Если оценка работает хорошо, то для каждого автора i должно быть t(F(yi))=i.
0) К. Булычев: Умение кидать мяч ( y0); Белое платье золушки (g0,1); Великий дух и беглецы (g0,2); Глубокоуважаемый микроб (g0,3); Закон для дракона (g0,4); Любимец [Спонсоры] (g0,5); Марсианское зелье (g0,6); Миниатюры (g0,7); "Можно попросить Нину?" (g0,8); На днях землетрясение в Лигоне (g0,9); Перевал (g0,10); Показания Оли Н. (g0,11); Поминальник XX века (g0,12); Раскопки курганов в долине Репеделкинок (g0,13); Тринадцать лет пути (g0,14); Смерть этажом ниже (g0,15);
1) А. Волков: Семь подземных королей ( y1); Волшебник изумрудного города (g1,1); Урфин Джюс и его деревянные солдаты (g1,2); Огненный бог Марранов (g1,3); Гениальный пень (g1,4); На войне, как на войне (g1,5); О чем молчали газеты... (g1,6); Преступление и наказание (g1,7); Эпилог (g1,8); Желтый Туман (g1,9); Тайна заброшенного замка (g1,10);
2) Н.В. Гоголь: Рассказы и повести ( y2, названия повестей: "Повесть о том, как поссорился Иван Иванович с Иваном Никифоровичем", "Старосветские помещики", "Вий", "Записки сумасшедшего"); Ревизор (g2,1); Тарас Бульба (g2,2); Вечера на хуторе близ Диканьки (g2,3);
3) В. Набоков: Другие берега ( y3); Король, дама, валет (g3,1); Лолита (g3,2); Машенька (g3,3); Рассказы (g3,4); Незавершенный роман (g3,5).
Например, у А. Волкова контрольным произведением является y1, т.е. "Семь подземных королей." Все остальные произведения используются для вычисления Pi. Результаты вычислений представляются следующей таблицей.
N | Автор | c1 | c2 | c3 | c4 |
0 | К. Булычев | 0 | 15 | 2345689 | 75161 |
1 | А. Волков | 0 | 8 | 1733165 | 233418 |
2 | Н.В. Гоголь | 0 | 3 | 723812 | 243767 |
3 | В. Набоков | 0 | 5 | 1658626 | 367179 |
Столбец c2 содержит общее число файлов, в которых хранятся произведения автора. Заметим, что число файлов может не совпадать с числом произведений по двум причинам: во-первых, несколько произведений одного автора могут находится в одном файле (здесь такое произошло с А. Волковым - три повести "Желтый Туман", "Тайна заброшенного замка" и "Огненный бог Марранов" были в одном файле); во-вторых, одно большое произведение может разбиваться на несколько частей (последнее необходимо учитывать при изучении таблицы 2).
В колонке c3 содержится суммарное число символов (букв и пробелов) в F(gi,j): c3=еj |F(gi,j)|. В колонке c4 содержится число символов в F(yi), т.е. c4=|F( yi)|. Например, для К. Булычева общий объем текстов еjF(g0,j) составляет 2'345'689. Общий объем F(y1), т.е. число символов A в повести "Умение кидать мяч", выбранной в качестве контрольного текста, равно 75'161.
В столбце c1 в строке j находится ранг числа Lj(F( yj)) среди
чисел {Li(F( yj)) | i = 0,1,2,3}. Под рангом мы подразумеваем
номер Lj(F(yj)) среди чисел {Li(F( yj)) | i = 0,1,2,3},
расположенных в порядке невозрастания. Например, если j=1 и Li
расположились в порядке L0 Ј L3 Ј L2 Ј L1, то рангом L1
будет 3. А если j=0 и Li расположились в том же порядке L0 Ј L3 Ј L2 Ј L1, то рангом L0 будет 0. Ранг Lj(F(yj)), среди
чисел {Li(F( yj) | i=0,1,2,3} совпадает с рангом
Lj(F(yj))/|F(yj)|, среди чисел {Li(F(yj))/|F(yj)| | i=0,1,2,3}. Расположим в строках j=0,1,2,3 следующей матрицы по 4
числа Li(F( yj))/|F( yj)|, i=0,1,2,3:
|
|
Прежде, чем обсудить этот результат, поясним, почему столбец c1 задан таким образом. Дело в том, что если авторство определено неверно (т.е., оказалось t(F(yj)) № j), то нас может интересовать, насколько мы были близки к правильному ответу. Если ранг Lj(F(yj))/|F( yj)| среди чисел {Li(F( yj))/|F( yj)| |i=0,1,2,3} равен 1, то мы ошиблись всего на одного писателя. Такой случай существенно лучше случая ранга Lj(F( yj))/|F( yj)| равного 3, поскольку тут правильный писатель оказывается в списке претендентов на его собственное произведение последним, что свидетельствует о большей ошибке.
Кроме того, матрица R сама по себе допускает интересные интерпретации. Например, из первой строки мы видим, что контрольное произведение К. Булычева "Умение кидать мяч" после самого К. Булычева больше походит на В. Набокова, затем на Н. Гоголя, и в последнюю очередь на произведения А. Волкова. Из последующих двух строк можно сделать вывод, что контрольные произведения А. Волкова и Н. Гоголя также в первую очередь походят на произведения В. Набокова. Может быть, это вызвано тем, что сам Набоков исторически находится между Н. Гоголем и парой писателей: А. Волковым и К. Булычевым? Если эта гипотеза верна, то наша метод чувствителен к исторической эпохе, в которую создано произведение. Некоторое подтверждение тому мы находим в последней строке матрицы R: контрольное произведение В. Набокова похоже в первую очередь на пару А. Волкова и К. Булычева, и лишь затем - на Н. Гоголя. Если бы пара А. Волкова и К. Булычева разбивалась Н. Гоголем. то мы имели бы аргумент против нашей гипотезы. Впрочем, возможны другие интерпретации матрицы R, и автор нисколько не настаивает на выше приведенной.
Можно интересоваться зависимостью матрицы R от
а) числа и объема текстов обучающих выборок;
б) однородности по жанру;
в) однородности по тематике;
г) длины контрольного текста;
д) единицы анализа (на уровне букв, слов и предложений)
и многих других параметров. Ниже мы приводим информацию относительно пункта а). Вкратце вывод таков: методика работает удовлетворительно (то есть, на диагонали матрицы R в основном стоят 0) при объеме обучающей выборки свыше 100 тысяч символов ASCII, и объеме контрольного текста свыше 100 тысяч символов ASCII.
Вернемся к обсуждению таблицы 1. Поскольку в столбце c1 все числа равны 0, авторство всех контрольных произведений определено верно. Результат тем более неожиданный, что мы использовали столь примитивную информацию о тексте, как частоты употребления пар букв. На самом деле простейший компьютерный эксперимент (результаты которого здесь не приведены) показал, что при небольшом числе подозреваемых писателей (меньше шести) даже оценка (2.2), основанная всего лишь на подсчете частот употребления букв, дает очень хорошие результаты. В следующем разделе описан значительно более объемный статистический эксперимент. Из него становится ясно, что методика устойчиво работает на очень большом числе авторов.
В электронной библиотеке "Самые любимые книжки" нашлось n=82 различных автора, которые творили в XIX-XX веках. Количество произведений разных авторов колебалось от 1 до 30 (например, у Аркадия и Бориса Стругацких). У немногих авторов, у которых нашлось лишь одно произведение (например, у Бориса Стругацкого), оно было поделено на две части, одна из которых использовалась в качестве контрольного текста. При отборе произведений учитывался объем: выбирались авторы, суммарный объем произведений которых превышал 100000 символов ASCII. Общее число произведений (романов, повестей, рассказов и т.п.) превысило 1000. Они были представлены в 386 файлах. Общий объем данных составил 128×106 символов ASCII.
Для каждого автора мы составили список gi,j текстов, из которых были получены оценки Pi, и оставили один текст yi, подлежащий распознаванию и не используемый при оценке Pi. Следуя схеме, описанной в предыдущем разделе, мы провели эксперименты для проверки качества оценок t(F(·)), t(G(·)), e(F(·)), e(G(·)) на этих 82 писателях. Для экономии места мы приведем лишь таблицу, отображающую информацию об эффективности оценки t(G(·)). Эта таблица составлялась подобно таблице 1. Ради экономии места соответствующие таблицы L и R не приведены.
N | Автор | c1 | c2 | c3 | c4 |
0 | К. Булычев | 0 | 15 | 2007724 | 64741 |
1 | О. Авраменко | 0 | 6 | 1733113 | 223718 |
2 | А. Больных | 0 | 6 | 1294721 | 373611 |
3 | А. Волков | 0 | 8 | 1478932 | 202495 |
4 | Г. Глазов | 0 | 5 | 1398323 | 184593 |
5 | М. и С. Дяченко | 0 | 5 | 1754213 | 197039 |
6 | А. Етоев | 0 | 5 | 267096 | 80358 |
7 | А. Кабаков | 0 | 4 | 905502 | 222278 |
8 | В. Каплан | 0 | 6 | 515029 | 129608 |
9 | С. Казменко | 3 | 4 | 1846161 | 156768 |
10 | В. Климов | 0 | 3 | 250231 | 179903 |
11 | И. Крашевский | 0 | 2 | 1183722 | 481795 |
12 | И. Кублицкая | 0 | 1 | 282377 | 170469 |
13 | Л. Кудрявцев | 1 | 3 | 583239 | 179093 |
14 | А. Курков | 0 | 6 | 628041 | 218726 |
15 | Ю. Латынина | 10 | 2 | 2628781 | 283565 |
16 | А. Лазаревич | 46 | 3 | 310553 | 94629 |
17 | А. Лазарчук | 0 | 5 | 2395669 | 210151 |
18 | С. Лем | 0 | 7 | 1568013 | 343519 |
19 | Н. Леонов | 0 | 2 | 568854 | 279377 |
20 | С. Логинов | 14 | 13 | 1998543 | 159247 |
21 | Е. Лукин | 0 | 4 | 602216 | 125694 |
22 | В. Черняк | 0 | 2 | 920056 | 201636 |
23 | А.П. Чехов | 0 | 2 | 662801 | 343694 |
24 | И. Хмелевская | 0 | 4 | 1524905 | 203684 |
25 | Л. и Е. Лукины | 0 | 3 | 837198 | 122999 |
26 | С. Лукьяненко | 0 | 14 | 3682298 | 483503 |
27 | Н. Маркина | 0 | 1 | 266297 | 93647 |
28 | М. Наумова | 0 | 3 | 306514 | 337821 |
29 | С. Павлов | 0 | 2 | 751836 | 453448 |
30 | Б. Райнов | 0 | 4 | 1405994 | 420256 |
31 | Н. Рерих | 0 | 3 | 1011285 | 211047 |
32 | Н. Романецкий | 2 | 6 | 1305096 | 117147 |
33 | А. Ромашов | 0 | 1 | 88434 | 87744 |
34 | В. Рыбаков | 0 | 6 | 715406 | 121497 |
35 | К. Серафимов | 0 | 1 | 186424 | 75276 |
36 | И. Сергиевская | 0 | 1 | 109118 | 50786 |
37 | С. Щеглов | 10 | 2 | 253732 | 55188 |
38 | А. Щеголев | 0 | 2 | 848730 | 105577 |
39 | В. Шинкарев | 29 | 2 | 156667 | 80405 |
40 | К. Ситников | 0 | 7 | 419872 | 109116 |
41 | С. Снегов | 0 | 2 | 824423 | 408984 |
42 | А. Степанов | 0 | 5 | 1223980 | 93707 |
43 | А. Столяров | 11 | 1 | 350053 | 137135 |
44 | Р. Светлов | 0 | 2 | 454638 | 268472 |
45 | А. Свиридов | 63 | 3 | 660413 | 235439 |
46 | Е. Тильман | 0 | 2 | 705352 | 464685 |
47 | Д. Трускиновская | 0 | 8 | 2005238 | 118351 |
48 | А. Тюрин | 0 | 18 | 4109050 | 110237 |
49 | В. Югов | 0 | 5 | 829209 | 66657 |
50 | А. Молчанов | 0 | 1 | 398487 | 206541 |
51 | Ф.М. Достоевский | 1 | 3 | 613825 | 88582 |
52 | Н.В. Гоголь | 0 | 3 | 638339 | 215540 |
53 | Д. Хармс | 0 | 2 | 199449 | 114889 |
54 | А. Житинский | 0 | 2 | 2137325 | 543037 |
55 | Е. Хаецкая | 2 | 2 | 723167 | 204091 |
56 | В. Хлумов | 0 | 3 | 788562 | 183358 |
57 | В. Кунин | 0 | 3 | 1335918 | 296463 |
58 | А. Мелихов | 0 | 1 | 615548 | 458086 |
59 | В. Набоков | 0 | 5 | 1522633 | 342774 |
60 | Ю. Никитин | 0 | 2 | 1342176 | 702383 |
61 | В. Сегаль | 0 | 2 | 320218 | 75917 |
62 | В. Ян | 0 | 1 | 507502 | 600636 |
63 | А. Толстой | 0 | 1 | 129664 | 97842 |
64 | И. Ефремов | 0 | 1 | 536604 | 256521 |
65 | Е. Федоров | 0 | 1 | 1120665 | 221388 |
66 | О. Гриневский | 0 | 1 | 158762 | 96085 |
67 | Н. Гумилев | 0 | 1 | 70181 | 71042 |
68 | Л.Н. Толстой | 0 | 1 | 1225242 | 199903 |
69 | В. Михайлов | 0 | 1 | 254464 | 84135 |
70 | Ю. Нестеренко | 0 | 1 | 352988 | 71075 |
71 | А.С. Пушкин | 0 | 1 | 170380 | 57143 |
72 | Л. Резник | 0 | 1 | 115925 | 79628 |
73 | М.Е. Салтыков-Щедрин | 0 | 1 | 239289 | 101845 |
74 | В. Шукшин | 0 | 1 | 309524 | 66756 |
75 | С. М. Соловьев | 0 | 1 | 2345807 | 160002 |
76 | А. Кац | 0 | 1 | 841898 | 81830 |
77 | Е. Козловский | 1 | 1 | 849038 | 889560 |
78 | С. Есенин | 0 | 1 | 219208 | 44855 |
79 | А. Стругацкий | 0 | 1 | 151246 | 51930 |
80 | А. и Б. Стругацкие | 0 | 29 | 6571689 | 345582 |
81 | Б. Стругацкий | 0 | 1 | 298832 | 261206 |
Мерой неточности оценки t(G(·)) может служить средний ранг,
равный сумме чисел в колонке c1, деленной на общее число писателей
82. Здесь средний ранг равен
|
Второй вывод из данных таблицы 2 состоит в том, что метод работает и на стихотворных произведениях (А.С. Пушкина, С. Есенина и Н. Гумилева). В-третьих, правильно определяются писатели, чьи произведения переводились с польского языка (С. Лем и И. Хмелевская). В-четвертых, среди плохо распознаваемых авторов нет общепризнанных классиков русской литературы.
Для сравнения, в следующей таблице приведены результаты аналогичного исследования с оценками t(F(x)), e(F(x)), e(G(x)) на тех же текстах.
c1 | t(F(·)) | t(G(·)) | e(F(·)) | e(G(·)) |
0 | 57 | 69 | 1 | 2 |
1 | 4 | 3 | 8 | 8 |
2 | 4 | 2 | 7 | 13 |
3 | 4 | 1 | 2 | 2 |
4 | 0 | 0 | 3 | 7 |
i 5 | 13 | 7 | 61 | 50 |
Среднее | 3.50 | 2.35 | 13.95 | 12.37 |
Сделаем два вывода на основании данных последней таблицы. Во-первых, частотный анализ (метод, основанный на схеме Бернулли) работает плохо (имеется максимум два точных ответа). Однако, он все-таки дает какую-то информацию об авторе, ибо в случае совершенно случайного выбора истинного автора средний результат в последних двух столбцах был бы около 40. Во-вторых, выбрасывание слов, начинающихся с заглавной буквы, заметно улучшает результаты (даже при частотном анализе). Действительно, столбцы с функцией G(·) заметно лучше столбцов с функцией F(·).
Отмечается существенное улучшение качества распознавания автора текста при выбрасывании слов, начинающихся с заглавной буквы. Этот феномен еще требует своего объяснения.
Как уже говорилось, А.А. Марков весьма интересовался задачей определения авторства текста (об этом свидетельствует его статья [2]). Знаменательно, что его собственная идея о "связи испытаний в цепь", опробованная им же на литературном материале [3], привносит прогресс в решение этой задачи.
Автор благодарен М.И. Гринчуку за плодотворные дисскуссии по этой тематике. Автор также признателен А.Т. Фоменко и Г.В. Носовскому за оживленное внимание к работе и обсуждения результатов. Кроме них, автор благодарит А.А. Поликарпова, совместные дискуссии с которым существенно повлияли на окончательное оформление работы.
|
Новые книги авторов СИ, вышедшие из печати:
О.Болдырева "Крадуш. Чужие души"
М.Николаев "Вторжение на Землю"