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

once upon a time,

Iris Tradをビール片手に聞くのが好きなエンジニアが、機械学習やRubyにまつわる話を書きます

Rubyで深層学習を使った音声合成Amazon Pollyを使ってWebサイトの読み上げ音声合成してみた

ruby TTS

f:id:chezou:20161201230818p:plain:w200

今日のre:InventでDeep Learningを使った音声合成サービスのAmazon Pollyが発表されました。 正直、DLを使ったの音声合成が話題になったのなんて今年に入ってからだと思っていたのに、もう商用化したんか!という気持ちでいっぱいです。

Amazon Polly – 文章から音声へ、47の声と24の言語 | Amazon Web Services ブログ

Amazon Polly – Lifelike Text-to-Speech

[2016/12/02追記] PollyがDLベースという話は https://aws.amazon.com/jp/polly/ に、"Polly is an Amazon AI service that uses advanced deep learning technologies to synthesize speech that sounds like a human voice. "と書かれていますが、DNNを一部のモジュールとして使っている波形接続型じゃないの?とのことです。なので、「DLを使った」という表現に修正しました。

なので、DeepMindのWaveNetのように音声を直接生成しているわけではなさそうです。

[/追記]

Amazon PollyはAmazon AIのサービスとして展開していますが、画像認識(Amazon Rekognition)、音声合成(Amazon Polly)、音声認識自然言語理解という対話用のコンポーネント(Amazon Lex)が使えるようになりました。 画像認識についてはGoogleのVision APIで話題になりましたが、その他の2つはちょっと変わっていると思いますがこれはおそらくSiriのような対話エージェントであるAmazon Alexaのバックエンドを切り売りしているんだと思います。

Pollyが凄いのは、AWS CLIで簡単に音声合成がされるということです。しかも、お値段は月500万字までは無料で、その後も$0.000004/文字と非常に安く、本一冊で$2.4くらいという驚異的な安さです。なので、ちょっと前にrebuild.fmでスクリプト書くだけで音声合成podcastできるんじゃないみたいな話題がありましたが、おもったより速くその現実が来るのかもしれません

AWS CLIを使ったbashのサンプルコードはこんな感じです。かんたんでしょ?

$ aws polly synthesize-speech \
  --output-format mp3 --voice-id Joanna \
  --text "Hello my name is Joanna." \
  joanna.mp3

また、サポートしている言語数も2016/12/01現在で、ヨーロッパ言語を中心に以下の24言語をサポートしています。

日本語も聞いていて結構自然に聞こえており、ちょいちょい単語の認識に失敗するときは変なアクセントになりますが、レキシコンで単語を登録すれば自分で改善もできそうです。 サンプル音声はこんな感じです。

http://chezou.tumblr.com/post/153883804175/amazon
chezou.tumblr.com

[2016/12/02追記] Google翻訳に手伝ってもらって英語版をMediumに書きました。それの生成した音声も貼っておきます。

soundcloud.com

[/追記]

で、Mediumなんかの記事の中に面白い記事をよく見るのですが、英文だとなかなか途中で挫折するので、音声にすれば聞くんじゃないかと思い、記事を音声に変換するコードをRubyで書いてみました。 以下にコードがあります。

gist.github.com

ポイントとしては、幾つか重要な制約があります。

  • API一回あたりの文字数が1500字*1(なので、catでmp3を結合している)
  • 長い音声は、5分以降が切り捨てられる

詳細は以下を参考にしてください。 docs.aws.amazon.com

実際には、ちょうどHckr newsで見つけた以下の記事の音声を聞いてみました。意外と聞けます。

How the Circle Line rogue train was caught with data

もうちょっと頑張ってRSSを取得すれば、特定のサイトの最新の記事の音声を生成して、Dropboxに保存した音声をモバイルから再生するということもできそうですね。

正直、安くて多言語でそれなりに自然で何よりAPIが使いやすいということで、既存の日本の音声合成を頑張ってきた企業は大変だなぁという気持ちになりますが、いろいろな使い方ができそうで楽しみです。

*1:厳密には、"1500 billed characters (3000 total characters)"と書いてあるけど"billed characters"がわからない

icloudのカレンダーに来るイベントスパムを避けるための設定変更

mac icloud

