2016年6月11日土曜日

人工無脳ReudyをTwitterで動かしてみる

人工無脳という言葉をご存知だろうか? 今をときめく人工知能ではなく人工無脳である。コンピュータとの会話を目的とするプログラムだが、コンピュータが言葉を理解しているわけではないので、調子パズレの音楽のようにお馬鹿な会話になってしまうものだ。

実は今、人工知能についていくつかの本を読んでいる。本当にマスコミを騒がせているような事が起きるのかを知っておくのが目的だ。その途中で、人工無脳の話が出てきて、昔夢中になったのを思い出したのが、本稿執筆の理由だ。

無謀にも筆者はTwitterを利用した人工無脳を作りたいと考えた。りんなほど有名な存在(それにりんなは人工知能だ。無脳にしか思えないけど…)ではなくても、結構な数の無脳さんが、Twitterには生息しているらしい。

いざ作るとなると、人が作ったものをそのまま動かすのでは面白くない。だが、残念ながらブームを過ぎているようで資料が少ない。その中で見つけたのが人工無脳Reudyである。試し斬りの意味で動かしてみようと思った。

だが、Reudy19というファイルをダウンロード、説明通りに進めようとして、すぐ、つまずいた。最終的には、スクリプトの一部を書き換えないと動かないことが判明するのだが、誰か物好きがいないとも限らないので、動作させるための手順をまとめておく。

  1. 必要なRubyライブラリの導入(OSXではsudoが必要)
    sudo gem install rubytter highline
    
  2. Twitterアプリの登録
    https://apps.twitter.com/app/newを開いてTwitterアプリを登録する。
    1. アプリ名称(Name)と説明(Description)は日本語でOK。
    2. Websiteは取り敢えずアプリを動かすTwitterアカウントのURLを記入。
    3. Developer Agreementの合意をチェックして、Create Your Twitter Applicationボタンを押す。
    4. PermissionsタブでRead and Writeのラジオボタンがオンになっているのを確認してから、Keys and Access tokensタブを開き、
      • Consumer Key (API Key)
      • Consumer Secret (API Secret)
      の2つのキーを控える。
  3. Consumer key/secretの記入
    記入先はtwitter_reudy.rbではなく、publicというディレクトリにあるsetting.ymlである。記入にはOSX標準のテキストエディットを用いるのが良いと思われる。またはターミナル経由でnanoを使う。AdobeのBracketsでも良い。
  4. Scriptの改造
    配布されているスクリプト通りでは、認証をクリアしてもRubytter::APIErrorが連発する。twitter_reudy.rbを開いて以下の改造を行う。

    • Twitter認証のURLを変更
      - cons = OAuth::Consumer.new(key, secret, :site => "http://api.twitter.com"
      + cons = OAuth::Consumer.new(key, secret, :site => "https://api.twitter.com"
      
    • since_id初期値の変更
      (何故ループ内で毎回-1にセットするのか不明。-1だと"Rubytter::APIError"になる。1で正しいかも未検証)
      -      since_id = -1
      +      since_id = 1
      
    • タイムライン取得方法変更(friends_timelineは使えない。"Rubytter::APIError"になる)
      -      client.r.friends_timeline(since_id: since_id).each do |status|
      +      client.r.home_timeline({:since_id => since_id}).each do |status|
      

    以上の変更の差分ファイルをこちらにアップロードした。使われる方があればどうぞ!

    cd Reudy19
    patch -p1 < twitter_reudy.diff
    
  5. スクリプトを動かしてみる。
    スクリプトは以下のコマンドで実行することができる。
    cd Reudy19
    ruby twitter_reudy.rb
    
    初回起動時のみ、URLが表示される。アプリ登録したTwitterアカウントでログインしたブラウザにコピペしてPINを取得する。それを入力すると動作開始する。

以上。

2016.6.12改訂
PIN認証で読み取り専用になるという誤記の訂正。それに伴う内容の変更、追記。タイトル変更