Генератор стихов из слов


Как научить свою нейросеть генерировать стихи / Habr

Умоляю перестань мне сниться
Я люблю тебя моя невеста
Белый иней на твоих ресницах
Поцелуй на теле бессловесном

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

Вернее, нейронная сеть нужна лишь для первого этапа — расстановки слов в правильном порядке. С рифмовкой справляются правила, применяемые поверх предсказаний нейронной сети. Хотите узнать подробнее, как мы это реализовывали? Тогда добро пожаловать под кат.

Языковые модели


Определение

Начнем с языковой модели. На Хабре я встречал не слишком-то много статей про них — не лишним будет напомнить, что это за зверь.

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

.

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

Языковая модель, которая сидит у нас (во всяком случае, у меня) в голове, подсказывает: после честных навряд ли снова пойдёт мой. А вот и, или, конечно, правил — очень даже.

N-граммные языковые модели

Кажется, самым простым способом построить такую модель является использование N-граммной статистики. В этом случае мы делаем аппроксимацию вероятности — отбрасывая слишком далекие слова, как не влияющие на вероятность появления данного.

Такая модель легко реализуется с помощью Counter’ов на Python — и оказывается весьма тяжелой и при этом не слишком вариативной. Одна из самых заметных её проблем — недостаточность статистики: большая часть 5-грамм слов, в том числе и допустимых языком, просто не встретится в сколько-то ни было большом корпусе.

Для решения такой проблемы используют обычно сглаживание Kneser–Ney или Katz’s backing-off. За более подробной информацией про методы сглаживания N-грамм стоит обратиться к известной книге Кристофера Маннинга “Foundations of Statistical Natural Language Processing”.

Хочу заметить, что 5-граммы слов я назвал не просто так: именно их (со сглаживанием, конечно) Google демонстрирует в статье “One Billion Word Benchmark for Measuring Progress in Statistical Language Modeling” — и показывает результаты, весьма сопоставимые с результатами у рекуррентных нейронных сетей — о которых, собственно, и пойдет далее речь.
Нейросетевые языковые модели

Преимущество рекуррентных нейронных сетей — в возможности использовать неограниченно длинный контекст. Вместе с каждым словом, поступающим на вход рекуррентной ячейки, в неё приходит вектор, представляющий всю предыдущую историю — все обработанные к данному моменту слова (красная стрелка на картинке).

Возможность использования контекста неограниченной длины, конечно, только условная. На практике классические RNN страдают от затухания градиента — по сути, отсутствия возможности помнить контекст дальше, чем на несколько слов. Для борьбы с этим придуманы специальные ячейки с памятью. Самыми популярными являются LSTM и GRU. В дальнейшем, говоря о рекуррентном слое, я всегда буду подразумевать LSTM.

Рыжей стрелкой на картинке показано отображение слова в его эмбеддинг (embedding). Выходной слой (в простейшем случае) — полносвязный слой с размером, соответствующим размеру словаря, имеющий softmax активацию — для получения распределения вероятностей для слов словаря. Из этого распределения можно сэмплировать следующее слово (или просто брать максимально вероятное).

Уже по картинке виден минус такого слоя: его размер. При словаре в несколько сотен тысяч слов его он легко может перестать влезать на видеокарту, а для его обучения требуются огромные корпуса текстов. Это очень наглядно демонстрирует картинка из блога torch:

Для борьбы с этим было придумано весьма большое количество различных приемов. Наиболее популярными можно назвать иерархический softmax и noise contrastive estimation. Подробно про эти и другие методы стоит почитать в отличной статье Sebastian Ruder.

Оценивание языковой модели

Более-менее стандартной функцией потерь, оптимизируемой при многоклассовой классификации, является кросс-энтропийная (cross entropy) функция потерь. Вообще, кросс-энтропия между вектором и предсказанным вектором записывается как . Она показывает близость распределений, задаваемый и .
При вычислении кросс-энтропии для многоклассовой классификации — это вероятность -ого класса, а — вектор, полученный с one-hot-encoding (т.е. битовый вектор, в котором единственная единица стоит в позиции, соответствующей номеру класса). Тогда при некотором .

Кросс-энтропийные потери целого предложения получаются усреднением значений по всем словам. Их можно записать так: . Видно, что это выражение соответствует тому, чего мы и хотим достичь: вероятность реального предложения из языка должна быть как можно выше.

Кроме этого, уже специфичной для языкового моделирования метрикой является перплексия (perplexity):

.

Чтобы понять её смысл, посмотрим на модель, предсказывающую слова из словаря равновероятно вне зависимости от контекста. Для неё , где N — размер словаря, а перплексия будет равна размеру словаря — N. Конечно, это совершенно глупая модель, но оглядываясь на неё, можно трактовать перплексию реальных моделей как уровень неоднозначности генерации слова.

Скажем, в модели с перплексией 100 выбор следующего слова также неоднозначен, как выбор из равномерного распределения среди 100 слов. И если такой перплексии удалось достичь на словаре в 100 000, получается, что удалось сократить эту неоднозначность на три порядка по сравнению с “глупой” моделью.