最近、めちゃくちゃicloudのカレンダーにレイバンのスパムが来るようになってうざいので、通知されないように回避するためのicloudの設定方法を書いておく。

1. PCのブラウザでiCloud.com へ行きカレンダーを開く

f:id:chezou:20161126130933p:plain

2. 左下の歯車から環境設定を開く

f:id:chezou:20161126130701p:plain:w120

3. 「詳細設定」の「イベント参加依頼の受信方法」の設定を「xxxx@yyyy.comへメールを送信」にする

f:id:chezou:20161126130707p:plain

この設定にすると、設定したメールアドレスに通知が来るのでメールを削除するだけになる。

補足

追加された予定を通知しないように削除するには、icloudに新規カレンダーを追加してそちらに移動してから、カレンダーごと削除すると招待した輩に通知をすることなく消せる。 f:id:chezou:20161126131353p:plain

参考サイト

9to5mac.com

astralbodi.es

www.dagasorega-e.net

Cloudera World Tokyo 2016で機械学習プロダクトの作り方を話しました #cwt2016

データ分析 machine learning

さる11/8に、自社の主催するCloudera World Tokyo 2016で、機械学習プロダクトの作り方について話をしました。

f:id:chezou:20161108182005j:plain
図: Hadoopの生みの親 Doug(@cutting)と握力王新沼さん(@hiroki_niinuma)の対談イベントの様子

www.slideshare.net

データの民主化の話、データサイエンティストとデータエンジニアの役割分担とチーム構成、機械学習の業務フロー、Cloud Nativeなデータサイエンスといった盛りだくさんの話をしました*1

話の中で特に言いたかったことは2つ、P.16のリスクを取ってくれる責任者を捕まえようという話と、P.29の機械学習込みのプロダクトは改善をし続けないと死ぬという話です。 あとは、できるだけ機械学習をしないで、サンクコストが生まれる開始前に撤退ラインを決めておこうということも言いました。

個人的には、今回 Cloudera のエンジニアリングチームと共にプロダクトの品質を測定しているJuliet(@j_houg)の話や、@tokorotenさんの話も、自分からお願いをしたのですがお互い相補的な話でとても良かったと思います。

www.slideshare.net

特にtokorotenさんの話は、データ分析チームのアンチパターンが並んでいます。どれも耳が痛い話です。また、A/Bテストから機械学習にアップリフトモデリングを通じてどうつなげていくかという話もとても面白いです。

3人の話を総合すると、データサイエンティストとデータエンジニアという区分では、こういった人たちが求められているのかなと思っています。

  • ビジネスの意思決定をデータから支援する人
  • プロダクトの改善を予測モデル含めてデータドリブンで行う人
  • データ基盤を作るデータエンジニア

Cloud Native な話

Cloud Nativeのデータサイエンスの話は、時間の関係でちょっと話足りなかったのですが、同僚の@tsuyokbの話を見ていただけると良いと思います。

www.slideshare.net

機械学習やデータ分析の文脈で言うと、今までImpalaとかHive on SparkとかはHadoopクラスタを持っている人の持ち物というイメージしかなかったんですが、昨今S3を始めとしたオブジェクトストレージに置かれたデータを直接処理できるようになったのが大きな変化だと思っています。

特に、HiveやImpalaのテーブルさえ作っておけば、S3に直接SQLを投げられるようになったというのは大きな変化かなと思います。 Cloudera Directorを使うと、一時的なクラスタを上げ下げ増減が簡単にできて、永続化層をS3にするだけという感じになります。 そうすることで、必要なときに必要な量のクラスタを立ち上げて対話的に分析をし、ワークロード決まったらバッチ用に組み替える、なんてことも容易になってきます。

少しずつではありますが、RedshiftやBigQueryに対する第3の選択肢になってくることを期待しています。

*1:思い返してみると、この手のあるある...辛い...って話MLCTでよくやっていたのであった

RNNLMベースの形態素解析器 JUMAN++ をhomebrewでインストールできるようにした

NLP

京大の黒橋・河原研から最近出たJUMAN++macOSのhomebrewでinstallできるようにしました。

JUMAN++はRNNLMというディープラーニングベースの言語モデルを使っています。 こちらの記事を読んで知ったという方も多いのではないでしょうか。

qiita.com

インストール方法は、現段階では後述する理由のためhomebrew-coreにはまだ入っていないので、tapを使ってください。

