2 сентября 2023, 18:28
Примечания сообщества: децентрализованный фактчекинг в Твиттере
Последние два года существования Twitter X были, мягко говоря, неспокойными. После того как в прошлом году платформа была куплена не куплена куплена Илоном Маском за 44 миллиарда долларов США, Илон провёл масштабные изменения в составе команды, модерации контента и бизнес-модели, не говоря уже об изменениях в культуре сайта, которые вполне могли быть результатом мягкой силы Илона, а не какого-либо конкретного стратегического решения. Но в разгар этих в высшей степени спорных действий в Twitter стремительно росла значимость одной новой функции, которая, похоже, полюбилась людям самых разных политических взглядов: «Примечания сообщества».
«Примечания сообщества» — это инструмент фактчекинга, который иногда, как в твите Илона выше, прикрепляет к публикациям контекстные заметки в качестве инструмента фактчекинга и борьбы с дезинформацией. Первоначально он назывался Birdwatch и впервые был запущен в качестве пилотного проекта в январе 2021 года. С тех пор он развивался поэтапно, причём наиболее стремительный этап его развития совпал с покупкой Twitter Илоном в прошлом году. Сегодня «Примечания сообщества» нередко появляются в собирающих большую аудиторию твитах, в том числе и на спорные политические темы. И с моей точки зрения, и с точки зрения многих людей различных политических взглядов, с которыми я общаюсь, когда эти примечания появляются, они оказываются информативными и ценными.
Но больше всего в «Примечаниях сообщества» меня интересует то, что, не будучи «криптопроектом», они, возможно, ближе всего воплощают «криптоценности», которое мы наблюдаем в мире мейнстрима. «Примечания сообщества» не пишутся и не курируются какой-то централизованно отобранной группой экспертов; напротив, писать их и голосовать за них могут все желающие, а решение о том, какие примечания будут показаны или не показаны, принимается исключительно по алгоритму с открытым исходным кодом. На сайте Twitter есть детализированное и обширное руководство, описывающее работу алгоритма. Можно загрузить данные, о том, какие примечания и голоса были опубликованы, локально запустить алгоритм и убедиться, что результат совпадает с тем, что отображается на сайте Twitter. Алгоритм не идеален, но он удивительно близок к тому, чтобы соответствовать идеалу заслуживающей доверия нейтральности, и в то же время впечатляюще полезен даже в спорных условиях.
Как работает алгоритм «Примечаний сообщества»?
Любой человек, имеющий аккаунт в Twitter, соответствующий опредёленным критериям (по сути: активность дольше 6 месяцев, отсутствие недавних нарушений правил, подтверждённый номер телефона), может зарегистрироваться для участия в «Примечаниях сообщества». В настоящее время участников принимают медленно и в случайном порядке, но в конечном итоге планируется, что участвовать смогут все, кто подходит под заданные критерии. После одобрения сначала вы сможете участвовать в оценке существующих примечаний, а после того, как вы поставили достаточно хороших оценок (о чём можно судить по тому, какие оценки совпадают с итоговым результатом по данному примечанию), вы сможете создавать и свои собственные примечания.
Когда вы пишете примечание, оно получает оценку, основанную на отзывах, полученных от других участников «Примечаний сообщества». Эти отзывы можно представить как голоса по трёхбалльной шкале: HELPFUL (полезно — п.п.), SOMEWHAT_HELPFUL (в некоторой степени полезно — п.п.) и NOT_HELPFUL (не полезно — п.п.), но отзыв может содержать и другие важные для алгоритма теги. На основе этих отзывов примечание получает оценку. Если балл превышает 0,40 — примечание показывается, в противном случае оно не показывается.
Уникальность алгоритма заключается в способе подсчёта оценок. В отличие от более простых алгоритмов, целью которых является своего рода простое вычисление суммы или среднего значения оценок пользователей и использование его в качестве конечного результата, алгоритм рейтинга «Примечаний сообщества» явно пытается отдать предпочтение примечаниям, получившим положительные оценки от людей с самыми разными точками зрения. Иными словами, если люди, которые обычно не согласны с тем, как оцениваются примечания, в итоге соглашаются с конкретным примечанием, то оно получает особенно высокую оценку.
Давайте глубже погрузимся в математику того, как это работает. Есть множество пользователей и множество примечаний; можно создать матрицу M, где элемент Mi,j представляет собой оценку пользователем i примечания j.
Большинство пользователей не оценивали примечание (для любого данного примечания), поэтому большая часть записей в матрице будет нулевой, но это не страшно. Цель алгоритма — создать модель пользователей и примечаний в виде четырёх столбцов, присвоив каждому пользователю два статуса, которые мы можем назвать «доброжелательность» и «полярность», а каждому примечанию — два статуса, которые мы можем назвать «полезность» и «полярность». Модель пытается предсказать матрицу как функцию от этих значений, используя следующую формулу:
Обратите внимание, что здесь я ввожу как терминологию, используемую в работе Birdwatch, так и свои собственные термины, чтобы дать менее математическое представление о том, что означают те или иные переменные:
- μ — параметр «настроения широкой публики», учитывающий то, насколько высоки оценки, которые дают пользователи в целом
- iu — «доброжелательность» пользователя: насколько вероятно, что данный конкретный пользователь будет давать высокие оценки
- in — «полезность» примечания: с какой вероятностью это конкретное примечание получит высокую оценку. В конечном счёте, именно эта переменная нас интересует.
- fu или fn — это «полярность» пользователя или примечания: её положение на доминирующей оси политической поляризации. На практике отрицательная полярность примерно означает «левый уклон», а положительная — «правый уклон», но следует иметь в виду, что ось поляризации выявляется непосредственно в момент анализа пользователей и примечаний; понятия «левый уклон» и «правый уклон» ни в коем случае не являются жёстко заданными.
Алгоритм использует довольно простую модель машинного обучения (обычный градиентный спуск) для поиска значений переменных, которые наилучшим образом предсказывают значения матрицы. Полезность, присвоенная конкретному примечанию, является его итоговой оценкой. Если полезность примечания как минимум +0,4 — оно будет отображаться.
Главная умная мысль здесь заключается в том, что термин «полярность» учитывает свойства примечания, из-за которых она нравится одним пользователям и не нравится другим, а «полезность» оценивает только те свойства примечания, из-за которых оно нравится всем. Таким образом, отбор по полезности позволяет выявить примечания, получающие межгрупповое одобрение, и отсеять примечания, вызывающие одобрение одной группы за счёт отторжения со стороны другой группы.
Я сделал упрощённую реализацию базового алгоритма; её можно найти здесь. Приглашаю вас поэкспериментировать с ней.
Итак, выше описан только основной блок алгоритма. В реальности существует множество дополнительных механизмов, добавленных поверх этого. К счастью, они описаны в открытой документации. Эти механизмы включают в себя следующее:
- Алгоритм запускается много раз, каждый раз добавляя к голосам пользователей несколько случайно сгенерированных гипертрофированных «псевдоголосов». Это означает, что истинный результат алгоритма для каждого примечания представляет собой диапазон значений, а финальный результат зависит от взятой из этого диапазона «нижней доверительной границы», проверяемой на соответствие пороговому значению 0,32.
- Если многие пользователи (особенно те, которые имеют сходную с примечанием полярность) не только оценивают примечание как «Не полезное», но ещё и указывают в качестве причины оценки один и тот же «тэг» (например, «Спорные или необъективные формулировки», «Источники не подтверждают примечание»), то пороговое значение полезности, необходимое для публикации примечания, увеличивается с 0,4 до 0,5 (кажется, что это незначительное изменение, но на практике оно очень существенно).
- Если примечание принято, то пороговое значение полезности, ниже которого оно должно опуститься, чтобы его не приняли, становится на 0,01 балла ниже порогового значения, которого должна была достичь полезность примечания, чтобы оно изначально было принято.
- Алгоритм запускается ещё большее число раз с несколькими моделями, что иногда приводит к продвижению примечаний, чей первоначальный балл полезности находился где-то между 0,3 и 0,4.
В итоге вы получите некий довольно сложный код на python, состоящий из 6 282 строк и занимающий 22 файла. Но всё это есть в открытом доступе, — можно скачать данные о примечаниях и оценках, запустить код самостоятельно и посмотреть, соответствуют ли полученные результаты тому, что на самом деле происходит в Twitter в тот или иной момент.
Так как же это выглядит на практике?
Наверное, самая важная идея этого алгоритма, отличающая его от наивного среднего балла от голосов людей, — это то, что я называю «полярными» значениями. В документации к алгоритму они называются fu и fn, где f — коэффициент, поскольку именно эти два термина перемножаются друг с другом; более общая формулировка частично объясняется желанием в конечном итоге сделать fu и fn многомерными.
Полярность присваивается как пользователям, так и примечаниям. Связь между ID пользователей и их учётными записями в Twitter намеренно скрывается, но примечания публичны. На практике полярности, генерируемые алгоритмом, по крайней мере для англоязычного набора данных, очень близко отражают левые и правые политические взгляды.
Вот несколько примеров примечаний, получивших значение полярности около −0,8:
Заметьте, что это не избирательный подход; а буквально первые три строки в электронной таблице scored_notes.tsv, сгенерированной алгоритмом при локальном запуске, которые имеют оценку полярности (в электронной таблице она называются coreNoteFactor1) менее −0,8.
Теперь приведу несколько примечаний, получивших значение полярности около +0,8. Оказалось, что многие из них принадлежат либо людям, рассуждающим о бразильской политике на португальском языке, либо фанатам Tesla, гневно опровергающим критику в адрес Tesla. Поэтому позвольте мне провести небольшой отбор, чтобы найти те примечания, которые таковыми не являются:
Опять-таки стоит напомнить, что «разделение на левых и правых» не было каким-либо образом жёстко заложено в алгоритм, а было выявлено в момент вычислений. Это позволяет предположить, что если применить данный алгоритм в других культурных контекстах, то он сможет автоматически определить их основные политические разногласия, а также связать их.
Тем временем примечания, получившие наивысшую оценку полезности, выглядят следующим образом. На этот раз, поскольку эти примечания на самом деле отображаются в Twitter, я могу просто сделать скриншот одного из них:
И другого:
Вторая заметка затрагивает достаточно тенденциозные политические темы более прямо, но это чёткая, высококачественная и информативная заметка, и поэтому она получила высокую оценку. Таким образом, алгоритм, похоже, работает, и возможность проверить результаты работы алгоритма, запустив код, тоже работает.
Что я думаю об этом алгоритме?
Главное, что поразило меня при анализе алгоритма, — это то, насколько он сложный. Есть «академическая версия» — градиентный спуск, который находит наилучшее соответствие пятичленному векторно-матричному уравнению, а есть реальная версия — сложная последовательность множества различных исполнений алгоритма с применением множества произвольных коэффициентов.
Даже академическая версия скрывает свою комплексность. Уравнение, которое она оптимизирует, — это уравнение 4 степени (поскольку в формуле прогнозирования есть член 2 степени fu∗fn, а функция стоимости измеряет квадрат отклонения, руководствуясь методом наименьших квадратов). В то время как оптимизация уравнения 2 степени для любого числа переменных почти всегда имеет единственное решение, которое можно вычислить с помощью базовой линейной алгебры, то уравнение 4 степени для многих переменных часто имеет несколько решений. Поэтому несколько циклов работы алгоритма градиентного спуска вполне могут привести к разным ответам. Незначительные изменения входных данных могут привести к переходу от одного локального минимума к другому, что существенно изменит результат.
Разница между этим алгоритмом и такими алгоритмами, как квадратичное финансирование, над которыми я работал, кажется похожим на разницу между алгоритмом экономиста и алгоритмом инженера. Алгоритм экономиста в своем лучшем проявлении ценит простоту, достаточную лёгкость анализа и чёткие математические свойства, которые показывают, почему он оптимален (или наименее плох) для задачи, которую он пытается решить. Также в идеале он подтверждает границы того, какой ущерб может нанести тот, кто попытаться на нём нажиться. Алгоритм инженера, с другой стороны, является результатом повторяющихся проб и ошибок, а также выяснения, что работает и что не работает в его операционном контексте. Алгоритмы инженера прагматичны и просто справляются с задачей; а алгоритмы экономиста не слетают с катушек, когда сталкиваются с неожиданностями.
Или, как сказал по этому поводу уважаемый интернет-философ roon (также известный как tszzl):
Конечно, я бы сказал, что «теорицело-эстетическая» сторона криптоинструментов необходима как раз для того, чтобы отличать протоколы, которые на самом деле не требуют доверия третьей стороне, от сомнительных конструкций, которые выглядят хорошо и вроде бы хорошо работают, но внутри требуют доверия нескольких централизованных субъектов — или, что ещё хуже, в итоге оказываются откровенным разводом.
Глубокое обучение обычно работает, но оно неизбежно уязвимо для всех видов атак на машинное обучение. Ловушки для задротов и лестницы абстракций, если они сделаны хорошо, могут быть достаточно устойчивы к этим атакам. И вот у меня возникает вопрос: можно ли превратить сами «Примечания сообщества» в нечто, больше похожее на алгоритм экономиста?
Чтобы представить, что это будет означать на практике, давайте рассмотрим алгоритм, который я придумал несколько лет назад для аналогичной цели: парное квадратичное финансирование.
Цель парного квадратичного финансирования — заткнуть дыру в «обычном» квадратичном финансировании, при котором даже если два участника вступают в сговор друг с другом, то каждый из них может внести очень большую сумму денег в фейковый проект, который отправит деньги им обратно, и получить большую субсидию, которая истощит все ресурсы. При парном квадратичном финансировании мы выделяем каждой паре участников ограниченный бюджет M. Алгоритм перебирает все возможные пары участников, и если он решает предоставить субсидию какому-либо проекту P, потому что оба участника (A и B) его поддержали, то эта субсидия выделяется из бюджета, выделенного паре (A и B). Следовательно, даже при условии сговора k участников сумма, которую они могут украсть из алгоритма, не превышает k∗(k-1)∗M.
Алгоритм полностью такой формы не очень применим в контексте «Примечаний сообщества», поскольку каждый пользователь голосует очень мало: в среднем у любых двух пользователей будет ровно ноль общих голосов, и поэтому алгоритм ничего не узнает о противоречиях между взглядами пользователей пользователей, если будет рассматривать каждую пару пользователей отдельно. Задача модели машинного обучения как раз и состоит в том, чтобы попытаться «заполнить» матрицу, опираясь на очень скудные исходные данные, которые нельзя проанализировать таким способом напрямую. Но сложность такого подхода заключается в том, что для того, чтобы сделать это так, чтобы результат не получился крайне волатильным, столкнувшись с несколькими некачественными голосами, требуются дополнительные усилия.
Действительно ли «Примечания сообщества» борются с поляризацией?
Можно проанализировать, действительно ли алгоритм «Примечаний сообщества» в его нынешнем виде в принципе способен бороться с поляризацией, то есть, действительно ли он работает лучше, чем простой алгоритм голосования. Простые алгоритмы голосования и без того в некоторой степени борются с поляризацией: пост с 200 голосами за и 100 голосами против показывается хуже, чем сообщение, которое просто получило 200 голосов за. Но справляются ли «Примечания сообщества» с этой задачей лучше?
Трудно сказать, если рассматривать алгоритм абстрактно. Почему высокорейтинговый, но поляризующий пост не может иметь сильную полярность и высокую полезность? Идея заключается в том, что полярность должна «поглощать» свойства примечаний, из-за которых они набирают много голосов, если эти голоса противоречат друг другу, но так ли это на самом деле?
Чтобы проверить это, я прогнал свою собственную упрощённую реализацию алгоритма «Примечаний сообщества» в течение 100 циклов. Средние результаты оказались следующими:
В этом тесте «Хорошие» примечания получили оценку +2 от пользователей одной политической группы и +0 от пользователей противоположной группы, а «Хорошие, но очень поляризующие» набрали +4 от пользователей одной группы и −2 от пользователей противоположной группы. Тот же средний показатель, но другая полярность. И похоже, что в действительности «Хорошие» примечания получают более высокую среднюю полезность, чем «Хорошие, но очень поляризующие».
Ещё одним преимуществом чего-то более близкого к «алгоритму экономиста» было бы наличие более чёткой истории того, как алгоритм наказывает за поляризацию.
Насколько всё это полезно в ответственных ситуациях?
Мы можем пронаблюдать, как это работает, рассмотрев одну конкретную ситуацию. Около месяца назад Ян Бреммер пожаловался на удаление крайне осуждающего «Примечания сообщества», добавленного к твиту китайского чиновника.
Это тяжёлая тема. Одно дело — заниматься проектированием механизмов в милой песочнице сообщества Ethereum, где самая большая жалоба касается 20 000 долларов, которые достались спорному Twitter-инфлюенсеру. Другое дело — когда речь о затрагивающих многие миллионы людей политических и геополитических вопросах, по которым все по довольно понятным причинам занимают позицию презумпции максимальной недобросовестности. Но если разработчики механизмов хотят оказывать существенное влияние на мир, то в конечном итоге взаимодействие с этими ответственными ситуациями необходимо.
В случае с Twitter существует чёткая причина, по которой можно заподозрить, что за удалением «Примечаний сообщества» стоят централизованные манипуляции: У Илона много деловых интересов в Китае, поэтому есть вероятность, что Илон принудил команду «Примечаний сообщества» вмешаться в работу алгоритма и удалить это конкретное примечание.
К счастью, алгоритм имеет открытый исходный код и поддаётся проверке, так что мы можем копнуть поглубже! Давайте сделаем это. URL оригинального твита — https://twitter.com/MFA_China/status/1676157337109946369. Число 1676157337109946369 в конце — это ID твита. Его можно найти в загружаемых данных и определить конкретную строку в электронной таблице, в которой содержится приведённая выше запись:
Здесь мы находим ID самого примечания — 1676391378815709184. Затем мы ищем его в файлах scored_notes.tsv (примечания с баллами — п.п.) и note_status_history.tsv (история статуса примечания — п.п.), созданных в результате работы алгоритма. И получаем:
Второй столбец в первом выводе — это текущий рейтинг примечания. Второй вывод показывает историю примечания: его текущий статус находится в седьмом столбце (NEEDS_MORE_RATINGS (требуется больше оценок — п.п.)), а первый полученный ранее статус, который не является NEEDS_MORE_RATINGS, находится в пятом столбце (CURRENTLY_RATED_HELPFUL (нынешняя оценка — полезно — п.п.). Таким образом, мы видим, что алгоритм сам сначала показал примечание, а затем удалил его после некоторого снижения рейтинга — похоже, что централизованного вмешательства не было.
Можно увидеть это и с другой стороны, взглянув на сами голоса. Мы можем просканировать файл ratings-00000.tsv (оценки — п.п.), чтобы выделить все оценки для этого примечания, и посмотреть, сколько было получено оценок HELPFUL, а сколько NOT_HELPFUL:
Но если отсортировать их по времени и просмотреть первые 50 голосов, то вы увидите 40 голосов HELPFUL и 9 голосов NOT_HELPFUL. Таким образом, вывод один и тот же: первоначальная аудитория примечания воспринимала его более благосклонно, чем последующая, и поэтому его рейтинг сначала был высоким и со временем снизился.
К сожалению, трудно в точности объяснить, как менялся статус примечания: это не просто «раньше рейтинг был выше 0,40, а теперь ниже 0,40, поэтому от него отказались». Скорее, большое количество ответов NOT_HELPFUL спровоцировало одно из условий публикации, увеличив оценку полезности, необходимую для преодоления порогового значения.
Это хорошая возможность для ещё одного урока: чтобы сделать нейтральный алгоритм действительно надёжным, необходимо сохранить его простоту. Если примечание переходит из разряда принятых в разряд непринятых, должна быть простая и понятная история, объясняющая, почему это произошло.
Конечно, существует совершенно иной способ манипулирования голосованием: групповые атаки. Кто-то видит примечание, которое ему не нравится, и призывает полное энтузиазма сообщество (или, что ещё хуже, массу фейковых аккаунтов) оценить его как NOT_HELPFUL — для того, чтобы заметка перешла из разряда «полезных» в разряд «поляризующих», может потребоваться не так много голосов. Должная минимизация уязвимости алгоритма примечаний к подобным скоординированным атакам потребует гораздо большего анализа и работы. Одним из возможных улучшений может стать запрет всем пользователям голосовать за любое примечание. Вместо этого можно использовать выбранную алгоритмом ленту «Для вас», которая случайно распределит примечания между пользователями и предоставит им возможность оценивать только те заметки, которые им были распределены.
Правда ли, что «Примечания сообщества» недостаточно «смелые»?
Основная критика «Примечаний сообщества», которую я встречал, сводится к тому, что они делают недостаточно. Об этом говорят две недавние статьи, которые я прочитал. Цитирую первую:
«Программе сильно мешает тот факт, что для того, чтобы "Примечания сообщества" были опубликованы, они должны быть приняты консенсусом людей, представляющих весь политический спектр.
"Должен быть идеологический консенсус, — сказал он. — Это означает, что и левые, и правые должны согласиться с тем, что к твиту необходимо прикрепить это примечание".
По сути это требует "межидеологического согласия по поводу истины", а в условиях всё более предвзятой атмосферы достичь такого консенсуса практически невозможно».
Это сложная проблема, но в конечном итоге я склоняюсь к тому, что лучше позволить свободно опубликовать десять твитов с дезинформацией, чем один твит с примечанием, которое несправедливо его оценивает. Мы наблюдали годы фактчекинга, который действительно был смелым и действительно исходил из соображений о том, что «на самом деле мы знаем правду и знаем, что одна сторона лжёт гораздо чаще, чем другая». И что же получилось в результате?
Честно говоря, недоверие к фактчекингу как к концепции довольно распространено. Одна из стратегий здесь такова: игнорируйте хейтеров, помните, что эксперты по фактчекингу действительно знают факты лучше, чем любая система голосования, и продолжайте в том же духе. Но безоговорочная вера в этот подход представляется рискованной. В создании межгрупповых институтов, которые хотя бы в некоторой степени уважаемы всеми, есть своя ценность. Как и в случае с изречением Уильяма Блэкстоуна и судами (Пусть лучше десять виновных останутся безнаказанными, чем пострадает один невиновный — п.п.), мне кажется, что для поддержания такого уважения необходима система, которая совершает гораздо больше грехов бездействия, чем грехов действия. И поэтому мне кажется ценным, что существует хотя бы одна крупная организация, которая идёт по этому альтернативному пути и относится к редкому межгрупповому уважению как к ресурсу, который нужно беречь и развивать.
Ещё одна причина, по которой я считаю, что для «Примечаний сообщества» нормально быть осторожными, заключается в том, что я не считаю целью добавление корректирующего замечания к каждому твиту с дезинформацией или даже к большинству твитов с дезинформацией. Даже если менее одного процента таких публикаций получат примечание с контекстом или исправлением, «Примечания сообщества» всё равно окажут чрезвычайно ценную услугу как образовательный инструмент. Цель не в том, чтобы исправить всё, а в том, чтобы напомнить людям, что существует множество точек зрения, что некоторые виды постов, которые сами по себе выглядят убедительно и увлекательно, на самом деле совершенно некорректны, и вы — да, именно вы! — часто можете просто поискать информацию в Интернете, чтобы убедиться в этом.
«Примечания сообщества» не могут и не должны быть чудодейственным средством, решающим все проблемы общественной эпистемологии. Для тех проблем, которые они не решили, в мире существует множество других механизмов: будь то новомодные инструменты, такие как рынки предсказаний, или старые добрые организации, нанимающие штатных сотрудников с опытом в предметной области, чтобы попытаться исправить упущения.
Заключение
«Примечания сообщества» — это не только интересный эксперимент в области социальных сетей, но и пример нового и захватывающего жанра в разработке механизмов: механизмов, которые намеренно пытаются выявить поляризацию и отдают предпочтение тому, что преодолевает, а не увековечивает разногласия.
Две другие известные мне вещи из этой категории — это (i) парное квадратичное финансирование, которое используется в Gitcoin Grants, и (ii) Polis — инструмент для дискуссий, который использует алгоритмы кластеризации, чтобы помочь сообществам выявить высказывания, хорошо воспринимаемые людьми с разными точками зрения. Это очень ценная сфера разработки механизмов, и я надеюсь, что мы увидим гораздо больше академических работ в этой области.
Алгоритмическая прозрачность того типа, которую предлагают «Примечания сообщества», не является полноценной децентрализованной социальной сетью, ведь если вы не согласны с тем, как работают «Примечания сообщества», у вас нет возможности посмотреть на тот же контент с применением других алгоритмов. Но это самое близкое к такой сети, чем в ближайшие пару лет могут довольствоваться очень крупные приложения. И мы видим, что эта прозрачность уже приносит большую пользу: как за счёт предотвращения централизованных манипуляций, так и за счёт того, что платформы, не вовлечённые в такие манипуляции, смогут получить за это достойное признание.
Я с нетерпением жду развития и роста как «Примечаний сообщества», так и, надеюсь, многих других похожих алгоритмов в течение следующего десятилетия.