Реализация языковой модели для генерации стихов


Построение архитектуры сети

Вспомним теперь, что для нашей задачи языковая модель нужна для выбора наиболее подходящего следующего слова по уже сгенерированной последовательности. А из этого следует, что при предсказании никогда не встретится незнакомых слов (ну откуда им взяться). Поэтому число слов в словаре остается целиком в нашей власти, что позволяет регулировать размер получающейся модели. Таким образом, пришлось забыть о таких достижениях человечества, как символьные эмбеддинги для представления слов (почитать про них можно, например, здесь).

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

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

Очевидных варианта тут два: использовать many-to-many вариант (для каждого слова пытаться предсказать следующее) или же many-to-one (предсказывать слово по последовательности предшествующих слов).

Чтобы лучше понимать суть проблемы, посмотрим на картинку:

Здесь изображен many-to-many вариант со словарем, в котором не нашлось места слову “чернил”. Логичным шагом является подстановка вместо него специального токена <unk> — незнакомое слово. Проблема в том, что модель радостно выучивает, что вслед за любым словом может идти незнакомое слово. В итоге, выдаваемое ею распределение оказывается смещено в сторону именно этого незнакомого слова. Конечно, это легко решается: нужно всего лишь сэмплировать из распределение без этого токена, но всё равно остается ощущение, что полученная модель несколько кривовата.

Альтернативным вариантом является использование many-to-one архитектуры:

При этом приходится нарезать всевозможные цепочки слов из обучающей выборки — что приведет к заметному её разбуханию. Зато все цепочки, для которых следующее слов — неизвестное, мы сможем просто пропускать, полностью решая проблему с частым предсказанием <unk> токена.

Такая модель имела у нас следующие параметры (в терминах библиотеки keras):

Как видно, в неё включено 60000 + 1 слово: плюс первый токен это тот самый <unk>.

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

Полученная модель действительно что-то генерирует, но даже грамматическая согласованность получающихся предложений зачастую не впечатляет (про смысловую нагрузку и говорить нечего). Логичным следующим шагом является использование предобученных эмбеддингов для слов. Их добавление упрощает обучение модели, да и связи между словами, выученные на большом корпусе, могут придать осмысленность генерируемому тексту.

Основная проблема: для русского (в отличие от, например, английского) сложно найти хорошие словоформенные эмбеддинги. С имеющимися результат стал даже хуже.

Попробуем пошаманить немного с моделью. Недостаток сети, судя по всему — в слишком большом количестве параметров. Сеть просто-напросто не дообучается. Чтобы исправить это, следует поработать с входным и выходным слоями — самыми тяжелыми элементами модели.

Доработка входного слоя

Очевидно, имеет смысл сократить размерность входного слоя. Этого можно добиться, просто уменьшив размерность словоформенных эмебедингов — но интереснее пойти другим путём.

Вместо того, чтобы представлять слово одним индексом в высокоразмерном пространстве, добавим морфологическую разметку:

Каждое слово будем описывать парой: его лемма и грамматическое значение. Использование лемм вместо словоформ позволяет очень сильно сократить размер эмбеддингов: первым тридцати тысячам лемм соответствует несколько сотен тысяч различных слов. Таким образом, серьёзно уменьшив входной слой, мы ещё и увеличили словарный запас нашей модели.

Как видно из рисунка, лемма имеет приписанную к ней часть речи. Это сделано для того, чтобы можно было использовать уже предобученные эмбеддинги для лемм (например, от RusVectores). С другой стороны, эмбеддинги для тридцати тысяч лемм вполне можно обучить и с нуля, инициализируя их случайно.

Грамматическое значение мы представляли в формате Universal Dependencies, благо у меня как раз была под рукой модель, обученная для Диалога-2017.

При подаче грамматического значения на вход модели оно переводится в битовую маску: для каждой грамматической категории выделяются позиции по числу граммем в этой категории — плюс одна позиция для отсутствия данной категории в грамматическом значении (Undefined). Битовые вектора для всех категорий склеиваются в один большой вектор.

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

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

Доработка выходного слоя

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

Эта проблема легко исправляется двумя способами. Честный путь — сэмплировать именно слово из действительно реализуемых пар лемма + грамматическое значение (вероятностью этого слова, конечно, будет произведение вероятностей леммы и грамматического значения). Более быстрый альтернативный способ — это выбирать наиболее вероятное грамматическое значение среди возможных для сэмплированной леммы.

Кроме того, softmax-слой можно было заменить иерархическим softmax’ом или вообще утащить реализацию noise contrastive estimation из tensorflow. Но нам, с нашим размером словаря, оказалось достаточно и обыкновенного softmax. По крайней мере, вышеперечисленные ухищрения не принесли значительного прироста качества модели.

Итоговая модель

В итоге у нас получилась следующая модель:
Обучающие данные

До сих пор мы никак не обсудили важный вопрос — на чём учимся. Для обучения мы взяли большой кусок stihi.ru и добавили к нему морфологическую разметку. После этого отобрали длинные строки (не меньше пяти слов) и обучались на них.