[2016/10/23追記] やっと本家homebrewに入ったので、tapは要らなくなりました。 [/追記]

$ brew install jumanpp

github

github.com

JUMAN++のサイト凄い

JUMAN++のサイトには解析を試せるWebアプリケーションがあるのですが、それがなかなか面白いです。

このリンクに対して、

http://tulip.kuee.kyoto-u.ac.jp/demo/jumanpp_lattice?text=%E3%81%A9%E3%81%86%E3%82%82%E3%80%81julialang%E7%95%8C%E3%81%AE%E9%A0%91%E5%9B%BA%E3%81%8A%E3%81%98%E3%81%95%E3%82%93%E3%81%A7%E3%81%99

こういうラティスを出力してくれます。

f:id:chezou:20161015161841p:plain

楽しい

JUMAN++とMeCabどっちがいいの?

冒頭のQiitaの記事に対してはRNNLMベースだからというよりは、辞書の改善によるものなのでは?という話はMeCab作者の工藤さんからも指摘があります。

@overlast さんが精力的に更新をしているneologdとの比較をしているため、MeCab側としては現在普通に入手可能なMeCabの辞書としては最も良いものを使っていると思います。 なので、neologd以前に良く問題とされていた「最近の用語が入っていない」という部分に関しては議論の対象にはなっていませんね。

表記ゆれや長音記号のハンドリングに関してはJUMANの頃からやっていたことです。 JUMANの頃からWikipediaを使った語彙獲得やオノマトペの処理など、未知語獲得を黒橋研として頑張っている印象がありました。

また、部分アノテーションか辞書かという話に関しては、以前から議論が分かれている所です。

plus.google.com

JUMAN++(の前のJUMAN)とMeCabの比較は以下が詳しいのですが、使っている文法が違ったりなど癖が違うので注意が必要です。

rekken.g.hatena.ne.jp

個人的にはneologdが頻繁に辞書を更新してリリースし続けている状況に対して、JUMAN++の側がどれだけの頻度で更新されたモデルが出せるというところが実用的な差になるのではないでしょうか。普通のエンジニアが部分アノテーションのためのコーパスを作り続けるのは、正直かなり厳しいと思います。*1 JUMAN++の論文でも、4万5千文を再学習することで性能がMeCabを越えたと言っています。

現段階では、実際に比較をしてみてどちらが用途に合うのかを判断するのが良いと思います。

なお、読み推定がしたい場合はKyteaを使うといいと思います :)

homebrew-coreに入っていない理由

この記事を書いている段階では、upstream(v1.01)のMakefileにあるバグのため、make-jオプションを付与して並列でビルドすると失敗する問題があります。

このパッチを当てれば大丈夫です。 gist.github.com

で、何故これがcoreに入っていないかというと、

  • 特定のワークアラウンドが必要(並列ビルドを抑える ENV.depararelize を使う)な場合は、upstreamのissueを立ててそこへのリンクを貼る必要がある
  • juman++は2016/10/15現在レポジトリが公開されておらず*2、publicなissueがない
  • homebrew-coreにはupstreamにマージされないパッチを当てるFormulaは受け入れられない

つまり、homebrewでビルド時のバグが有り、かつpublicなレポジトリ(正確にはpublicなticketやissueなど)がないという条件下ではcoreに登録することはできないようです。 気持ちはわからなくもないけど、すべてGithubにissueがある(あるいは公開MLがある)という前提はちょっと不寛容じゃないかと思います。 Githubで公開されていることしか考えていないんでしょうかね...。

github.com

はじめての、新規Formula作成でしたがちょっと疲れました。。。

*1:sugyanさんのアイドルコーパスも好きだから続けられると思っているし、それくらいコーパス作るの大変

*2:じきにgithubかbitbucketに公開される予定とのこと

PDFの表をpandasのDataFrameにできる tabula-py 作った

python rubykaigi

RubyKaigiに参加するとコード書きたいという気持ちが高まって良いのですが、今回はPDFの表を読み込んで pandas の DataFrame に変換できる tabula-pyを作りました。 これをもってRubyKaigiの参加報告とさせていただければと思います。

tabula-pyとは

