読者です 読者をやめる 読者になる 読者になる

TAMALOG

記すことは生きること。知的欲求の最果てに。

画像収集基盤の構築ログ3

目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。

tamanobi.hatenablog.com

まだ良いコードネームは思いつかない。

進捗

  • 自動で画像収集を行い始めた
    • エラーに対応できるようにスクリプトを改良
    • RedisとSidekiqを使ったジョブキューの導入の検討
  • 参考資料を漁った
    • 国内でクローラーと言えば、VASILY。ブログ記事を読み漁った。
  • 画像変換サーバーへの依存をRMagickへの依存へ変更。ネットワークを介さなくした。
  • スマートクロップの改良の検討
    • AnimeFaceのカスケーディングを使って顔認識してみたが思ったように検出できなかったため断念
  • 画像収集用のストレージを購入する
  • ユーザが気軽に画像分類するにはどうするか考えた(検討段階)
    • ランダムサンプリングによる二者択一の比較
      • エンターテイメント性皆無(ニコニコ静画のように「どっちがけしからん」くらいやらないとおもしろくない)
    • いくつか表示した画像を、ドラッグ&ドロップによって配置する
      • ユーザが独自の価値観で距離を定める。うまくクラスタリングできる可能性は低いが直感的。
    • 選択された画像の横に並ぶ画像に対しても評価を勝手に行う
      • サムネイル画像が並んでいる中で一つの画像が選ばれたときに、周辺にある画像は相対的に関心が低いはず。それを評価として反映させたらどうか。

雑記

タスク管理が困難になってきたので、todoistのCLIクライアントを使って管理しようと思う。

qiita.com

おすすめリンク

VASILYのブログはいつも参考になる。クローラーや画像処理まさに僕がやりたいことが揃っている。

tech.vasily.jp

画像収集基盤の構築ログ2

目的は、人間の代わりに画像を集めてきてくれるシステムを構築すること。個人的な趣味からイラスト画像を対象としている。

tamanobi.hatenablog.com

画像収集基盤という名前だが、何かコードネームが欲しい。

進捗

  • 管理サーバーをインターネットに公開した
  • illustration2vecで画像の特徴ベクトルを抽出できることがわかった
  • Jubatusを使って類似画像の近傍探索ができることがわかった
  • プライベートGitLabにリポジトリを作成した
  • YOLOv2を用いた画像の自動クロッピングを実装した
  • mitproxyを使えば閲覧とスクレイピングが同時に行えることがわかった
  • 画像のランキング・選抜について調査をした
    • 選挙方式の一つであるシュルツ方式を調べた
    • Elo Ratingを調べた
    • 多腕バンディットアルゴリズムを調べた
    • 人の手を介したソートアルゴリズムの構想をまとめた
  • 構成図を書いた

次にやること

  • 画像収集用のストレージを購入する(購入完了)
  • illustration2vec + Jubatusを使った類似画像検索を試す
    • alt-i2vを試してもいいかもしれない
  • YOLO v2によるスマートクロッピングを管理画面に導入する
  • MySQLを使ったバッチ処理環境を構築する
    • 画像をillustration2vecを使ってメタ情報を付与する
  • クローラー戦略を考える
  • ユーザが気軽に画像分類するにはどうするか考える
    • ユーザ行動を教師データとして利用するにはどうするか
    • Labellio
  • 構想を整理する
    • ユーザが好みそうな画像を収集するクローラー戦略を作るのか
    • ユーザが好みそうな画像を推薦するのか

作業記録

スマートクロップ

画像を正方形サムネイルに変換するときのクロッピング戦略をYOLO v2という一般物体認識アルゴリズムを基に構築した。アルゴリズムの実装自体は難しくなかったが、PILとOpenCV(Numpy)のデータ構造の相互変換に戸惑った。クロッピングがうまく行ったかどうかの指標はあるのだろうか?まだ調べていないが、画像周りのアルゴリズムの指標はまだ未成熟のようだ。

インターネットへの公開