Каждая строка рассматривалась как самостоятельная — таким образом мы боролись с тем, что соседние строки зачастую слабо связаны по смыслу (особенно на stihi.ru). Конечно, можно обучаться сразу на полном стихотворении, и это могло дать улучшение качества модели. Но мы решили, что перед нами стоит задача построить сеть, которая умеет писать грамматически связный текст, а для такой цели обучаться лишь на строках вполне достаточно.

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

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

Схематично предобработка текстов может быть изображена так:

Стрелки означают направление, в котором модель читает предложение.

Реализация генератора


Правила-фильтры

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

Метрические правила определяют последовательность ударных и безударных слогов в строке. Записываются они обычно в виде шаблона из плюсов и минусов: плюс означает ударный слог, а минусу соответствует безударный. Например, рассмотрим метрический шаблон + — + — + — + — (в котором можно заподозрить четырёхстопный хорей):


Генерация, как уже упоминалось, идёт справа налево — в направлении стрелок на картинке. Таким образом, после мглою фильтры запретят генерацию таких слов как метель (не там ударение) или ненастье (лишний слог). Если же в слове больше 2 слогов, оно проходит фильтр только тогда, когда ударный слог не попадает на “минус” в метрическом шаблоне.

Второй же тип правил — ограничения по рифме. Именно ради них мы генерируем стихотворения задом наперед. Фильтр применяется при генерации самого первого слова в строке (которое окажется последним после разворота). Если уже была сгенерирована строка, с которой должна рифмоваться данная, этот фильтр сразу отсечёт все нерифмующиеся слова.

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

У вас мог возникнуть вопрос: а откуда мы взяли ударения слов, и как мы определили какие слова рифмуются с какими? Для работы с ударениями мы взяли большой словарь и обучили на этом словаре классификатор, чтобы предсказывать ударения незнакомых слов (история, заслуживающая отдельной статьи). Рифмовка же определяется несложной эвристикой на основе расположения ударного слога и его буквенного состава.

Лучевой поиск

В результате работы фильтров вполне могло не остаться ни одного слова. Для решения этой проблемы мы делаем лучевой поиск (beam search), выбирая на каждом шаге вместо одного сразу N путей с наивысшими вероятностями.

Итого, входные параметры генератора — языковая модель, метрический шаблон, шаблон рифмы, N в лучевом поиске, параметры эвристики рифмовки. На выходе же имеем готовое стихотворение. В качестве языковой модели в этом же генераторе можно использовать и N-граммную модель. Система фильтров легко кастомизируется и дополняется.

Примеры стихов


Так толку мне теперь грустить
Что будет это прожито
Не суждено кружить в пути
Почувствовав боль бомжика

Затерялся где то на аллее
Где же ты мое воспоминанье
Я люблю тебя мои родные
Сколько лжи предательства и лести
Ничего другого и не надо
За грехи свои голосовые

Скучаю за твоим окном
И нежными эфирами
Люблю тебя своим теплом
Тебя стенографируя

Ссылки



Пост был написан совместно с Гусевым Ильёй. В проекте также принимали участие Ивашковская Елена, Карацапова Надежда и Матавина Полина.

Работа над генератором была проделана в рамках курса “Интеллектуальные системы” кафедры Компьютерной лингвистики ФИВТ МФТИ. Хотелось бы поблагодарить автора курса, Константина Анисимовича, за советы, которые он давал в процессе.

Большое спасибо atwice за помощь в вычитке статьи.

habr.com

Рифматор — поздравительных стихов генератор

Знакома ли вам такая ситуация: вы на дне рождении (свадьбе или другом торжественном мероприятии) у приятеля, родственника или коллеги, пришло время вам произнести поздравления, но мысли спутались в один плотный клубок, а вы нервничаете и никак не можете выдернуть оттуда хотя бы мало-мальски оригинальные и красивые слова. В итоге вы путаясь произнесёте что-то вроде: «Ну, здоровья там, счастья, конечно, любви…». И так сделает большая часть приглашённых. Неинтересно, правда? Неторжественно как-то.

Другое дело, если в честь именинника или молодожёнов вы зачитаете стих, практически оду, в которой будут упомянуты и хорошие качества поздравляемого, и приятные пожелания ему. Для таких случаев и было сделано приложение «Рифматор» — генератор стихов. Вам потребуется только ввести некоторые данные, а приложение за пару минут сочинит для вас вполне достойное произведение. Так что вы можете воспользоваться им даже в том случае, если на праздник вас пригласили неожиданно.

Пользоваться приложением удивительно просто. Для начала надо выбрать повод для поздравления: день рождения, юбилей, свадьба, выпускной, признание в любви, предложение руки и сердца и так далее.

Далее заполняем данные на поздравляемого:

— кого поздравляем: девушку или мужчину;
— стиль поздравления: хотите классическое стихотворение или что-нибудь похожее на творчество Маяковского, например? Нет проблем!

— Несколько характеристик: можно выбрать 3 позиции из множества представленных. Допустим, указать место работы, хобби, имя или, например, то, что у поздравляемого карие глаза;
— дополнительные параметры: поздравление от нескольких людей или от одного, обращение на «вы» или на «ты».