tabula というJavaで書かれたPDFから表を抽出するライブラリをPythonでうすーくラップしたものです。実装を見てもらえばわかると思いますが、本当にsubprocessでJavaのプログラムを叩いて標準出力で受け取るというだけしかやっていません。

もともとは、Rのtabula実装がかなり色々できるのを知ってPythonがないらしいというので作りました。Rの実装はマジでJavaをごりごり書いていて尊敬の念を抱いています。

tabulizerパッケージによるPDF表データからのデータ取得

github.com

使い方

インストールはpipで入ります。

pip install tabula-py

こんな感じで使えます。

from tabula import read_pdf_table

df = read_pdf_table("data.pdf")

詳細はnotebookを見てください。

RubyKaigiの成果と感想

  • rubyist.clubで@mirakuiさんをゲストに収録した
  • tabula-pyを作った
  • 個人的には、JulianのMIDIをdRubyで制御する話が一番おもしろかった。事前にまつださんに聞いていたからこそ辿りつけたのであった
  • daru周りは色々と頑張っているけど、visualization周りをどうするかが肝だろうなと思いながら作者と飲めたので良かった
  • 機械学習の話は個人的には、sklearnのモデルを読み込んでpredictするとかが良いのかなと思っているので、Apache Arrowとかfeatherとかみたいにinter-languageな方向を強化していくのがいいんじゃないかなと思いながら聞いていた

今後の展望

Py4jを使えばRと同じことができるのは確認ができたのですが、JavaPythonの上で書かされている感が半端無いので困ったら考えようと思います。

川崎Ruby会議 01を開催しました #kwsk01

Ruby regional

さる 8/20 に川崎Ruby会議01を開催しました。

regional.rubykaigi.org

川崎Ruby会議は、kawasaki.rbの主催する地域Ruby会議です。 ちゃんとしたまとめはるびまに出ると思うので、ここでは開催の経緯なんかを簡単に書こうと思います。

なお、発表内容が気になる方はタイムテーブルにあるスライドや動画へのリンクを見ると良いと思います。

togetter

きっかけは Ruby Kaigi 2015

  1. 日本酒が事実上無限に飲める会に参加したところ、咳さんに「次のregionalはやらないの」と言われ、基調講演者が決まればありかもと答える
  2. 翌日、miyagawaさんと飲んでるかくたにさんと話して、「2回以上続くregionalはやっぱり特定の地域コミュニティがやってるね」と言われる
  3. さらに翌朝、帰る直前のmameさんに会って「川崎のregionalやるとしたら、基調講演とかしていただけます?」「いいよ」と快諾いただく
  4. 次のミートアップで、kawasaki.rbのメンバーに「発表してみたい?やってみたい?」と聞いたら思いの外反応が良かった

というようにトントン拍子でした。

自分としては、やるならいつもの地域コミュニティの皆が話せる場をつくりたい、と思っていたので、これはこれで良かったです。

とにかく楽をする

神奈川の時はペアプロあり、パネルディスカッションありのもりもりだったのですが、今回は「できるだけ楽をする」ということに徹しました。 東京Ruby会議11はかなりの額を動かすのでかなり重い感じだったのと対象的に、我々は

  • 手間を掛けない*1
  • お金をかけない

という方式で行きました。

なので、どうしてもやりたい!という人が現れないかぎりは、「やれたら良いよね」はやらないという方針のもと進めてきました。

当初はサイトロゴもなしで行こうとしていました。スタッフTシャツも皆大好きミュートンTシャツで行こうとしていました。そしたら、ロゴを作るよと実行委員のぺらさんの奥さんが言ってくださり、更にはミュートンの可愛さが理解できないためかTシャツもデザインをしていただくという流れになりました。TMIXさまいつもありがとうございます!

正直、この方法はやる気のある人に負荷がかかってしまうというデメリットはあるものの、手を動かす人が一番推進力はあるかなとも思うので、悩ましいところです。

なお、ぺらさんの奥様経由で重要なリンクが届いているので共有させていただきますね。

川崎Ruby会議01のスタッフTシャツ、デザイン素敵です! #tmix #kwsk01

igaigaさん(@igaiga555)が投稿した写真 -

やってみた感想

コンセプトの「kwskバザー」は、多分なんのこっちゃわからんだろうなぁと思いながら提示しましたが、大江戸Ruby会議の「生活発表会」からヒントを得ました。 始めた3年前の当初からPythonの話もあり、ずっと「kawasaki.rbはkawasaki.pyなのでは!?」というご指摘をいただき続けてきたので、いつもどおりやっていれば多様性がでるだろうな、という思いもあり、それを全面に出してみました。

都内だと特定の言語でも人が集まるかもしれませんが、川崎まで来ると遠い人は来ないのとRalisやってる人口も相対的に都内より少ないので、地域に根ざしたテックコミュニティとしてやってきました。なので、C#Scala、はてはサーバーレスアーキテクチャの話が出てきたわけです。

実際にその多様性について、簡単にまとめたリストが以下になります。気になる方は是非スライドや動画で確認してみてください。

  • Rubyファミコンの仕様
  • C#C++/CLI
  • Scala
  • Rubyと思ったら猫動画
  • Rails
  • Railsから気がつけばPHPに変わっていたでござる
  • "Railsエンジニア"はただの枕詞のサーバーレス
  • Python
  • Elixer本の宣伝
  • 世界をまたにかける話
  • Rubyと思ったら数学の話で終わってしまったでござる

プログラミングElixir

プログラミングElixir

また、パーフェクトRubyの読書会も続けているためか、「Ruby初心者です」という方もちょこちょこ来ていただいています。kawasaki.rbがきっかけで今回発表された蓑島さんのように一人エンジニアの環境で独学で業務でコードを書くようになった人、転職した人、Herokuのイベントに登壇した人、Railsを学び始めて起業した人など様々な人がいるのも特徴です。 正直、Rubyにとても詳しい人には物足りない側面もあるのかもしれないとは思うのですが、asakusa.rbなどとはまた違った路線で来ているのかなと思っています。 「ここに来れば困ったことを質問できる」とか「ここに来れば自分の知見を気軽に発表できる」という場所を続けてきたかいがあって、今回のregionalにつながったのだと思います。

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

個人的には、mameさんの発表中にも言われていた「最適化の心構え」のうち、

効果を検証せよ:実行平均時間の単純比較ではなく統計的検定とか使うといい。有意差がなかったら変更を捨てろ。

がとても印象的でした。普段検定というと限定された時にしか使われないという偏見があったのですが、ソフトウェア開発にも生きてくるというのは目から鱗が落ちました。

発表・参加いただいた皆様、どうもありがとうございました。そして、実行委員の皆様、本当に何もしない実行委員長でしたが全力でサポートいただきありがとうございました。

なお、明日はいつものkawasaki.rbを開催しますので、興味を持たれた方は是非ご参加ください :)

*1:Tokyuリスペクト

「夏真っ盛り!Spark + Python + Data Science祭り」を開催しました&Ibisを紹介しました #summerDS

2016/07/25に「夏真っ盛り!Spark + Python + Data Science祭り」を開催しました。

connpass.com

今回はClouderaに入って初めてのコミュニティイベントということでしたが、なんと400人を超える応募をいただいてとてもありがたい限りです。 会場をご提供いただいたDMM.comラボ様、発表いただいたサイバーエージェントの内藤さん、DMM.comラボの加嵜さん、LTの皆様ありがとうございました。

togetter.com

pandasを大規模データにつなぐIbis

www.slideshare.net

Ibisはpandasの作者でもある Wes McKinney(@wesmckinn) の作っているライブラリです。 ひとことで言うと、pandasのプログラマブルな処理を大規模データにもできるようにします。 大規模データは高速なSQLエンジンにまかせて、pandas likeなDSLでpandasと連携できるようにしており、データがTB以上のデータに対してもSQLを書かずに試行錯誤できます。

なお、日本語の情報はかなり少ないのですが*1、こちらのブログが参考になると思います。 もし、Impalaを試すのであればQuick Start VMか、Cloudera Directorを使うとブラウザでポチポチするだけでAWS, GCP, Azureに簡単にImpalaクラスターが立てれるのでおすすめです。Director導入方法はこちらが参考になります。

Ibisの詳細は資料を見ていただければと思いますが、いくつか補足をしたいと思います。

SQLじゃなくてプログラマブルなのは何が嬉しいの?

