INFORMATION
テクノロジ
Scala by the Bay / Big Data Scala 2015 で NLP4L を発表しました
著者:関口宏司
San Francisco で8月13日(木)〜8月18日(火)に開催された Scala by the Bay / Big Data Scala 2015 で NLP4L を発表してきましたので、レポートします。
発表当日
カンファレンス最終日である8月18日が私のプレゼン。午前中の発表のため、朝イチから会場入り。緊張のためか前日はよく眠れず、また、夕方にはLucene/Solr勉強会で別のプレゼンを入れていたため、とても忙しくて長い一日となりました。
8月18日 SF での最も長い一日
San Francisco (SF) 出発前にいろいろ対応しなければならない問題が勃発し、十分な準備もままならないまま非常にふわふわした状態で臨んだプレゼン。カンファレンス日程は密度が濃く、滞在中は何もできずにあれよあれよという間に当日の朝を迎えた。SF から BART で15分ほどのところにある Oakland の会場には早く着きすぎてしまい、会場隣にあるメリット湖を眺めるなどして時間をつぶし、会場入り。会場である KAISER CENTER は発明から始まってセメント会社や石油パイプラインなどの事業を手広く行って財をなした1967年没の産業資本家である Henry J. Kaiser 氏の名前を冠したシンボリックな建物(ホテルにはなっていない)。出発前に日本で周辺のホテルを探すも Oakland のホテルは数が少なく、なんとなく寂しい感じがしたので隣町の SF にホテルを取ったが正解だった。Oakland は(SF に比べれば)実際に寂しい。しかしこのあたりに家を買ったり借りたりして住み、車で SF に通っている人も多いようである。KAISER CENTER に入ってすぐのエスカレーターで2階に上がるとそこが1フロア Scala by the Bay (SBTB) / Big Data Scala (BDT) の会場になっている。エスカレーターを登り切って踊り場を挟んで左手が受付とその奥がTrack Aの会場、右手がTrack Bの会場となっている。
Track A会場は300人ほど、Track Bは100人ほどが座れる大きさ。Track Aはシアター形式で1つのスクリーンが中央にどーんとある。Track Bは広いフロアの角を挟んで、スクリーンが2つ下ろされている。聴講者の座席は2つのスクリーンにそれぞれ正対する位置に半数ずつ並べられ、講演者は2つのスクリーンの間に立って90度に広がる聴衆に向かって話さなければならない。ちなみに SBTB/BDS はざっとの見積もりで、200人弱程度の入り。空席がかなり目立つ。後述の Tiho によると、集客目標は 250 人とのこと。
前日はやはり緊張していたせいだろう、よく眠れなかったので頭がぼーっとしていた。Track AのKeynote中にリクライニングのよく効いた椅子で眠りたかったが、Keynote も面白く眠れないまま自分のプレゼン時間となった。
私の発表はTrack B。ドコモの方もお二人聞きにいらしてくれた。私の発表内容は普段日本で行っているものと同じで、トレードオフ関係にある検索の精度と再現率をどのように両取りするかというもの。そのために NLP を使うという話しまでが普段日本で行っているものである。今回はさらにもう一歩踏み込んで、ランキング学習とパーソナライズ検索を Lucene で行う上での実装アイディアまで披露した。その全体をカバーする NLP4L Framework が今回新しい内容となっている。プレゼン終了の3分前くらいから”Time is up!!”の札が係員によって示されてしまい(しかしながら私のプレゼンツールの示す時間はまだ少し時間があったはずなのだが)、司会進行役に質問は後ほどということで閉められた。プレゼン終了後に個別に質問はいただいた。内容としては、分散インデックスでのサポートに関するもので、これには将来対応ですと答えるしかなかった。また、NLP4L 開発参加に興味があるという方も接触してこられたので、それなりの手応えはあった。参加者の必ずしも多くない SBTB/BDS の中でもニッチな検索というテーマであることを考えると、まあまあ健闘した方だろう。
プレゼン終了後はランチタイム。SBTB/BDS ではカンファレンス期間中、朝食とランチが振る舞われるが、サンドウィッチにうんざりし、日本のごはんやラーメンが恋しくなっている私としては「中華街に飲茶を食べに行かないか」というEvan Chanに喜んでついて行くことにする。Evan は Spark Job Server の開発者で、今回の期間中に行われた Pipeline Training の講師の一人でもある。車で行くのかと思ったら会場を出て30分も歩いたところにある中華街にようやくたどり着く。
食事中は投資家からのプレッシャーがきつく、スタートアップ各社の実は厳しい内情など、興味深い話を聞くことができて大変面白い。会場までももちろん徒歩で30分かかって戻り、合計で2時間を費やしてしまったので、おかげで株式会社D2C力徳さんのプレゼンを聞き逃してしまった。
その後SF市内に戻って夕方California St.沿いのCloudera社に移動。本日2度目の発表に臨む。こちらはLucidworks主催のLucene/Solr勉強会なので、SBTB/BDS でのプレゼンと少し内容を変えてある。たとえば「Luceneの紹介」を省いたり、検索精度と再現率の話しを簡略化したり、反対にランキング学習とパーソナライズ検索については話しをもう一歩踏み込んで用意した。Cloudera社に着きLucidworks広報のAleaさんと挨拶した後、勉強会開始前に振る舞われるピザとビールをいただく。参加者の中にLucene/SolrコミッターのErick Ericksonを発見。記念に写真を撮ってもらう。
勉強会はざっとの見積もりで30名弱の入り。80名超えのサインナップで30名弱なので日本より歩留まりは悪い。そもそも会場も普通の会議室っぽい場所なので、主催者側も80名を入れるつもりもはなからなさそうである。私はCloudera社のエンジニアの発表の後の2番手で登場。
こちらも個別に質問をいただいた。Erickからも質問をもらったが、英語がわからなかったので後でメールでもらうことにした。今回の勉強会でLinkedinでつながったMike Mianの質問もよく聞き取れなかったが何度も聞き返し、Mikeも根気よく言い換えたりしてくれてようやくポイントを理解できた。質問はパーソナライズ検索に関するもので、Appleを検索している人がComputerのAppleなのかフルーツのAppleなのか知るには文書のコンテキストを調べるのかというもの。私の答えは、それはあくまでもアクセスログ(またはクリックログ)から学習するものであるが、コンテキスト情報は助けにはなるかもしれません、である。3人目の質問者Brandonの質問は固有表現抽出に関するものだった記憶があるが、やはり寝不足で頭が働いていなかったせいか、今となっては思い出せない。しかし名刺交換すると、「実は・・・」といって「私はElastic社です」と名刺を渡された。後から聞いた話によると、Lucene/Solrの勉強会(SFでは(日本のLucene/Solr勉強会に比べると)小さい勉強会が頻繁に開催されている)には Elastic 社の広報やプロダクトマネージャなどの人間が送り込まれ、情報収集をしているという。「NLP4L もある日同じ機能がいつの間にか Elasticsearch で実装されているかもしれないから気をつけなよ」といわれたが、NLP4L は OSS 活動なのでいたしかたない。ただし、検索における精度と再現率の両取りの方法論の戦略は私のオリジナルなので、ここで明言しておこう。なお、NLP4L は Solr / ES の別なく両方で使える(Lucene ベースの検索システムで使える)。
なお、SF では ES はそろそろ頭打ちで、インデックス登録時にデータロス(*)のある ES は ELK Stack を用いた Analysis で、全文検索ではカスタマイズが柔軟な Solr でという棲み分けが進んでいるとの情報もある。データロスの話は Elastic 社自身が自社カンファレンスで発表して聴講者からも「ウケた」ということで周知の事実である。ES も検索というよりはログ解析製品 Splunk のサブを狙っている。
* https://aphyr.com/posts/323-call-me-maybe-elasticsearch-1-5-0
なお弊社は Solr と Elasticsearch については中立の立場を取っている。お客様から、「検索で使いたい場合、Solr と ES でちらがおすすめですか」と聞かれれば、全文検索における国内外の実績、日本語検索のカスタマイズの柔軟性、データロスのない点(データロスがあるとそもそも精度や再現率の話など成り立たない)などから Solr をおすすめしている(しかしこのような聞かれ方がされることはあまりなく、弊社にコンタクトがある時点でお客様自身の評価で Solr 決め打ちで来ることがほとんど)。しかし、ES を使った検索のトレーニングサービスやコンサルティングも行っているので、ここで宣伝しておきたい。ただし、ELK Stack は情報検索ではないので、弊社の専門外であり、今のところ扱っていない。
Lucene/Solr勉強会が終わりようやくホテルに帰って爆睡できるかと思ったら、元BASISの黒坂さんにお会いし飲みに行くことに。ホテルには23:30に帰館し、ようやく眠りにつけたのだった。
カンファレンスセッションなど
印象に残ったカンファレンスセッションなど記します。
Uncollaborative filtering: Giving the right recommendations when your users aren’t helping you
Salesforce の Leah McGuire さんによる、Spark MLlib を使ったレコメンドシステムの構築と評価およびモデル選択について。モデル選択は結局のところ、どの評価値を重視するのかで変わるとのこと。Big Data Scala でのセッションということで、数式も普通に登場してきた。
How you convince your manager to adopt Scala.js in production: Take 1
Katrin Shechtman と Dave Sugden の掛け合いトーク的な様相で進行するプレゼン。Scala.js に関するプレゼンがいくつかある中、タイトルに惹かれて聴講。現状の Scala.js の実際と導入の是非、サーバサイド Scala 技術がクライアントサイド JavaScript に使えるメリットについて紹介された。
An Introduction to NLP4L
宣伝っぽくなるが私のプレゼン。前述の通り、日本でいつも行っているものと半分内容は同じで、トレードオフ関係にある検索精度と再現率を両取りするためにNLPと機械学習を活用しましょうというもの。
まず再現率を向上させるためのひとつの手法として翻字を取り上げた。NLP4Lには英語を語源とするカタカナ語のアライメント付き教師データが付属するので、それをHMMで学習してカタカナ語から英単語を推定するツールを紹介。推定は間違う可能性もあるので(たとえば、「アルゴリズム」から推定される英単語は”algorism”となるなど。正解は”algorithm”)このままでは再現率の向上にはつながらない。そのため、大量の文書を収集し、カタカナ語とアルファベット文字列が近くで共起するペアを見つけ、それが同じものであるかどうかを調べるために翻字プログラムを使う。推定される英単語はスペルミスがある可能性があるが、編集距離的には近いはずなので、適当な閾値より編集距離が近ければ同じものとしてSolrの類義語辞書に登録する。私はこれでWikipediaから1800レコードの類義語ペアを収集した。なお、Wikipediaの代わりに適当な業務ドメイン(たとえば製造業とか)の文書から同様の仕組みでSolrの類義語辞書を生成することができる。
次に再現率向上に伴い低下してしまった精度を向上させる方法について。2通りの方法があり、ひとつはファセット(およびフィルタ検索)により漸次的に精度を改善する方法。もうひとつはランキング学習による方法である。漸次的精度改善は、非構造化文書では成り立たないので、そのためにNLPの1タスクである固有表現抽出を使おう、という話はこれまで日本でも行っている。今回はOSSのテキストアノテーションツールであるbratを使って日本語文書数千文に人手でアノテーションを施した話を紹介。
もうひとつの方法であるランキング学習は、将来対応であるNLP4L Frameworkの話の中で紹介。ランキング学習により精度はあいかわらず低くても、ユーザ視点からは高性能な検索エンジンという評価が期待できる。ランキング学習をさらにユーザ別に行うパーソナライズ検索のLuceneにおける実装イメージも紹介。
その他
その他の雑多な顛末記を記します。
8月20日 スタンフォード大学でのLucene/Solr勉強会
この日はスタンフォード大学でまた別のLucene/Solr勉強会が催されるということで行ってきた。勉強会の内容というよりも、スタンフォード大学に行ってみたいということで参加したものである。スタンフォード大学は、SF からは気軽にいってみようという距離では(私にとっては)ないので、これを機会に行くことにした。
行き方は、私のホテルのPowellからBARTでMillbraeまで行き、CalTrainに乗り換えてPalo Altoで下車。そこから無料シャトルバスLine Pに乗ってOvalまで行くとスタンフォード大学の正面(?)となる。MillbraeでCalTrainの自販機で切符を買おうとしたところ、おじいさんに声をかけられた。聞くと、間違ってPalo Alto までの切符を2枚買ってしまったとのこと。5ドルで買ってくれないかということで(正価は5.25ドル)、5ドルで購入。一緒にPalo Altoに向かった。おじいさんはミャンマーから6年前に移住。胸の病気を患い、スタンフォード大学内の病院に通院している。乗車時や降車時には特に改札などはなく、これでは切符いらないのではと思ってしまうが、おじいさんによると車内で検札があるとのこと。私が乗ったときはなかった。なお翌日完全フリーの最終日にCalTrainに乗ってサンノゼに行ったときは、車掌が回ってきて検札があった。ちなみにこのときの切符は7.25ドルで、25セントコインと10ドル札で購入したところ、おつりが1ドルコイン3枚が出てきた。どうも自販機が札のおつりを出せるようになっていないらしい。1ドルコインは珍しいと聞いていたが初めて見た。
道中は、「翌日(滞在最終日)が終日フリーなのでサンフランシスコ以外でおすすめ何かないですか」と尋ねるも、サンフランシスコ市外はスタンフォード大学の病院しかわからないらしく、情報が得られないままPalo Alto駅に到着。
駅に着くと、おじいさんの乗るシャトルLine Xはすでに到着していたのでPalo Alto駅で別れた。私の乗るLine Pはなかなか来なかった。30分ほどでようやくバス停にやってきた。他の大学生とおぼしき数人の若者と一緒にバスに乗る。発車すると15分ほどでOvalに着く。この時点で13時頃。勉強会の開始時間の6時にはまだまだ時間があるので広い構内を散策することに。
勉強会は図書館で開催されるのだが、図書館の建物は複数に分かれて点在している。勉強会が開催される図書館とは別の図書館に立ち寄り、VisitorのRegistrationを行う。その図書館は歴史に関する書籍が置いてあるということで、コンピューターサイエンスの本を聞くと、数学に関する本が置いてある別の図書館を教えられてそこに移動。ゆっくり歩いたので30分ほどかかった。しかし中は本当に数学しかなく、コンピューター関連はない模様。
その後ランチをとりながらさらに散策や読書(日本から「楽園(上・下)宮部みゆき著」を持参)や昼寝で時間をつぶし、ようやく6時になったので、勉強会の図書館に向かった。元BASISで現LucidworksのYannとNLPの話しなどで懇談。
前々日の勉強会で私の発表を聞いてくれたブライアンと遭遇。「話しが整理されていて非常によかった。将来計画もリーズナブルである」と好印象のコメントをいただいた。
8月16日 19:00-22:00 @ Rosenblum Cellars Speakers’ Dinner
カンファレンスの発表者は主催者のAlexyからディナーに誘われている。お言葉に甘えて参加することに。
ディナー会場へはPowellからBARTで移動するのだが、電車が遅れ、さらに場所がわかりにくくて30分の遅刻。12 st. 駅から徒歩20分ほど歩くと、見た顔が建物の外で談笑している。ぎこちなく話の輪に入り、合流。視線が合うとお互いの名前をいうことで自己紹介になり、Speaker同士ということで、「何を話すの?」「いつ?」「カンファレンスには全部出たの?」など、パターンの会話となる。
そのうち、立食タイムが終わり、店の中に移動。席についてのディナーとなる。私の左隣はカンファレンス主催者(社)のNitro社(ナイトロと発音)のAlexyの部下のTiho(右隣ともしゃべったが名前を失念)。Tihoはセルビア出身でカナダに移住し4年前にアメリカに来たという。私がNLPについての話ということでNitro社でのNLPの話になり(StanfordNLPを使ってフレーズを見つけるなど)、英語は簡単だとTiho。セルビアでは単語の後ろが七色に変化するとのこと。Tiho は日本語の単語分割の方法に興味を持つ。日本語は単語境界を見つけること自体が英語と違って難しい。タグ付きコーパスから学習して得たコスト付き辞書と接続表を使って単語分割を行い、単語ラティスを形成して最小コストのパス上にある単語を拾う話をする。最小コストパスを効率よく見つけるビタビアルゴリズムという用語も知っていた。
話は私の起業の話にまで及び、ひどく気に入ってくれて名刺をもらい(私は持ってなかったので翌日渡した)、帰りは Tiho の車でホテルまで送ってもらった。Spark Job Server 開発者の Evan Chan とも話し、precision と recall のトレードオフの問題を解決する話しをするんだよと説明したところ興味を持ってもらい、ぜひ聞きに行くよと言ってくれた。多くのセッションが何々のツールと何々のツールをこんなふうに使った話しとか、そこで学んだことなどの話しであり、逆に新鮮に映ったのかもしれない。
8月14日 カンファレンス初日のランチ
8月14日がカンファレンスの初日(8月13日はTwitter社主催のFinagleConという並列開催の別カンファレンス)。会場に到着して受付でRegistrationを行う。私はSPEAKERのはずなのに名札がATENDEEとなっている。せっかくなのでSPEAKERにして欲しいと言ってその場で印刷してもらった。SPEAKERは「お土産」が特別仕様。チョコレートやおもちゃ類が入っている。
ランチ時に、カンファレンススポンサーの1社である、Ticketfly の Robert さんと少し話す。Ticketfly はイベントのチケットを売りさばくサイト。メジャーになりたいストリートミュージシャンがTicketflyを使ってチャンスをつかめるのか聞いたところ、そういうサイトではないらしく、例えばイベント会場のオーナー側が登録し、イベントを見つけたい人たちがチケットを買うために集まるサイトらしい。私のことを聞かれたので、検索の会社をやっていて、Big Data Scala で検索をよくするための NLP について話すんですと言ったところ、Big Data は数式ばかり出てきてわからないんだよな、オレ単なるプログラマだから、とのこと。数学どうやって勉強したの?と聞かれたので、仕事の傍ら大学院に入って情報科学を勉強したんだよ、と答えた。
INFORMATION
KandaSearch
KandaSearch はクラウド型企業向け検索エンジンサービスです。
オープンAPIでカスタマイズが自由にできます。
セミナー
企業が検索エンジンを選定する際のポイントから、
実際の導入デモをお客様ご自身でご体験!