Генерация бредотекста.

Тема в разделе "Рунет", создана пользователем hertz, 28.11.16.

  1. hertz

    hertz Новичок

    Сообщения:
    21
    Симпатии:
    8
    Баллы:
    3
    Оптимизация текста под несколько ключей представляется весьма непростой задачей, особенно небольшого текста, так как придется урезонивать склонения ключей, если не использовать готовые шаблоны и базу синонимов. То есть что бы не вышло:
    Развратная сучка принимаТЬ толстый член в роскошнАЯ попкА.
    Программе нужно уметь понимать правила сочетания слов. Существует ряд попыток получить текст оптимизированный под слово, например с помощью цепей Маркова, когда, якобы, нет зависимости новых слов от предыдущих:

    Я помню чудное мгновенье:
    Порно аниме картинки проститутки,
    Как мимолетное виденье,
    Как трахают сакуру мультик...

    Что неотличимо от нормального текста в единичном случае, но легко поддается статистическому анализу(http://cache-minsk02.cdn.yandex.net...rodsky_poisk_neestestvennih_textov_statia.pdf), так как поисковики явно знают что через 1 токен(слово или знак препинания) от 'мгновенье' весьма редко встречается токен 'порно'. Разумным решением видится генерация текстов на основе n-грамм, когда скрипт получая заведомо человеческие тексты делает из них массив вида :
    array(
    первый токен => array(
    вторй токен=>5, //5 раз после первого токена в тексте встречался второй
    десятый токен=>2,
    ),
    второй токен => array(...),
    третий токен => array(...),
    ...
    )
    Собрав словарь из таких массивов мы имеем базу для генерации текстов просто продвигаясь от токена к токену по весам(частотам встречаемости) выбирая новый токен случайно но пропорционально весу связи с предыдущим.
    Очевидными минусами являются наличие словаря размер которого достигнет размера от нескольких гигабойт, до терабайта, при обучении на всех словах языка, использование больших вычислительных мощностей при генерации.
    Из плюсов- неотличимость поисковиками текстов, при расширении метода до 3-грамм, 4-грамм, ... , n-грамм.
    На данный момент написал самую основу генератора. При обучении на одной книге и генерации по 100 токенов имеем примеры текстов: https://yadi.sk/i/tlRBTEs3zV2Fk . В будущем планирую сделать генерацию по ключевым словам. У кого есть идеи, пожелания, предложения сотрудничества- милости прошу.
     
    mixwor, mordvin и HelgerLEE нравится это.
  2. Fiesenioncid

    Fiesenioncid Новичок

    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    17
    интересная тема! плз, пиши ещё в подобной доступной форме.

    в англ языке кажется эта задача проще решается (насколько я знаю там нет склонений и прочих трудностей) -- совсем недавно видел, что с помощью deep learning или как там его правильно называют когда scipy+numpy+theano, в несколько десятков строк python кода с помощью GPU анализируют книжку "Алиса в стране чудес" и выдают не её основе читабельную генеренку
     
  3. Sota

    Sota Активный участник

    Сообщения:
    262
    Симпатии:
    61
    Баллы:
    66
    на чем работает это чудо?
     
  4. hertz

    hertz Новичок

    Сообщения:
    21
    Симпатии:
    8
    Баллы:
    3
    php
     
  5. Dexxx

    Dexxx Новичок

    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    примеры кода есть? интересно глянуть
     
  6. hertz

    hertz Новичок

    Сообщения:
    21
    Симпатии:
    8
    Баллы:
    3
    Нет, код не выложу, он корявый, не завершенный, да и сам снять сливки хочу.
     
  7. Dexxx

    Dexxx Новичок

    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    Хотя бы эту часть можно увидеть? я вообще плохо дружу с пхп, больше копирую и вставляю, но начал писать свой генератор текста. как раз пока остановился на частотах всяких и нграммах. на счет кривого кода вот мой кусок как я сделал вывод биграмм в браузер : да и алгоритм самому пришлось сочинять :D
    на входе файл ключевых слов.
    foreach ($lines2 as $line)
    $exp = explode (" ",$line);
    $count = count($exp);
    $coun = $count -1;
    $x=0;
    while ($x<$coun) {
    $first = "\n" . $exp[$x] ." ";
    $x++;
    $all = $first . $exp[$x];
    echo $all . "";
     
  8. webcoder

    webcoder Новичок

    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    6
    А как вам так?
    [​IMG]
    Чем реализуемо, и будет ли такой уникальным :)?
     
  9. Dexxx

    Dexxx Новичок

    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    2
    ихмо гугл и яндекс хотят видеть грамматически верные (более менее) тексты, а генераторы опечаток использовались в доргенах лет 10 назад.
     
  10. andrew

    andrew Новичок

    Сообщения:
    11
    Симпатии:
    2
    Баллы:
    3
    Вот та технология, на которой базируется программа ТС
    https://habrahabr.ru/post/249215/

    От языка никак не зависит, просто нужно для каждого языка собирать свой "словарь"
     
    hertz и Dexxx нравится это.
  11. hertz

    hertz Новичок

    Сообщения:
    21
    Симпатии:
    8
    Баллы:
    3
    Расширил метод до 3-грамм, скорость обучения и генерации значительно упала, но качество(визуально) возросло. Грамматика не совершенна, что представляется результатом слабой обученности генератора. Встречается https://yadi.sk/i/awUSs8UT32AiJT ,естественность текста по Ципфу в районе 93-94%, уникальность 100%. А как вы проверяете тексты, помимо, отслеживания реакции на них поисковых систем.
     
    andrew нравится это.
  12. sovietg

    sovietg Новичок

    Сообщения:
    176
    Симпатии:
    13
    Баллы:
    23
    Я грибоедова в ципфу загружал, естественно около 60 вроде была)
     
  13. hertz

    hertz Новичок

    Сообщения:
    21
    Симпатии:
    8
    Баллы:
    3
    Код допилю, у Донцовой отниму хлеб) А если серьезно, то стоит разобраться поподробнее с распределением- наличие закономерности распределения в тексте, по видимому, является следствием эволюции языка в сторону уменьшения конфликта между необходимостью снятия словом максимальной неопределенности и уменьшением количества слов языка. Условно между языком в котором одно слово, которое имеет все смыслы и языком в котором бесконечное количество слов. В результате чего и получается, что для минимизации количества использованных слов n-ное по частоте встречаемости слово должно нести количество информации в n раз меньше чем первое- своего рода сжатие сообщения по Хаффману . То есть [​IMG] , где [​IMG] - величина неопределенности раскрываемой n-ным словом, а [​IMG] -величина неопределенности раскрываемой первым по частоте словом, что и является законом Ципфа выведенным через теорию информации. Стремление к сокращению длины сообщения, кстати, объясняет и малую длину наиболее часто встречаемых слов: https://ru.wiktionary.org/wiki/Приложение:Список_частотности_по_НКРЯ при средней длине для русского слова 5.28 символа. Грибоедов, кстати, писал в особой манере, используя разговорную речь и необычные обороты, что и может служить причиной статистически меньшей естественности его произведений по сравнению с другими авторами. (Выше написанное мои измышления, так как нагуглить математического объяснения закона Ципфа не удалось).
    Проверить текст по Ципфу:http://pr-cy.ru/zypfa/text
    ------------------- Добавлено 05.12.16 -------------------
    Пропавшие картинки из вот этой статьи https://ru.wikipedia.org/wiki/Закон_Ципфа , как и сама формула.
     
  14. Рамеш

    Рамеш Новичок

    Сообщения:
    5
    Симпатии:
    1
    Баллы:
    8
    Как процесс, есть результаты? Интересно как продвигается)
     
    hertz нравится это.
  15. hertz

    hertz Новичок

    Сообщения:
    21
    Симпатии:
    8
    Баллы:
    3
    Работаю над производительностью- прикручиваю mysql, если будет медленно сделаю на neo4j, если будет медленно сделаю на более быстром языке, запостил 500 текстов(2-граммная генерация по словарю обученному на 70к токенов, заголовок- ключ не в тему, 30-400 токенов в тексте), для проверки индексации. Забегая вперед понадобится огромное количество качественного текста, если у кого то есть готовое решение в виде какого то API или большого, легко распаршиваемого хранилища текстов, ...- буду благодарен за информацию.
     
  16. andrew

    andrew Новичок

    Сообщения:
    11
    Симпатии:
    2
    Баллы:
    3
    Вот тут можно посмотреть тексты:
    http://ruscorpora.ru/
    http://opencorpora.org/

    Мне в целом непонятна причина, по которой ты продолжаешь пердолиться c php и придумывать велосипед, когда существуют готовые решения.
    Скорости ты на нем не увидишь никогда.

    Для парсинга тоже будешь писать краулер на php? :D
     

Поделиться этой страницей