У меня есть своя группа «Вконтакте», и мне стало интересно, можно ли спрогнозировать, будет публикация успешной или нет. Я решил написать программу, которая бы автоматически брала текст поста, проверяла его с помощью нейронной сети и публиковала только в том случае, если вероятность получить одобрение аудитории достаточно высока. Разрабатывать мы будем на Qt5 и используем Python и Keras для обучения нейросети.

Для начала в проекте на Qt в файле .pro подключим библиотеку network, добавив строку QT += network. Чтобы разместить пост на стене группы, выполняем код:

QString cit = "Hello!";
QUrl apiUrl;
QString str = "https://api.vkontakte.ru/method/wall.post?owner_id=-78329950&message=" + cit + "&from_group=1&access_token=abcdef&v=5.73";
apiUrl.setUrl(str);
QByteArray requestString = "";

QNetworkRequest request(apiUrl);
request.setRawHeader("Content-Type", "application/octet-stream");

QNetworkAccessManager manager_vk;
connect(&manager_vk, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotV(QNetworkReply*)));
manager_vk.post(request, requestString);

Как видишь, мы отправляем запрос POST с адресом в переменной str. Используем метод VK API wall.post, чтобы разместить пост на стене группы. Параметр owner_id должен быть равен номеру группы, но записан со знаком минус; параметр message содержит текст поста; from_group — указатель, что пост будет размещен от имени сообщества, он равен единице; access_token — токен доступа.

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

void MainWindow::slotV(QNetworkReply* r)
{
    qDebug() << QString::fromUtf8(r->readAll());
}

В консоли ты увидишь результат запроса: ошибку, если что-то пойдет не так, или сообщение с номером опубликованного поста.

 

Собираем базу данных для обучения нейронной сети

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

Чтобы извлечь каждый пост, отправляем запрос GET:

QString str = "https://api.vk.com/method/wall.getById?posts=-78329950_" + QString::number(cnt) + "&v=5.84&access_token=abcdef";

Мы используем метод VK API wall.getById: извлекаем пост со стены группы по его номеру.

Параметр posts содержит уникальный идентификатор поста (здесь — -78329950_123), который состоит из идентификатора группы со знаком минус и порядкового номера поста, разделенных знаком _. Порядковый номер поста содержится в переменной cnt. Параметр access_token — это токен доступа к группе.

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

    номер поста #1
    текст поста #1
    количество лайков #1
    номер поста #2
    текст поста #2
    количество лайков #2
    ...
    номер поста #n
    текст поста #n
    количество лайков #n

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

 

Keras

Нам понадобится Keras — библиотека для работы с нейронными сетями.

INFO

Есть замечательная книга — «Глубокое обучение на Python» Франсуа Шолле. По ней ты можешь освоить теорию, ознакомиться с примерами решения задач от самых простых до весьма сложных, таких как сверточные сети и генерация изображений.

Для начала выполним ряд стандартных действий и установим Python:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python-pip python-dev python-setuptools

Затем установим пакеты научных вычислений для Python:

$ sudo apt-get install build-essential cmake git unzip pkg-config libopenblas-dev liblapack-dev
$ sudo apt-get install python-numpy python-scipy python-matplotlib python-yaml
$ sudo apt-get install libhdf5-serial-dev python-h5py

Поставим TensorFlow:

$ sudo pip install tensorflow

И саму библиотеку Keras:

$ sudo pip install keras

Можно установить Keras и из репозитория на GitHub. В этом случае ты получишь доступ к папке keras/examples с примерами сценариев.

$ git clone https://github.com/fchollet/keras
$ cd keras
$ sudo python setup.py install

Чтобы проверить, что все установилось, попробуй запустить сценарий Keras.

python examples/mnist_cnn.py

Для выполнения этого примера может потребоваться несколько минут.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    3 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии