RELEASE
2014.07.24

パン田一郎の対話ロジック


ATL の伊藤 (takahi_i) です。

ちょっと前の記事でパン田一郎について触れました。本稿では「パン田一郎」という LINE アカウントがどのように返事を生成(対話)しているかについてもう少し詳しく解説してみます。

LINE アカウントパン田一郎の機能

LINE アカウントパン田一郎の主な機能はユーザから話しかけられる(メッセージを受け取る)と返事をする(メッセージ文を返す)というものです。以下の例ではパン田一郎が天気を聞かれて、返事として天気情報を返しています。

写真 3

全体像と構成要素

パン田一郎の対話部分は大きく分けて二つのコンポーネントからなります。

 

  • メッセージ処理コンポーネント
  • 対話文生成コンポーネント
  •  

    メッセージ処理コンポーネントはユーザから入力されたパン田一郎へのメッセージ(入力文)を処理します。メッセージ処理コンポーネントが抽出した情報をもとに対話文生成コンポーネントは 返事となるメッセージ(文)を生成します。以下各コンポーネントが行っている処理について説明します。

    メッセージ処理コンポーネント

    メッセージ処理コンポーネントではユーザから入力されたメッセージ(入力文)から情報を抽出します。情報の抽出には Apache UIMA というツールを採用しました。

    Apache UIMA を使ってユーザは非構造化データ(文書)に対する加工や、情報の抽出方法を定義できます。Apache UIMA の特徴として入力文書に対する処理がパイプラインとして定義されるという点があります。処理が「パイプラインとして定義される」とは、入力に対する処理が独立したステージ(単一処理をおこなうコンポーネント)の連なりとして表現されることを意味します。

    UIMA を採用した理由の1つは、メッセージ(自然言語文)という非構造化データに対する処理をパイプラインのステージごとに分離して開発できるためです。UIMA を利用せずに入力処理を1つの大きなプログラムで行ってしまうとどうしてもプログラムが大きくなり、将来の保守性、拡張性に影響します。

    今回は UIMA のステージとして処理を分離したため、小さな疎結合のプログラム集合としてシステムを構築できました。結果、将来個々のステージを簡単にアップデートできます。

    たとえば、パン田一郎では以下のようなパイプラインとなります。

    uima-linepanda.001

    上図を見るとわかるようにパン田一郎では、以下の処理が行われています。

     

  • 意図理解
  • 時間抽出
  • 場所抽出
  • 数値表現抽出
  •  

    現状各コンポーネントは簡単なパターンにより実装されておりますが、UIMA により各コンポーネントが疎結合になっているため、比較的気軽にアップデートできます。

    メッセージ処理コンポーネントで抽出された情報とユーザからのメッセージは、2つ目のコンポーネント、対話文書生成コンポーネントに渡されます。

    対話文生成コンポーネント

    ユーザからのメッセージとメッセージ処理コンポーネントで抽出された情報を元に対話文生成コンポーネントが返事を返します。

    対話文生成コンポーネントは入力メッセージと抽出された情報を元にどのような対話が行われるのかを決定します。

     

  • 時間を聞いている
  • 天気を聞いている
  • バイトを探している
  • バイトのスケジュールを聞いていいる
  •  

    決定された意図パターンごとに、返事文の生成ルールがあり各ルールに基づいて返事文の生成が行われます。

    返事を生成する上で難しいのは、「ユーザの意図がわからない場合です」。以下ユーザの入力意図がわからなかった場合の処理について解説します。

    意図がわからない場合

    対話文生成コンポーネントは意図によって返事文を生成します。ただし、ユーザの意図が理解できないもしくは、意図に対する返事文生成のルールが定義されていない場合があります。

    このような場合にもやはりなんらかの返事を生成しなくてはなりませんが、毎回「言っている意味がわからない」と答えたり、ランダムに返事を返すのでは自然なアカウントになりません。我々はこの問題に対して簡単なヒューリスティックで対処しています。

    具体的には、ユーザから入力されるであろうと考えられる文とその返事からなるペア集合を用意します。そしてユーザから入力が想定された入力との類似度がある一定上の場合にその返事を返します。

    今回触れなかった点

    今回解説した仕組みでユーザからの入力に対して返事を返せますが、実際にはもう少し複雑な処理が存在します。具体的にはユーザがバイトを探している場合などではどの地域のアルバイトを提示するかについての情報が必要なので聞き返す必要がありますが、現行のパン田一郎はこのような「聞き返す」という要件に一部ではありますが答えられる実装となっています。

    TAGS:

    RELEASE
    2014.07.19

    ベルリンスタートアップ武者修行記 その3(KIWI.KIについて〜参画スタート)


    atl_kuzuhara_berlin_img05

    atl_kuzuhara_berlin_img06

    (写真は実物の Ki と日本食が恋しくなって食べた肉うどん)

    こんにちは。ATL の葛原です。第3回目となります。

    今回は参画が決定したスタートアップ、KIWI.KI についてのご説明と、2月に入り、実際に KIWI.KI のオフィスにて働き始めた後の最初の所感について書きたいと思います。


    さっそく KIWI.KI についてですが、ここで私が詳しく説明するよりも、こちらのプレゼンテーション動画をご覧になった方がわかりやすいかもしれません。この動画は2013年10月に開催された TechCrunch Disrupt Europe 2013 の Startup Battlefield(それぞれのスタートアップが自社のサービス概要の説明や、今までになかった優れている点、マーケティング戦略などをプレゼンで競う)セッションの中で、KIWI.KI のファウンダー2人及びチーフアーキテクトの方がプレゼンテーションを行っているもので、実は私も昨年このイベントに参加し、実際に彼らがプレゼンテーションを行っているのを目の前で観ていました。


    正直このプレゼンテーションで語られていることが全てなのですが、簡単にこの記事でも記載すると、KIWI.KI はドイツの建造物、例えばアパートやマンションなどの外扉(日本で言うところのマンションのオートロックの入口のようなもの)の施錠管理をハンドフリーで行えるソリューションをサービスのコアとして現在は主にドイツ内にて事業展開を行っているスタートアップです。

    ハンズフリーでの扉の施錠管理には、RFID を用いたデバイスによる近距離無線通信とスマートフォンアプリを利用した管理の2つが方法として用意されています。特に前者を Ki と KIWI.KI では命名しているのですが(この記事に載せている写真がそれです)、ユーザーはポケットに Ki を入れ扉に近づくだけで、扉を解錠することができます。車のスマートエントリーキーと同じようなものです。

    もちろん外扉だけでなく、他のほとんど全ての種類の扉にも設置することができます(写真の Ki は KIWI.KI オフイス内の扉用のものです)。


    上述のプレゼンテーションでも言及されている通り、現状 KIWI.KI では一般のユーザー向けももちろんなのですが、主に BtoB に力を注いでいます。


    例えば、ドイツのアパートやマンションでは、郵便受けやゴミ収集場(箱)などは施錠された扉の内側に設置されていることが多く、ドイツの郵便業者(主に Deutsche Post)やゴミ収集業者(例えば ALBA など)は、それぞれのアパートの扉の鍵を何十本も持って、1つ1つ開けて実際の作業を行わなくてはならない現状があります。

    KIWI.KI ではこのような作業者及び企業向けにこのワイヤレスキーデバイスを提供し、将来何十本もの鍵を持ち歩く必要なく、1つのデバイスで担当するすべての扉の解錠を、可能にしようとしています。実際、すでにいくつかの在独企業にサービスの提供を行っています。


    ということで以上が簡単な説明となるのですが、その KIWI.KI で2月より参画をスタートしました。先ほど記載したとおり、私は2013年10月の TechCrunch Disrupt に参加しており、実際面談をした時も彼らがプレゼンをしていたことは覚えていたので、初めて KIWI.KI のことを知ってからわずか3ヶ月強でここで働くことになるという、なんとも不思議な感覚になったことを覚えています。


    いよいよ最初の日、まずは主にエンジニアの方々よりそれぞれどんな仕事をされているかをヒアリングすることからスタートしました。KIWI.KI には バックエンド、フロントエンド、組み込み、インフラなどのエンジニアの役割があり、それぞれについて説明を聞きました。

    まず驚いたのは、KIWI.KI はベルリンのスタートアップなのに、ドイツ人のエンジニアは1人もいません。実は2月当時と今で微妙にエンジニアの顔ぶれも変わっていたりするのですが、にも関わらず全員ドイツ国外より KIWI.KI に就職するために来独したエンジニアしかいないのです。


    オフィス内では全ての会話が英語にて進行するため、在独スタートアップですが、このような多国籍な顔ぶれとなってもなんら問題はないのです。

    ただ、今でも苦労している点ではあるのですが、全ての方が英語を母国語としているわけではないので、実際に喋る英語の発音など聞き取れなかったりすることが多々あったので、特に最初の、まだ英語にほとんど慣れていない時は何を言っているのか理解できないことが多々ありました。


    全てのヒアリングが終わった後は、API の仕様書を読み進めたり、実際のソースコードを読んだりといったことを導入として数日行い、その後最初のプロジェクトについての会話を始めました。

    その中で稚拙な英語でアイデアを出したり、提案したりしたのですが、そのほとんどがすでに彼らが検討済みでこれからすでに実装中あるいはリリース前のものばかりで、自分の浅はかさに少しがっかりしたのを記憶しています。


    ということでまずは簡単なところからやってみようということで、とある社内向けのスクリプトを書いて、小さくオープンソースとして出そうという結論となりました。

    仕事内容についてはまた後日記載したいと思いますが、最初の数日働いてみて感じたことは、

    • エンジニアはそれぞれの役割につき1人しかいない、UXデザイナーなども同様で、これで回せているのは個々がかなり優秀なんだろうと思った(特にチーフアーキテクトは本当にすごい)
    • 某動画ほどではもちろんありませんが、意外とビジネス側の方々がエンジニアの方々に無茶言って困らせていることがたまにあって、おもしろかった
    • Welcome な空気感もありつつ、どこかやはり不審に思われている節があり、英語もままならない中で溶けこんでいくのは苦労しそう
    • ランチの時とか、全然話せなくて結構きつい(予想通り)

    と言ったところです。次回以降仕事をしていく上で苦労したことや、仕事意外でもベルリンと日本での違いなど、書いていければと思っております。


    最後に、今も変わらずですが、私はドイツの食事があまり合わないようで、お腹をよく壊します。なので、日本食の店を頻繁に探しに出掛けたりしているのですが、そのうちの1つが写真の肉うどんです。他にも現在は色々と開拓したのですが、またご紹介出来ればと思います。

    実は内容は2月のことなのですが、書いている現在の日付は2013年7月14日で、ドイツ対アルゼンチンの決勝が先ほど終わったところです。街中で花火とクラクションと歓声が、鳴り響いています……。

    では今回はこの辺りで失礼します(次回へ続く)。

    TAGS: ,

    RELEASE
    2014.07.18

    Android Wear 勉強会の参加及び発表報告


    スマートデバイスグループの片渕 (@hotchemi) です。普段は Android の社内ライブラリ開発や基盤の整備などを行っています。今回弊社ビルで行われた Android Wear 勉強会に参加してきました。

    android-wear-conf

    本勉強会の詳細なレポートは下記ブログをご覧頂ければと思います。


  • Android Wear 勉強会 #2 〜めぐりあい Wear〜 講演資料まとめ #andwear
  • Android Wear 勉強会 #2 行ってきた!#andwear

  • 本勉強会では,プライベートの開発話となりますが私も発表させて頂きました。以下その資料を共有します。

    Google I/Oで開かれた Android Wear の可能性

    Google I/O 2014において A ndroid Wear SDK の大幅な強化が発表されました。具体的にはこれまで Preview 版でのみ対応していた通知(Notification) の確認,レスポンスに加え,Wear上で動作するアプリ (Wearabele app) や非公式ながら watchface というホーム画面をカスタマイズする機能が追加されました。これらの変更によって,開発者でできることの幅が一気に増えました。

    実装観点でも一部の例外を除き基本的な Android 開発の知識があれば容易にアプリを作成できる為,エコシステムとしてスケールする可能性が大いにあるのではないかと考えています。

    また,Google I/O のセッションで Google Glass が Android Wear に対応するという発表がありました。つまり対応後は Google Glass も「Android Wear」というブランドで扱われるそうで,時計というハードウェアに留まらず Google のウェアラブル戦略を支えるアキレス腱となるプラットフォームといえます。

    ウェアラブル時代のデザイン

    先程実装は簡単といいましたが,ユーザーにとって最適なアプリを届ける為には実装レイヤーの理解だけでは不十分です。

    勉強会の中でもしきりに言われていた事なのですが,一番注目すべきはデザインです。PCやモバイル/スマートフォンなどではある程度ユーザーインタフェースの設計が確立されているのに対し,ウェアラブル (今回でいえば時計) アプリのUI設計はまだまだ未開拓の分野といえるでしょう。この辺りは Googleの公式ドキュメント を熟読し,しっかりとユーザーのコンテキストやユースケースについて理解する必要があります。

    また,ソフトウェアに留まらずハードのデザインというのも非常に重要です。普段時計をしている人がファッションの一部として着用してる事から分かるように,ウェアラブル端末にはデザイン性が不可欠だと言えます。この辺りは今夏に出るとされる Moto 360 や今後の時計メーカー・ファッションブランドの動きに注目です。

    最後に

    海外では allthecookseat24Fancy など積極的に Android Wear 対応を進めているサービスが目を引きますが,国内では Android 端末の普及率の低さもありまだそれほど熱気が無いように感じられます。リクルートテクノロジーズでは,Android Wear を含めたウェアラブルのノウハウについて今後も積極的に知見を共有していきたいと考えています。

    TAGS:

    RELEASE
    2014.07.16

    社内共有会で使用した RedPen 資料と進捗


    ATL の伊藤です。

    最近行われた社内での技術共有会で RedPen について紹介しました。以下そのときに使用した資料となります。

    RedPen は ATL で開発している文書の自動チェックツールです。少し前の ATL ブログ記事で本ツールの開発について触れましたが、現在も正式版のリリースに向けて開発を続けています。

    本稿ではリリースに同梱予定の機能について簡単に紹介いたします。

    簡易サーバ

    RedPen のコマンドツールとしての使い方については以前のブログ記事で触れました。コマンド以外の利用手段として RedPen の簡易サーバを提供する予定です。実はすでにサーバ機能は同梱され、動作する状況です。では RedPen サーバを動作させてみましょう。

    まずは、RedPen をダウンロード、ビルドしてください (Git と Maven が必要になります)。

    次に server ディレクトに移動してサーバを起動します。

    これで RedPen サーバが localhost の 8080 ポートで起動しました。お持ちのウェブブラウザで http://localhost:8080/ にアクセスすると、下記のページがみえます。

    redpen-1

    ページ上の入力フォームに以下の文を入力して、Submit ボタンを押してください。

    すると、以下のようにチェック結果が出力されます。

    redpen-2

    上記の結果より、RedPen 入力中に文長が長すぎたり、句読点の不一致があることが確認できます。

    デフォルト辞書

    RedPen が提供する一部の Validator は辞書を使って入力文書をチェックします。たとえば、InvalidExpression Validator は入力文に含まれる、所謂よろしくない表現を抽出します。不正な表現をいちいち追加する作業は、自分で使ってみた結果かなり大変なため、デフォルトの辞書を提供することにしました。

    たとえばここで日本語のデフォルト不正表現リストがありますが、もう少し拡張したいと考えています。

    Validatorの追加

    現在 Validator の追加を行っています。以下の Validator が提供される予定です。

  • 英単語スペルチェッカー
  • Link (URL) validator
  • 省略表現 validator
  • まとめ

    本稿でははじめに社内要求会で利用したスライドを紹介しました。その後、今後搭載サポート予定の機能に<ついて簡単に紹介しました。

    今後もゆっくりと開発が続いてゆく予定ですので暖かく見守っていただければと思います。どうぞよろしくお願いいたします。

    TAGS: ,

    RELEASE
    2014.07.16

    ベルリンスタートアップ武者修行記 その2(スタートアップ3社との面談〜生活準備)


    atl_kuzuhara_berlin_img03

    atl_kuzuhara_berlin_img04

    こんにちは。ATL の葛原です。前回に引き続き第2回目です。

    前回着任後数日間で色々とトラブルがあったと書きました。時系列的に前後しますが、実は着任日の翌日より3日連続で、今回のプロジェクトの主目的たる、スタートアップとのコラボレーションに向け、まずは候補先企業3社との面談という超重要なイベントがありました。すでに候補先は用意されており、日本出国直前より着いて早々連続で面談ということは認識していました。が、時差ボケも全く治っていない状態で、しかも英語での面談ということで戦々恐々としており、この状態で面談に放り込まれて正直どうなるのかも全く予想できませんでした。

    面談の観点は、私自身どこで働いてみたいか、それが全てでした。正直英語もままならない、どこの馬の骨ともわからない若造の日本人がベルリン現地で現役バリバリのスタートアップの中から1つを選ぶというのは、恐縮な気持ちでいっぱいでしたが、ここでの選択が今後の全てを左右すると考え、どの面談にも真剣な気持ちで挑みました。

    3社全ての社名はここでは伏せますが、3つの面談を通じて感じたことを個人的な感想含めそのまま書き下します。日本含め他の国のスタートアップ事情には正直詳しいとは言えないので、ここではこの3つのみを通じて感じたことを書いています。

    • ファウンダーの方々は皆、野心はもちろん、スケールさせるための筋道をちゃんと描けている
    • テクノロジーだけでもビジネスだけでもなく、両方に意欲的に取り組んでいるのをとても感じる
    • プレゼンめちゃくちゃ上手い、自分たちのビジネスを伝えるのにとことん慣れている感じがする
    • 日本から来た初対面の自分のために、必死で働く上での選択肢を用意してくれていたり、働き方のスタイルを提案してくれたりしてくれる
    • 色々ひしひしと伝わってきたけど、英語、全く話せないので自分のことはほとんど伝えられない(予想通り)

    大きく感じたのはこの5つです。最後のは当たり前ですが。

    そして怒涛の3連続面談が終了。ここから、決める時間に入ります。

    正直、かなり悩みました。実際、一度決めた後それを覆して、最終的に別の1社に変えたくらいです。

    決め手となったのは、

    • ビジネス的な魅力はもちろんだけど、やはり1番技術的に強そうなところに行きたい
    • スタートアップという観点で、あるステージに達している企業、これからそのステージを目指す企業、そしてそのステージに間もなく辿り着こうとしている企業の中だと、個人的には3番目の企業で働いてみたい

    という2点でした。

    結論、KIWI.KI とのコラボレーションを選択することとなりました。このスタートアップがどんなところかというのは次回以降に記載しますが、参画後約5ヶ月経過した今でも、この選択は間違っていなかったと私は思っています。

    ということで、KIWI.KI で今後のベルリン駐在期間中働くこととなったのですが、諸事情により実際の参画は2月からということとなり、少し空き時間ができたため(決定時点ではまだ1月)、この期間で色々と生活準備を片付けることにしました(着任後面談ラッシュでほとんど何もできていなかったため)。

    覚えている限り、生活周りやったことを書くと、

    • 住民登録(市役所へ)
    • 銀行口座の開設
    • 生活雑貨の購入(こっちの IKEA と無印に行きました、布団、枕、タオル、ルームシューズその他たくさん)
    • 家電の購入(洗濯機、電気ポットなど)
    • 定期券の購入
    • 携帯回線の契約
    • DSL(ドイツでのインターネット回線の主流)の契約

    こんな感じです。特に DSL は日本でもそうですが、契約から開通まで1ヶ月弱かかったので、最初の1ヶ月は自宅でのネット利用が不便でした。

    またほとんどの人が英語ではなくドイツ語で喋ってくるので(意外とこっちの人英語喋れなかったりする)、正直現地にいる日本人の方(ドイツ語ぺらぺら)にサポートいただかなかったらすごい時間かかっていた気がします……。

    最後になりますが、今でもそうですがこっちで住んでいるアパートにはかなり満足しています。特にバルコニーから見える湖の景色はお気に入りです。

    ということで次回からは KIWI.KI への参画スタート後の記事を書きたいと思います(次回へ続く)。

    TAGS: ,