pandasをお使いの方はわかると思いますが、SQLに比べると試行錯誤がやりやすいと思います。例えば、SQLの途中結果を変数に格納できるので、途中までの処理は共通でそこから先を複数パターン作るというのも同じ変数に格納して、後段のメソッドチェーンを変えれば楽にできるというメリットが有ります。使っている感覚はRailsのActive Recordみたいなイメージです。

Sparkより7倍速いのは嬉しいの?

大事なのは15TBのデータを4.4秒で処理できる*2というスピード感です。処理を投げて帰ってくるまでの時間が短いと、思考の中断が減ります。 例えば、ビルドやテストに時間がかかってコーヒーをいれにいく、みたいな経験はあるんじゃないかと思います。その断絶がなくなるので、考えを継続できますし、ポッと思いついたことをどんどん試行錯誤できます。

Sparkとの住み分けは?

Ibisは、WesがPythonでend to endでPythonを使って分析をしたいという想いでスタートしています。 個人的にはJupyterとともに対話的に試行錯誤をする強力なツールになっていると思います。 もともとImpalaとPython/pandasをつなぐものとしてスタートしたのですが、RedshiftやPrestoなども今後対応していきたいということも言及されています。 なので、プロトタイピングにJupyterとIbisを使うというのが良いと思います。プロトタイプ後にSparkSQL*3でバッチとして安定化をはかるということもできるでしょう。

もう一つの方向性としては、NetflixがグローバルモデルをSparkで、国・地域のモデルをRで学習しているように、大規模な機械学習はSpark + MLlibで、絞った後のデータはIbis + scikit-learnでみたいな使い分けは可能だと思います。

サイバーエージェント内藤さん: Amebaにおけるレコメンデーションシステムの紹介

www.slideshare.net

Amebaでの協調フィルタリングによるHBaseを使ったリアルタイムレコメンドの話。 Hadoopスタックだとリアルタイム性を出すのにはHBaseを使うのが多いのですが*4、更にClick数を取得してバンディットアルゴリズムも使っているというのは凄いですね。

単純なA/Bテストをするという話はDMM.comラボの加嵜さんもお話されていましたが、バンディットアルゴリズムを組み合わせることで、レコメンド結果が複数のロジックの中でも良い物に動的に改善されていくという仕組みが入っています。 僕個人としてはこうした取り組みを聞いたことがなかったので、とても驚きました。

DMM.comラボ加嵜さん:Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化

www.slideshare.net

チューニングの話もインパクトが大きかったですが、jsonで「レシピ」を書けば、自分のサービスのレコメンドモデルができるという話はとても驚きました。 これを使えば、レコメンドに詳しくない人でも簡単にサービスに導入できそうです。 おそらく、ログフォーマットをきちんと統一して横展開をしているのでしょうね。

LT

horiken4 さん:初めてのSparkでハマったこと

Google Data ProcでSparkを使ったら/tmpにjarが貯まるなど、いろいろハマった話を紹介いただきました。

uryyyyyyyさん:EMR上でPython3系でpysparkする話

qiita.com

EMRにAnacondaをいれてPySparkでモデルを作る話でした。逆質問でJuliaを使ってると答えた人が2人くらいだったとのことで寂しかったです。

suthio さん:Sparkで実装しているレコメンドエンジンの基本的なパフォーマンスチューニング について

DAGを見よう!という話でした。そして、ポケモンGO仲間を募集しているとのことです。

終わりに

やはり、自社で手を動かして取り組まれているという話は、様々な知見が含まれていてとても楽しかったです。 AmebaのHBaseを使ったリアルタイムレコメンド+バンディットアルゴリズムという構成や、DMM.comラボさんのレコメンドの「レシピ」を書くだけで新規サービスのレコメンドモデルができるという話は衝撃的でした。

自分がホストしたイベントの中では過去最大の募集人数だったのですが、大盛況のうちに終わりました。ご協力・ご参加いただいた皆様ありがとうございました。 今回参加できなかった方もたくさんいらっしゃると思いますので、また次回もこういったイベントをできればと考えています。 乞うご期待ください。

*1:しかし、日本でIbisというと某研究会しか出てこないので非常につらい

*2:http://blog.cloudera.com/blog/2016/02/new-sql-benchmarks-apache-impala-incubating-2-3-uniquely-delivers-analytic-database-performance/

*3:こちらもIbisのスコープに入っています

*4:リクルートさんもHBaseを使ったリアルタイムレコメンドをしています