Всё. Нажимаем кнопку «Получить стихотворение» и с нетерпением ждём. Через 2 минуты «Рифматор» представит вам на выбор три варианта стихотворения. Получаются они весьма и весьма неплохими. Рифмы хорошие, встречаются очень даже нестандартные обороты. Конечно, с шедеврами именитых поэтов это не сравнить, но эти произведения куда лучше стандартных поздравленьиц, которые любят сейчас печатать в открытках. К тому же, в полученном стихе упоминаются личные качества поздравляемого, а это ему будет несомненно приятно.

После того как вы из трёх вариантов выбрали один стих, его можно непосредственно из приложения отправить по электронной почте, по SMS, в Facebook или ВКонтакте (оформив его в красивую рамочку) или сохранить в папку «Мои стихи», чтобы отправить позже или просто зачитать лично.

Кстати, если вы в приложении авторизуетесь при помощи одного или нескольких аккаунтов из соцсетей (Facebook, ВКонтакте, Одноклассники), то «Рифматор» будет своевременно напоминать вам о днях рождения друзей.

Приложение «Рифматор» бесплатное, также изначально вам даётся бесплатно одно стихотворение, чтобы вы могли оценить возможности «генератора поздравлений». А вот за последующие стихи нужно будет отдать некоторую небольшую сумму. Для этого прямо из приложения надо купить 3, 5 ил 10 стихов.

Пока «Рифматор» можно найти только в английском и украинском App Store, но вскоре он появится и в русском. Если вы уже попробовали это приложение, напишите нам о своих впечатлениях.

 

lifehacker.ru

Генератор текста из ключевых слов

Увеличение посещаемости сайта

Ключевые слова, описание сайта description

Раскрутка сайта

Привлечение посетителей на сайт

Оплата услуг сервиса регистрации в каталогах

Партнерская программа

Способы раскрутки сайта

Лучший способ раскрутки сайта

Секрет Google

Оптимизация сайта до его создания

Регистрация сайта в рейтингах

Повышение PR

Создание дорвеев

Повышение КПД партнерской программыe

Увеличение объема продаж через seo

Простой и чистый код страницы

Пару советов при продвижении

Методы получения ссылок

Первые шаги в продвижении сайта

Выбор низкочастотных ключевых слов

SEO термины

Сравнительный анализ программ для seo-специалистов, выполненных в виде расширения для браузера

Факторы, влияющие на позицию сайта в результате поиска

Что такое SEO

Зачем Вашей компании оптимизация?

Как работают поисковики

Определение релевантности и популярности

Информация, которой поисковики могут доверять

Ключевые слова и запросы

Как провести анализ ключевых слов

Таргетинг правильных слов

Длинный хвост поиска

URL, тэги title и метаданные

Дружественный для поиска текст

Традиционные вопросы и дублированный контент

Создание высококачественного контента

Приманка для ссылок

Увеличиваем популярность сайта

Создание сообщества

Пресс релизы и PR

Создание ссылок на основе сравнительного анализа

Создание индивидуальности и репутации

Высокочастотные слова и фразы

Овладение стратегией SEO

Количество против качества - SEO

Вэб-сайт и показатели

Работа с профессиональными оптимизаторами и оптимизаторами-самоучками

Баннерная кампания

Баннерные сети: формула успеха

Баннеры, как достичь высокого CTR

To click or not to click: вот в чем вопрос

Будет ли текстовая реклама столь же популярна и дальше?

Пишем контент для сайта

SEO-копирайтинг в вопросах и ответах

Копирайтер в Интернете

Краткий обзор основных бирж ссылок рунета

Эффективное создание и обмен баннеров

Ваш баннер

Баннерная система - не только для крутых. Не только для раскрутки.

Риски при поисковой оптимизации интернет-сайта

Обмен ссылками мертв? Последний апдейт Google

Обмен ссылками (обмен ссылками между сайтами и его преимущества)

Трафик от ссылающихся сайтов

Обмен ссылками - эффективный источник траффика

Обмен ссылками ссылочное ранжирование

Советы по работе с Google AdSense

Основы контекстной рекламы

SEO сервисы / SEO tools

Осторожно грибы! Или мифы о раскрутке web-сайтов.

Война с поисковыми роботами

Война с поисковыми роботами (Часть 2)

Оптимизация не-HTML-сайтов для поисковых серверов

Оптимизация сайта: проблема выбора

Поисковые панели предлагают больше, чем поиск

Дрессируем пауков

Списки поисковых систем: смогут ли пауки проиндексировать ваш web-сайт?

Все, все, все о Robots.txt

Ключевые фразы и сила модификаторов

Входные страницы (дорвеи, doorways)

Поисковая раскрутка

Яндекс: официальная информация

Как увеличить посещаемость с 0 до 3600 посетителей, Практические советы и рекомендации

Google предлагает документальный сервис

Золотое правило раскрутки сайта

Когда поисковая оптимизация сайта идет так как не надо?

Частые ошибки при поисковой оптимизации сайта. Как это избежать?

Несколько эффективных способов повышения ИЦ

