DMM API・MeCab・マルコフ連鎖でAV作品の紹介文を自動生成

More than 1 year has passed since last update.

電子書籍「人工知能ポルノ」出版


人工知能ポルノ: コンピュータが書いたエロい文章

本記事の生成結果を電子書籍にしました。200~400文字程度の文章を100編掲載しています。 ご興味のある方はどうぞ!

自動生成してえ

こちらの記事に感銘を受けた。自分も何かやってみたいと思ったが、DeepLearningを用いての自動生成はハードルが高く、まずはマルコフ連鎖を使って自動生成してみようと思った。
【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる

そうだ!AVだ! :laughing:

自動生成にはデータが必要。自分はアニメがわからんので、エヴァンゲリオンの真似をしてもテンションがあがらない。自分のテンションがあがるものは?...すぐ思いついたのがAVの紹介文だ。

AV紹介文のメリット

  • 120字程度でデータが多そう?
    • タイトルと比べれば生成する文にバリエーションが出そう
  • 人を興奮させようという熱意ある文章 :chart_with_upwards_trend:
    • 無機質でないので楽しそう
  • DMM APIで取得できる
    • 2016年3月にver3.0が出た
      • 何かしら改良されてるはずなので開発が以前より容易かも

DMM APIを登録

https://affiliate.dmm.com/api/guide/
とういうことで早速始める。こちらの利用ガイドを参考に。

  • DMMアフィリエイト登録
    • アフィリエイトID発行
  • API IDを取得

作品紹介文を取得

こちらを参考にした。DMMのAPIはver3.0になっているのでそこは修正する必要がある。
http://akms.hateblo.jp/entry/2013/05/24/234703

コード

1000作品の紹介文を取得してero.txtに書き込んだ。

# -*- coding: utf-8 -*-

require 'open-uri'
require 'rexml/document'

def getURL(offsetNum)
    url = "https://api.dmm.com/affiliate/v3/ItemList?"
    queries = []

    params = {
      "api_id"       => 'YOUR_API_ID',
      "affiliate_id" => 'YOUR_AFFILIATE_ID',
      "site"         => 'DMM.R18',
      "service"      => 'digital',
      "floor"        => 'videoa',
      "sort"         => 'rank',
      "offset"       => offsetNum,
      "hits"         => 100,
      "output"       => "xml"
    }

    params.each_pair do |key,value|
      queries.push("#{key}=#{value}")
    end

    url += queries.join("&")

    return url

end

# 書き込み用テキストファイルを開く
File.open("ero.txt", "w") do |file|

    # 取得したいoffsetの回数だけLoop
    10.times do
        url = getURL(num)
        res = open(url)
        REXML::Document.new(res).elements.each("xml/result/items/item") do |element|
            # 作品紹介文を書き込む
            file.puts element.elements['comment'].text
        end
    end
end

マルコフ連鎖を行う

MeCabを準備

いろいろなやり方があると思うけど、下の記事を読んで設定した。
http://qiita.com/grachro/items/4fbc9bf8174c5abb7bdd

マルコフ連鎖のスクリプト準備

こちらのスクリプトを参考にした。
https://github.com/o-tomox/TextGenerator

自分はPython3系で実行したので、上のスクリプトを2系から3系の書き方に修正した。
https://gist.github.com/naoyashiga/4dfaa7e2a5222a9cadd9

紹介文を自動生成

紹介文を取得

$ ruby dmm.rb

dbに書き込む

$ python PrepareChain.py

自動生成

$ python GenerateText.py

出力結果

出力できた :sunglasses:

おっと内容が卑猥すぎたようだ!残念ながらここでは公開できない :weary:

気になる諸君はぜひ自分でやってみよう!

考察と展望

  • Deep Learningでもやってみたい
  • 生成文章量を調節できるようにしたい
  • もっと大量の文章をもとに生成してみたい

追記

ニューラルネットワークを用いてやってみました。
DMM API、char-rnn(リカレントニューラルネットワーク)でAV作品の紹介文を自動生成 - not good but great