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