Электронные рассылки

Анализ продвижения сайта

Имидж компании в Интернете - что это такое?

Особенности национальной интернет-статистики

Особенности национальной интернет-статистики. Часть 2

Отрицательные эмоции в рекламе

Продвижение с помощью PDF и копипастеров

Базовые основы поисковой оптимизации. Практические методы продвижения сайта

Советы по созданию и раскрутке сайта

E-mail подпись: мелочь, а приятно

Агрессивная раскрутка - путь в будущее!

ОТКРЫВАЕМ РАССЫЛКУ

Раскрутка информационного сайта. Сложно ли это?

Поднимаем индекс цитирования (ИЦ) хитрыми способами

Как поставить текстовую ссылку

Page Promoter 6.2: многовекторный подход к оптим

Правильная раскрутка или как я за месяц раскрутил сайт

О чем пишут в рассылках?

Какой домен более подходит для раскрутки вашего сайта?

Как привлечь посетителя на ваш сайт?

Какими способами добиться постоянного притока пользователей на Ваш сайт?

10 путей увеличения траффика

Раскрутка сайта: с чего начинать?

Сила специализированных сайтов - в разнообразии

Скажи что-нибудь хотя бы только

Ценообразование или почему Мерседес стоит дорого

Почему веб-зеваки ничего не стоят

Пять правил раскрутки сайта

Что выбрать: обмен ссылками или обмен баннерами?

Раскрутка - неочевидные аспекты

Немного о каталогах. Классификация

Реклама в интернете

Юзабилити сайта

Статистика сайта - ответы на вопросы и не только...

Подготовка сайта к раскрутке (15 шагов)

Page Promoter 7.6: действенная технология привлечения клиентов

СЕО сервисы

11 способов улучшить целевую страницу

Поисковое продвижение сайта - анализ конкуренции.

Секреты оптимизации сайтов

Оптимизация сайта - мета теги.

Обмен ссылками или работа над ссылочной популярностью.

Подбор ключевых запросов - составление семантического ядра.

Оптимизация структуры сайта.

Повышение уровня продаж

Планирование сайта

Программы для создания сайта

Macromedia Dreamweaver

Способы раскрутки

Обмен ссылками

Продвижение сайта. Профессиональные советы экспертов

Поисковая оптимизация – все дело в написании текстов

Односторонние ссылки: 5 основных стратегий

Как получить дополнительный поисковый трафик.

Как стать идеальным клиентом SEO

Как получить прибыль от туристического сайта

Путеводитель по обмену ссылками

Оптимизируй это!

Система SEO отмирает

Google направляет RSS в массы

11 причин провалов проектов по оптимизации сайтов

10 самых крупных ошибок, допускаемых при управлении рекламной кампании в Google AdWords

Реклама в поисковых системах набирает обороты

Online - реклама укрепляет свои позиции

Конверсия: маркетинг плюс контент

Web аналитика и составляющие online-брендинга

Новые исследования поискового поведения пользователей

Подсказки по работе в системе Google Adsense

Поисковая оптимизация для подкастов

Показы рекламных ссылок увеличились на 16%

Кто такой неоп. Новые оптимизаторы. Задачи SEO - оптимизатора - продвижение сайта

Поисковая оптимизация: от внешнего к внутреннему

Не цепляйтесь за запросы!

Ключевые слова - теория

Выбор ключевых слов для Вашего сайта

Ссылочное ранжирование

Оптимизация сайта для каталогов

Как попасть в dmoz

Правильная регистрация в каталогах

PageRank: Больше ссылок хороших и важных

Link Popularity для чайников

Учимся получать жирные бэки: информер - классная тема для этого

12 советов по написанию эффективных объявлений для Google AdWords

Секреты индексации динамических страниц в поисковых системах

Все о тэге Title

Контакты

Разместить ссылку - добавить ссылку

Пути повышения Link Popularity

Добро пожаловать на интернет – биржу eTXT.ru

Как повысить свой доход в Liex?

Наши работы - создание и раскрутка сайтов

Получение обратных ссылок

Как получить больше трафика

Как увеличить доход в Sape.ru

Система статистики - статистика поисковых запросов

Алгоритм ранжирования сайтов в поисковой системе Google

Оптимизация работы с MySQL

Раскрутка сайта недорого

Увеличение конверсии

Раскрутка сайтов: три секрета для начинающих оптимизаторов

Цены на регистрацию доменных имен в Украине

SEO - CMS легкий движек оптимизированный для раскрутки сайтов

Сайт визитка на SEO CMS - 500 грн

Создание сайта визитки от 500 грн

Заказать сайт визитку можно всего за 500 грн

Быстро можем создать сайт визитку (500 грн)

Нужно сделать сайт визитку? За 500 грн и всего за день.

Сайт визитка недорого, всего 500 грн

Разработка сайта визитки от 500 грн

Изготовление сайта визитки недорого (от 500 грн)

Сайт визитка цена 500 грн (хостинг на год бесплатно)

CMS для сайта визитки - лучший выбор SEO CMS

Сайт визитка стоимость 500 грн

Сайт визитка дешево, от 500 грн за 2 дня