自宅の外でも作業がしたかったため、サーバーをインターネットへ公開することにした。キャッシュ+リバースプロキシとしてNginxを導入した。現在サムネイル生成には、thumborというpythonで書かれた画像変換サーバーを用いている。クエリとして画像変換対象のURLを含める必要があるが、Nginxのmerge_slashにより///に変換されてしまい、原因を調べるのに多くの時間使ってしまった。今までlocalhostだけで動作確認ができていた管理サーバーだが、外部公開の問題を早期に解消できたのは良かった。

人力ソート

人の判断基準を学習させたいと昔から思っていた。そのきっかけはキャラソートだった。特定の作品に登場するキャラクターを2名表示して「どちらが好きか」という二者択一の比較を行っていくもの。人の「好き」という気持ちは体系化されていないことが多く、このようなツールを利用することで自分の嗜好が整理されることに僕は感動を覚えた。自分の判断基準を学習して将来的には自分の代わりに自分の分身がインターネットを探ってくれる未来を夢見ている。

画像収集のための判断基準を学習するためには、ユーザ行動を画像の評価として結びつけなければならない。評価についてはいくつかアイデアがある。画像のLikeなどは重要な指標になることはあたりまえだが、多くの画像が並んでいるような状況でその画像を選んだことにも着目したい。選ばれなかった画像の評価を下げるという評価を試してみたい。また、人は好きよりも嫌いに反応しやすいため、LikeよりもDislikeに比重を置きたいと思っている。

類似画像検索

