Многие замечали, что речи политиков имеют довольно стандартный формат, они похожи друг на друга. Нужно несколько раз повторить основные тезисы, используя стандартные формулировки. Такое впечатление, что есть алгоритм, который задаёт структуру таких речей.

В связи с этим возникает вопрос: может ли компьютер генерировать подобные тексты самостоятельно?

Валентин Кассарниг (Valentin Kassarnig) из университета Массачусетса доказал, что такое возможно. Он опубликовал программу (репозиторий на гитхабе), которая делает именно это: генерирует политические речи, удивительно похожие на настоящие. Подробнее о генераторе политических текстов автор рассказывает в научной статье.

В разработке генератора Валентин использовал базу из почти 4000 фрагментов политических дебатов в Конгрессе США. В базу вошло более 50 000 предложений текста, в каждом из которых в среднем 23 слова. Кассарниг также классифицировал каждое выступление по политической партии (республиканцы/демократы), а также по принципу положительного/отрицательного отношения к теме обсуждения.

Впрочем, самое важное в том, как анализировать эту базу. Автор пробовал разные варианты, но в итоге остановился на N-граммах.

N-грамма — последовательность из n элементов. В данном случае, это последовательность слов и фраз.

Сначала он разметил в текстах все части речи (существительное, глагол, прилагательное и т.д.). Затем использовал следующий алгоритм: в базе ищутся все 6-граммы и вычисляется вероятность появления определённого слова или фразы, в зависимости от того, какие пять стоят перед ним. «Это позволяет нам очень быстро определить все слова, какие могут появиться после пяти известных предыдущих слов, и какова вероятность появления каждого из них», — говорит Кассарниг.

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

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

Результаты на удивление хороши.

Пример текста (англ.)
Mr. Speaker, for years, honest but unfortunate consumers have had the ability to plead their case to come under bankruptcy protection and have their reasonable and valid debts discharged. The way the system is supposed to work, the bankruptcy court evaluates various factors including income, assets and debt to determine what debts can be paid and how consumers can get back on their feet. Stand up for growth and opportunity. Pass this legislation.

Кассарниг изучил результаты и считает, что грамотность и плавность перехода от предложения к предложению очень даже неплохие.

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

Программа может также генерировать другие тексты. Например, посты для блога и новостные заметки :).

Поскольку исходный код опубликован в открытом доступе, то любые улучшения и форки поощряются.

Комментарии (21)


  1. densss2
    21.01.2016 17:08
    +14

    Благодарю тебя, товарищ Валентин Кассарниг! Теперь ничто не сдерживает меня от пути в большую политику!


    1. senia
      21.01.2016 17:35

      Учитесь у великих: youtu.be/pytPGA5AY7U?t=10s


      1. densss2
        22.01.2016 10:48

        Спасибо! Проштудировал весь сериал!


  1. EndUser
    21.01.2016 17:39

    http://www.explainxkcd.com/wiki/index.php/1068:_Swiftkey и, следовательно, https://blog.swiftkey.com/swiftkey-on-xkcd/


  1. Hellsy22
    21.01.2016 17:59
    +7

    Я в юности делал на таком же принципе генератор легко запоминающихся паролей — загнал в него кучу английских и русских текстов с lib.ru и для каждой буквы вес рандома опирался на статистику ее встречи после предыдущих двух (N=3 в терминологии статьи)
    В итоге получались пароли типа: zingledi, actalflo, raliseed, bachumen, ficharea, metistra и т.д.

    Но идея использовать такой же принцип для слов — великолепна. Осталось дождаться кого-нибудь, кто сможет натравить на все это дело нейронную сеть и создать идеального блоггера.


    1. bak
      21.01.2016 18:39
      +1

      Лучше идеального политика.


    1. Fedorkov
      22.01.2016 17:25

      Я тоже в школьные годы сделал генератор легко запоминающихся паролей, только генерировал задом наперёд, потому что в английском разных окончаний меньше, чем разных начал слова.

      А потом я прочитал о такой программе в «Жемчужинах программирования» (гл. 15.3), и там тоже было о генерации текстов из слов или фраз.


  1. EminH
    21.01.2016 18:18
    +29

    Ничего нового:

    Универсальный код речей


    1. gleb_l
      21.01.2016 22:35
      +3

      Есть и в художественном варианте — вспомните знаменитое Остапо-Бендерское Незаменимое Пособие ...


    1. qwertyhp
      21.01.2016 23:12

      Ой, а можно полную версию мануала? Нет, правда — «расширив и углубив», можно создать такой чат-бот — блеск!
      Пожалуйста, если есть что выложить — выложите! Не обязательно по политике — интересна любая информация! Ссылки, исходники, алгоритмы…

      За синтетическим программным трепом — будущее!


    1. AlexGechis
      21.01.2016 23:35
      +3

      Действительно, и как тут не вспомнить корчеватель?


  1. k12th
    21.01.2016 18:48
    +22

    Если кто-то не верил, что любого чиновника можно заменить скриптом на питоне, то вот.


    1. Alexey2005
      21.01.2016 23:22
      +2

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


      1. k12th
        21.01.2016 23:27
        +2

        Да просто допуск по вероятности снизить и эффект не отличить:)
        С инициативой сложнее. Придется генерить несколько текстов и оценивать программой из соседнего софта, про сарказм, и отбирать соответственно те, которые прошли едва-едва.


  1. gionet
    21.01.2016 19:10
    +1

    Черномырдина все равно не сможет переплюнуть =)))


    1. gleb_l
      21.01.2016 22:18
      +1

      Прекрасно. Раньше хоть политкорм для паствы писал (чисто по биологическим признакам) человек. Теперь корм генерирует робот, но паства будет продолжать кушать все равно, ибо буллшит синтетический оказался «идентичен натуральному» :)

      PS ошибся уровнем коммента — предназначался исходной статье )


  1. Nulliusinverba
    22.01.2016 04:12
    +1

    Евгений Лукин. С нами бот.


  1. Sadler
    22.01.2016 07:45

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


  1. Loki3000
    22.01.2016 11:05

    Теперь еще надо сделать программу, которая будет слушать политические речи:)


    1. GeckoPelt
      22.01.2016 13:54

      Евгений Лукин, Любовь Лукина, «Авария» :)


  1. 2fidel
    22.01.2016 15:14

    Ну не все политические речи такие уж сложные для воспроизведения.
    Есть, например, такой замечательный политик как Петр Полячкин