Дешевый сайт визитка - 500 грн

Сайт визитка под ключ за 2 дня 500 грн

Простой сайт визитка всего за 500 грн

Cайт визитка на joomla? А может лучше на SEO CMS?

SEO CMS - движок для сайта визитки

Сколько стоит сайт визитка? У нас он стоит от 500 грн.

Купить сайт визитку всего за 500 грн

Нужен сайт визитка? Сайты визитки от 500 грн

Готовый сайт визитка недорого

Заказать сайт визитку недорого от 500 грн

Лучшие сайты визитки на SEO CMS

Стоимость создания сайта визитки от 500 грн

Хостинг бесплатно, сайт визитка от 500 грн

Web сайт визитка от 500 грн

Краткое описание админки сайта на SEO - CMS (CMF)

Как продвинуть сайт по запросу

Описание сервиса - Генератор текста

Купить готовый сайт недорого

Сайт под фильтром? Знакомьтесь, google фильтры.

Акция - Сайт за 500 грн

Продвижение сайта в поисковых системах

Как эффективно оптимизировать несколько ключевых слов на одной странице?

Что такое PR (Page Rank)

Что такое тИЦ

Сервис контекстного обмена трафиком

как поднять позицию сайта в поисковике?

раскрутка

как раскрутить сайт бесплатно?

Регистрация в Каталогах

как раскрутить сайт бесплатно

поисковая оптимизация

как зарегистрировать сайт в google?

альтернативные названия для сайта

статистика

google

сайт визитка

бесплатная регистрация в каталогах

создать сайт

раскрутка сайта

создание сайта

создать сайт бесплатно

программы для создания сайта

как зарегистрировать сайт в поисковых системах?

как зарегистрировать сайт в google

реклама

добавить сайт в поисковики

как добавить сайт в поисковики?

узнать свое будущее бесплатно и регестраціи

скачать поисковую систему google

Анализатор плотности ключевых слов

раскрутка сайта бесплатно

работа в интернете

регистрация сайта в каталогах

каталоги сайтов

бесплатно разместить ссылку своего сайта в поиковике Google

регистрация

ключевые слова

seo раскрутка

добавить сайт

Основы веб-маркетинга или как создать прибыльный сайт

Как придумать адрес сайта

как составить альтернативные названия

регистрация сайта

каталоги

как раскрутить сайт самому

регистрация сайта в поисковиках

программы

бизнес

контакты

оптимизация

каталог сайтов

создать свой сайт бесплатно

регистрация сайта в каталогах бесплатно

раскрутка сайтов

раскрутка веб сайта

адрес сайта

бесплатно раскрутить сайт

создание сайтов

што такое индекс

визитка

поисковое продвижение сайта

FrontPage

поисковые системы

как раскрутить сайт

обмен ссылками

регистрация сайта в google

html-редактор

продвижение сайта в поисковых системах

как поднять позицию сайта в поисковике

бесплатная регистрации сайтов

как бесплатно поднять сайт в поисковиках

раскрутка сайта в поисковиках

hfcrhenrf

добавить ссылку

секреты раскрутки сайта

HomeSite

индексировать сайт

google adsense

правила раскрутки сайтов

как бесплатно раскрутить сайт?

раскрутить сайт бесплатно

программа регистрации в поисковиках

автоматический подбор ключевых слов сайта

программа регистрации сайта в каталогах скачать

программа регистрации сайта в каталогах

интернет раскрутка

Page Promoter

раскрутка сайтов бесплатно

методы повышения рейтинга сайта в поисковиках

бесплатная регистрация сайта в поисковиках

бесплатная реклама сайта

практические советы как увеличить продажи

все для раскрутки сайта

автоматическая регистрация в каталогах

увеличить посещаемость сайта форум

online регистратор в каталогах

регистрация сайта бесплатно

раскрутка бесплатно

регистрация в поисковых системах

программа для регистрации сайтов

Как поставить текстовую ссылку

hfcrhenrf cfqnjd

5 этапов поисковой оптимизации сайта (Для начинающих)

раскрутка google

продвижение сайтов в поисковых системах

продвижение веб сайта

раскрутка интернет сайта

раскрутка оптимизация

классификация индексации сайта в поисковых системах

геотаргетинг

бесплатная раскрутка ucoz

web продвижение сайта раскрутка сайтов

joomla раскрутка сайта

продвижение сайта раскрутка методы

веб студия раскрутки сайтов

как поднять ИЦ на своем сайте

как узнать популярность слова на яндексе

Создать свой сайт

рейтинг сайтов

каталог статей

повышение уровня продаж

бесплатно создать сайт

разместить бесплатно ссылку

как самому раскрутить сайт

seo оптимизация для чайников

как зарегистрировать сайт в каталогах

продвижение сайта бесплатно

форум раскрутки

секреты раскрутки форума

Регистрация сайта в поисковой системе

Google PR как добавить сайт

бесплатное создание сайта online

Платная раскрутка

программа для регистрации сайта в поисковых

свой сайт

каталог

бесплатное продвижение сайта

поисковые сервера наиболее используемые за неделю