類似画像検索を行うにあたり思い出したことがあった。とあるニュースで、類似画像検索では違いが重要であると報道されていた(http://jp.techcrunch.com/2011/12/07/20111206cmu-researchers-one-up-google-image-search-and-photosynth-with-visual-similarity-engine/)。可能であれば、現在構築中のシステムにもこのアイデアは導入したい。

この記事を書いている最中に、以下の記事を見つけた。このOSSをうまく使えれば、Jubatusよりも早い類似画像検索が実装できるかもしれない。

itpro.nikkeibp.co.jp

github.com

参考資料

画像収集基盤の構築ログ1

自動画像収集基盤を作成しています。

RubyはGemが充実しているので、最短時間が作れると判断しました。将来的にLispでリプレイス予定です。

1日目

スクレイピングをするための基盤を作りました。スクレイパーにはURLを与えます。スクレイパーは、URLから設定ファイルをディスパッチします。設定ファイルにはスクレイピングするためのレシピが入っています。その後、設定ファイルをたくさん作成し、動作確認をしておきました。

2日目

DB設計を始めます。プロトタイプなので、そんなに複雑に考えません。たくさんのサイトを巡って情報の共通点を探り出しました。そこからどういう情報が必要か、どういう関連図になるかDB設計に落としていきます。スクレイピング時にDBへ記録するようにしました。

DBに格納したデータに基いてクローラーを回します。この時点では、まだタスクキューにはしていません。クローリング時に、画像は動的サムネイル変換サーバーを介して縮小変換をかけて、ストレージに保存しました。

管理サーバーの作成に取り掛かり、管理者の入力に応じてDBの値をいじったり、特筆事項をメモできるようにしました。

スクレイピングで剥ぎ取れなかったデータを補間するため、保存した画像をillustration2vecによるメタ情報取得を検討します。なかなかな精度だったため、本格的に載せることにしました。illustration2vecはPythonで動いているため、Flaskを導入し画像を入力とするメタ情報推定サーバーを構築しました。

つづく

まだシステム構築中ですが、引き続き作業を継続していきます。

A-FrameでWebVRを試した

A-Frameというライブラリを使って、WebVRを試しました。 aframe.io

f:id:tamanobi:20170320232939p:plain

説明

パブリックドメインの天球画像を使って、カメラ(自分)を取り囲むように画像を配置しています。

デモ

パノラマギャラリー

コード

デモのコードはここから触れます。一部デッドコードがあるので注意してください。

vr_gallery/index.html at master · tamanobi/vr_gallery · GitHub

コードを書かずにHerokuボタンひとつでデプロイ!LINEチャットボットを試す全手順を公開

GitHubとHerokuを使ってLINE Messaging APIがどういうものか試せるようにしました。

この記事で何ができるようになるの?

  • コードを書かずに、LINE上で動く超簡単なチャットボットが作れます
  • LINEチャットボットの簡単な始め方がわかります

この記事の目的

僕は確信しています。チャットボットは新しいパートナーだと。ウェブサービスの新規登録ボタンを見つけることができなくても、「登録したい」とチャットボットに言えばサービスを受けられる世の中が来ると。でも、そんなチャットボットは、ツールではなく、パートナーになっていくんだと。いなかったら寂しいやつだと。そう僕は思っています。

僕はぜひともみんなに、チャットボットに触ってほしい。だからこの記事を書いています。

もう一つの目的

この記事は、サポーターズのイベントで話した内容をまとめたものです。当日は急な繰り上げでコンピュータを持参できなかった方が何人かいました。その人たちを始めとする参加者のみんなにまとまった資料を提供するという目的もあります。

主催者いわく、4月にも開催予定とのことですので興味のある方はよろしくお願いします。

supporterz-seminar.connpass.com

チャットボットを始めるための準備

それでは、始めていきましょう。今回、チャットボットを始めるために必要なことはシンプルです。

どれもお金は不要です。

Herokuのアカウントを作る

さあ、Herokuのアカウントを作りましょう。Herokuをアカウントがあれば、無料でウェブアプリケーションを公開する基盤が手に入ります。レンタルサーバーVPSを借りる必要はありません。

Sign up for free から始められます。

f:id:tamanobi:20170307195648p:plain

f:id:tamanobi:20170307200407p:plain

f:id:tamanobi:20170307200410p:plain

Herokuの準備は完了です

HerokuはRubyPHPを始めとするいくつかのプログラミング言語に対応しています。公式に対応していなくてもBuildpackを自分で用意すれば、Herokuで利用することができます。

以下の画面が出れば、Herokuの準備は完了です。次はLINEの準備をしていきましょう。

f:id:tamanobi:20170307200616p:plain

LINE Business Centerに登録しよう

LINE上で動くチャットボットを作るために、LINE Business Centerで登録しましょう。まずは、すでに持っているLINEアカウントでログインをしてみます。ログインするときは、メールアドレスを求められます。メールアドレスはLINEアプリの設定をみれば、思い出せます。

f:id:tamanobi:20170307201808p:plain

f:id:tamanobi:20170307202107p:plain

Messaging APIの利用をDeveloper Trialで始めてみよう

最近店舗で利用される機会が増えているビジネス向けのアカウント: LINE@が提供されています。LINE@は、友達追加時に「友達に追加してくれてありがとー!」のような自動応答を設定できます。

定型文じゃ味気ない、これをもっとユーザのメッセージに応じて柔軟にしたい!と思うのは必然です。

ユーザからのメッセージを取得するためには、自分の用意したサーバー(Heroku)のエンドポイント(http://example.net/callback)を登録する必要があります。Messaging APIのDeveloper Trial*1に申し込んで設定していきましょう。

business.line.me

Messaging APIの申し込み手順

Developer Trialを始めると、事業主を選択するように促されます。事業主を登録していなくても選択をクリックすれば、事業主を追加するボタンから登録することができます。

f:id:tamanobi:20170307204345p:plain

f:id:tamanobi:20170307204846p:plain

以下の画面までたどり着けば、完璧です。LINE Business Centerに登録できました。ここから再び、Messaging APIのアイコンをクリックして進めていきましょう。

f:id:tamanobi:20170307205043p:plain

Developer Trialをクリックすれば、アカウント名の設定を求められます。アカウント名は後から変更できるので気楽に決めましょう。ただし、LINEの友達となったユーザにはアカウント名が公開されますので、公開するときは早めに変更してください。

f:id:tamanobi:20170307220322p:plain

さあ、申込みが終わりました。チャットボットを試すために、LINE@MANAGERの設定を変更しましょう。

f:id:tamanobi:20170307220632p:plain

LINE@MANAGERの設定をしてユーザからのメッセージを送信するようにしよう

今回は、Messaging APIを利用してチャットボットを試してみるのが目的です。警告文を読んで、APIの利用を開始しましょう。

f:id:tamanobi:20170307221151p:plain

f:id:tamanobi:20170307221213p:plain

以下の画面のように設定を変更していきます。Webhook送信Botグループトーク参加は「利用する」を選択、自動応答メッセージ 友だち追加時あいさつは「利用しない」を選択して保存するようにします。

Webhook送信を利用することで、自分が用意したサーバー(Heroku)にユーザの送信したメッセージを受信できるようになります。次は、LINEのトークンを確認していきます。

f:id:tamanobi:20170307221822p:plain

Messaging APIの利用に必要なLINEのトークンを確認しよう※メモを忘れずに。

Webhook送信などの設定した画面のステータス欄にLINE Developersで設定する というリンクからトークンを確認する画面へ移動できます。 f:id:tamanobi:20170307222514p:plain

画面が移動すると少し雰囲気が変わります。ページのShowISSUEというボタンをクリックして表示された文字列をメモとして残しておきましょう

f:id:tamanobi:20170307222839p:plain

メモするべきトークンは3つ

トークンを3つメモしておきましょう。Herokuを使ってチャットボットをウェブアプリケーションとして動かすときに必要になります。

  • Channel Secret
  • Channel Access Token
  • UserID

Channel Secret

f:id:tamanobi:20170307230249p:plain

Channel Access Token

f:id:tamanobi:20170307230050p:plain

UserID

これは、あなた自身のLINEアカウントIDです。これを使えば、あなた自身にメッセージを送ることができます(Push Message)。

f:id:tamanobi:20170307230119p:plain

これらのトークンは大切なものですから、メモを誤って公開しないようにしてください。では、GitHubへ移動してHerokuへデプロイしていきます。

GitHubからボタン一発デプロイ

LINEチャットボットを簡単に試せるように、GitHub上にHerokuボタンを設置しました。以下のリポジトリからボタンを押してみましょう。のちほどプログラムに変更を加える人は、自分のリポジトリにフォークしてからやる良いでしょう。

github.com

f:id:tamanobi:20170307232624p:plain

アプリ名やトークンを入力してデプロイ

ボタンを押すと、デプロイするアプリについて情報入力を求められます。アプリ名はアプリのURLとなります。たとえば、your-chatbotlineとすればあなたのアプリケーションのURLは、 https://your-chatbotline.herokuapp.com となります。

アプリ名を入力したら、先程メモしたChannel Secret、Channel Access Token、UserIDの3つを入力してデプロイします。デプロイ後、https://your-chatbotline.herokuapp.comにアクセスしてhelloという文字列が見れた成功です!

f:id:tamanobi:20170319005936p:plain

Push Messageを試してみよう

あなた自身のLINEに対して、Messageを送ってみます。/test/pushというエンドポイントにブラウザでアクセスすることで、「push message」というMessageを送ることができます。例: https://your-chatbotline.herokuapp.com/test/push

オウム返しを試してみよう

LINEアカウントに対して、メッセージを送るとあなたが送ったメッセージと同じメッセージが返ってきます。

f:id:tamanobi:20170319012349p:plain

改造するならリポジトリをフォークすれば

以上で、LINEチャットボットの簡単な試し方の手順説明は終わりです。プログラムの中身を知りたかったり、改造したい場合は以下のリポジトリにコードがあるので参考にしてください。

github.com

*1:Developer Trialであれば友達人数の最大が50人に制限されますが、無料でPush Messageを試すことができます。

TensorFlow User Group #3に行ってきました

TensorFlow User Group#3に参加しました。TensorFlowはデータフローグラフを用いた数値演算ライブラリです(2月15日にv1.0が出ました)。機械学習、Deep Learning周りへ応用されています。詳しく知りたい人は、Talk about ML and DL for happy engineer’s lifeを見て下さい。

TensorFlow User Group#3は、TensorFlowを実運用してみた話が中心です(奇数回は実運用、偶数階は技術の話)。

発表の様子がYouTubeで見られます

https://www.youtube.com/watch?v=dd7JdUVNP5Y&feature=youtu.be

ToC

  • Dockerを使った機械学習基盤の構築と運用@Retty
  • 口コミ文字列をソースとしたCharacter level CNNによる店舗属性の推定@Retty
  • SENSYにおける深層学習活用事例とTensorFlowの悩み相談@カラフルボード
  • MLPを用いたSSP収益の最適化@GMO AD MARKETING

超圧縮したまとめと所感

  • 機械学習基盤はストレージを共有(NFS)したDocker環境を作ると便利
  • 文字列データでもCharacter level CNNを使えば分類器が作れる(お問い合わせ分類もいけそう)
  • モデルとコードをそれぞれ管理することは難しいので両方ともにデータベース(ソースコードごと!)に格納し管理する
  • toC向けの機械学習はあまり行われていない(研究段階)
  • TensorFlowはユーザコミュニティが大きく、Githubでどのライブラリよりも人気
  • 機械学習自体はライブラリの恩恵を受けることで簡単に試すことができる
  • 生成モデルについての評価はまだ確立されていない

Dockerを使った機械学習基盤の構築と運用@Retty

2016年12月にバズったRetty流『2200万ユーザを支える機械学習基盤』の作り方の詳しい解説です。

発表者

名前: Taruishi Masato(@taru0216) 略歴: Debian Project公式開発者 -> Red Hat -> Google (SWE/SRE) -> Rakuten -> Retty (CTO)

発表内容

マシンを組み立ててネットワークにつなぐと自動でインストールされるように構築

  • どのマシンにログインしても同じデータがある(NFS)。そのため、マシンが重くなっても別のマシンに接続して作業が継続できる。
  • Jupyterをインストールして、SSHだけでなくブラウザでも操作ができる(デザイナやディレクタが触る環境を用意している)。
  • nvidia-smiGPUを知れるのでさくっと適切なマシンに入れる。

アーキテクチャ

  • Rubuntu(Retty Ubuntu) ServerとKubernetes、Juju、MAASを使っている
  • 開発者はDockerコンテナを使う
  • Dockerなので、手元のマシンでも動かすことができる

Dockerによって環境を持ち運ぶ(Infrastructure as Code)

  • Dockerによってセットアップを容易にしている
  • すべてのDockerイメージはコアDocker(retty2-runtime-core)から継承している
  • 手元のマシンを動かすときには retty2-runtime-devというdockerを用いる

環境を健全に、容易に利用するための工夫

  • シェルプロンプトにビルドバージョンを表示するようにして、混乱しないようにする
  • docker buildは、configure && make -jで依存を解消しながらビルドする
  • Circle CIと組み合わせて、プルリクがきたら docker build が自動で走るようにしている
  • KubernetesのDeamon Set機能で全マシンにデプロイするような仕組み
  • Kubernetes自体は、Juju & MAASでネット自動インストール

口コミ文字列をソースとしたCharacter-based CNNによる店舗属性の推定

  • 文字単位(Character-based)CNNによる口コミ分類
  • 口コミからこのお店がデート向けか判別する判別器を作った
  • CNNで日本語の自然言語処理が簡単にできる

スライド

TFUG#3 RettyにおけるDeep Learningの自然言語処理への応用事例

関連記事

character-level CNNでクリスマスを生き抜く

発表者

名前: 氏原淳志(Retty株式会社) 略歴: 薬学部 -> Retty株式会社

発表内容

  • CNNで日本語の自然言語処理が簡単にできるよ。
  • 問題: 単語の切れ目がわからない。

分かち書きが必要

  • 分かち書き
  • 問題: 辞書が必要
  • Rettyの場合はお店の名前とかある。口語表現も難しい。→MeCabだけで解決できない
  • 辞書を延々と構築する作業になりがち

救世主: CNN

  • 画像分類のコンテストでCNNを用いたチームが優勝。自然言語でも使えるかも
  • 文字列をベクトル化する必要がある
  • Word2vecというGoogleのライブラリで、言葉をベクトル化できそう
  • 実は、Word2Vecは、単語をベクトル化している。→単語分割が必要→分かち書き→本末転倒

1文字ずつCNNすればいいじゃん

  • 画像を対象にしたCNNでは、1pxごとにCNNへ入れている
  • 同じ発想で、1文字ずつCNNに食べさせればいいじゃん
  • Character-level CNNと呼ばれる技術

Character-based NNの手順

  • 文字列をID化する必要がある
  • Unicode値を使う
  • 埋め込み表現を学習させる→グレースケール画像と同じ!→あとはCNNに食わせるだけ
  • ただし、CNNのカーネルサイズは横にN。つまり1文字分。縦は2,3,4,5の複数サイズ。これはN-gramをCNNに学習させている。

まとめ

  • デート目的店口コミと判断される口コミが多い店はデートに使えるのでは?
  • 20万口コミ(デート目的店の口コミ10万 + その他10万)で、Accuracyは83%
  • 重要: 教師作りのソルジャーが必要。最低、数万欲しい。数10万欲しい。

SENSYにおける深層学習活用事例とTensorFlowの悩み相談@カラフルボード

TensorFlowを含む深層学習の活用事例を紹介してもらった

発表者

名前: 武部雄一(カラフルボード)

スライド

SENSYにおける深層学習活用事例とTensorFlowの悩み相談 - TFUG#3

発表内容

広告CVR予測 with TensorFlow

  • マーチャントとパートナーの特徴量作成にオートエンコーダーを利用。RBFNを用いて、CVRの予測回帰モデルを作る
  • TensorFlow利用
  • 直近三ヶ月のCVRをもらった。膨大なクリックログ

ヒューマンオペレーションvs人工知能

  • 人による平均値をはるかに越える結果になった
  • 入力層1000次元。中間層200次元。出力層1000次元。autoencoder
  • 1000次元はユーザの数(パートナーのサイトを特長付けるユーザ数)
  • シグモイド関数を使った

ファッションアイテムの推薦最適化

  • 感性特徴空間を作成
  • 服に関する感性の二次元ヒートマップ
  • 画像特徴量をt-SNEで二次元に落とし込み、各画像の推定スコア(CNNの出力値)。chainerを使ってやった。

応用: 商品企画の方向性検討

商品企画の方向性検討 需要予測・MD計画の最適化

可視化されていると顧客と共通認識を持ちやすい。

より好みにマッチするアイテムの提案

TensorFlowにまつわる2点の悩み

過去に蓄積してきたモデルの流用が難しい。

  • モデルの変換が絶望的。
  • 解決方法はたぶんない

デバッグがしんどい

  • chainerは行列計算にNumpyを使っているCupy
  • 実行しながらモデルを作れる
  • stacktraceも置いづらい。

TensorFlowの魅力

  • 指示者が多く、コミュニティも熱狂的
  • 分散学習(Google Cloud ML, YahooによるTensorFlowOnSpark)
  • 学びやすさ
    • しょういちじかんで、opsノード、エッジ、データフロー構造、sess.run()といった基本的な構成要素を理解し、遊び始めラエル。Kerasはすごい簡潔

まとめ

NNで広告配信のユーザ最適化をやってみた

発表者

名前: 勝田隼一郎 略歴: 宇宙高エネルギー物理学 -> GMOインターネット次世代システム研究室データサイエンティスト兼アーキテクト

発表内容

  • インフィード広告を配信するようなアドネットワーク(AkaNe GMO AD MARKETING)にユーザごとに、より適切な広告を配信したい

実際につかったモデル(MLP)

  • 匿名ユーザごとに特徴量をつくる
  • 配信履歴よりclickしたUser、してないUserにわける(0/1)
  • これを教師データとしてMLPで学習を行い、インプットされた特徴量に対してclick率のようなものを求める
  • 確率の高いユーザを推薦ユーザとして配信ターゲットとする

入力から出力までの流れ

  • INPUT→生データ: 匿名ユーザのウェブ行動履歴、どのウェブサイトを見たか(スパース)
  • スパースなデータを少ない次元のベクトルに押し込む(embedding)
  • →OUT: モデル(MLP)のfeature

Embedding by ALS

  • UU: 数千万人を扱うため、Apache SparkのMLlibのALS(Alternating Least Squares)を用いた。Embeddingをした。
  • MLPに食べさせるために、各ユーザについてALSする

まとめ

聞いてきたこと

  • Jupyterでも限界がある
  • ソースコードと精度の結果をすべてDBに入れる。モデルの名前も入れる
  • デプロイはまだ研究段階
  • 誰でもさわれるような環境を用意する
  • Infra as a Codeなので継承して目的別にDockerを管理すると良い

イベントレポート「Shibuya.lisp #48」

Shibuya.lisp #48に聴衆として参加しました。Shibuya.lispは、毎月開催されるLispユーザの交流の場です。僕が参加し始めたのは、Lisp Meet Up presented by Shibuya.lisp #38 - connpass からです。

lisp.connpass.com

Shibuya.lispの参加者は年齢層が広く、個性豊かでとても楽しいです。

Twitter

Twitterハッシュタグ

Twitterでは、 #lispmeetupで、参加者が各々好き勝手にコメントしています。当日の雰囲気がわかるかもしれません。

twitter.com

モーメント

開催中僕が実況していたので、それらをモーメントとしてまとめ直しました。興味のある人は見てみてください。

twitter.com

発表は2件とも機械学習の話

今回の発表は、2件とも機械学習の話。両方とも、自作したCommon Lispライブラリを活用した機械学習について話していました。

  • 『Deep Latent Spaceにおける汎用プランニング』
  • 『cl-online-learningによる文書分類』

Deep Latent Spaceにおける汎用プランニング

日本では、Deep Learningがとても注目を集めています。世の中には、Deep Neural Networkがすべてのタスクをこなしてくれる銀の弾丸だと思っている人もいますが、そうではありません。と、Asaiさん。

Deep Neural Networkは、反射的・直感的なタスクには有効だが、さらに抽象度の高い行動計画は難しいらしいです

Deep Neural NetworkとAI研究の融合

機械学習やDeep Learningの先にある、行動計画のための推論・探索、論理も重要だと述べていました。 Asaiさんは、Autoencoderによって圧縮したデータ列をドメイン非依存ソルバに食べさせて、8パズルを解くアイデアを実現していました。

研究中に制作されたライブラリbit-ops

上記の研究の中で、ビット演算を高速に行うライブラリbit-opsを開発したことを明かしました。 どのようなアルゴリズムかは僕はまったくわかりませんが、コンパイラで使うようなアルゴリズムを利用していたのがとても印象的です。

github.com

Common Lispでビット演算を行っていると大量のconsingが作られて、思うようなパフォーマンスがでなくなることがきっかけでライブラリを作ったと話していました。

cl-online-learningによる文書分類

この発表では、msatoiさんが作成したライブラリの紹介をしてくれました。Common Lispで書かれたオンライン学習用ライブラリ(cl-online-learningの紹介です。

cl-online-learningを利用してlivedoor ニュースコーパスを文書分類したとのことです。 文書分類などの研究では有名な、tf-idfという特徴量を用いて、分類したところ深層学習で行ったものとくらべて高速で精度が高かったと発表していました。

それぞれのアルゴリズムは得手不得手があるので、ちゃんと調査しましょうと暗におっしゃっていました。

発表時のスライド

www.slideshare.net

紹介されたライブラリcl-online-learning

github.com

次回は2月23日のClojure

次の開催は、2月23日です。もうすでに募集が始まっているので、Lispが気になっている人はぜひ参加してください!

lisp.connpass.com