つくりかけ

ログ学習タイプの無脳の場合、
発言生成の時に「どのログを使うのか」が鍵になるんだと思う。
そこで、発言する状況に応じてどのログから発言生成するかを選択するような無脳をつくろうと思った。

でも、その「状況に応じて」の部分がまだできてない。

そもそも、「状況を理解する」っていうのをどう実現するのかがムツカシイ。

近況

陰鬱とした日々を過ごして早幾月か経ちました。

4月某日

環境から改善しようと思い、部屋の掃除をしてみる。
ひとり黙々とやってみても、途中で心が折れてしまうため
Ustで中継し、「誰かに見られている緊張感」で最後まで掃除しようとがんばってみました。
この方法が功を奏したのか、半日ほどかけて
「まぁ、まともか」という水準まで部屋を片付けることができました。

4月某日

再び気力がでなくなり、通院する予定が
病院へ行けず、ぐったりしていました。
職場復帰へ向けて、体調を整えていきたいと思っている。
気持ちが焦るほど、体調はついてこない。

ruby-1.9用ししゃもパッチ

人工無脳ししゃもruby-1.9でも動くように書いてみた。
オリジナルのししゃもとのdiffです。

1a2
> #-*- coding: EUC-JP -*-
7c8,10
< $KCODE = 'e'
---
> if RUBY_VERSION.match(/^1\.[678]/) then
> 	$KCODE = 'e'
> end
462,463c465,473
< 			lines.each do |line|
< 				ary << line.gsub(/\s+/, ' ').strip
---
> 			case RUBY_VERSION
> 				when /^1\.[678]/ then
> 					lines.each do |line|
> 						ary << line.gsub(/\s+/, ' ').strip
> 					end
> 				when /^1\.9/ then
> 					lines.each_char do |line|
> 						ary << line.gsub(/\s+/, ' ').strip
> 					end

解説

手を加えた箇所は次のとおりです。

  • マジックコメントを入れた
  • RUBY_VERSIONが'1.9'なら、$KCODEは使わない
  • RUBY_VERSIONが'1.9'なら、String#eachの代わりに、String#each_charを使う

これで、1.9系のrubyでもししゃもが動くんだぜ。*1
1.8系の環境でもちゃんと動くので安心だぜ。

*1:あくまで”動くようにした”だけなんで、1.9に最適化したわけではありません。

1.8系を使いつつ1.9系もお試しする方法

前置き

rubyの新しい安定版として、1.9.1が公開されたんだけど
1.8系と比べて、変更点が大きくて
RubyGemsパッケージの多くはまだ1.9系に対応していなかったりします。
そこで、1.8系の環境は残したまま1.9系のrubyもお試しで
導入してみる方法をご紹介します。

1.9.1を別の名前で導入

rubyをソースから導入する際に、

$ ./configure --program-suffix=19

とすると。
従来のruby(1.8系)とは別に、ruby19(1.9系)として
別の名前で導入できます。
同様に、irbやri、rakeなどもirb19、ri19、rake19のように別名として
導入されます。

1.9系からは、RubyGemsも標準ライブラリに採用されているので、
上記と同様にgem19という名前で導入されるでしょう。

RubyGemsパッケージを別の名前で導入

従来(1.8系)のRubyGemsRSpecをすでに導入していて
1.9系のRubyGemsにもRSpecを導入しようとすると……
実行ファイル(/usr/bin/specなど)が上書きされてしまって
好ましくない状況になってしまいます。

そこで、ruby19のように名前の後ろに19がつくようにして導入する方法をご紹介します。

$ gem19 install --format-executable rspec

このように導入することで、従来(1.8系)のspecとは別に
spec19という名前で導入できます。

これで、1.9系に対応したRubuGemパッケージも導入することができます。

M17N対応とかやってみた。

ruby-1.9系の安定版、ruby-1.9.1-p0が公開されていたようなので。
インストールしてみた。

以前に、はてなハイクAPI用のライブラリと、タイムログAPI用のライブラリを作って
rubyforgeに公開していたので。
今回はそれをM17Nに対応して動くようにしてみた。

主な変更箇所は、マジックコメントを入れたぐらいですが。
1箇所だけ、動かない場所があったので修正しました。

それは、次のような箇所です。

修正前

    def http_access(uri, request)
      Net::HTTP.start(uri.host, uri.port){|http|
        response = http.request(request)
        if response.code == '200'
          return REXML::Document.new(response.body)
        else
          return false
        end
      }
    end

これを、ruby-1.9.1-p0で動かすと……
APIからとってきた response.bodyのEncodingがASCII-8bitになってしまうため
REXMLがパースする際にエラーを起こしてしまうのだ。

そこで、こんな風にした。

修正後

    def http_access(uri, request)
      Net::HTTP.start(uri.host, uri.port){|http|
        response = http.request(request)
        if RUBY_VERSION.match(/^1\.9\./)
          response.body.force_encoding('UTF-8')
        end
        if response.code == '200'
          return REXML::Document.new(response.body)
        else
          return false
        end
      }
    end

RUBY_VERSIONが1.9.xの場合は、APIからとってきたものをUTF-8として扱うようにしました。

ひとまず、これで動くようなので修正したものをrubyforgeにアップしました。

はてなハイクAPI用のライブラリは、

gem install -r rhaiker

タイムログAPI用のライブラリは、

gem install -r timelog4r

…で、それぞれ導入できます。

AIアルゴリズムコンテストに参加しないことにした理由とか

先日のエントリで取り上げたコンテストに、参加を見送ることにした。

理由はいくつかあるが、最たるものは
めだちょんは、「自分でアルゴリズムから作ったAI」とは言えないからだ。

めだちょんは未だに、「ししゃも頼り」にしている部分が多くを占めている。
コンテストの趣旨は「アルゴリズムコンテスト」である以上、やはり胸を張って「自分でアルゴリズムから作ったAI」と言えるようなものでなければ参加しちゃいけないんじゃないかと思ったからだ。

状況からいっても、今はアルゴリズムからAIを組み立てるほどの気力も体力もないということも参加を見送る理由のひとつです。

人工無脳に関わっているひとりとしては、少しでも早く”脱・ししゃも”をしたいものです。

心身の状況がそれどころではないのですが、それでもやっぱり、AIの魅力と可能性には心が強く突き動かされます。