игра ну, погоди

оптимизация web сайта

seo продвижение

поисковая раскрутка сайта

уникальная раскрутка сайта

услуги раскрутка сайта

раскрутка в поисковиках

самостоятельная раскрутка сайта

требуется раскрутка сайта

стратегии продвижение сайта раскрутка

супер раскрутка сайта

как продвигать сайт на поисковике google

пути увеличения продаж в магазине

зарегестрировать сайт бесплатно

где брать контент

мастер для подбора альтернативного названия сайту

наши работы

информер индексация рейтинг сайта

Эффективны копирайтинг

agent

как зарегистрировать сайт в поисковиках яндекс

для чего на сайте реклама google

украинские информационніе технологии

google adwords

программа создание сайта скачать бесплатно

как зарегистрировать свой сайт в google

программы для создания сайтов

как зарегестрировать сайт в поисковиках бесплатно

yandex

rambler

Структура сайта

цветовая палитра

добавить сайт в каталог

поисковые системы продвижение

продвижение в поисковых системах

интернет продвижение

продвижение интернет сайта

оптимизация и продвижение сайтов

Узнать позицию сайта в поисковиках по запросу

seo термины

помогите поднять индекс сайта

действующий способ привлечь посетителей

обмен уникальными посетителями по ip

анализатор ключевых слов

whois

продвижение сайта в интернете

продвижение раскрутка сайта

раскрутка ucoz

маркетинг раскрутка сайта

мастер план по раскрутке сайта

новая раскрутка сайта

принцип раскрутки сайта

визитки раскрутка сайта

аналитика раскрутки сайта

стратегия раскрутка сайта

особенности продвижение сайта раскрутка

купить сайт раскрутка сайта

раскрутка сайта яндекс недорого

начать раскрутка сайтов

дёшево раскрутка сайта продвижение

description раскрутка сайта

методы раскрутки интернет магазина

новости раскрутки сайтов

пример раскрутки магазина

как создать безплатный сайт

индексация в yahoo

ucoz поисковик

бесплатные ссылки для раскрутки в google

где создать сайт

портал

регистрация для сайту

raskrutka

описание програм по созданию сайтов

регистрация яндекс

Как увеличить посещаемость с 0 до 3600 посетителей, Практические советы и рекомендации

как составить Альтернативные названия сайта

DHTML

советы Google Adsense

aport

проверить геопринадлежность IP адреса сервера

узнать своё будущее

аукцион цитируемости сайта

анализ мета тегов яндексом

оптимизация гугл

оптимизация google

раскрутка в интернете

оптимизировать сайт

продвижение оптимизация

продвижение web сайтов

продвинуть сайт

раскрутка web

продвижение

разработка раскрутка сайтов

seo оптимизация сайта

seo оптимизация

проверка посещаемости сайта просто напишите домен

поисковая раскрутка оплата за посетителя

онлайн подбор цвета

поисковая оптимизация сайта

продвижение сайта в поисковиках

оптимизация сайта для поисковых систем

оптимизация сайта под поисковые системы

продвижение сайтов недорого

контекстная реклама сайта

поисковая раскрутка

оптимизация раскрутка сайта

раскрутка создание

раскрутка реклама

создание сайта раскрутка

раскрутка сайта реклама

программы раскрутки

раскрутка сайтов продвижение реклама сайта

контекстная раскрутка сайта

раскрутка сайта помощь

раскрутка контекстной рекламой

раскрутка сайта контекстная реклама

поисковое продвижение раскрутка

поисковое продвижение сайта раскрутка

раскрутка скачать

системы раскрутки

веб раскрутка

скачать раскрутка сайта

раскрутка дизайн

стоимость раскрутки

раскрутка магазина

seo раскрутка сайтов

раскрутка форума

система раскрутки сайтов

раскрутка яндекс

раскрутка web сайта

раскрутка сайта стоимость

раскрутка группы

поисковая раскрутка оптимизация

сайт дизайн раскрутка

эффективная раскрутка

поисковая система раскрутка

раскрутка недорого

раскрутка цены

бесплатная программа раскрутки

эффективная раскрутка сайта

поисковая оптимизация сайтов раскрутка

раскрутка сайта яндекс

качественная раскрутка

раскрутка сайта недорого

способы раскрутки

добавить раскрутке

услуги раскрутка сайта москва

компания раскрутка

раскрутка сайта в поисковых системах

скачать программы раскрутки

раскрутка yandex

качественная раскрутка сайта

качественно раскрутка сайта

продвижение раскрутка оптимизация

раскрутка сайта yandex

раскрутка сайта ucoz

раскрутка блога

раскрутка ссылками

раскрутка сайт магазина

seo продвижение раскрутка

заказать раскрутку

способы раскрутки сайта

платная раскрутка сайтов

раскрутка сайта цена

раскрутка книги

раскрутка интернет магазина

forum раскрутка

раскрутка сайтов продвижение seo

заказать раскрутку сайта

раскрутка сайта анализ

раскрутка статьями

план раскрутки сайта

оптимизация сайта разработка раскрутка

раскрутка одесса

