Web事業部実績紹介
Web事業部実績紹介
2017.06.09
#4
とにかく動け!世界のAPIからこんにちは。

AIさえグッと身近に。文章予測AIのAPIでブログを書いてみた。

まさくに

こんにちはー!
近頃コードよりもブログを書いている!
バックエンドエンジニア!
まさくにだー!

最近ブログ書きすぎじゃないですか? もうマジアレだから。これから AI に書かせるから。ブログ。LIG ブログ。もう知らん。API 使ってやるから。もうそれで書くから。

 

とにかく実行してみる

利用したAPI

株式会社リクルートテクノロジーズ社の A3RT プロジェクト で公開されている「 Text Suggest API 」を使用させていただきます。

「 Text Suggest API 」は、ひとつのテキストを与えると、学習済みの言語モデルから それに続くと予測されるセンテンスなどを返してくれる API です。

日本語にも対応していて、まさかの無料。あと制限も特に書かれていないんですけど、そんなうまい話があるんでしょうか。信じます。

今回は API からセンテンスの取得を繰り返して文章を作ります。

 

APIへ接続した環境

* macOS Sierra: 10.12.3
* 今回の言語は ruby を使用
* iTerm2 で実行

$ ruby -v
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin15]

 

用意した数少ないコード

今回も github へコードをアップしてありますので、そちらもご覧ください。

require 'net/http'
require 'json'

seed = "こんにちは、バックエンドエンジニアのまさくにです。"

def get_suggestions(seed)

  params = Hash.new
  params.store("apikey", ENV['TEXT_SUGGEST_API_KEY'])
  params.store("previous_description", seed)

  uri = URI.parse('https://api.a3rt.recruit-tech.co.jp/text_suggest/v1/predict')
  uri.query = URI.encode_www_form(params)

  begin
    response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
      http.get(uri.request_uri)
    end

    if not response.is_a? Net::HTTPSuccess
      return nil
    end
  rescue
    return nil
  end

  return response.body
end

20.times do
  puts seed
  response = get_suggestions(seed)

  if response.nil?
    exit
  end

  json = JSON::parse(response)

  if not json["message"] == "ok"
    exit
  end

  seed = json["suggestion"].sample
  sleep 1 # 祈り
end

実行してみる

$ export TEXT_SUGGEST_API_KEY="xxxxx" # ACCESS KEY(後述)
$ ruby touch_text_suggest.rb # 実行

 

実行結果

こんにちは、バックエンドエンジニアのまさくにです。
白い壁に、白いソファーが2つあります。
白い白い便器の横に、赤い花が飾られています。
白い便器が並んだ室内には、1台の車が停車しています。
白い壁の部屋の中に、洋式便器があります。
トイレの上には白いカーテンが掛けられている。
便器の横には洗面台が置かれています。
トイレの便座がついた部屋のところです。
洋式便器と洗面所が並んでいます。
バスルームがは、奥には壁があります。
トイレと洋式便座が立っています。
白いバスルームにはシャワーがあります。
洗面所には白い鏡が開いています。
白い壁の壁には白い時計塔が付けられています。
白い建物の横の線路に赤い電車があります。
駅のホームに赤い電車が止まっています。
列車が展示されていて、その横に人が座っています。
電車が停まっているところがあります。
駅のホームには白と青の電車が停車しています。
駅のホームに、二人の選手が座っています。

 
サイコパス感がすげぇ。

なんでそんな便器の話しちゃうんだ。

 

実行するための周辺情報

ソースコードをご覧いただければ一目瞭然なのですが、「 Text Suggest API 」は API KEY を渡すだけで実行ができます。

公式ページ をご覧いただき、下段の「 API KEY 発行」からメールアドレスを登録すればAPI KEYをメールで教えてもらえますので、その値を環境変数に渡しましょう。

カンタンです。

すごいな! リクルートさん!

 

まとめ

どうですか?

うーん、人工知能が書いた文章がそのまま新聞に載ったり、星新一賞の一次審査を通過したりと、飛躍的に学習を重ねているウワサが絶えませんが、まだ公開されている API ではブログをおまかせできないようです。

良かったのか悪かったのか……。

今回は無理やり文章を推測してもらいましたが、もう少し単語や名詞の扱いを考えて渡せばさらに意味のある情報が引き出せるでしょう。

いずれにせよ、API は恐ろしく簡単に使用することができました。このAPIの公開目的には性能向上が含まれているようなので、本当に高い価値をもった文章をAPIで取得できる日も近いのかもしれません。

アイディア次第でさまざまなものに役立てられるでしょう。

 

おまけ

うははははは。

なんか面白くなっちゃったので、いくつかのパターンで試してみました。

絵画を描画する AI でも思ったのですが、面白いのが AI は「色」をよく見ているということ。実は AI が見ているカラフルな世界が本当の姿なのかもしれないな、なんて思いました。

 

大予言

1999年7か月、
白いバスと、道路標識が停まっています。
建物の前に一匹の馬が座っています。
白い毛の犬が黒い白い皿のうえに乗っています。

もともと怖いものはやはり怖い。

 

Life is good

Life is good.
と猫が一匹います。
犬が椅子に立っています。
白いお皿の上に、猫が座っています。

なぜか皿の上に動物が乗る。

 

ただでさえ天使

ただでさえ天使の
ようなものがある。
テーブルに置かれた赤い皿に、料理が並んでいます。
テーブルの上には白いお皿やお肉とチーズが乗った皿があります。

「ようなもの」とは。

 

占い

さて今週のてんびん座の運勢は?
が見えます。
白い壁があるリビングに一匹の猫がいます。
部屋の窓から男性の姿が見えます。

"見えている"らしい。

 

お気づきだろうか

お気づきだろうか。
男性が二頭の馬に乗って歩いてきています。
草原を一頭の牛が歩いています。
二頭の象が木から水を飲んでいます。

物理的条件を軽く無視する。

 
それではまた! バックエンドエンジニアのまさくにでした!