стоимость раскрутки продвижения

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

раскрутка сайта студия

продвижение сайта раскрутка оптимизация

активная раскрутка сайтов

раскрутка дешево

создание раскрутка продвижение сайт

yandex платная раскрутка

раскрутка сайта в интернете

платная раскрутка сайта yandex

автоматическая раскрутка

раскрутка бизнеса

сайт компании раскрутка

скачать программу для раскрутки сайта

разработка сайта раскрутка создание сайтов

раскрутка rambler

комплексная раскрутка

seo анализ сайта раскрутка

раскрутка продвижение интернет

раскрутка проекта

форум раскрутка сайтов

мастер план по раскрутке

оптимизация сайта раскрутка рекламы

раскрутка сайта статьи

комплексная раскрутка сайта

раскрутка фирмы

лучшая раскрутка сайта

дизайн сайта разработка раскрутка

белая раскрутка

продвижение сайта раскрутка интернет

раскрутка сайта стоит

раскрутка сайта yabb

создание сайтов раскрутка дизайн сайта

технология раскрутки сайта

рамблер раскрутка

раскрутка сайта ipb

дорогая раскрутка сайта

создание раскрутка интернет сайта

раскрутка сайта рамблер

создание веб сайтов раскрутка

раскрутка сайта комплекс

рекламная раскрутка

методы раскрутки сайта

раскрутка ресторана

поисковая раскрутка яндекс

сколько раскрутка сайта

поисковая раскрутка сайта яндекс

раскрутка создание web сайтов

раскрутка сайта предложение

раскрутка сайта регистрация

раскрутка домена

книги раскрутка сайта

курс раскрутки сайтов

способы раскрутки сайта стоимость показатели

раскрутка оптимизация seo

раскрутка сайта rambler

оптимизация сайта услуги раскрутка

раскрутками сайтов forum

раскрутка сайтов портфолио

разработка сайта продвижение раскрутка

раскрутка сайта правила

раскрутка веб сайта оптимизация

разработка сайта раскрутка веб

раскрутка сайтов одесса

поисковая оптимизация сайта раскрутка поисковики

эффективная раскрутка сайтов поисковики

заказать оптимизация сайтов раскрутка сайта

раскрутка бренда

качественная раскрутка сайтов оптимизация сайта

раскрутка интернет реклама

раскрутка сайтов семинар

раскрутка сайта дешево

веб дизайн раскрутка

система активной раскрутки

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

нужна раскрутка

seo оптимизация раскрутка сайта

раскрутка сайта коммерческое

раскрутка туристических сайтов

бизнес раскрутка сайтов

разработка раскрутка сайта корпоративного

пример раскрутки

сколько стоит раскрутка сайта

раскрутка сайта посетители

раскрутка сервера

лидеры раскрутка сайта

продвижение сайта заказа

site-submit.com.ua

Генератор рифм онлайн — простой и удобный [ОБЗОР]

Я поэт, зовусь Незнайка, от меня Вам… бесплатный генератор рифм онлайн!

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

Витя буквально дышал рифмами. У него была своя игра, в которую он заставлял играть всех его окружающих — мы задаём тему, а он на время, сочиняет стихотворение. Это было просто потрясающе.


Бесплатный генератор рифм онлайн

Безусловно это настоящий, прирождённый талант — простому человеку не даны такие способности… но на маленький шажок приблизиться к гениям в 21 веке помогают специальные онлайн сервисы.

Одним из лучших таких сервисов является генератор рифм онлайн — Rifme.net

(Почему рифмы нет, если она там как раз есть?)

На странице этого помощника будущих поэтов нужно всего-лишь вписать в рамку слово, к которому надо найти рифму…

…и нажать кнопочку «Найти рифмы»…

Это конечно же не все рифмы к слову «лето» — просто в скриншот все не влезли. У авторов сервиса огромная база слов собрана.



Читайте также на сайте:

...

...

После списка рифм выводятся также синонимы, анаграммы и другие формы слова…

Рифмы к именам

Ещё сервис умеет подбирать рифмы к именам онлайн…

Такая функция обязательно поможет в самостоятельном написании стишка-поздравления.

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

ПОЛЕЗНОЕ ВИДЕО

...

...

Я только обозреваю программы! Любые претензии - к их производителям!

Рекомендую ещё посмотреть обзоры...

Реальный "Ускоритель компьютера"

Программа заметно ускорит любой компьютер за счет мощной очистки от цифрового мусора, лишних "хвостов" удаленного софта, умной оптимизации реестра Windows и автозагрузки...


  • Бесплатный тюнинг авто онлайн

    Преимущества сервиса - русский язык, 3D-просмотр, множество марок и моделей автомобилей, множество категорий и элементов тюнинга авто, распечатка...



  • Google развалился!?

    Google развалился - шутка-юмора от веб-мастеров. Собрались ребята и решили, что грустно и уныло всё в интернете. Надо взбодрить интернет-сообщество.


  • Комментарии публикуются после модерации.

    ^Наверх^


optimakomp.ru


Смотрите также



© 2011-
www.mirstiha.ru
Карта сайта, XML.