Amazon SageMaker ハンズオンレポート

はじめに

AIシステム部・AI研究開発グループの益子です。 現在はオートモーティブ事業において、AI研究開発エンジニアとして働いています。

先月20日、DeNA社内において、アマゾン ウェブ サービス ジャパン(AWS)様より「Amazon SageMaker」ハンズオンを実施していただきましたので、その模様をレポートさせていただきます。

DeNAでは、すでに数多くのサービスでAWSを活用しています。私の所属するAIシステム部もその例外ではなく、機械学習のモデル開発に幅広く利用しています。

昨年のAWS re:Invent 2017において「Amazon SageMaker」が発表されましたが、発表の後さっそく社内でも利用したいという声が上がり、AWS様より社内エンジニア向けハンズオンを実施していただけることになりました。

Amazon SageMakerとは

Amazon SageMakerとは

  • AWSインスタンス上にJupyter Notebookを構築
  • Notebook上での機械学習モデル実装
  • AWSのインフラを利用した、分散学習
  • 学習したモデルを組み込んだ予測APIの自動生成

まで一貫して行える、フルマネージドサービスです。 https://aws.amazon.com/jp/blogs/news/amazon-sagemaker/

Jupyter Notebookといえば、すでにデータ分析/機械学習アルゴリズム開発においてデファクトとなりつつあるツールですが、それがコンソールからポチポチするだけで、簡単に構築できるのはかなり大きなメリットとなります。

img1.png

SageMakerの機能 (講義資料より)

また、これまで機械学習サービスを開発する場合には

  1. 学習環境構築とデータ整備 (インフラエンジニア)
  2. 機械学習モデル実装(機械学習エンジニア)
  3. 学習済みモデルをサービス内にデプロイ(サービス開発エンジニア)

の手順が必要であり、案件によっては複数のエンジニアが関わる必要がありました。

SageMakerにより1.と3.の手順がほぼ自動化されるため、機械学習エンジニアはモデル実装に集中でき、また単独でサービス展開まで行うことも可能になります。

ハンズオンの流れ

20180309_190140.jpg

当日は、AWSより志村誠さんを講師に迎え、主に機械学習アルゴリズムのサービス適用という話題を中心に講演していただきました。

前半はスライドを用いてSageMakerの概要の説明、後半は実際に弊社環境内にJupyter Notebookを立ち上げて、ハンズオンという形式になっています。

ハンズオン参加者の内訳

DeNAからはエンジニアを中心に50名超参加しました。

chart_capture.png

参加者の内訳

参加者の内訳を見ると、幅広い分野のエンジニアが参加しています。また今回エンジニア向けとして開催したのですが、ビジネスメンバーからも参加があり、機械学習への関心が非常に高いことが伺えます。

それでは、以下当日のハンズオンの流れに沿って、詳細をレポートしていきます。

前半: 講義

前半は講義形式をとり、SageMakerについて解説していただきました。

img2.png

講義資料より

SageMakerを利用して機械学習を行う場合、主に3つの選択肢があります。

  • ① AWSが提供するアルゴリズムを利用
  • ② AWSがサポートするフレームワークを利用
  • ③ それ以外のアルゴリズム・フレームワークを利用

もっともお手軽なものが①で、すでにある程度の機械学習アルゴリズムはプリセットとして用意されています(後述)。

②は①に含まれないアルゴリズム、例えばディープラーニングモデルを独自に実装したい場合に利用することになります。対応しているフレームワークは限られていますが、分散学習もサポートされるので、柔軟性もありつつ、クラウドのメリットを享受できます。

もっとも柔軟性があるのは③の方法ですが、こちらは学習用のDockerコンテナを自前で用意する必要があり、一手間必要です。その代わり、①、②で提供されていないアルゴリズム・フレームワークが利用可能となります。 DeNAではchainerで開発しているチームも多く、その場合は③の方法になります。今後も①〜③の方法を適材適所で使い分けていくことになると思います。

①のAWS提供アルゴリズムですが、すでに一般的な回帰・分類問題などがカバーできるように用意されているようです。

img3.png

講義資料より

今回のハンズオンでも、①Amazon提供のアルゴリズムを利用した線形回帰問題のケースを実装していきました。

後半: ハンズオン

img4.png

当日の様子

ここからは、参加者全員分のJupyter Notebookインスタンスを立ち上げ、実際にSageMakerによる機械学習をいくつか試していきます。

Notebook インスタンスの作成

Notebookに利用するインスタンスタイプなどを設定するだけで、あっという間にJupyter Notebookが立ち上がりました。 notebook_creation.png img5.png

AWS提供アルゴリズムによる線形回帰 - 学習

サンプルとして、まずはAWS提供アルゴリズムの線形回帰モデルを試しました。 img6.png

img7.png

ハンズオンに使用したノートブック

データロードの部分は省きますが、AWS提供のアルゴリズムを利用した場合、上記コードだけでモデル学習を実行してくれます。学習用の関数であるlinear_estimator.fitを実行すると、Notebook インスタンスとは別に学習用のコンテナが立ち上がり、ジョブを実行してくれます。

img8.png

講義資料より

内部の挙動としては、SageMakerがS3から事前に配置した学習データを読み込み、コンテナ上で学習、学習した結果のモデルを再度S3に書き戻しておいてくれる、という仕組みになります。

S3に出力される学習済みモデルファイルですが、AWS提供アルゴリズムの場合はSageMaker専用になっているためエンドポイント経由での推論が前提となります。一方でDLフレームワークで独自実装した場合や、学習用コンテナを用意して学習したモデル(手法②、③)に関しては、S3から直接モデルファイルを取得して推論アプリケーションに組み込むことができるそうです。

AWS提供アルゴリズムによる線形回帰 - デプロイと推論

img8_2.png

講義資料より

学習が終われば、上記のようにdeployを実行するだけで推論エンドポイントが作成されます。

img9.png

講義資料より

作成したエンドポイントに対して、入力データを投げると、推論結果が返ってきます。ハンズオンではHTTPリクエストをする代わりに、ノートブック上から直接エンドポイントを実行する方法をとりました。 img10.png

今回割愛させていただきますが、ハンズオンではその他、tensorflowによるirisデータセットの分類問題にも取り組みました。

DeepAR による時系列予測

講演の中では、DeepAR 使った時系列予測タスクも紹介されましたので、手元でも試してみました。

データセットとして予め波形データを作成し、これを学習させます。 img11.png

データセット

ここでは実行コードは省きますが、全体の処理の流れは線形回帰で試したものと同様です。

img12.png

DeepARによる推論結果

推論結果として、80%信頼区間と予測中央値を得ることができました。 トレンドはうまく捉えられているようですが、ピーク部分にずれがあります。ここはさらなるチューニングで改善できるかもしれません。

DeepARは元々、Amazon.com内における予測タスクに利用していたものだそうです。 AWS提供アルゴリズムのため、特別なセットアップをする必要なく、時系列予測問題に適用することができます。 時系列予測モデルはビジネスシーンでも利用頻度が高く、例えば機械学習アルゴリズムには詳しくないエンジニアやアナリストが、とりあえず現場のデータで精度が出るかやってみたい、という場合に使えそうです。

まとめ

以上、ハンズオンでは実際にAWS上で機械学習アプリケーションの学習とデプロイまでを行うことができました。

モデルの実装から推論用のエンドポイントの作成まで、特別インフラを意識する必要はありません。機械学習エンジニアにとってはよりアルゴリズム開発に集中できるのではないかと思います。

現在Google Cloud Platform上にも同様なサービスとして「Cloud Machine Learning Engine」がありますが、機能の違いなど比較すると面白そうです。

最後に、個人的に便利だと思った点をいくつか上げておきます。

  • 単純にmanaged Jupyterとしても利用できる
    • SageMakerはモデル実装から学習、デプロイまで一貫して行えるサービスですが、それぞれ一部だけ利用することもでき、Jupyter Notebookだけの利用も可能です。これを使えば簡単にGPUインスタンス上にJupyterを立ち上げてさっと使う、ということもできそうです。
  • データの暗号化に対応
    • 学習データ/推論結果も、プロダクションレベルにおいては高いセキュリティレベルでの取扱いを要求される場合も多く、データを暗号化する仕組みがサポートされているのは助かります。

注意点も上げておきます。

  • 現在SageMakerは東京リージョンでは提供されていませんので、実際のサービスに組み込む際には留意しておく必要があるでしょう。
  • Notebookインスタンス数など、SageMaker に利用するリソースはアカウントごとに上限が設定されています。もし社内で大規模に利用する場合には、事前に上限を上げる申請をしておく必要があります。(今回のハンズオンでも実施しました。) https://docs.aws.amazon.com/jajp/general/latest/gr/awsservice_limits.html

以上.

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2018 開催レポート[4]

SWETグループの加瀬です。
DeNA TechCon 2018の開催レポートもいよいよ今回で最後となります。

過去のレポートはこちら
第1回 第2回 第3回

今回は、ORANGE Stage 『DeNAのゲーム開発』とClosingの発表の紹介です。

『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜

tech_con_day4_1_resized.jpg

『逆転オセロニア』における運用効率化支援 〜デッキログのデータマイニング〜 from DeNA

AIシステム部 AI研究開発グループの田中による、『逆転オセロニア』でのデッキ分析手法の発表でした。

デッキ構築型のゲームアプリでは、各プレイヤーの使用デッキが固定化してしまうとゲームの楽しみが損なわれてしまいます。そのため、ゲーム内で現在よく使われているキャラやデッキの状況を把握することは、運用するにあたり非常に重要です。
発表では、実際の対戦ログからデッキに組み込まれるキャラの関係性や、キャラの特徴的な組み合わせを抽出して可視化することでゲーム運用に活用している事例が紹介されました。

大規模ゲーム開発におけるbuild高速化と安定化

tech_con_day4_2_resized.jpg

大規模ゲーム開発における build 高速化と安定化 from DeNA

ゲーム・エンターテインメント事業本部 Japanリージョンゲーム事業部の田辺による、アプリゲームのビルド改善の発表でした。

昨今のスマートフォンゲーム開発は大規模化・複雑化しており、ビルド時間が長くなるという問題があります。発表ではUnityのAssetBundleビルドの高速化、Jenkinsでの分散ビルド、Sakashoを用いるDeNAのゲーム開発特有の自動化フローなど、ビルドに関するノウハウが紹介されました。

協業アプリ開発を推進するテクニカルコンサルタントの挑戦 〜『歌マクロス』を成功に導く技術支援〜

協業アプリ開発を推進するテクニカルコンサルタントの挑戦 〜『歌マクロス』を成功に導く技術支援〜 from DeNA

ゲーム・エンターテインメント事業本部 Japanリージョンゲーム事業部 開発基盤部の高橋による、テクニカルコンサルタントに関する発表でした。

DeNAでは協業開発体制によって開発・運用されているゲームタイトルもあり、テックコンサルはそのようなタイトルの技術的な課題への対応を行っています。発表ではパフォーマンス対策といった技術的な内容から、運用のための体制の整備などといった多岐にわたるテックコンサルのサポート内容、過去に起きた問題の解決事例まで、非常に幅広い内容が紹介されました。

世界へ向けたゲーム開発 〜ローカライズ支援ツール『LION』〜

tech_con_day4_3_resized.jpg tech_con_day4_4_resized.jpg Japanリージョンゲーム事業部 開発基盤部の立浪と、グローバル推進部の中本による、内製のローカライズ支援ツールの発表でした。

世界へ向けたゲーム開発 〜ローカライズ支援ツール『LION』〜 from DeNA

ゲームのローカライズを行うには、翻訳対象となるファイルの用意からスケジュール調整など非常に複雑なタスクが数多く存在し、それらを手作業で行うことは困難となっています。
発表では、開発しているローカライズ支援ツール『LION』によってタスクの管理がどのように効率化されるかという内容が、実際のスクリーンショットも交えながら話されました。

DeNAのネイティブアプリにおけるサーバ開発の現在と未来

tech_con_day4_5_resized.jpg

DeNAのネイティブアプリにおけるサーバ開発の現在と未来 from DeNA

ゲーム・エンターテインメント事業本部 Japanリージョンゲーム事業部 開発基盤部の北澤による、ゲーム開発のサーバー側の発表でした。

DeNAの多くのゲームアプリでは、サーバー側の実装にSakashoと呼ばれる内製のBaaSを使用しており、ゲームによくあるサーバー側のロジックはSakashoに集約されているため、効率的に開発が行われています。
発表では「現在」として、Sakashoを開発した経緯やその結果の現在の状況が紹介されました。そして「未来」として、現状を振り返って判明してきた問題点を改善する次のプロダクトを開発中であるという内容が話されました。

Closing

tech_con_day4_6_resized.jpg DeNA TechCon最後の発表は、取締役の川崎よりClosingとしてまとめの話がありました。

DeNAでは近年AIやオートモーティブ事業に注力しており、それらが未来への仕込みから現実的にサービスを作る段階になったことで、今年は去年よりも発表される内容が具体的になってきました。
事業の幅が広くなったことにより色々な働き方ができるようになった反面、隣の部署がやっていることが見えづらくなってきているので、DeNA TechConによってDeNAの社員も隣の部署がどのような技術を使っているのか知る機会となり、価値が高いイベントになっています。
DeNAはビジネスが強い会社だと思われることが多いですが、ものづくりにも強くてビジネスと両輪になっている、という内容の話でした。
発表後、参加者に飲み物が配られ、乾杯と共にそのままAfter Partyが始まりました。

tech_con_day4_7_resized.jpg

最後となる第4回は、ORANGE StageとClosingの紹介でした。 2018年のDeNA TechConの開催レポートは今回で終了となります。
お越し頂いた皆様、登壇された皆様、スタッフの皆様、お疲れ様でした!!

最後に、レポートでは紹介できませんでしたが、当日は4つのStageに加えてCasual Talkの発表も並行して行われていました。
Tech Conのホームページではここまで紹介してきた発表と、Casual Talkのスライドと動画が公開されていますので、ぜひ訪れてみてください。

それでは、来年もDeNA TechConでお会いしましょう!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

try! Swift Tokyo 2018 参加レポート

はじめに

17新卒iOSエンジニアの神武(@koooootaken)です。 2018/03/01-02に、ベルサール新宿グランドで、Swiftに関するコミュニティ主催のカンファレンス、 try! Swift Tokyo 2018に参加してきました。その様子をお伝えします。

tryswift

try! Swift Tokyo 2018の雰囲気

try! Swift Tokyo 2018では1つの会場で参加者全員が同じセッションを聞く形式で行われました。カンファレンスにしては珍しい。

会場

セッションは大半が英語で、トランシーバーによる同時通訳が行われていました。同時通訳は感動もので、喋りながら聴き、専門用語盛りだくさんの発表をよく精度高く通訳できるなと。発表者から聞いた話しによると、事前に日本語と英語の原稿を渡し通訳者さんと打合せしているそうです。日本語で発表されている方も、スライドに日本語はほとんどありませんでした。

参加者も海外の方が多く、隣の席の方が英語で声を掛けてくださった時には慌ててしまいましたが、そのまた隣の席の日本の方のお力も借り、どんな開発をしているかなどのコミュニケーションを取り盛り上がることができました。

また、Q&AブースにはAppleの社員の方が7名も待機しており、とても重要なカンファレンスである様子が伺えました。

ここで、参加した社員の知見や感想を記したレポートを5つ、発表セッションごとに掲載します。

Introducing Charles for iOS @avon

コマース&インキュベーション事業部という新規事業をガンガン開発するチームに所属している @kozyty がレポートします。

みなさん!Charles使ってますか?便利ですよね。 発表は、 @avon が日本語で挨拶して「5年間日本語を勉強したけど全く覚えてないから、ここからはGoogle先生にお願いするね(意訳)」と、場を笑わせつつはじまりました。

そんな雰囲気のままCharlesをFLASHの開発のデバックのために作った話をしたあと、Charles for iOSを開発する理由について教えてくれました。

「プロキシ設定が面倒だったり、設定をしていたのを忘れて通信できなくなったりする」など辛かった点を教えてくれました。だからこそ、iOS上で Charlesを実行したかった!だからコードネーム CHARLIE が始まったとのこと。Charles for iOSの発表と同時に会場は盛り上がりました。

まとめると Charles for iOS の便利な点は以下とのことでした。

  • No more proxy settings (プロキシ設定が不要)
  • No longer need a computer (コンピュータが不要)
  • Wi-Fi and Mobile data(モバイルネットワークも使える)
  • 格好いい(格好いい)

個人的には、「モバイルネットワークは熱いな!」と思いつつも。 それ以上に強力だと感じた点は、「iOSでできることは端末側で行い細かいデバックはPCで行う」という本来あるべき姿になることでオーバーヘッドが削減されることなのではないか...?と感じました。移動中にロギングしたり簡単なデバックもできるのは良さそうですよね。

執筆時点(3/4)ではまだAppStoreにありませんが、審査が無事通過して利用できることを祈っています!!とても楽しみですね!

リンク

game @giginet

コマース&インキュベーション事業部でライブ配信の新規事業を開発している @noppefoxwolf です。

try! Swift Tokyo 2018は多種多様なSwiftに関するセッションを聴くことが出来ました。 その中でも異色のセッションといえばfastlaneのメインコントリビュータでもある、@giginet氏のgameではないでしょうか?

このセッションでは「Xcodeは実はゲーム開発環境だったのです」という力強い言葉から、Xcodeのゲーム開発ツール群を紹介して始まりました。 特にXcodeに2D Map Editorがあったことを知らなかった自分はこの瞬間からセッションに釘付けになりました。

giginet氏のインディーゲーム開発の経験からSpriteKitを紹介する場面では、 Riko(try! Swiftのメインキャラクター)を爆破するデモゲームの実装を紹介し、SpriteKitの実装の簡単さをユニークに表現されました。 ここでSKSceneのライフサイクルやタッチイベントハンドラーがUIKitでの開発に非常に似ている事に気がついた方も多かったと思います。

中盤はGameplayKitのコンポーネントを紹介。 ゲーム開発に必要なアルゴリズムやデザインパターンを簡単に扱えるフレームワークは工夫次第では通常のネイティブアプリ開発でも使えるのでは無いかと思いました。

またSpriteKitに関するOSSでの取り組みではUnityでのUniRxに相当するRxSpriteKitを実装していることや、 Apple以外のプラットフォームでSpriteKitを動作させるプロジェクトが存在している事にも言及。

Appleのこれからのゲーム開発環境に対して冷静に分析しつつも、ゲーム開発者ならではのユニークな切り口で会場を沸かせました。

ARKitの登場でSprite/SceneKitの開発需要は一層増してきました。 これまでのネイティブ開発者が同じSwiftを使って開発できる環境として、これらの技術をキャッチアップしていく必要性は感じつつもなかなか触れられずにいる方も多いのでは無いかと思います。 そんな中で@giginet氏のセッションは開発者にSpriteKitの可能性や取り組みやすさを再認識させるものだったのではないでしょうか。

リンク

Swift エンジニアのための Kotlin 入門 @designatednerd

SWETグループでテストエンジニアをしている @tobi462 がレポートします。DeNA Testing Blogでテストに関する記事も公開しています。

この発表ではSwiftと比較しながらKotlinを紹介するという内容でした。私自身もKotlinを学習中だったので注目していた発表の1つでした。

まずはKotlinが登場した背景について語られました。

  • IntelliJ IDEAを開発しているJetBrainsが、既存のJVM言語に満足できなかったので開発した
  • Clojure、Groovyは機能として不足していた
  • Scalaは望む機能を備えていたがコンパイル速度が遅い

次にSwiftとKotlinが似ている点について語られました。

  • リテラル
  • ジェネリクス
  • ファーストクラスとしての関数
  • map / filter / reduce などのリスト操作関数(ただし微妙な差異はある)

続いてSwiftとKotlinがお互いに盗むべきだと考える機能について紹介がありました。

  • Kotlin
    • guard-let によるアンラップ・早期リターン
  • Swift
    • apply による連続したプロパティ設定(レシーバ付きラムダ)

apply については、私も以前似たようなQiita記事を書いたことがあったので、やはりSwiftにも欲しい機能だと改めて思いました。

残りはKotlin/NativeやKotlinの学び方などについて説明があり、最後には「try! Kotlin」とのことで上手な締め方だと思いました。

この発表でも触れられていましたが、Androidエンジニアとのコミュニケーションにもつながると思うので、この機会にKotlinを勉強してみるのも面白いのではないでしょうか。

レスポンダチェーンを知ろう @samuelgoodwin

社内で(多分)一番最初にSwift4移行しました。Swift大好きエンジニアの @malt03 です。 この発表では、@samuelgoodwinさんがレスポンダチェーンについて詳しく解説されていました。

私は入社以来iOSアプリを触っているにも関わらず、イベントがレスポンダチェーンによって受け渡されていることを理解していなかったので、とても興味深いセッションでした。

発表の最後にもありましたが、Appleのドキュメントを参照すると、正確な情報を得られます。

レスポンダチェーンとは、UIResponder.nextでつながっている片方向リスト[注釈]です。 iOSにおいてイベントは、イベント毎に定義されたファーストレスポンダからこのレスポンダチェーンに従って受け渡され、チェーンの中で、初めにそのイベントを処理できたレスポンダがイベントの処理を行います。 通常、チェーンの最後はAppDelegateになっています。

発表では、nextにカスタムオブジェクトを代入しておくことが出来るとありましたが、私の見る限りnextはreadonlyであり、代入は出来ませんでした。 nextのgetterをoverrideすることは出来ますが、全てのイベント処理に影響するバグの温床になるので、個人的にはオススメしません。

レスポンダチェーンを使う場面として便利そうだと思ったのは、レスポンダチェーンに自分でアクションを流す、という使い方です。 独自アクションも、Responderで定義済みのアクションも流せます。


// Cocoa
NSApplication.shared.sendAction(#selector(NSResponder.pageUp(_:)), to: nil, from: nil)
// UIKit
UIApplication.shared.sendAction(#selector(MyViewController.showNext), to: nil, from: nil, for: nil)

UIKitではResponderのアクションは使うことはほぼ無さそうですが、Cocoaでは便利な場面もありそうです。

ちなみに、調査した感じCocoaのレスポンダチェーンはきちんとAppDelegateまでnextResponderでつながっていませんでした。sendActionするときちんと動いているので、どうやって動いているのか謎めいています。その辺りは近いうちにQiitaにまとめようと思っています。

[注釈] 正確に言えば、同じnextを持つレスポンダは複数存在するので木構造ですが、木構造として扱ってはいないのでリストと書いています。

超解像+CoreML+Swiftを使ってアプリの画像データ転送量削減に挑戦する @kenmaz

社内からの登壇者について神武がレポートします。

マンガボックスiOSエンジニアの@kenmazが、学習済みのモデルをiOSで利用するための最新フレームワークCoreMLを用いて、荒い画像を綺麗な画像に変換する、超解像技術(SRCNN)にtry! した成果を発表しました。

登壇する@kenmazさん

序盤のデモではマンガボックスiOSアプリを起動し、アプリ内の漫画ビューワーでギザギザした低解像度画像を、目に見えて分かる高解像度画像に、僅か1秒足らずで変換する様子を披露し、会場を沸かせました。

続けて、実現にあたりどのような壁にぶつかり改善してきたかについて、画像や表で比較しつつ語られ、最後には、超解像技術は漫画だけではなく様々な種類の画像に適応できる可能性を示し、UIImageViewのextensionとして超解像技術を利用できるライブラリを本日、オープンソースとして公開しました!と発表。

公開されたSRCNNKitは翌日のgithubのトレンド入りするなど、5分という限られた時間の中で注目を集めていました。

リンク

企業ブース

DeNAはゴールドスポンサーをさせていただき、企業ブースを展示しました。

ブースではSwiftエンジニアなら気になる!あんな質問、こんな質問をボードに並べ、該当する項目にシールを貼っていただくアンケートを行いました。用意したボードが1日目でみっちり埋まってしまい、2日目には即興で質問を追加し別のボードを用意するなど、多くの方にお答えいただくことができました。ありがとうございました!

ボードにシール

このボードを眺めながら他の会社の方と会話を弾ませたり、結果を見にきました!とブースに何度も足を運んでいただいたりと、コミュニケーションのきっかけとなる様子が伺えました。

アンケートの最終結果はこちら! アンケート結果1 アンケート結果2

アンケートにお答えいただいた方には、懇親会で横浜DeNAベイスターズが手掛けたオリジナル醸造ビールに引き換えられるシールクーポンか、飲めない方や懇親会に参加できない方向けにDeNAオリジナルスクリーンクリーナーをお渡しました。海外の方々にも日本語で「ビール、美味しかったです!」と声を掛けていただけました。

ブース担当者の集合写真をパシャリ(全員写ってないですね笑) 集合写真

おわりに

大規模なカンファレンスということで、OSSとして公開しました!近日公開予定です!など、try! した成果を誰でも活用できるようにしたよ、という発表が多い印象でした。自分もtry! して、みんなもtry! してみてね!と言えるようになりたい、と強く思いました。

閲覧いただき、ありがとうございました!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2018 開催レポート[3]

DeNA TechCon 2018 開催レポート[3]

こんにちは!SWETグループの加瀬です。
DeNA TechCon 2018の開催レポートも今回で第3回目となりました。

第1回 第2回

今回はグラフィックレコーディングの様子と、BLUE Stage 『DeNAを支える技術』の発表を紹介いたします。

グラフィックレコーディング

第1回目のDeNA TechConのときから名物となっているグラフィックレコーディングが今年も行われました!
技術的な内容が多くて難しい発表も、絵によって話の流れが可視化されることでとても分かりやすくなりますね。

tech_con_day3_1_resized.jpg tech_con_day3_2_resized.jpg tech_con_day3_3_resized.jpg tech_con_day3_4_resized.jpg tech_con_day3_6_resized.jpg

SWETの取り組むImage Based Testing

tech_con_day3_7_resized.jpg tech_con_day3_8_resized.jpg

SWETの取り組むImage Based Testing from DeNA

システム&デザイン本部 品質管理部 SWETグループの薦田と坂本による、画像ベースの自動テストの発表でした。

前半は、画像ベースでのデグレをテストする手法の解説と、テストの実装コストを減らすためにクローラーが自律的にサイト内を巡回してテストを行う手法が紹介されました。さらに、機械学習を活用してクローラーを自動的にフォームからログインさせる方法についての話もありました。
後半は、ゲームアプリのUIテストが難しい点をUIパーツの画像を用いて解決する手法と、こちらも機械学習を用いて画面判定のための画像登録を省力化する方法を検討中であることが紹介されました。

サービス開発におけるフロントエンド・ドメイン駆動設計の実践

tech_con_day3_9_resized.jpg

サービス開発における フロントエンド・ドメイン駆動設計の実践 from TakefumiYoshii

システム&デザイン本部 デザイン戦略部 デザインエンジニアリンググループの吉井による、フロントエンドにおけるドメイン駆動開発のアーキテクチャの紹介でした。

ヘルスケア事業のサービスである『KenCoM』のサイトにおける複雑な各種データの表示・編集を行うために、OOPをReact + Reduxの構成に加えたHexagonal Redux構成が紹介されました。React + Reduxで問題となりやすい部分をこの構成がどのようにして解決しているのか実践的な内容となっています。

DeNA Private Cloud の現在と未来

tech_con_day3_10_resized.jpg

DeNA Private Cloud の現在と未来 from DeNA

システム&デザイン本部 IT基盤部の廣瀬による、DeNAのPrivate Cloudについての発表でした。

DeNAのPrivate Cloudについての発表は第1回のDeNA TechConから発表されており、今年で3回目の発表となります。今年は、「これまで編」ではPrivate Cloudへの数々の改善について紹介し、「これから編」ではOpenStackとコンテナなどに関しての内容が話されました。

DeNAの大規模ライブ配信基盤を支える技術

tech_con_day3_11_resized.jpg

DeNAの大規模ライブ配信基盤を支える技術 from DeNA

システム&デザイン本部 IT基盤部 第一グループの漢による、DeNAのライブ配信サービスに使われる配信基盤の裏側についての発表でした。

ライブ配信サービスの配信・視聴サーバーの構成、サーバーのキャパシティ指数とそれを用いたオートスケーリングの仕組み、CDNの利用やマルチリージョン対応など、ライブ配信を安定して大規模に提供するための技術が紹介されました。
また、現在は調査検証中である低遅延配信や、次世代コーデックへの対応といった今後についての話もありました。

内製ツールを使ったチート診断・脆弱性診断

tech_con_day3_12_resized.jpg

内製ツールを使ったチート診断・脆弱性診断 from DeNA

システム&デザイン本部 セキュリティ部 セキュリティ技術グループの汐田による、DeNAの脆弱性診断についての発表でした。

DeNAでは、各サービスのセキュリティの脆弱性診断を内部で行っています。発表ではゲームアプリのチートを例にして脆弱性が悪用された場合にどのような被害が起きてしまうのか、そしてどのような観点でチートを防いでいくのか、ということについて紹介されました。
セキュリティ技術グループでは診断ツールも内製で作成しており、ツールの機能やそれを用いてバイナリプロトコルを解析するデモも行われました。

以上、第3回はBLUE Stageとグラフィックレコーディングの紹介でした!
いよいよ最終回となる次回の第4回目では、ORANGE Stage『DeNAのゲーム開発』とClosingを紹介する予定です。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2018 開催レポート[2]

こんにちは!SWETグループの加瀬です。
前回に引き続き、DeNA Tech Con 2018の様子をお伝えしていきます。
第2回となる今回は展示ブースの様子と、RED Stage 『DeNAのチャレンジ』の発表の紹介です。

発表会場外の様子

当日は4つのメインステージの外でも、ノベルティの配布や展示ブースで賑わっていました。

tech_con_day2_1_resized.jpg tech_con_day2_3_resized.jpg tech_con_day2_4_resized.jpg tech_con_day2_2_resized.jpg

中でも特に目を引いたSHOWROOMのブースでは、VRデバイスのOculus RiftとOculus Touchを使ってバーチャルSHOWROOMERの体験ができました。

自分の体を動かすことでVRのアバターを操作できるだけではなく、SHOWROOMでお馴染みであるギフティングも再現されており、 なんとVR空間の空から振ってくるギフトのひとつひとつを掴んで動かしたり投げたりすることも可能でした。 VR空間とはいえギフトに触ることができることで、本当にプレゼントを頂いたのだなという実感をより強く感じられると思いました。

 tech_con_day2_5_resized.jpg

SHOWROOMブースを体験している筆者の様子。

『SHOWROOM』の大規模化に伴う技術課題のソリューション ~演者・視聴者の熱量を支える負荷対策、HTML5対応など~

tech_con_day2_6_resized.jpg

SHOWROOM株式会社の池滝による、SHOWROOMが今まで行ってきた負荷対策と、PC版のHTML5対応に関する話でした。

サーバー側のオートスケーリングや、非同期化できる処理を非同期化するといった対策から、大勢のユーザーが大量にコメントやギフティングを行う状況を再現するスクリプトを実行してクライアント端末のCPUとGPUを計測しつつチューニングを行う負荷対策の取り組みなどが紹介されました。 また、PC版サイトにおける従来のAdobe Flash Playerを使った実装からHTML5に移行する取り組みについての紹介もありました。

AWS IoT を用いた DeNA オートモーティブアーキテクチャ

tech_con_day2_7_resized.jpg

オートモーティブ事業部の放地による、車両情報を集約するアーキテクチャについての話でした。

オートモーティブ事業部では、車両情報を集約する基盤をAWS IoTで構築しています。今回の発表では、車両の登録と車両情報の送信・保存・伝搬のフローを実現するために、MQTTやAWS IoT RuleEngine、AWS IoT ThingShodow、AWS Lambdaなどを用いたアーキテクチャが紹介されました。また、サービス利用者向けアプリからこの基盤の車両情報を取得する仕組みに関する内容の紹介もありました。

ヘルスケアサービスを実現する最新技術 〜HealthKit・GCP + Goの活用〜

tech_con_day2_8_resized.jpg tech_con_day2_9_resized.jpg

ヘルスケアサービスを実現する最新技術 〜HealthKit・GCP + Goの活用〜 from DeNA

DeSCヘルスケア株式会社の深谷と伊藤による、ヘルスケアサービスを実現するクライアントとサーバーの仕組みについての紹介でした。

クライアント側では、歩数を例にiOSデバイスからどのようにして情報を取得するかということについて具体的な紹介がありました。サーバー側では、Go言語+DDDによるウェブアプリケーションをGAEに構築していることと、そのデプロイ方法、さらにデータをどのようにしてBigQueryにアップして分析できるようにするか、という内容が紹介されました。

AndAppにおけるGCP活用事例

tech_con_day2_10_resized.jpg

AndAppにおけるGCP活用事例 from DeNA

オープンプラットフォーム事業部の鈴木による、GCPをフル活用したAndAppのシステム全容の話でした。

AndAppでは、運用の負荷を抑えたり、新しいことに挑戦しようという試みから、DeNAでは一般的であったオンプレ上の独自システムではなくGCP上にシステムを構築するという選択がされました。発表では、GCPの様々な各サービスについての基本的な紹介とAndAppにおける利用方法、またそれらがどのように組み合わされて全体システムが構築されているかという内容が紹介されました。

以上、第2回は展示ブースとRED Stageの紹介でした!
次回の第3回では、BLUE Stage 『DeNAを支える技術』のセッションを紹介する予定です。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2018 開催レポート[1]

こんにちは!SWETグループの加瀬です。
この時期の恒例行事となった今年のDeNA TechCon 2018が2018年2月7日に開催されました。今年は第3回目の開催となります。

tech_con_day1_1_resized.jpg

今回から全4回の予定でTechConの様子をお伝えしていきます。第1回はOpeningとKeynote、そしてYELLOW Stage『DeNAが切り拓くAI』の発表の紹介です。

オープニング

tech_con_day1_2_resized.jpg

オープニングでは木村よりDeNA TechConの概要についての説明がありました。
DeNAは色々な事業に参入しており、その中のエンジニアも色々な領域でチャレンジをしています。それを知ってもらう場がDeNA TechConであり、また少しでも技術の進歩の役に立てればという思いが語られました。

Keynote - エンジニアが引っ張るDeNAの"モノづくり"

tech_con_day1_3_resized.jpg

エンジニアが引っ張るDeNAの"モノづくり" from DeNA

今年のKeynoteは、代表取締役社長兼CEOである守安からDeNAにおける"モノづくり"の発表でした。

自身は元々エンジニア出身で、DeNA初期の頃の主力事業であったEコマースの『ビッダーズ』(現『Wowma!』)に夜勤でシステムの監視をする仕事から関わっていたという話から始まり、その後の『モバオク』、『Mobage』、そして現在、力を入れているオートモーティブ事業まで、DeNAのサービスにおいて発生した技術的な課題と、それらをどのように解決してきたかということが語られました。

その中で、分業体制で開発されていたために開発スピードを出すことができなかったビッターズの反省から、当時アルバイトだった川崎(現取締役)にモバオクの開発を一任し、1人で3ヶ月という短期間で完成させたエピソードが紹介されました。

最後に、サービスづくりをエンジニアが引っ張ることと、サービスの課題を高い技術力で解決することをDeNAの強みとして持ち続けたい、という話で発表を締めくくりました。

深層学習を用いたコンピュータビジョン技術とスマートショップの実現

tech_con_day1_4_resized.jpg tech_con_day1_5_resized.jpg

深層学習を用いたコンピュータビジョン技術とスマートショップの実現 from DeNA

AIシステム部の西野と李による、現在のコンピュータビジョン技術の紹介と、その中の姿勢推定技術を活用したスマートショッププロジェクトについての話でした。

スマートショッププロジェクトとは、Eコマースで行われている商品推薦のような、一人ひとりに合わせた接客をリアル店舗でも行えるようにしようという試みです。 そのためには入店したお客の状況を把握する必要があり、カメラ映像から同一人物であることを検出するために姿勢推定技術をどのように用いているかという内容でした。

車両運行管理システムのためのデータ整備と機械学習の活用

tech_con_day1_6_resized.jpg tech_con_day1_7_resized.jpg

車両運行管理システムのためのデータ整備と機械学習の活用 from 英爾 関谷

AIシステム部の関谷と森による、車両運行システムを支える技術と、深層学習を用いて車両停車が可能な位置を自動的に見つける仕組みについての話でした。

自動運転、配車予測、経路探索といった車両運行管理システムがどのような技術によって実現されているかという紹介です。また自動運転を活用した物流オペレーションを実現するために、自動車が停車可能な安全で交通の妨げにならない位置を深層学習を用いて画像からどのように推定するかという内容でした。

ゲーム体験を支える強化学習

tech_con_day1_8_resized.jpg tech_con_day1_9_resized.jpg

DeNA TechCon2018 ゲーム体験を支えるための強化学習 from Jun Okumura

AIシステム部の奥村と田中による、アプリゲームのバランス調整を強化学習・深層学習で行うという話でした。

最近のアプリゲームは、リリースされてから長期間に渡り継続的にバージョンアップを続ける流れになってきており、DeNAがリリースしている『逆転オセロニア』においては新しいキャラクターを追加しながら全体のバランスを調整することが難しくなりつつあるという問題が起きています。 そこで強化学習・深層学習を用いて人間らしいプレイを行うAIを作り、そのAIによるシミュレーションを行うことでバランス調整に活用させるという取り組みについての内容でした。

深層学習を用いたコンピュータビジョン技術と運転行動モニタリングへの応用

tech_con_day1_10_resized.jpg tech_con_day1_11_resized.jpg

深層学習を用いたコンピュータビジョン技術と運転行動モニタリングへの応用 from Yusuke Uchida

AIシステム部の内田と本多による、コンピュータビジョン技術を活用した交通事故を減らす取り組みについての話でした。

深層学習を用いたコンピュータビジョン技術の解説と、それらを用いて運転中のよそ見や車間距離不足といった不安全行動を減らすことで重大な交通事後を減らすという取り組みが紹介されました。 また、大規模な演算処理が必要な深層学習をエッジデバイスである車両で行うために、精度を保ったまま演算数を減らす深層学習の軽量化手法についても発表がありました。

研究開発と事業貢献を両立させるAI組織の作り方

tech_con_day1_12_resized.jpg

YELLOW Stageの最後は、AIシステム部の山田によるDeNAのAI組織についての話でした。

DeNAのAI組織体制、AI/機械学習を活用したサービスの紹介、研究開発と事業開発の関わり方、AI・分析の基盤技術、AI研究開発エンジニアとデータサイエンティストの役割、先端技術をキャッチアップするための精度や設備といった非常に多岐にわたる内容の紹介と、今後力を入れていくところについての発表でした。

次回の第2回ではRED Stage『DeNAのチャレンジ』の発表を紹介する予定です。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

サブカルのためのword2vec

はじめに

AIシステム部AI研究開発グループ アルバイトの五十嵐です。(@bonprosoft, ポートフォリオ:http://vbcpp.net/about/ ) 現在、東北大学大学院の修士1年で、大学院では(自然言語ではなく)高速な文字列処理アルゴリズムに関する研究を行っています。

私は2017年9月上旬から3週間ほど、アルバイト兼インターンとしてハッカドールチーム内のNLPのタスクに取り組んでいました。 その後はアルバイトとして、期間中にできなかった追加実験と実際の製品への適用に取り組んでいます。

取り組んだタスク

突然ですが、みなさま、ハッカドールはインストールされていますか? ハッカドールは、主にサブカルチャーに関する記事に特化した、ニュースアプリケーションです。 アプリケーション内のユーザーのクリックや「ホシイ/イラナイ」などのアクションを通して、ハッカドールがユーザーの好みを自動的に学習し、様々なジャンルの記事があるなかから、1日3回のおすすめ記事を配信してくれます。

さて、ハッカドールの裏側ではユーザーへ記事を配信するために日々膨大なWeb記事をクロールして、どの記事がどのジャンル・要素のものであるのかなどを識別し、検索サービスと同じようにユーザーへ記事を配信しています。 Web記事を適切に解析するためには、毎クール増えるアニメのタイトルはもちろん、話題となっている単語にもいち早く対応しなければなりません。

そこでハッカドールチームでは、形態素解析のための辞書を毎日自動的に構築するジョブを用意しています。 これにより、大部分の解析処理はうまくいくようになりますが、まだいくつかの課題が残っています。 それは、シノニム辞書の構築 です。 ここで言う「シノニム辞書」とは、アニメの作品名をはじめとした何らかの名称と略称/愛称を関連付けるための辞書のことを指しています。 シノニム辞書は、ハッカドール内において記事のタグ付けや検索において利用されています。 有名な例としては、次のようなものがあります。

  • ご注文はうさぎですか? ⇔ ごちうさ
  • Re:ゼロから始める異世界生活 ⇔ リゼロ
  • この素晴らしい世界に祝福を! ⇔ このすば

略称/愛称自体の分かち書きは、前述のジョブによりうまく動作しますが、その略称/愛称が指している名称との紐づけは現状自動的に獲得できておらず、この紐づけは現在手動で行っています。 2017年10月現在、シノニム辞書に登録されたエントリ数は約5600件にも達し、日々増えていくシノニムを今後も管理し続けるのはとても大変な作業です。 そこで今回は「シノニム辞書を何とか自動で獲得できないか」というタスクに取り組みました。

なお、シノニム辞書の自動構築にあたって、ハッカドール内で利用できるデータセットとしては次のようなものがあげられます。

  • 日々のWeb記事のクロール結果
  • アニメ/サブカルに関するタグ/キーワード集合
  • 日々更新される形態素解析用辞書
  • アプリ内の検索キーワード
  • 現時点で登録されているシノニムペア

以降の章では、先行研究と提案手法、評価実験に関する詳細を説明していきますが、もし読むのが大変に感じる場合や先に成果物だけを見たい場合には、次のURLからスライドとデモサイトをご覧ください。

サブカルのためのWord2vec from DeNA

先行研究

最初の1週間は、今回のタスク設定と近い、同義語獲得/同義性判定関連の先行研究を調査しました。 その結果、大きく分けて先行研究で用いられていた手法は、次の3種類に分けられると考えました。

  • 単語表記を考慮した同義語判定
  • 周辺文脈を利用した同義語判定
  • 検索クエリなどの関係情報を利用した同義語判定

それぞれの手法において、特に印象に残った論文を、簡単にご紹介します。

単語表記を考慮した同義語判定

同義語がもともとの名称をベースに作られることを仮定すると、編集距離などの表記を考慮した手法を適用することを考えるのが自然です。 2008年に高橋らが提案した手法[a]では、同義語を以下の3種類から生成されるものと仮定して、これらを考慮した同義語判定のためのフローおよび素性の作成を行っています。

  • 定型文字列の追加: 接頭/接尾辞等の文字列を追加
  • 表記変換: 読みを保存して表記を変換
  • 省略: 文字順を保存して文字を削除

判定ルールのなかには、例えば音節数を考慮した正規化や、SVMを用いた省略関係にあるかどうかの判定ロジックが含まれており、2つの単語の単語表記について、様々な観点から距離を計算するための手法が組み込まれています。

周辺文脈を利用した同義語判定

「同じ文脈に出現する単語は類似した意味を持つ」という分布仮説(Harris, 1954)に基づいて、単語の意味を表すベクトルを求めるためのモデルとして、近年ではSkip-gramモデル(Mikolov+, 2013,[b])を用いた研究が活発に行われています。 ここではSkip-gramモデルの詳細の説明は割愛させていただきますが、原理を簡単に説明すると、ある単語を与えたときに、出力と周辺に出現する単語が一致する確率が高くなるように図1の$W_e$と$W$を学習することで、適当なイテレーションを回した後に得られる$W_e$が単語ベクトルとして利用できるという仕組みになっています。 なお以降の図では、Skip-gramモデルを図1右下のような、省略された図を用いて表現することにします。(図1右上と右下は等価なモデルを示しています。)

図1 Skip-gramモデル ▲図1 Skip-gramモデル

Skip-gramモデルを利用した同義語獲得のアプローチとしては様々な手法がありますが、特に新しい手法として、城光らによって提案された、文脈限定Skip-gram(城光+, 2017,[c])があります。 この手法では、特定の品詞のみ/左右特定の位置のみを考慮するような制約を加えて、異なる制約を持った複数のSkip-Gramモデルを学習したあと、2つの単語ペアを与えたときに、これらのSkip-gramが出力するコサイン類似度を素性として、同義語か否かの教師あり学習を行っています。 論文中では、実際に合計254種類のSkip-gramを学習させたあと、これらのモデルを用いて同義語判定を行ったところ、通常のSkip-gramモデルだけの場合と比較して、F値が大幅に向上したと述べています。

検索クエリなどの関係情報を利用した同義語判定

同義語判定は検索エンジンにおいても重要となります。 2012年にMicrosoft Researchから発表された論文では、固有表現のシノニムを自動的に検出する手法に用いる指標の一つとして、Pseudo Document Similarity(Kaushik+,2012,[d])が提案されました。 この指標の前身となったClick Similarity(Cheng+, 2010,[e])は、2つのクエリの類似度を測るための手法として、検索クエリ集合とWebドキュメント集合を頂点とした二部グラフを考えたうえで、ある検索クエリからあるWebドキュメントにたどりついたときにエッジを張り、2つのクエリが与えられたときに、その値がどの程度一致するかという情報を用いています。 これに加えて、Pseudo Document Similarityでは、特に検索クエリが複数の単語からなる場合にもRecallがあがるよう、エッジの張り方を工夫しています。

先行研究の本タスクへの適用

先ほど挙げたそれぞれの手法を、今回のタスクへ適用することを考えてみます。はじめに次の例をご覧ください。

  • 終末何してますか?忙しいですか?救ってもらっていいですか? ⇔ すかすか
  • 友達ない ⇔ はがない

この例は、近年放送されたアニメの作品名とそのシノニムのペアを示しています。 1番目の例は、すかが3回繰り返し出現しているにもかかわらず、シノニムはそのうちの2回から構成されています。 また、2番目の例では、有用と思われる名詞や形容詞、漢字表記などを無視して、シノニムは主に助詞から構成されています。

これは主観ですが、1クール毎に増えるアニメ作品名の略称の競合を避けるためにも、作品名からのシノニムの推測は年々難しくなっていると考えています。 したがって、単語表記を考慮した同義語判定は、今回のタスクへ適用するのは難しいと考えました。

続いて、周辺文脈を利用した同義語判定ですが、単語分割さえできていればSkip-gramの学習が可能であり、周辺単語から単語自体が出現するコンテキストを推測する(単語表記を考慮しない)という性質から、今回のタスクにおいて応用可能であると考えました。 しかし、城光らの手法では、2つの単語がシノニムの関係にあるかどうかを判定するために、シノニムペアを教師データとして使用しており、教師データ作成のコストが必要です。 さらに、分類機の入力として合計254種類ものSkip-gramを用いており、この手法でモデルを頻繁に更新するのは難しいと考えました。

最後に、検索クエリなどの関係情報を利用した同義語判定ですが、今回のタスクへ適用するにはエッジを張るために必要な情報が足りません。 これは、検索クエリなどはデータセットに含まれるものの、その後のユーザーの行動に関する情報が含まれていないため、先行研究のようなエッジを張ることができないためです。 代わりに、検索クエリが文章に含まれているという関係をエッジとして使うことを考えましたが、この関係が果たしてどれくらい有効に働くかという点が見通せなかったため(3週間という限られた時間のなかで成果を出すため)今回はこの手法の採用を見送りました。

以上の理由から、今回のタスクは周辺文脈を利用した同義語判定ベースの手法で取り組みました。 しかし城光らの手法をそのまま適用することは難しいため、予備実験として、ひとまず従来のSkip-gramを学習させたうえで、何か改善できる点がないかを調べました。

予備実験

従来のSkip-gramを用いて単語ベクトルの獲得を行い、シノニムを与えたときのk近傍を観察してみます。

実験設定

学習に用いたデータセットとしては、Webからクロールした記事250,000件を使用しました。 このデータセットに含まれる単語数は533,999単語(のべ123,273,881語)です。

Skip-gramの学習に関する主要なハイパーパラメータとしては、窓幅を5単語、学習する単語ベクトルの次元を100次元としました。 また、ある単語の出現回数が全データセット中で5回より少ない場合には、その単語を学習から除外しました。 したがって最終的には、172,257単語(のべ93,799,316語)の単語を用いて学習を行いました。

実験結果

次の表は、学習済みモデルを用いて、アニメ作品のシノニムの単語ベクトルとコサイン類似度の高いベクトルを持つ5単語をそれぞれ列挙したものです。

表1 従来のSkip-gramを用いたときの、シノニムの単語ベクトルとコサイン類似度の近いベクトルを持つ上位5単語
ごちうさ
(ご注文はうさぎですか?)
リゼロ
(Re:ゼロから始める異世界生活)
このすば
(この素晴らしい世界に祝福を!)
けもフレ
(けものフレンズ)
よう実
(ようこそ実力至上主義の教室へ)
#1 リゼロ 0.71542 ごちうさ 0.71542 幼女戦記 0.67590 二次創作 0.58515 プリアラ 0.71460
#2 きんモザ 0.70086 ガーリッシュナンバー 0.69933 はいふり 0.65225 エンドレスエイト 0.57156 クロムクロ 0.66699
#3 まどマギ 0.67969 緋弾のアリア AA 0.66972 ハルチカ 0.63882 シュタゲ 0.55419 ガーリッシュナンバー 0.63846
#4 ラブライブ 0.67866 ワンパンマン 0.66917 リゼロ 0.63733 グレンラガン 0.54987 えとたま 0.61215
#5 アイマス 0.67314 幼女戦記 0.66810 暗殺教室 0.63500 ラブライブ 0.54697 正解するカド 0.60950

それ以外の単語で試した場合でも、上の表と同様にして、アニメタイトルを表す単語を与えた場合には、何らかのアニメタイトルを表す単語がk近傍に存在するという結果になりました。

しかし「ごちうさ」から「ご注文はうさぎですか?」、「リゼロ」から「Re:ゼロから始める異世界生活」が捉えられないことから、同一の作品を表すアニメタイトルの距離が近くなるように学習できていないことが分かります。 言い換えると、従来のSkip-gramでは、アニメタイトル同士は正しく距離が近くなるように学習されるものの、それ以上の特徴は捉えられていないということが分かります。 (この結論は、一度でもword2vecを使ったことのある方なら、頷いていただけると思います。)

したがって、今回のタスクを解決するには、従来のSkip-gramでは難しいという結論になりました。

予備実験に関する考察

先ほどの表1をご覧ください。 従来手法では「ごちうさ」に類似したベクトルを持つ単語として「リゼロ」が、また「リゼロ」に類似したベクトルを持つ単語として「ごちうさ」がそれぞれ出現しています。 これは、学習の結果で得られた100次元のベクトル表現において「ごちうさ」と「リゼロ」がお互いに近い位置に存在するということを意味しています。 では、なぜ「ごちうさ」と「リゼロ」が近くなるのでしょうか。 以降ではこの問題を、ごちうさ-リゼロ状態として呼ぶことにしましょう。

ごちうさ-リゼロ状態はなぜ起こるのか

図2 「ごちうさ」(左)「リゼロ」(右)という単語の周辺5単語に出現する単語を、頻度の高い順にソートした結果
▲図2 「ごちうさ」(左)「リゼロ」(右)という単語の周辺5単語に出現する単語を、頻度の高い順にソートした結果

図2をご覧ください。 この表は、それぞれ「ごちうさ」「リゼロ」という単語の周辺5単語に出現する単語を、頻度を高い順にソートしたものです。

ところで、皆さんは、この表にあるような周辺単語の分布から「ごちうさ」「リゼロ」という作品名まで言い当てることができますか? (実際にアニメ作品名を知らせない状態で、作品の正式名称を除いた分布を与えて作品名を推測してもらったところ、あくまで主観ですが、半数程度の人が異なる作品名を答えていました。) 確かに作品を表すような特徴を持つような単語を含んでいるものの、基本的に確信を持って言えることは「アニメ作品」(もしくはサブカル全般)ということ程度かと思います。 Skip-gramを含むWord2vecは、基本的にこのようなタスクを解くことを目標にして、単語ベクトルを学習しているのです。

さて、図2をよく観察すると、次のことが言えます。

  1. 「店舗限定」や「コラボ」などの、今回のタスクにおいてはノイズとなりそうな単語が上位に来ている
  2. 「アニメ」「キャラ」「イベント」などのアニメ全般で使われる単語が上位に来ている

この2点を手掛かりに解決策を探していきます。

まず一つ考えられる要因としては、複数作品に関して言及している記事が学習に含まれているという点です。 図3は、クロールされた記事に、アニメ/サブカルに関するタグ/キーワード集合(タスク設定の章で説明)を用いて付与されたキーワードの数に関するヒストグラムです。

クロールされた記事に付与されたキーワードの数
▲図3 クロールされた記事に付与されたキーワードの数

キーワードを多く含むような記事としては、どのようなものがあるのでしょうか? 実際にデータセットを確認してみると、コミックマーケットをはじめとしたイベントにおける出展情報に関する記事が多く含まれていることがわかりました。 「リゼロ」や「ごちうさ」のような人気作品はグッズも多く取り上げられることから、出展情報に関する多数のウェブページに出現しており、これが、ごちうさ-リゼロ状態の一つの要因になっているのではないかと考えました。

また二つ目に考えられる要因として、単語ベクトルの学習に周辺単語を使うだけでは、今回のタスクを解くには不十分であるという点です。 周辺単語を見ると、アニメ全般で用いられるような単語が多く出現していることがわかります。 これらの単語はWord2vecの学習において、一般名詞のなかからアニメ全般に関する概念を獲得する(アニメに関する単語の距離が近くなるように学習する) には重要ですが、今回のような、もう少し詳細にアニメ作品を考慮した単語ベクトルを獲得したい場合には、これらの アニメ全般用語は、いわばストップワードと同じ扱いになると言っても良いでしょう。

次の章では、アニメ作品に関するドメインの知識を考慮するような仕組みを組み込んだモデルを提案します。

提案手法

前述の要因二つについて、まず一つ目の解決策としては、前処理として1記事にキーワードを10個以上含む記事については除外を行いました。 これにより、なるべく1つの作品について言及しているようなWeb記事からのみ学習を行うようにするという狙いがあります。

二つ目に解決策ですが、学習モデルにこのキーワード情報をうまく埋め込むことで、アニメ作品に関するドメインの知識も単語ベクトルに埋め込むことができないかを検討しました。 そこで考えたのが、以下の3つのモデルです。

モデル1号

モデル1号
▲図4 モデル1号

モデル1号は、ある単語を入力としたときに、その周辺単語とドキュメントに付与されたキーワードを出力として学習を行うモデルです。 つまり、通常のSkip-gramモデルに加えて、キーワード情報を推測するような層を途中に付け足して、マルチタスク学習を行っています。

モデル2号

モデル2号
▲図5 モデル2号

モデル2号は、ある単語と、その単語が出現するドキュメントに付与されたキーワード情報を入力としたときに、その単語の周辺単語を学習するモデルです。 これが学習できると、単語だけではなく、あるキーワードが出現するドキュメントにおいては、特定の単語が周辺に出現しやすいという、条件付きの周辺単語の推測もできるようになります。 また、単語ベクトルの学習と同時に、キーワード情報に関するベクトルも学習できる点も魅力的です。

モデル3号

※こちらのモデルは、インターン期間終了後に追加実験として試したモデルです。

Rev. A

モデル3号 Rev.A
▲図6 モデル3号 Rev.A

モデル3号 Rev.Aは、基本的にはモデル2号と同じです。 しかし、モデル2号では1つのドキュメントに複数のキーワードが付与されていた場合に、そのSumを取って入力としていたところを、このモデルでは1つずつ入力として取るようにした点が異なります。 このように変更することで、モデル2号と比較して全体のモデル構成が浅くなり、学習が進みやすいのではないかと考えたためです。

Rev. B

モデル3号 Rev.B
▲図7 モデル3号 Rev.B

モデル3号 Rev.Bは、Rev.Aに加えて、concatの後に1層のFully Connected層を挟んでいます。 これにより、例えば入力として与えられたキーワード情報が周辺単語の推測に役に立たないような場合でも、学習が可能になるのではないかと考えました。

Rev. C

model3c.pngのサムネール画像
▲図8 モデル3号 Rev.C

モデル3号 Rev.Cは、Rev.Bに加えて、ResNet(He+, 2016,[f])で用いられているようなShortcut Connectionを加えました。 これにより、仮にキーワード情報を用いた場合のほうが性能が悪くなるような場合でも、最悪時の性能を通常のSkip-gramと同等くらいに保証できるのではないかと考えました。

キーワードのみSkip-gram

図9 キーワードのみSkip-gram
▲図9 キーワードのみSkip-gram

これは、モデル1号において、周辺単語への出力層を無くしたものと一致します。 すなわち、マルチタスク学習の有効性を検証するために実験に用いたモデルです。

キーワードのみSkip-gramは、基本的にモデル構成はSkip-gramと同様ですが、ある単語を入力としたときに周辺単語を学習するのではなく、ある単語が出現するドキュメントのキーワード情報を学習している点が異なります。

評価実験

従来のSkip-gram、キーワードのみモデル、モデル1号~3号 Rev.Cまでをすべて実装し、評価実験を行いました。 なお、すべてのモデルはChainerを用いて実装しました。

実装は後日公開予定です。

評価手法

現在ハッカドールが持っているシノニムペア5600組を用いてモデルの評価を行うために、次の3つの評価手法を用いました。

  • コサイン類似度
  • K近傍一致度
  • 相互ランク

コサイン類似度

コサイン類似度は、単純にシノニムペアがどれくらい近くなっているかを測定するための指標として取り入れました。

シノニムペアを$x, y$としたときに、コサイン類似度$cos(x,y)$は次のように定義されます。

$$\text{cos}(x,y) = \frac{\sum_{i=0}^d{w_{x_{i}} w_{y_{i}}}}{\sqrt{\sum_{i=0}^d{w_{x_{i}}^2}} \sqrt{\sum_{i=0}^d{w_{y_{i}}^2}}}$$

ここで、$w_{x}$は単語$x$の単語ベクトル、$d$は単語ベクトルの次元を示しています。

k近傍一致度

k近傍一致度は、シノニムペアとなる2単語の周辺に存在する単語がどれくらい一致しているかを測定することを目的として取り入れました。

シノニムペアを$x, y$としたときに、単語$x$(単語$y$)に対するコサイン類似度が高い上位$k$単語を集めた集合を$S_{x}$($S_{y}$)とします。 すなわち、すべての単語集合を$S$としたときに、$S_{x}$($S_{y}$)は次の2式を満たすように定義されます。

$$|S_{x}| = k$$ $$ \forall p \in S \setminus S_{x}.~\forall q \in S_{x}.~\text{cos}(x, p) \le \text{cos}(x, q)$$

このとき、k近傍一致度$\text{Jaccard}_{k}(S_{x}, S_{y})$は次のように定義されます。

$$\text{Jaccard}_{k}(S_{x}, S_{y}) = \frac{\sum_{w \in S_{x} \cup S_{y}}{\text{min}(\text{cos}(x, w), \text{cos}(y, w))}}{\sum_{w \in S_{x} \cup S_{y}}{\text{max}(\text{cos}(x, w), \text{cos}(y, w))}}$$

つまり、単語$x$と$y$のk近傍が、どれくらい一致しているかを重み付きのJaccard係数を用いて計算しています。

相互ランク

相互ランクは、単語$x$と単語$y$がどれくらい相互に近くなっているかを測定するための指標として導入しました。

単語$x$について、すべての単語とコサイン類似度を計算し、値の高い順にソートしたリストにおいて単語$y$が出現する順位を$d_{x\rightarrow y}$とします。 また単語$y$について、すべての単語とコサイン類似度を計算し、値の高い順にソートしたリストにおいて単語$x$が出現する順位を$d_{y\rightarrow x}$とします。

このとき、相互ランク$\text{rank}(x, y)$は次のように定義されます。

$$\text{rank}(x, y) = \frac{d_{x\rightarrow y} + d_{y\rightarrow x}}{2}$$

つまり、この値は単語$x$の類似単語を検索したときの単語$y$の順位と、単語$y$の類似単語を検索したときの単語$x$の順位の平均を示しており、この値が小さければ小さいほど良いモデルであると判断できます。

実験設定

学習に用いたデータセットとしては、Webからクロールした記事集合のなかで、1記事にキーワードを10個以上含まない記事集合から100,000件を使用しました。 このデータセットに含まれる単語数は331,138単語(のべ49,187,387語)、キーワード数は47,751です。

Skip-gramの学習に関する主要なハイパーパラメータとしては、窓幅を5単語、学習する単語ベクトルの次元を100次元としました。 また、ある単語の出現回数が全データセット中で5回より少ない場合には、その単語を学習から除外しました。 したがって、最終的には、114,045単語(のべ37,128,122語)の単語を用いて学習を行いました。

同様にして、頻度が5回以下のキーワードについても除外しました。 除外した結果、キーワードを含まなくなった記事については、特殊なキーワード(None)を与えました。 したがって、最終的には、キーワード数は11,824となりました。

また、k近傍一致度で用いた$k$の値は20としました。 スコアには、シノニムペア5600組に対してそれぞれの評価手法を適用したときの値の平均を採用しました。 ただし考察で述べる理由から、相互ランクにおいてのみ、中央値の算出も行いました。

実験結果

表2 モデルの評価結果
モデル コサイン類似度 K近傍一致度 相互ランク(平均値) 相互ランク(中央値)
従来のSkip-gram 0.4041 0.0660 9523.5263 892.0
キーワードのみモデル 0.5063 0.1918 5745.6675 22.5
1号 0.5293 0.1923 4926.6754 19.0
2号 0.3706 0.0532 14301.6743 2599.0
3号 Rev.A 0.3348 0.0544 12626.5088 1696.0
3号 Rev.B 0.3599 0.0616 11804.2098 1296.5
3号 Rev.C 0.3585 0.0619 12003.0603 1292.0

実験結果から、従来のSkip-gramと比較すると、提案したモデル1号の性能は大幅に向上していることがわかります。 では実際に、どのような出力がでるようになったかを実際に試してみましょう。

表3 モデル1号を用いたときの、シノニムの単語ベクトルとコサイン類似度の近いベクトルを持つ上位5単語
ごちうさ
(ご注文はうさぎですか?)
リゼロ
(Re:ゼロから始める異世界生活)
このすば
(この素晴らしい世界に祝福を!)
けもフレ
(けものフレンズ)
よう実
(ようこそ実力至上主義の教室へ)
#1 ご注文はうさぎですか? 0.87631 Re:ゼロから始める異世界生活 0.78200 めぐみん 0.84121 たつき監督 0.73934 ようこそ実力至上主義の教室へ 0.70415
#2 ご注文はうさぎですか?? 0.85684 長月達平 0.67824 ダクネス 0.79038 けものフレンズ 0.73272 zitsu 0.57993
#3 チノ 0.82150 エミリア 0.67667 この素晴らしい世界に祝福を! 0.77038 サーバルちゃん 0.72079 軽井沢 0.56846
#4 シャロ 0.75929 レム 0.67260 駄女神 0.75584 アライさん 0.69193 清隆 0.55031
#5 千夜 0.74842 MJ文庫J 0.64899 カズマ 0.74682 ドッタンバッタン 0.66814 綾小路 0.54770

表1と比較すると、既存手法に比べて、取りたかったものがだいぶ取れていることが分かります。ほかの例も試してみましょう。

図10 従来手法(Skip-gram)と提案手法(モデル1号)の比較
▲図10 従来手法(Skip-gram)と提案手法(モデル1号)の比較

図10の例では、様々な単語を既存手法と提案手法(モデル1号)に与えたときの類似5単語を示しています。 この例から、例えば「すかすか」→「週末なにしてますか?忙しいですか?救ってもらっていいですか?」といった既存手法では獲得するのが難しいと思われていたシノニムも正しく獲得できていることがわかります。 また「ほたるん」(のんのんびよりのキャラクターの愛称)を与えた場合に、既存手法ではキャラクターの語尾や一般名詞などが混在し、正しく距離を計算できていない結果となってしまっていますが、提案手法では 同作品のキャラクターの愛称が近くなるようなベクトルが得られていることにも注目です。 さらに「お仕事シリーズ」や「マスター」といった単語を与えた場合にも、ユーザーが想定しているであろう作品関連の単語が近くなるように学習されており、従来手法と比較すると、提案手法ではアニメタイトルやキャラクター同士が近くなるのはもちろん、作品なども考慮して距離が計算されるように制約がかかっているように見えます。

考察

相互ランクの値が大きいシノニムペアの特徴

はじめに、モデル1号について、実際にモデルに単語を与えたときの印象と比べて、評価データでの相互ランクの平均値が大きい(順位が低い)ことに注目しました。 そこで、モデル1号の相互ランクのヒストグラムを求めた結果、次の図のようになりました。

図11 モデル1号の相互ランクに関するヒストグラム
▲図11 モデル1号の相互ランクに関するヒストグラム

図11から、一部の相互ランクの値が大きいシノニムペアに影響されて、平均値も大きくなっていることが推測できます。 これが、実験において相互ランクの中央値を求めた理由です。

では、モデル1号ではどのようなシノニムペアが相互ランクの値が大きくなっているのか(すなわち、正しく取れなかったのか)を考察してみます。 評価データとして用いたシノニムペア 5600組のうち、モデル1号で相互ランクの値が大きかった(順位が低かった)シノニムペアを観察した結果、大きく分けて次の5種類に分類されると考えました。

  • 表記ゆれによる単語の重複
  • 評価データセットに古いデータが含まれている
  • 評価データセットに一般名詞が含まれている
  • 評価データセットにセリフ・その他が含まれている
  • 同じ単語で複数の意味を持つ単語が存在

1番目の項目は、例えば「ニコ生」と「にこなま」のような単語です。 Web記事において出現する単語の数は、前者のほうが圧倒的に多く、後者が出現することはまれです。 つまり、前者は正しく学習することができますが、後者は正しく学習することが難しくなります。 このため、評価データに含まれる「にこなま」などの表記ゆれがある単語とのシノニムペアは、距離が離れてしまうと考えました。

2番目の項目は、例えば(「ワールドイズマイン」,「ワイズマ」)のようなシノニムペアが評価データに含まれているケースです。 今回の学習に用いたデータセットは、2014年3月~2017年9月の期間に公開された記事で構成されており、その期間より古いものや新しいもので出現するような単語については、正しく学習することが難しいという理由が考えられます。

3番目の項目は、例えば(「コメント」,「comment」)のようなシノニムペアが評価データに含まれているケースです。 今回の学習には、主にサブカル関係のWeb記事をデータセットとして用いており、マルチタスク学習にもアニメ作品関連のキーワードを利用しています。 そのため、一般名詞に関する順位は低いままでもおかしくないと考えました。

4番目の項目は、例えば(「イチロー」,「打ってみた」)のようなシノニムペアが評価データに含まれているケースです。 これらは主にニコニコ動画などのサービスで、動画のタグ機能として用いられているのをよく見かけますが、2番目の理由と同様にして今回の学習で獲得するのは難しいと考えました。

5番目の項目は、例えば「私モテ」や「とある」のような単語です。 例えば、前者の「私モテ」は「私がモテないのはどう考えてもお前らが悪い!」(2013年7月アニメ化)と「私がモテてどうすんだ」(2016年10月アニメ化)の2作品の愛称として知られています。 実際にGoogleで検索した場合にも、両方の作品が表示されていることがわかります。 後者の「とある」は、アニメ分野においては「とある魔術の禁書目録」「とある科学の超電磁砲」の2作品を指し、さらに一般的には連体詞として用いられています。

このような場合には、複数のコンテキストで同一の単語が出現することになり、正しく学習することが困難になります。 実は、このような曖昧性解消問題はアニメ関連においても深刻な問題となりつつあり、上記の作品名以外にも、例えば「凛」という名前が指すキャラクターが多い(有名なところでは「星空凛」「松岡凛」「遠坂凛」「渋谷凛」など)という問題があります。 このアニメドメインにおける曖昧性解消問題を凛状態と呼ぶことにしましょう。

凛状態の解決に向けて

では凛状態を解決するにはどうすれば良いでしょうか。

「どの凛を指しているかはキーワードと周辺文脈から区別できる」という仮定を置くと、次のナイーブなアルゴリズムを考えることができます。

  1. キーワードごとに異なる「凛」となるように区別
  2. 提案モデルを学習
  3. 1エポックごとに「凛」間の距離を測り、一定閾値以下であればマージ
  4. 2.へ戻る

図12 凛状態解決に向けたアルゴリズム
▲図12 凛状態解決に向けたアルゴリズム

3週間のうちに実際に実験することはできませんでしたが、上記のアルゴリズムを組み込むことで、適切にコンテキストの異なる同一単語を分離することができるのではないかと考えています。

モデル2号・3号の単語ベクトルのスコアが低い理由

従来のモデルとモデル2号・3号は、出力として周辺単語を予測するように学習を行っており、スコアの高いキーワードのみモデルとモデル1号は、出力としてキーワード情報を予測するように学習を行っています。 このことからも、評価実験でのスコアに大きく貢献したのは、キーワード情報からのロスであると考えることができます。

ところで、モデル2号と3号もキーワード情報をモデルの入力として用いています。 この入力は、本当に無意味だったのでしょうか?

評価実験では単語ベクトル$W_e$のみを評価していたためスコアとしては現れていませんが、実はキーワードベクトル$W_e$にも面白い特徴が得られていました。 モデル3号 Rev.Bの学習を通して得られた$W_d$に表1,3と類似したキーワードを与えると次の結果が得られました。

表4 モデル3号 Rev.Bを用いたときの、キーワードの単語ベクトルとコサイン類似度の近いベクトルを持つ上位5キーワード
ご注文はうさぎですか? Re:ゼロから始める異世界生活 この素晴らしい世界に祝福を! けものフレンズ ようこそ実力至上主義の教室へ
#1 ココア 0.68947 レム 0.78615 めぐみん 0.83319 サーバル 0.82906 よう実 0.69769
#2 シャロ 0.67518 エミリア 0.69870 ダクネス 0.73124 サーバルちゃん 0.77726 セントールの悩み 0.55141
#3 ティッピー 0.56429 長月達平 0.66962 駄女神 0.61180 ジャパリパーク 0.72899 恋と嘘 0.54268
#4 きんいろモザイク 0.51485 スバル 0.3048 ダークホース 0.60308 けもフレ 0.72134 紗霧 0.53223
#5 のんのんびより 0.51027 鬱展開 0.56276 角川スニーカー文庫 0.56557 かばんちゃん 0.71177 夏アニメ 0.48676

これもこれで面白い結果が出ていますね。 例えば「ご注文はうさぎですか?」に類似したキーワードとして「きんいろモザイク」や「のんのんびより」が出現している点や、「Re:ゼロから始める異世界生活」に「鬱展開」というキーワードが出現している点、さらには「ようこそ実力至上主義の教室へ」に類似したキーワードとして同時期に放送されたアニメなどが多数含まれている点など、何らかの知識が埋め込まれていると考えて良さそうです。

この結果から、モデル2号や3号においてモデルの学習に役立つアニメドメインに関する知識はキーワード情報からの入力を直接受け取る$W_d$が獲得しやすいため、$W_e$ではドメインに特化しない一般的な単語ベクトルの獲得が行われた、すなわち$W_e$にアニメドメインに関する知識の埋め込みが行われなかったのではないかと考えることができます。

これを踏まえると「なぜ1号のようにマルチタスク学習を行わなかったのか?」と疑問に思われる方も多いと思います。 実は今回の記事を執筆するにあたって間に合わなかったという理由もあるため、この実験は今後のタスクの1つでもありますが、実験を通して以下の2つの問題も出てくるのではないかと考えています。

  • 入力と出力に同じデータが来るため、正しく学習されない可能性もある
  • (他のモデルと比較して)学習時間が大幅に増加する
    • 入力と出力のキーワード情報の組み合わせが二乗個になるため

モデルファイルとデモサイト

今回の取り組みで得られた単語ベクトルがどのようなものかを、実際に試せるデモサイトを次のURLで公開しました。

このウェブサイトでは、上部に単語を入力しEnterキーを押すことで、各モデルにおける類似度が高い単語(入力された単語のベクトルとコサイン類似度が高いベクトルを持つ単語)を検索することができます。 利用できるモデルは次の通りです。

  • Original Raw (250k, 100dim) : 従来のSkip-gram(250,000件のWeb記事を元に学習)
  • Original (100k, 100dim) : 従来のSkip-gram (100,000件の前処理済みWeb記事を元に学習)
  • Keyword Only (100k, 100dim) : キーワードのみモデル (100,000件の前処理済みWeb記事を元に学習)
  • Model 1 (100k, 100dim/Best) : モデル1号(100,000件の前処理済みWeb記事を元に学習。提案モデルのなかで最も精度が高い。)
  • Model 1 Large (1M, 300dim/Best) : モデル1号(1,000,000件の前処理済みWeb記事を元に学習。提案モデルのなかで最も精度が高い。)
  • Model 2 (100k, 100dim) : モデル2号 (100,000件の前処理済みWeb記事を元に学習)
  • Model 3 Rev.A (100k, 100dim) : モデル3号 Rev.A (モデル2号と同様)
  • Model 3 Rev.B (100k, 100dim) : モデル3号 Rev.B (モデル2号と同様)
  • Model 3 Rev.C (100k, 100dim) : モデル3号 Rev.C (モデル2号と同様)

また、学習済みの単語ベクトルも配布しますので、手元に環境がある方はこちらでも試してみてください。

なお、配布形式には次の3種類あります。

  • tsv : 単語にスペースを含めることを許容するために、独自のフォーマットとなっています。単語と値の間がタブ区切りになっています。値はスペース区切りとなっています。
  • Google-txt : Googleが公開したword2vec実装の出力形式(テキスト形式)に準拠しています。 そのため、既存のword2vec実装で読み込むことができます。(単語と値の間がスペース区切りとなっています。そのため単語にスペースが含まれる場合(1つのエントリが複数語からなる場合)には、アンダーバー_ で置換されています。)
  • Google-bin : Googleが公開したword2vec実装の出力形式(バイナリ形式)に準拠しています。 Google-txtと同様の処理が行われています。

まとめ

今回の3週間のインターンでは、アニメやサブカルに関連したシノニムの自動獲得タスクに取り組みました。 1週間目では、同義語獲得に関する先行研究の調査を行い、主な既存手法の要点を整理しました。 2週間目では、予備実験として、Skip-gramモデルを用いて現状のデータセットから単語ベクトルを学習し、得られた単語ベクトルから現状のタスクに適用する場合の問題点(ごちうさ-リゼロ状態)を調査しました。 また、予備実験で明らかになった問題点から、改善するための仕組みを取り入れたモデルを提案・実装し、評価実験を行いました。 評価実験の結果、提案モデルはアニメ作品に関する知識も同時に埋め込んだ単語ベクトルを獲得できることが明らかになり、従来のモデルよりも高い精度で今回のタスクを解くことが可能となりました。 3週間目では、これらの実験モデルに関する考察とデモの作成を行いました。 考察を通して、特に複数のコンテキストを持つ同一単語の単語ベクトルを学習することが困難である(凛状態)ことがわかり、アニメドメインにおける曖昧性解消の必要性について言及しました。

今回の提案手法によって得られた単語ベクトルの応用先の例として、ハッカドール内における検索システムで用いる同義語辞書などが挙げられます。 その理由として、例えばユーザーが「ごちうさ グッズ」のようなクエリで検索した場合に「(ごちうさ OR ご注文はうさぎですか? OR チノ OR ココア OR ...) AND (グッズ OR トートバッグ OR ...)」のように展開されたクエリで検索を行うほうが嬉しい場合もあるからです。

また、今回はキーワード情報としてアニメ関連の単語を使用しましたが、異なるドメインと関連した単語をキーワード情報として用いることで、別のドメインに関する知識を単語ベクトルに埋め込むことができると考えています。 例えば、料理やお店に関する情報をキーワードとして持っておき、これらの単語を文章のキーワード情報として与えることで、幅広い分野に本提案モデルを適用できるでしょう。

今後のタスクとしては、凛状態の解決とモデル2号・3号の性能改善などが挙げられます。

最後に、インターン開始前から業務内容をはじめ様々な点でお世話になりました、メンターの鴨志田さん、人事の戸上さん、山本さんに感謝いたします。 土田さん、濱田さんには特に研究を進めるうえで有益なアドバイスをいただきました。ありがとうございます。 本タスクに関して一緒にディスカッションしてくださった鈴木政隆さん、内田さんにも感謝いたします。

そして、今回のインターンを無事に終えるにあたって、さまざまな場所で支えてくださった、AIシステム部とハッカドールチームの皆様に、心から感謝いたします。

参考文献

[a] 高橋いづみ, et al. "単語正規化による固有表現の同義性判定." 言語処理学会第 14 回年次大会発表論文集 (2008): 821-824.http://www.anlp.jp/proceedings/annual_meeting/2008/pdf_dir/D4-5.pdf
[b] Mikolov, Tomas, et al. "Distributed representations of words and phrases and their compositionality." Advances in neural information processing systems. 2013. http://papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality
[c] 城光英彰, 松田源立, and 山口和紀. "文脈限定 Skip-gram による同義語獲得." 自然言語処理 24.2 (2017): 187-204. https://www.jstage.jst.go.jp/article/jnlp/24/2/24_187/_article/-char/ja/
[d] Chakrabarti, Kaushik, et al. "A framework for robust discovery of entity synonyms." Proceedings of the 18th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2012. https://www.microsoft.com/en-us/research/wp-content/uploads/2012/01/idg811-cheng.pdf
[e] Cheng, Tao, Hady W. Lauw, and Stelios Paparizos. "Fuzzy matching of web queries to structured data." Data Engineering (ICDE), 2010 IEEE 26th International Conference on. IEEE, 2010.
[f] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016. https://www.cv-foundation.org/openaccess/content_cvpr_2016/html/He_Deep_Residual_Learning_CVPR_2016_paper.html

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

KDD2017に参加してきました

はじめに

こんにちは。AIシステム部研究開発グループの春日です。当グループではCV/NLP/RLといった技術領域を中心に研究開発を行い、実際のサービスへの活用を行っております。近年では会社として次の柱とすべくオートモーティブ事業へも注力しており、ここで活用される機械学習技術も当グループで開発を担っています。そこで、KDDというデータマイニング分野でのトップカンファレンスを聴講しにいき、オートモーティブ事業関連で活用されている技術についてキャッチアップしてきました。今回はその内容についてお伝えしていきたいと思います。

KDDとは

KDDの正式名称は「International Conference on Knowledge Discovery and Data Mining」です。今回は23回目の開催であり、1990年代にデータマイニングという研究分野が明確に確立されてから現在も盛んに研究発表がなされています。開催期間は8/13-17の5日間でした。初日はTutorial Day、2日目がWorkshop Dayという特定のテーマに沿った発表です。3-5日目がMain KDD Conferenceで、採択率約10%で採択された優秀な論文が発表されます。

開催場所

開催場所は、カナダ・ハリファックス (Halifax, Nova Scotia - Canada) です。日本からだと直行便がなく、最短で約17時間はかかる場所です。小さい町ですが港町として栄えており、非常に過ごしやすい場所でした。

kdd-image7.png

[ 会場のHalifax World Trade and Convention Centre]

さすが、港町というだけあって平然とロブスターが大量に叩き売りされています。

kdd-image8.png

[ロブスターの陳列]

近年のデータサイエンスブームの波を受けたこともあり、過去最多の1143本が投稿され、Main Conferenceに採択されたのは100本、Posterに採択されたのは116本でした。

セッションの様子

投稿された論文のうちMain Conferenceに採択されると口頭での発表ができます。カテゴリごとに複数の会場があり、各会場とも300人程度のキャパシティがあります。人気なところは立ち見になることもあります。Google社の講演 TFX: A TensorFlow-Based Production-Scale Machine Learning Platform (Denis Baylor et al.) は大変盛況でした。

kdd-image19.jpg

[Main Conferenceでの発表の様子(KDD2017での講演より)]

一方で、Posterに採択されると、19:00-22:00の夜の時間帯で会場に自身の研究内容をポスターで展示し、参加者からの質疑応答に応える形式で発表がされます。

kdd-image12.jpg

[Poster発表会場の様子(KDD2017でのポスター展示より)]

注目の論文

今回KDDに参加した中で、オートモーティブドメインにおいて注目すべき論文を取り上げて紹介します。

  • The Simpler The Better: A Unified Approach to Predicting Original Taxi Demands on Large-Scale Online Platforms (DiDi Chuxing)

こちらは中国の配車最大手「DiDi Chuning」による論文 The Simpler The Better: A Unified Approach to Predicting Original Taxi Demands on Large-Scale Online Platforms (Yongxin Tong et al.) です。DiDiはUber Chinaを350億ドルで買収したことで一大ニュースとなった有力企業です。そのDiDiが主力事業としているタクシー配車におけるタクシー需要のオンライン予測システムに関する論文です。UOTD(Unit Original Taxi Demand)とは、下図で示すようにそれぞれのPOIや時間ごとのタクシーの需要を意味します。ここでは1時間ごとのZhongguancun Software Parkにおけるタクシー需要の予測値を示しています。

kdd-image18.png

[タクシー需要のオンライン予測 [1]]

特徴的なのが、DeepLearningを代表とする複雑なネットワークモデルを用いて予測するのではなく、以下の式で示すような単純な線形回帰モデルで予測している点です。これにシンプルな正則化項を加えただけのモデルです。

kdd-image9.png

[需要予測に用いているモデル [1]]

ただし、特徴量は合計で2億次元以上という非常に大規模なものを用いています。これには、時間や天気、POIといった様々な特徴を組み合わせたものも含みます。

kdd-image10.png

[大規模な特徴量構成 [1]]

このようなモデルを用いている背景にはビジネス観点があります。それは法規制等の環境の変化に伴って、新たな特徴が加わるごとに、モデル自体を見直すのは非常に高コストであるからという考えです。DeepLearningのようなモデルは、入力が変化する度にハイパーパラメーターチューニングに非常に時間やリソースがかかってしまうため、モデルは線形回帰と固定して特徴量だけ再設計することで、新たな予測をするということです。サービスから得られた実データを用いた実験では、NNやGBRTといった手法より高精度で予測できています。 近年では、AI = DeepLearning という認識が広まりつつあるのですが、ビジネスへの活用という観点ではこのような古典的かつシンプルな線形回帰で十分なバリューを発揮するという意味で非常に面白い論文です。

[1] The Simpler The Better: A Unified Approach to Predicting Original Taxi Demands on Large-Scale Online Platforms (Yongxin Tong et al.)

  • A Taxi Order Dispatch Model based On Combinatorial Optimization (DiDi Chuxing)

同じくDiDiによる論文ですが、こちらはタクシー配車におけるDispatchを扱ったものです A Taxi Order Dispatch Model based On Combinatorial Optimization [Lingyu Zhang et al.] 。Dispatchとはタクシードライバーと顧客の配車オーダーの割当を意味し、これをどのように最適化するかという問題です。まず前提として、顧客が配車オーダーを出した段階で、ドライバーにリクエストが送信されます。ドライバーはそれを承諾するか拒否するかという行動をとることができます。よって、どのオーダーをどのドライバーに割り当てれば承諾の成功確率(=SR)を最も高くできるかを考えなくてはなりません。単純には、配車オーダーがあった地点から最も近い地点のドライバーを割り当てるといった方法が考えられます。

kdd-image15.png

[オーダーとドライバーの位置関係の例 [2]]

DiDiの提案手法では、まずドライバーの承諾確率をモデル化します:pij=p(y=1|oi,dj) oiはオーダーに関連するETAやPOIのカテゴリーといった特徴量、djはドライバーに関連する過去の承諾率や営業エリアといった特徴量です。さらに曜日や時間といった特徴も加えて、承諾確率pijをモデル化します。ここではLogistic Regressionが用いられています。 この承諾確率を用いてSRの平均を最大化するオーダーとドライバーの割当の組み合わせを以下に式に従って最適化します。

kdd-image16.png

[Order Dispatch Problem [2]]

この際、Hill-climbing Algorithmを用いて最適解を求めます。北京市内の実データに適用実験した結果、SRがベースラインモデルの80%から84%に向上したということです。

kdd-image17.png

[実験結果 [2]]

DiDiは自社にどんどん蓄積される豊富なデータを用いて、より効率的なモデルの独自開発を行っており、今後も注目すべき企業だといえます。 [2] A Taxi Order Dispatch Model based On Combinatorial Optimization [Lingyu Zhang et al.]

  • Planning Bike Paths based on Sharing-Bikes' Trajectories (Microsoft Research)

こちらは最近日本進出でも話題となったMobikeのデータを用いた自転車専用レーンの設計計画に関するMicrosoft Researchの論文 Planning Bike Paths based on Sharing-Bikes' Trajectories [Jie Bao et al.]

kdd-image14.png

[Mobikeユーザーの走行軌跡データ(KDD2017での講演より)]

中国では大気汚染や交通渋滞の解消のためにシェアバイクが急速に普及しています。しかし、自転車専用レーンが整備されていないため、安全性が不十分という問題があります。そこで、予算という制約のもとで、いかに効率的に専用レーンを建設すべきかが今回の目的です。 各ユーザーの走行軌跡に対して建設した専用レーンのスコアをscore(,)=ssegs()s.ls.lと定義します。これを合計したスコアTscore(,)を最大化するように専用レーンを建設する計画を立てます。 方法はシンプルで、①開始点を抽出する ②Greedy Network Expansionによって道路リンクを繋いでいく というステップで最終的に建設する道路ネットワークを抽出・可視化します。 ①の開始点の抽出ですが、単純には最も頻繁に使われる上位数点を用いるといったことが考えられます。そうすると、頻繁に通る道はたいてい近い場所にあることが多いので、かなり近い範囲で開始点が定まってしまうことが問題です。そこでSpatial Clusteringを行うことで、空間的な広がりも考慮しながら開始点を定めるというところが本手法のコアです。これによって、下図で示すように、地図上で広がりのある道路ネットワークを可視化できていることがわかります。 ②のGreedy Network Expansionでは、①で決めた開始点を繋ぐように貪欲に道路リンクを探索していきます。もちろん予算という制約があるので、出来る限りの開始点を繋げるように道路リンクを広げていきます。

kdd-image11.png

[Spatial Clusteringを用いた結果 [3]]

[3] Planning Bike Paths based on Sharing-Bikes' Trajectories [Jie Bao et al.]

KDD Cup 2017

最後に KDD Cup というデータ分析コンテストについて共有します。KDD Cup では提供されたデータセットに対して課題が設定され、その課題におけるモデルの精度を競うコンペティションです。世界的にも権威と歴史がある大会で、トップクラスのデータサイエンティストが競い合います。今回のテーマは、''Highway Tollgates Traffic Flow Prediction" でした。課題設定は2つあり、①Travel Time Prediction ②Volume Prediction です。ここでは、①Travel Time Predictionについて取り上げます。

kdd-image13.png

[Highway Tollgates Traffic Flow Prediction [5]]

このタスクは交差点から料金所の旅行時間を予測するというものです。例えば上図でいうと、IntersectionAからTollgate2の区間での車両の通過時間を意味します。用いるデータセットは各区間の車両軌跡データ・該当エリアの天気・道路ネットワークです。評価指標は移動時間予測タスクにおける一般的な指標であるMAPE(Mean Absolute Precentage Error) です。優勝チームであるTeam Convolutionは、MAPE=0.1748でした。このチームが優勝したポイントはモデル・特徴・データという3つのレベルでのアンサンブル学習にあります。モデルレベルではXGBoostやMultilayer Perceptron等のモデルを用いたアンサンブル学習とします。特徴レベルでは異なる減衰係数やスムージング係数等を用いて算出した特徴量を組み合わせたものをアンサンブル学習させます。データレベルでは異なる滑走窓の値や分割数でのデータによりアンサンブル学習させます。このように3つのレベルでたくさんアンサンブル学習させることにより汎化性能を上げ、MAPE = 0.1748という精度を得られています。かなりテクニカルではありますが、基本的には複雑なモデルを用いずに、BoostingやMLPといった古き良き古典的なモデルを用いている点が面白いです。実際のビジネスの場でも最新の複雑なモデルではなく、広く一般的に使われているモデルを用いる場面も多々あります。

[5] KDD Cup 2017

全体の感想

KDDという学会は扱う分野がかなり幅広いのですが、今回は主にオートモーティブ事業関連について取り上げました。他にもClusteringやGraphなどの理論寄りに関する研究から、Medical DataやRecommendationといった実務寄りの研究まで多様な研究が発表されていました。ご興味ある方はこちらのAccepted Paperからご覧下さい ( http://www.kdd.org/kdd2017/accepted-papers ) 今回の学会参加を通して、最先端のオートモーティブ事業で取り組まれている技術についてキャッチアップできたことはもちろん、参加者の方々とのネットワーキングができたことも大変刺激的で良い勉強になりました。 DeNAでは国際学会派遣制度というものがあり、私のような新卒1年目でも積極的に学会に参加することができます。こういった制度を活用してスキルアップできる環境は素晴らしいと思います。一緒に働いてみたいと思われた方は是非ご一報下さい!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Google機械学習活用勉強会レポート

はじめに

AIシステム部・AI研究開発グループの森と申します。この4月にDeNAに転職し、現在は主に画像や音声に関するDeep Learningの研究開発に従事しています。

DeNAでは、機械学習・人工知能(AI)技術を積極的に事業活用していく方針が全社的に打ち出されており、その一環として、エンジニアを対象にしたGoogle社様による勉強会が定期的に開催されています。

8月に行われた1回目の勉強会では、

  • Googleの機械学習プロジェクト
  • 機械学習をビジネスに応用する際のポイント
  • Google Cloud Platformで提供されている機械学習APIの概要

などをGoogle Cloud ソリューションアーキテクトの中井悦司さんに講義していただきました。

リンク:Google機械学習系API勉強会レポート https://engineer.dena.jp/2017/08/googleapi.html

2回目である今回の勉強会では、前回同様に中井悦司さんにお越しいただき、Google Cloud Platform (GCP) が提供する機械学習サービスをより実践的な面から講義していただきました。本勉強会には、DeNAのエンジニアを中心に約80名が参加しました。

IMGP2658.JPG

勉強会の様子

GCPが提供する機械学習サービス

1回目の勉強会では、Cloud Vision API、Cloud Speech API、Cloud Natural Language APIなど学習済みモデルのWeb APIが中心的な話題でした。

google_ai_api5.pngのサムネール画像

講演資料より

今回は、学習済みモデルのAPIではなく、TensorFlowとCloud Machine Learning (ML) Engineを用いて、データからオリジナルモデルを学習し、新しいAPIをデプロイするまでの流れを一通り解説していただきました。以後、演習で使用した各サービスを簡単にレポートします。

End_to_End_Process_of_Machine_Learning_with_Structured_Data.png

講演資料より

データ

BigQueryで公開されているOpen Natality Datasetを使いました。母親のさまざまな属性(人種、年齢など)と生まれた赤ちゃんの体重に関連する表形式のデータです。このデータを用いて母親の属性から赤ちゃんの体重を予測する回帰モデルをGCPのサービスを組み合わせて実現するのが目的です。

Cloud Datalab

Cloud Datalabは、データの探索、分析、可視化、機械学習モデル構築を行うためのインタラクティブツールです。Pythonのデータ分析環境として有名なJupyter Notebookと同じユーザインタフェースでGCP上のさまざまなサービスと連携することができます。今回は、BigQueryからのデータ収集、可視化による統計分析、データ前処理、機械学習モデル構築まですべてCloud Datalab上で実行しました。

datalab.png

演習に用いたノートブック

BigQuery

BigQueryは、ペタバイト級のデータを格納できるデータウェアハウスサービスです。講義ではOpen Natality Datasetの公開データベースからSQLを使って500万件のデータを収集しました。BigQueryの検索結果は、Pythonのデータ解析ライブラリであるpandasのDataFrame形式に変換できるため高度な統計分析や可視化が簡単にできます。

Cloud Dataflow

Cloud Dataflowは、パイプライン処理によってデータ前処理ができるサービスです。今回は、BigQueryから収集したデータに対して、(1) 属性の変換 (2) 訓練データとテストデータへの分割 (3) CSV形式でCloud Storageに格納という一連のパイプラインを実行しました。

dataflow.png

講演資料より

Cloud Dataflowは、処理するデータ量によって自動的にインスタンスが立ち上がるオートスケールに対応しており、何も意識することなく高速にデータ処理ができます。実際に背後でGoogle Compute Engineのインスタンスが自動的に立ち上がる様子も確認できました。

TensorFlow

TensorFlowは、Googleが提供している機械学習ライブラリです。DeNAのAI開発部でも多くのエンジニアが日常的に活用しています。

今回の勉強会では、カテゴリ変数(母親の人種など)と量的変数(母親の年齢など)を組み合わせたモデルを作るために tf.contrib.learn.DNNLinearCombinedRegressor (Wide & Deep Model) を使いました。このような複雑なモデルもTensorFlowのhigh-level APIを活用すると簡単に書けます。

tensorflow.png

講演資料より

Cloud Machine Learning Engine

Cloud DataLab上では小規模データによるテストまで行い、本番の大規模データによるモデル学習は、Cloud ML Engineを使いました。

Cloud ML Engineは、TensorFlowで構築したモデルの訓練、訓練したモデルのデプロイ、APIの提供までGCP上でシームレスに実行できるサービスです。Experiment APIを用いてモデル・訓練データ・テストデータ・評価指標を設定することで分散環境で高速にモデル学習ができます。

学習経過のログはCloud Storageに保存されるため、Cloud DataLabからTensorboardを呼び出すことで学習経過を可視化することもできます。

tensorboard.png

Tensorboardの出力例

学習済みモデルも同様にCloud Storageに保存されます。この学習済みモデルはCloud ML EngineのWebインターフェイスまたはgcloudコマンドを使うことで簡単にデプロイできます。デプロイしたモデルは、Web APIとして提供されるのでアプリケーションからjson形式のリクエストを送ることで利用できます。Cloud ML Engine上ではリクエストの頻度などAPIの使用状況も確認できます。

Google App Engine

Google App Engineを使うことで、デプロイしたWeb APIを利用するWebアプリケーションが構築できます。今回は、母親の情報から赤ちゃんの体重を予測するアプリケーションを作成しました。

application.png

完成したWebアプリケーション

ハンズオン

後半のハンズオンでは各参加者にGCPプロジェクトのアカウントが配布され、前半の講義で習った内容を実際に手を動かして体験することができました。弊社のインフラ基盤チームとGoogleエンジニアによるサポートやSlackでの情報交換により演習を円滑に進めることができました。

まとめ

今回の勉強会では、Google Cloud Platform上で、機械学習アプリケーションを構築する流れを一通り体験することができました。

これまでオンプレミス環境でWebサーバを立てて、モデルをアップロードして、アプリケーションを書いてという流れは一通り経験していましたが、これらをすべてクラウド上でかつ簡単な操作で実現できることに驚かされました。

現在、AIシステム部では、さまざまな機械学習・AI案件に取り組んでおり、迅速なサービス開発・デプロイが求められることが多くなっています。今後は、Google Cloud PlatformとCloud ML Engineを積極的に活用して効率的にサービス展開していきたいと考えています。

より深く理解するために

講師の中井さんからGCPをより深く理解するためのリソースをご紹介いただきました。

GoogleCloudPlatform / training-data-analyst https://github.com/GoogleCloudPlatform/training-data-analyst
今回の演習で使ったGithubのリポジトリです。今回の演習では blogs/babyweight を使いました。

データサイエンスに関する初心者向けの参考書 http://enakai00.hatenablog.com/entry/2017/02/20/124112
中井さんのブログ記事です。

Data Engineering on Google Cloud Platform https://www.coursera.org/specializations/gcp-data-machine-learning
Courseraが提供している有料のコースです。今回の勉強会の内容をすべて含んでいます。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

CVPR2017に参加してきました

はじめに

みなさんこんにちは、AIシステム部AI研究開発グループの李天琦 (@TianqiLi)です。普段は主にComputer Visionの研究開発を行っています。

DeNAのAIシステム部では、カメラの映像解析をはじめとする多くのプロジェクトでDeep Learningの技術を活用しています。Deep Learningの世界は変化が激しく、毎日追い続けても追いきれないほど日々新しい技術論文が発表されています。そこで、最新の技術トレンドをキャッチアップするため、今年(2017年)7月にハワイで開催されたConputer Visionに関するトップカンファレンスの一つである「(CVPR2017」)に参加してきました。その内容について紹介したいと思います。

cvpr2017_1.jpg

CVPRとは

CVPRの正式名称は「Computer Vision and Pattern Recognition」です。Compuer Visionというのはロボット(コンピュータ)の視覚を指し、広義では画像処理、映像処理の技術分野全般を意味しています。そのComputer Visionの分野において世界で最も権威ある学会の一つがこのCVPRです。そして近年ではDeep Learningを始めとするAI技術の飛躍的な進歩により、あらゆるComputer Vision分野でDeep Learningを使う事が当たり前になってきているので、CVPRはDeep Learningに関するトップカンファレンスの一つだとも言われるようになりました。

cvpr2017_2.png

今年の開催期間は7/21〜7/26の6日間です。初日と最終日は特定のテーマに絞って集中的に行うTutorial & Workshopが開かれました。他の4日間が、幅広い分野のセッションが行われるMain Confernceです。また、Main Conferenceの4日間では、Expoと呼ばれるスポンサー企業の展示会も並行して行われ、世界トップのIT企業たちが最新の研究成果や製品などを展示しました。

開催場所

今年の開催地はハワイのオアフ島です。海と自然に囲まれた最高のリゾート地でした。

cvpr2017_3.jpg

[ 会場のHawaii Convention Center ]

近年のDeep Learning人気の影響を受けて、CVPRの参加者は年々増加し、今年は採択論文数も参加者も過去最高でした。統計によれば、今年の投稿論文は2680本で、採択は783本でした。そして今回のCVPRの参加人数は6000人以上にものぼっています。

cvpr2017_4.jpg

[ オープニングセレモニーの様子 ]

cvpr2017_5.jpg

[ 採択論文の統計 ]

セッションの様子

CVPRに採択された論文のうち、評価の高かったものはOralやSpotlightと呼ばれるプレゼンテーション形式のセッションで発表されます。その場で大掛かりなデモを行うものもあります。それ以外は、Posterと呼ばれるセッションで展示され、質問すると論文の作者が直々に解説してくれます。

cvpr2017_6.jpg

[ Oral セッションの様子 ]

cvpr2017_7.jpg

[ Poster セッションの様子 ]

Expoの様子

Main Conferenceと並行して行われるExpoでは、各企業が独自の技術Demoを展示しています。今年最も多かったのはやはり自動運転で、TOYOTA、Tesla等の大手車メーカー以外にも、多数の自動運転ベンチャーが展示していました。

cvpr2017_8.jpg

[ Googleのリアルタイムポーズ推定のデモ ]

cvpr2017_9.jpg

[ 完全無人運転のDemo ]

cvpr2017_10.jpg

[ 無人運転の映像解析Demo ]

展示企業によっては最新の製品の販売も行っていて、今回の目玉商品はIntelが新たに販売する予定の「Movidius Neural Compute Stick」でした。これは簡単に言えばDeep Learning専用の外付け小型計算機です。これまで、Deep Learningは非常に計算コストが高いため、GPUを積んだ大型マシンが必要というのが常識でしたが、それを小型のエッジデバイス上で実現させたのがこのIntelのStickです。日本での発売予定日はまだ三ヶ月以上先ですが、今回の学会で一部の研究者向けに先行販売を行うとの事でしたので、DeNAでも研究開発用にと一部確保してきました。CVPRでも数百個しか販売されていなく半日で売り切れたので、かなり貴重です。

cvpr2017_11.jpg

[ Movidius Neural Compute Stick ]

懇親会への参加

カンファレンス期間中、毎晩のようにビーチやナイトクラブで懇親会が行われていました。そのほとんどがクローズドなもので、特定の企業のメンバーもしくは招待状を受けとった人しか参加できないようになっています。ACCV(アジア地域で開催されるComputer Visionの国際学会)のメンバーの懇親会では、AIの世界的な権威者であるTakeo Kanade先生やFei-Fei Li先生のスピーチに会場が沸きました。

cvpr2017_12.jpg

[ ACCV懇親会でのTakeo Kanade先生のスピーチ ]

注目の論文

今回CVPRで発表された論文の中で、特筆すべきものをいくつか紹介します。

- DenseNet

まず、今年のBest Paperに選ばれた2本の論文のうち、1つがこちらのDensely Connected Convolutional Networks (Gao Huang et al.)です。

cvpr2017_13.png

[ Dense blockの構成 ]

この論文が最初に発表されたのは2016年の8月頃で、当時Image-Classificationタスク(画像に映った物体の種類を分類する問題)におけるState-Of-The-ArtだったResNetのSkip Connection構造を取り入れた密な結合構造「Dense Block」を提案しています。各層の入力に、それより以前の全ての層の出力を結合した結果を使うというシンプルなネットワークアーキテクチャです。汎化性能が高く、パラメータ数の少なさと精度においてResNetを上回る性能を示しています。

- SimGAN

2本のBest Paperのうち、もう1本がこちらのLearning from Simulated and Unsupervised Images through Adversarial Training(Ashish Shrivastava et al.)です。

cvpr2017_14.jpg

[ SimGANの展示ポスター ]

こちらは、GAN(Generative Adversarial Nets)の手法を用いて、シミュレータから生成されたCGデータを現実画像に見えるように変換して、現実の画像と見分けづらくさせる手法です。そもそもなぜこれが重要かと言うと、Deep Learningの世界では訓練データの多さがそのまま計算結果の精度に直結するため、データが多くあればあるほど有利です。しかしリアルのデータを集めて、それにラベルを付けていく事は非常に大変なので、これをシミュレータから無限に生成できないかというアプローチです。シミュレータから生成された画像は通常、リアルの画像と比べてどうしても不自然さが生じますが、その不自然さをなくす事に成功したのがこちらの論文です。

Loss Functionの設計が特徴的で、シミュレータのデータにリアリズムを付与するAdversarial Lossと、元々のアノテーション情報を失わないようにするためのSelf-regularization Lossという2つのLossを定義しています。この仕組によって、一部のUnsupervisedなリアルデータさえあれば、シミュレータから無限に教師データを生成できる画期的な手法です。

- YOLO9000

今回のCVPRではBest Paperとは別に、Best Honorable mention awardという特別賞のPaperも2本ありました。そのうちの1本がこちらのYOLO9000: Better, Faster, Stronger(Joseph Redmon et al.)です。

cvpr2017_15.png

[ YOLO9000のポスターセッション ]

YOLO9000は、画像内から特定の物体の位置と種類を含めて検出する「一般物体検出」の手法に関する論文です。従来の手法よりも遥かに高速、高精度かつ多種の物体を検出できるようにしたフレームワークを提案しています。 YOLO9000自体の技術Demoも凄いですが、それ以上に今回展示されたポスターが独特すぎると話題を呼びました。通常であれば学会に出すポスターは論文の解説ポスターと相場が決まっているところを、原則を完全無視して広告的な意味でのデザインポスターを展示してくるあたり、さすがすぎるとツイッター等のSNSで一時期話題となりました。 ちなみにこちらのYOLO900の論文は、自分のほうで部分的に再現実装したYOLOv2 Chainerバージョンというリポジトリをオープンソースで公開しています。皆さん興味あればぜひ使ってみてください。

- Polygon RNN

2本の特別賞のPaperのうち、もう一本がこちらのAnnotating Object Instances with a Polygon-RNN(Lluis Castrejon et al.)です。

cvpr2017_16.png

[ Polygon-RNNのツール画面 ]

こちらの論文では、Semantic Segmentationの教師データを作る際のアノテーションコスト削減の仕組みを提案しています。通常であれば、セグメンテーション用の教師データを作るのに、物体のピクセル領域全域を細かく塗りつぶす必要があったところを、こちらの論文では複数の頂点によって構成された多角形の頂点推測問題に置き換えています。アノテーターは物体の外接矩形であるBounding Boxを与えてあげれば、RNNの仕組みで内部のオブジェクトに対して自動的に頂点候補を生成してくれます。生成された頂点がズレている場合は、アノテーターは最低限の頂点修正作業のみ行えば済みます。これによって従来の4〜7倍もの作業効率を実現できるという画期的なフレームワークです。 ちなみにアノテーション効率化に関するPaperは、このPolygon-RNN以外にもTraining object class detectors with click supervision(Dim P. Papadopoulos et al.)というのがありました。こちらは、Bounding Boxのアノテーション作業をワンクリックで行えるようにしたという画期的な手法を提案しています。

全体の感想

今年のCVPRはやはりというべきか、CNNをベースとした論文がほとんどでした。また、その多くが、計算のパイプラインを複雑化する事で高い精度を達成できたという、手法的な新規性に関するものでした。私たちの研究チームでもこれから学会に技術論文を発表していく予定なので、良い参考にはなったと思います。 今回のCVPRで発表されたOralやSpotlightのプレゼンは基本的に、こちらのYouTubeですべて動画で見られますが、実際に行ってみると論文の気になる点を作者に直に聞けたり、あとネットワーキングもできる等のメリットがあります。自分は今回がCVPR初参加でしたが、技術的な収穫はもちろん、ネットワークも広がって凄く良い刺激になりました。

cvpr2017_17.jpg

[ おまけ:Fei-Fei Liとの写真 ]

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Google機械学習系API勉強会レポート

AIシステム部の奥村(@pacocat)です。AIシステム部では、AI研究開発グループに所属しており、主に強化学習を用いたゲームAIの研究開発を行っています。 DeNAでは、様々な事業ドメインのデータを実際に使いながら機械学習を使ったサービス開発を推進しており、中でもゲームは豊富なデータ・シミュレーターがあるため、最先端のアルゴリズムを動かすための環境を自前で持っているのが特徴です。

全社的にも機械学習サービスのニーズが高まっている背景の中、7/5にGoogle様による機械学習系API勉強会が当社セミナールームにて開催されました。今回は、勉強会の内容をブログでレポートしたいと思います。

Googleといえば、先日開催されたGoogle I/O 2017でも"AI first"というメッセージが改めて強調されていましたが、実際にGoogle LensやGoogle Homeなど機械学習を活用したサービス・プロダクトが次々と登場し、注目が集まっています。

[最近話題になっていた"Democratizing AI(AIの民主化)"についてなど、AI関連の取り組みについてはこちらのGoogle Cloud Next'17の動画をご覧ください]

このセミナーでは、Google Cloud, ソリューションアーキテクトの中井悦司さんにお越しいただき、

  • Googleでどのようにディープラーニングを活用しているのか
  • Google Cloud Platform(GCP)が提供する機械学習サービス
  • 機械学習のビジネス適用における考え方

といったテーマについてお話いただきました。

昨今「人工知能」を利用したビジネス期待が急激に高まっていますが、中井さんはそうした期待値と実際の機械学習ソリューション開発のギャップを適切に埋めるため、機械学習の啓蒙やGCPを使った技術支援全般を行っています。

google_ai_api2.png

セミナーの様子(100名程度の社内エンジニアが参加していました)

※以下、主にディープラーニングに関連した学習技術を含め「機械学習」という用語を使いますが、「機械学習」と「ディープラーニング」の区別が必要な場合は明示的に「ディープラーニング」と記載します。

Googleでなぜ機械学習を活用するか

そもそも、Googleではどのように機械学習が取り入れられているのでしょうか。 「1クリックで世界の情報へアクセス可能にする」という企業ミッションを耳にすることもありましたが、モバイル市場の拡大に伴い、情報へのアクセス手段もクリックに限らなくなってきました(※参考:Searching without a query)。

そうした背景のもと、音声や画像入力に対応するため、サービスを支える機械学習技術が強くなっていったのは必然的な変化だったのでしょう。実際、Googleでは様々な機械学習(特にディープラーニングを使った)技術が開発されています。セミナーでは、そうした技術の中でもホットなものを紹介していただきました。

Wavenet(DeepMind社による音声合成技術)

Wavenetは、ニューラルネットワークを使って音声のデジタルデータを直接出力するモデルです。従来の、音素に分解してつなぎ合わせるパラメトリックな手法に比べて音声生成精度が飛躍的に向上しました。いずれは、人間の発話と区別がつかなくなってくるようになるかもしれません。 また、人間の音声に限らず、楽器の音を集めてトレーニングすることで、自動作曲が出来ることも話題になりました。

google_ai_api3.png

DeepMind Technologies Limited, "Wavenet",
https://deepmind.com/blog/wavenet-generative-model-raw-audio/
(accessed: 2017-07-13)

Gmail Smart Reply

自然言語処理の分野でも新しいサービスが提供されています。現在は英語モードのGmailのみが対象となっていますが、スマホでGmailを開くとメールの文脈を理解して、返答文の候補を生成してくれるサービスです。ここにも文脈理解のためのディープラーニング技術が活用されています。
※現在はモバイルGmailアプリからの返信の20%程度で、この機能が利用されているそうです。

google_ai_api4.png

Google, "Save time with Smart Reply in Gmail",
https://www.blog.google/products/gmail/save-time-with-smart-reply-in-gmail/
(accessed: 2017-07-13)

データセンターの冷却効率改善(DeepMind社によるソリューション)

Google社内向けのソリューションも開発されています。DeepMind社は昨年、ディープラーニングと強化学習を組み合わせた技術でデータセンターの電力消費効率を最大40%削減することに成功しました。(※参考:DeepMind AI reduces energy used for cooling Google data centers by 40%
※この事例における技術の詳細は公開されていませんが、こちらに中井さんによる機械学習を使ったエネルギー効率予測についての解説があります。

他にも、Google Photosの一般物体画像認識技術など、様々な機械学習サービスが生み出されており、Google社内では機械学習のバックグラウンドを持っていないサービスエンジニアも社内トレーニングコースなどを活用して、機械学習モデルを使いこなしているそうです。

GCPが提供する機械学習サービス

さて、Googleでは一般ユーザーがこうした機械学習技術を活用できるためのサービスを提供しており、目的別に以下の二つの方向性に大別されます。

  • 学習済みモデルのAPIサービスを使う
    ⇒ ディープラーニング技術を今すぐに活用してみたい人向け
  • TensorFlowやCloud Machine Learning Engineのような環境を使って開発を行う
    ⇒ 独自モデルを作りたい人向け

google_ai_api5.png

Google社講演資料より

①学習済みモデルのAPIサービスを使う

Cloud Vision API

google_ai_api6.png

Google, "CLOUD VIDEO API",
https://cloud.google.com/vision/?hl=ja
(accessed: 2017-07-13)

Cloud Vison APIは、画像を渡すことで様々なラベル情報を取得することが出来ます。 上の例では、顔の検出だけでなく、顔が向いている方向・感情分析の結果が返ってくるAPIとなっています。

Cloud Natural Language API

Cloud Natural Language APIは、自然言語を分析するサービスです。文章の感情分析を行うことも可能で、お問い合わせメールの自動分類でカスタマーサポート業務を効率化するなど、導入事例が増えてきているそうです。

Cloud Video Intelligence API(β版)

google_ai_api7.png

Google, "CLOUD VIDEO INTELLIGENCE API",
https://cloud.google.com/video-intelligence/?hl=ja
(accessed: 2017-07-13)

現在はβ版が提供されていますが、Cloud Video Intelligence APIは、動画解析・検索が出来るサービスです。 動画のフレームを解析し、場面の切れ目を検知したり、場面ごとに何が映っているかを検出することが可能です。
※上の例では、"Elephant", "Elephants", "Animal", "African elephant"とったラベルが検出されています。

他にも様々なAPIが公開され、導入事例も増えてきているそうなので、気になる方はこちらをご覧ください。

②独自にモデルを1から作成する

上述のAPIは、既に学習が済んでいるモデルをそのまま使うパターンになりますが、自社のデータを使って独自にモデルを開発したい場合もあります。その場合は、TensorFlowのような機械学習フレームワークとCloud Machine Learning Engineのような(TensorFlowのGPU・分散学習機能に対応している)計算リソースを利用する方法があります。

③学習済みの公開モデルを利用して独自モデルを作成する

①と②を折衷したパターンです。独自モデルを作る場合、既存で提供されているAPIレベルのものを1から作るのは大変です。そこで、公開されているフレームワークや学習済みデータを活用することで独自モデルを作成する方法もあります。これは転移学習と呼ばれている手法で、既に学習されたネットワークを独自にチューニング・カスタマイズすることで、1から学習をするよりも効率的に開発が行えるメリットがあります。 セミナーでは、TensorFlow Object Detection APIを使った簡単なアプリのデモが行われていました。(※デモアプリの作成方法は、こちらの記事で公開されています。)

google_ai_api8.png

https://github.com/tensorflow/models/tree/master/object_detection
(accessed: 2017-07-13)

機械学習のビジネス適用における考え方

セミナーの後半では、機械学習を実ビジネスに適用する際、どのような点に気をつけないといけないか、リアルなプロジェクト視点で講演を行っていただきました。

まず、ディープラーニングは非構造化データ(画像・動画・音声・自然言語)に高い性能を発揮する特性がある一方で、適応領域はまだ限定的です。データが不十分だったり、まだ実証されていない事を実現する場合のハードルは高いと考えたほうがいいという話がありました。 ディープラーニングはあくまでツールの一つでしかなく、それだけで凄いサービスが作れるかというとそうではありません。あくまでビジネスの中でディープラーニングが上手くハマるところを見つけていく、という関わり方が大事という話が印象的でした。

続いて、(ディープラーニング以外の)従来の機械学習をサービスに導入する際には、データアナリストによるデータとビジネスに対する知見が必要、というポイントが紹介されました。従来の一般的な機械学習では、構造化データによる予測処理がサービス適用の中心となります。そうした予測は、一般的な統計分析(いわゆるBI)が出発点になるため、あらかじめデータを整備しサービス分析が出来ていることが前提になる、というニュアンスです。

ここで、データ分析に対する考え方を整理しましょう。データ分析のプロセスについて、次のような理解をされることがあるそうです(下図の矢印のサイクル)

  • 手元にデータが存在しており、データアナリストはそこからインサイトを得るために様々な集計や機械学習モデルの実験を繰り返す
  • そうして作られた機械学習モデルによって、未知のデータに対する予測が出来るようになる
  • データ予測がビジネスに使えないか検討する

google_ai_api9.png

Google社講演資料より

しかし、本来のゴールである「ビジネス判断」を考えると、このループを逆にたどる必要があります。

  • まず、ビジネスゴールを明確にする(一番大事な出発点)
  • ビジネスゴールを実現するために、何を予測すべきかを決める
  • 予測に必要な機械学習モデルやデータを洗い出す
  • そうしたデータを集め、分析するためにはどのような活動をしないといけないのか

当たり前じゃないかと思われる方がほとんどだと思いますが、改めて大事な視点だと感じました。

話はさらに機械学習エンジニアとビジネスのコミュニケーションにも踏み込んでいきました。 機械学習はやってみないとどれくらいの精度が出るか分からない、という不確実な要素が強い領域です。ただ、だからといって素直に「やってみないと分からない」とコミュニケーションするだけでは何も進められないのも現実です。

機械学習は実験的な要素を含んでいるんだとエンジニアとビジネスサイドで共通認識を持った上で、影響範囲を適切に見極めながら実際にサービスに機械学習を組み込んでみて、リアルに実験をしていくのが重要だというのが中井さんの主張です。そうして知見が溜まることで、機械学習をビジネスで使う勘所をサービスメンバー全体で持てるようになるのではないでしょうか。

google_ai_api10.png

Google社講演資料より

まとめ

最新の機械学習系APIの紹介から、ビジネス適用まで、様々な観点から機械学習サービスについてのエッセンスをまとめていただきました。特に後半の機械学習サービス開発の注意点については、なかなかこうした形でまとめて聞く機会も少ないので、改めて機械学習を使ったサービスについて考えるきっかけになったのではないでしょうか。AIシステム部では、様々なAI案件でビジネスメンバーと一緒にサービスをデザインして組み立てていくことが多く、機械学習に対する共通認識や社内文化の作り方など、参考になる観点が多かったように思います。

今回カバーしきれなかった内容を扱った第二回も検討されているそうなので、楽しみです!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Google I/O 2017 ショートレポート

昨年よりHRをやってますtachikeiです。

ちまたのI/O熱が冷めた頃合いを狙ってHR観点でショートレポートを投下します。

次回 DeNA TechCon のネタ探しも含めて Google I/O 2017へ行きました。
プロダクトや技術的なトピはたくさんの方が書かれているので、それ以外で。

IMG_3881.jpg

持ち帰ったのは以下2点。
・Google I/Oはトッププライオリティのアジェンダ
・おもしろい技術でおもしろいモノを作る、以上

1点目は
・トップが語る
・IOにリリースをあわせる
・ムーブメントを起こす
エンジニアが好きにやってるカンファレンスじゃなくて全体がそこに向かっている印象です。

2点目は
物作りの会社。おもしろい技術でおもしろいものを作ろうと。テクノロジーとプロダクト。
エンジニアが本来やりたいのは、これだと思います。

当然利益は出さなければならないと思いますが、
ここのシンプルな点の追求こそが競争力のベースになっているように感じました。

それ以外の点としては
・物作りに集中できる環境作り
・AIの応用スピード早い
・オフィスアワーのAIニーズ高い
・ライブ配信、メディア対応手厚い

以上です。
必要なものを組織にジワジワとインストールしたいと思います。
早速、ラズパイ用のマイクロフォンを買いに行きましたとさ w

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Selenium Conf2017 Austin に参加してきました

システム本部SWETグループのグループリーダの沖田(@okitan)です。SWET(スウェットと読む)はE2Eテストの自動化やCI/CDの整備等を通じてDeNAの事業の開発生産性と品質の向上をミッションとするチームです。

SWETチームはその前身となるMobageのオープンプラットフォームのテスト自動化とCIをミッションとしていた時代からSeleniumによるEnd to Endテストに取り組んできていました。今回、そのSeleniumの国際カンファレンスであるSelenium Conf 2017 Austinに参加してきたので、Seleniumを取り巻く最新の動向を紹介したいと思います。

Selenium Conf Austin 2017

Selenium Conf 2017 Austinは4月3日〜4月5日までの3日間開催され、約500人の参加者があったようです。初日はワークショップが開催され、2日目と3日目がカンファレンスでした。私は、日程の都合上、2日目と3日目のカンファレンスだけの参加となりました。

2017-05-23 10.01.11.png

日本からの参加者は私だけだったようなので、昼食だとかレセプションだとかで積極的にいろいろな人に話しかけたのですが、カンファレンス参加者の所属は大手企業からスタートアップまでバラエティーに富んでいて、その中でSeleniumやAppiumを使った自動テストを元にどういうようなことをやっているかというのを色んな立場の人から聞けたのはすごくいい経験になりました。

日本でも最近ではかなりDevOpsが当たり前になってきていますが、今回個人的に話を聞いた人たちの多くも当然のようにDevOpsでの開発サイクルを回していて、その中でいかに継続的かつサイクルのいろんなところにQAを分解再構築したものをいれていき、それにより品質と生産性をあげていくかといった、DevOpsQA的な取り組みを模索している最中といった感じでした。

SWETでもDeNAの事業のサイクルに寄り添い、その中でいかに品質と生産性をあげていくかに日々取り組んでいて、非常に参考になりました。

今回カンファレンスで心に残った発表も、そういったDevOpsQA的なものを目指し、CIの中でいかにSelenium特有のflaky(安定しない)なテストにチームとして立ち向かっていくかといった発表が多かったです。

Transformative Culture - The Shift From QA To Engineering Productivity

そのような発表の中で、個人的に一番よかったのは、Ashley HunsbergerさんによるTransformative Cultureでした。

ストーリーとしては、400件のテストケースのうち370件がflakyでかつ全部の実行に2時間かかるような悲惨な状況から、チームや全社的なカルチャーをいかに変えていったかといったよくある系ではあるのですが、その際の具体的な目標設定だとか、施策が非常に参考になりました。特に、作成していくテストスイートに対して、その「Goal(目的)」、「Trigger(実行タイミング)」、「Gate(失敗したときに何が起きるか)」、「Requirements(テスト実行に関わる要求)」を定義していくということがきちんと整理されていて、今携わっているプロジェクトにおいてはどうなっているだろうかとかいろいろ考えさせられました。Seleniumに関してのテクニカルなことはほぼ触れられていませんでしたが、このような自動テストを作りメンテしていく上で必要なことが一杯つまった発表だったと思います。

詳しくは、動画スライドがあがっているので、是非そちらを参照してください。

Zalenium: Use A Disposable And Flexible Selenium Grid Infrastructure

一方、Seleniumの技術的なトピックで印象に残ったのは、Diego MolinaさんとLeo Gallucciさんによる、"Zalenium: Use A Disposable And Flexible Selenium Grid Infrastructure"という発表です。

Zalenium(発表者はサレニウムと発音していました)は、Selenium Grid(CI環境でよく使われるSeleniumの複数ブラウザを並列的に動作させるための仕組み)を拡張していろいろな機能を足したもので、実はこのカンファレンス参加前からSWETグループではZaleniumの利用の検討をしていました。もっといえば、Zaleniumとほとんど同じような機能をSWET内独自に実装していて、当初はその取り組みを発表しようとSelenium ConfにCFPを送っていました(CFP送った当時はZaleniumが本当に出たてのことで全くその存在を知らなくて、CFPの時点でこれと競合していたのであればrejectもある意味納得です)。

Zaleniumがもつ機能でSWETで行いたかった取り組みは、テスト実行状況の可視化とその録画でした。というのも、特にJenkinsのようなCI環境で大量に分散したテスト実行状況をリアルタイムに確認可能にし、またその動作状況を録画しておくことにより、何かあったときのフィードバックを高速化したり、何かあったときのデバッグを非常に簡単にできます。

そのうえ、Zaleniumはリンク先の図のような仕組みにより、Selenium Gridにおけるnode(実際のブラウザが動く環境)のdockerコンテナがオートスケールします。SWETでやっているSeleniumの自動テストは、1つのテストケースに複数のブラウザを動作させることが必要となるテストが多く、そのためテスト実行時に必要なブラウザセッションの数が不定でした。nodeがオートスケールするような仕組みと我々のSeleniumの自動テストはかなり相性が良いと感じました。

なお、Zaleniumが利用しているSeleniumのdockerイメージは公式のものではなくdocker-seleniumを利用しています。このdocker-seleniumは公式のdockerイメージのgood alternativesという目的で開発されていて、例えば録画機能はこのdocker-seleniumの機能によるものです。このdocker-seleniumはつい最近まで、日本語や中国語だといったフォントが表示ができない問題があったのですが、我々が最近送ったPRにより、表示できるようになりました。以前Zaleniumを試してこの問題にあたった方も再度試していただけるといいなと思います。

Zaleniumに関しても、動画スライドがあがっているので、是非そちらもご参照ください。

まとめ

発表は基本的に、YouTubeですべて動画でみられるのですが、何よりも中の人達といろいろな話ができたのが収穫であり、刺激になりました。

例えば、Zaleniumの中の人たちは、DeNAがZaleniumを使い始めようとしていることを知っていたり、今度PRを送るねーとかやりとりをしたりしました。

また、Seleniumコミッタ陣とも、今年の7月1日に日本で行われる予定のSelenium Comitter Day 2017に関する話をしたりだとか、共著で書いたSelenium実践入門プレゼントしたりだとかのやりとりをしました。

Selenium Committer Day 2017はSeleniumのコアメンバー3人がそれぞれトークをしてくれ、同時通訳までついてます。絶賛参加募集中ですので、ぜひぜひご参加ください!DeNAもこのイベントのスポンサーをしておりますし、SWETメンバーもトークする予定となっています。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

実写のVRのストーリーテリングに関する調査

こんにちは。

アイドルやスポーツのライブストリーミングを行なっているSHOWROOMで、番組のVR化を進めております、エンジニアの小倉と申します。DeNAの技術開発という、メンバー個々人が研究開発をした技術をそれぞれに適合しそうなサービスに持ち込む、ちょっと変わった部署に所属しています。

今回は社内の国際学会カンファレンス支援制度という、有望な若者を世界に送り出す制度(を、おっさんが使ってしまった罪悪感を噛み締めながら)で、SXSW2017に行った報告をお届けします。

SXSW出席の経緯:

SXSW2017に出席した3/10の時点のSHOWROOM VRは単眼360度(=立体ではない360度)のライブストリーミング配信でした。単眼360度の映像では、VRグラスで見るよりもスマートフォンでみる方が快適で、ぐるっと後ろを見るとスタジオのおっさん達が映ったりして、「コレジャナイ感」「いや絶対コレジャナイよ感」がそこはかとなく漂う状況にありました。

風景主体のコンテンツは360度で配信した方が臨場感が出ますが、演者さん主体のコンテンツは注視点の方向が決まってるいわけですから、360度である必要はありません。アプリケーションのUIには番組参加のユーザーの注視点ヒートマップがあり、皮肉な事に360度である必要がないことを示しています。(※補足有り)

視野角を180度に割切る代わりに、左右の目の位置からみた映像をライブストリーミングして、スマートフォンとCardbordでリアルタイムにアイドルを立体で見られる方が、体験としてはインパクトがあります。 結果的に、この方が通信帯域を有効活用する事にもなります。

普段の生活では得られない視点から人や物を見られる事自体が、新しい体験となります。そこに4K 3D配信が入り、更に鮮明な体験が作れるようになりました。これは、「SHOWROOM VRのコンテンツをもっと進化させられないか?」、「旅行やスポーツなどへの利用を進められないか?」という問題意識を、より強く持つようになりました。これが今回SXSWに出席した理由です。

※補足※ 360度必要ないという判断は、FLAT(360度との対比で普通の四角い映像を指す言葉)の撮影を目的とした現在のスタジオの構造から来る結論であり、今後はそこも含めて変わる可能性は十分あります。実際、AKB48のオールナイトニッポン(毎週水曜25:00開催)は机の中央に360度カメラを置き、コンテンツとして360度が活かされてます。

SXSWとは:

米国テキサス州オースティンで毎年開催されるアートとテクノロジーのイベントで、1987年に音楽祭として始まって以来30年間続いています。取り扱う題材の範囲が広く、議論の切り口も斬新です。トップページの動画を見ても色々詰まり過ぎていて何のイベントかさっぱり理解できません。

2017-05-29 9.56.35.png Austin Convention Center(SXSWの中心的な場所)

2017-05-29 9.56.48.png 図:SXSWスケジュール表

スケジュール表にある通り、4つの分野「Music」「Film」「Interactive」「Comedy」が更に細分化されているのが分かると思います。VR/ARのカンファレンスは、表中央の「Convergence」欄なので、「Music」「Film」「Interactive」の合わせ技となります。それは、この期間に集中的に議論されることを意味しています。この期間だけというわけではなく、VR/ARのタグがついたカンファレンスは開始早々の3/11から「Interactive」「Film」の中にも埋もれています。

開催期間中はオースティンの街全体が会場ムードです。街のあちこちでカンファレンス、展示、デモ、パーティーが行われていて、VR/ARもその一つです。 Uberが使えないオースティンの街で往来を終日×1週間続けるのは、体力勝負の情報収集となります。また、カンファレンスには当たり外れも多いです。20分歩いて辿り着いたのに「キャパオーバーで入れない」とか、「期待外れで落胆する」ということが続いても、折れない心が必要です。

AR/VRの議論の前提「AR/VR=メディア」:

まず、「AR/VR=メディア」という捉え方は、あまり日本では意識されていないと思います。理由としては、日本のメディアは率先してAR/VRを取り上げていないことや(※NHK技研を除く)、CGを使ったVRゲームのコンテンツ開発が主流だからだと考えられます。

AR/VRがメディアとして意識されていない状況(日本におけるAR/VRの状況)を、あえて極端に図示してみました(下図参照)。この状況では、AR/VRというのは新しいもの好きな人々ための何かで、多くの人が関係するものとしては認知されにくいと考えられます。

また、海外の様にNPO・NGOでVRコンテンツ製作が活躍しているといった話を聞きません。日本のVRのオピニオンリーダーはインディーゲーム開発者とその投資家で、孤軍奮闘しているという状況です。

05-29 9.57.24.png

一方で、米国ではSXSWに限らずAR/VRはメディアとして捉えられています(下図参照)。ゲームクリエイターはもちろん、スターウォーズのようなメジャー映画のコンテンツ製作をするクリエイターや、医師、ジャーナリスト、NASAのマーケティングもオピニオンリーダーとして参加しています。AR/VRは将来的に多くの人が関わることになるものとして、大真面目な議論が行われています。

05-29 9.57.36.png

まず、この違いを認識していると、議論の範囲や、規模感を理解しやすいと思います。日本でAR/VR関連のプロジェクトの稟議が通りにくい、根本的な理由はここにあると思えます。勘が良い方は、この状況が放置されていることに危機感すら覚えると思います。というのも、未来の世代の教育レベルや国力、あるいはメディア戦に影響を与えかねない話だからです。

カンファレンスについて:

カンファレンスはパネリストによる、2人~4人のパネルディスカッションの形式が定番です。スライド資料はほとんどありません。ひたすら続く会話から重要と思われるキーワードを拾っていきます。一例としてNASAのパネルディスカッションを紹介します。

Space 360: Experience NASA Missions in VR/AR/Video

p7-05-29 9.57.54.png NASAのパネルディスカッションに参加した際のメモ

実写のVR、360度動画に関してはSXSW2014から活発に議論が行われています。当時は「この100年間で確立されたカメラワークや映像の編集方法が360度では通用しないため、模索するところから始めましょう」という論調でした。

SXSW2017においてもこの延長線上で議論がなされており、今も模索は続いています。「エクストリームな環境(例えばスキューバダイビングでサメに囲まれるものや、スカイダイビングの様な360度動画)を観ると、人は驚く」ということは確認されました。そこから長時間楽しめるコンテンツにする為に「ストーリーテリングはどうすればいいのか?」といったところに論点が来ています。

まとめ:

AR/VRに関するパネルは期間中に11セッション出ました。このうちVRのメディアとしての強みや、ストーリーテリングについてだいたいまとめると以下のようになります。

17-05-29 9.58.03.png

実写のVRの場合、「どこで情報を集めればいいのだろう?」「その場合のストーリーテリングは?」という疑問はずっと昔からありました。カメラ、ツールに関する情報はたくさんありますが、コンテンツ製作に関する情報はなかなかありません。というのも、まだ模索の段階だからです。

SXSWはそうした議論を幅広く行なっている場であることから、自分も2015年から行きたいことを表明しておりましたが、ようやく2017年に稟議が通りまして参加できた次第です。

一方、かつてのビデオ、インターネットが参考となるように、コンテンツ市場の拡大を予測する一般的な目安として、アダルト市場の動向があります。実写のVRコンテンツでも先行しているアダルト市場では、2017年から大手が次々と参入する段階に入っています(制作関係者筋談)。

どんな理由にせよ、一般層にCardbord、Gear VRなどの360度動画向きのHMDが広まることで、この後は実写のVRのコンテンツ全般に様々なチャンスが出てくると考えます。同時にコンテンツの粗製乱造のためにユーザーが離れたり、実写に少しアノテーション情報を重ねただけでAR、MRと表明するものなどが出てくるため、ARもVRもMRも名称が混乱する状況になると考えます。

TechBlogという場でTechとはあまり関係ない話をしてしまいましたが、本業はエンジニアで、GPUのコードを書いてストリーミング用の360度カメラや3Dカメラを製作したり、スマートフォン・アプリケーション側でVRの画質を向上するような仕事をしております。 機会があれば、こうした技術ノウハウも共有して参りたいと思います。

お付き合いただき、ありがとうございました。

告知:(放送は終了しました)

5/29 22:00より「ミスFLASH 2017」の4K 3Dライブストリーミング放送を行います。

mifla2017.png

必要なものはSHOWROOMアプリ(iOS版Android版)、あとはCardboard かそれに準ずるものがあれば良いです。

実際、リアルタイムで立体でアイドルを見るというのは、動画とも、また単眼の360度動画とも、体験として全然違うものになります。 番組開始時間にアプリから番組に入っていただくか、ここを踏んでいただければ始まります。まだまだ発展途上中のサービスですので、御意見をいただければ幸いです。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

SVVR報告会

こんにちは。根岸(@CST_negi)です。
現在新卒2年目で、VRアプリ開発の業務を行っております。
業務の傍ら、趣味でもVRアプリを開発しております。Unity/C#が好きです。

今回は、出張で3/29-3/31にサンノゼで行われたSVVR EXPOに参加してきたのでその話をします。現地のVR事情を視察しにいっただけではなく、自作のVRアプリをSVVR EXPOで展示してきましたのでその知見を含めてお話します。
渡米は初めてで英語を人に話すのも初めてな状況でしたが、様々な成果を得ることができました。

SVVR EXPOとは

SVVR(Silicon Valley Virtual Reality)というコミュニティが開催するVRイベントです。VRに関連したテーマについて講演が行われるほか、各企業や個人が制作したアプリを展示する場も設けられています。有料イベントなので、参加者が全員真剣だったのが印象的でした。
テーマに関しては、ゲームだけでなくソーシャルVRや医療系VR、Vスポーツ(VR+eSports)やWebVRなど、VRに関連したものなら幅広く取り扱っていました。

201705170001.png

展示したもの

VR本屋という仮想空間内に実際の本屋のような空間を再現しながらマンガを読めるアプリを作っていて、そのプロトタイプを展示しました。
実はDeNATechConでも同様にこのアプリを展示しまして、その時からアプリを英語対応させ、リファクタリングした上で展示に臨みました。

05-17 17.12.13.png

VR本屋は海外でもウケは良かった

体験者は期間の割に多くはないですが、「ポテンシャルはある!」「とてもいいプロダクトだね!」などの意見をいただきました。サービス化したら教えてねという話やその他ありがたい申し出などもありました。
印象としてはアジア圏(現地でお会いしたのは中国や韓国やタイ出身の方)の方からの反応が特に良かったと思います。マンガの文化が浸透しているからかもしれません。
体験後のアンケートも取ったので、それで得た意見を参考にしつつ製作を進めて行こうと思います。

海外での展示を経て知見など

2点あります。
まずは英語の話。展示というのはある程度言うことが決まっているので、話すことに関してはアピールポイントを説明できる英文をあらかじめ頭にいれておくと効果的です。一方でリスニングは聞き取れないこともあったので、自分の場合は本当にわからなかった時はノートPCでGoogle翻訳を出して「これを使ってくれませんか?」というお願いをするなどして対処しました。ちなみに、これを断る人は全くいなかったので、恥ずかしくても聞きたいという姿勢は崩さないのが良いと思います。

次に展示の話。これは日本とあまり変わらないことですが、何をやっているブースなのかちゃんと分かるようにしましょう。私の場合はデモ動画を用意して、現地の方からお借りした50インチの大画面で展示をアピールしたのが効果的でした。
大画面で「こんな事をやってるよ」というのをアピールして、それを見て立ち止まった人に「Try this?」と声をかけて、どんどん展示に引き込んでいきました。

現地のVR市場について

今回は特にソーシャルVRの領域について視察してきました。VRにおけるソーシャルプラットフォームはまだ大きなものは確立されておらず、それを獲りに行く動きが活発で多様な動きがあったのが印象的です。
Facebook社も最近ではソーシャルVRのアプリをリリースしましたが、それ以外の企業ではゲームに特化したものや、イベントに特化したものなど、それぞれ尖りが明確なサービスをリリースしています。国外のみならずソーシャルVR分野は国内でもいくつかサービスがロンチされていますので、競争は世界的に激しくなりそうです。

社内報告会での報告

帰国後、SXSWに行った小倉さんと共に社内での報告会を行いました。(SXSWの記事は後日公開されます。)
先に記した知見や、出来事などを共有しました。自分と同じように英語に不慣れな人でも、割となんとかなるということは伝えられたかなと思います。

2017-05-17 17.14.37.png

AR/VRの市場規模は2021年には現在の20倍以上に拡大すると市場予測がされており、この背景からも海外の企業では積極的に投資が行われていることを肌で感じました。また、そうした企業の目に見えた成果をSVVR EXPOで確認することができ、VR市場の拡大については私も期待を持つことが出来ました。

今回の展示では海外に飛び込んでいったからこそ新たに見えたものがありました。ここで得た知見と経験を活かしつつ、更なる発展への努力と今後のVR市場の拡大に個人としても備えていこうと思います。
ありがとうございました。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

ICST 2017参加報告

システム本部SWETグループの薦田(こもだ、と読む)です。SWET(スウェット、と読む)はE2Eテストの自動化を中心にDeNAの事業の開発生産性と品質の向上をミッションとするチームです。

SWETでは社外における新しいテスティング技術をウォッチし発信していくこともそのミッションの一つとなっています。そのような活動の一貫として、3月13日から17日にソフトウェアテストに関する国際会議ICST 2017に参加してきました。

ICST 2017での発表内容は大学での研究が中心でしたが、Googleやトヨタ自動車など産業界のテスト・エンジニアの参加も多かった印象です。会議期間中は発表セッションだけでなく、休憩時間や会場の通路などで、産業界からの参加者とアカデミックからの参加者が入りまじり、プログラミング教育におけるテストの位置づけの話から泥臭いテスト実装のケーススタディまで幅広いトピックについて、熱い議論が行われていました。

ICST 2017全体のスコープはソフトウェアテスト全般です。必ずしもモバイルアプリケーションやウェブアプリケーションだけがターゲットというわけではなく、車載向けシステムの検証の話やファクトリ・オートメーションの話などもあり、普段聞けないような話を聞くことができるのは、大きな魅力と感じました。

さて今回はそうしたICST 2017の発表の中でも、SWETの業務と特に関連が深いウェブアプリケーションのUI自動テストに関する「Using Semantic Similarity in Crawling-based Web Application Testing」というタイトルの、カリフォルニア大学アーバイン校Jun-Wei Lin氏の発表について紹介させていただきます。

フォーム入力自動化における実装上の課題

論文の内容について紹介する前に、弊社内でのこれまでのUI自動テスト開発の経験の中で上がっていた課題について説明させていただきます。

ウェブアプリケーションを対象にE2EのUI自動テストを書くとして、例えばログインページにメールアドレスとパスワードを入力する、という操作を自動化することを考えます。 この処理の実装としてよくあるのが、例えば以下のような実装です。

# テスト対象のログインページに移動
visit "https://test-target.com/login"
# nameが"emailAddress"であるフォームにemailを埋める
# この値は、テスト対象ページの実装依存
fill_in "emailAddress",  with: "hogehoge@fuga.com"

# nameが"passwd"であるフォームにパスワードを埋める
# この値は、テスト対象ページの実装依存
fill_in "passwd", with: "password"

# idが"btnNext"であるボタンを見つけてきて、クリックする
find('#btnNext').click

テスト対象ページのHTMLタグのidやnameの値をハードコードして、そこに特定の値を入力するという実装です。

このような実装では、テスト対象画面の入力フォームのidやnameの値をテストコード側で管理しなくてはなりません。テスト実行に必要なテスト対象固有のデータのことをテストアセットと呼びますが、テストの規模が大きくなってくるとこのテストアセットの管理が複雑になるという問題があります。

さらに悪いことに、HTML内のidやname属性の値は、テスト対象のHTMLの変更によって容易に変わってしまうものです。実際に弊社内で運用しているUI自動テストでも、HTMLの変更によってユーザから見れば全く問題がないにも関わらず、リグレッションテストが失敗することがしばしば起こります。リグレッションテストを利用するエンジニアはテストの実装者と異なる場合も多く、このようなUIテスト実行失敗の原因をシューティングすることは時間がかかり面倒な作業となっているのが現状です。

今回紹介する論文「Using Semantic Similarity for Input Topic Identification in Crawling-based Web Application Testing」では、このようなフォームの自動入力処理の実装に自然言語処理の手法を適用することで、テスト実装とテスト対象システムの実装を疎結合化し、テスト対象システム内の特定のHTML属性値に依存しないロバストなフォーム入力の自動化を実現する、という内容です。

フォーム入力自動化への自然言語処理の適用

この論文の中心となるアイディアはフォーム入力自動化を、HTMLタグをその意味ごとに分類するという機械学習の分類問題として取り扱ってみようというものです。機械学習によってテスト対象ページにあるフォームの意味が分類できれば、idやname属性の具体的な値をテスト側で知らずとも、 フォームを埋めることができます。例えば、ログインページであればページ内に存在する入力フォームを、1.ログインID、2.パスワード、3.ログインとは関係のないフォーム、の3種類に分類できれば良いといった具合です。

さてこの論文中では、フォームの実体であるHTMLを機械学習、特に自然言語処理の枠組みで扱うために少し工夫をしています。具体的には、各フォームに対応するHTMLタグを以下のように変換してしまいます。

変換前のHTMLタグ

<input type="email" id="subject-id" name="subject_id" autocomplete="on" placeholder="メールアドレス" class="txtfield w-max" value="">

変換後の単語列

["email", "subject", "id", "subject", "id", "メールアドレス", "txtfield", "w-max"]

この変換は単純に<input>タグの属性値を抜き出して単語ごとに区切っただけですが、論文中ではフォーム周辺の文字列を単語列に含めるなど、もう少し賢い変換を行っていますが本質は同じです。このような変換をかませることで、既存の自然言語処理の文書分類手法を、そっくりそのままHTMLに対して使うことができるでしょう、という点がこの論文の2つ目のアイディアです。

実験

この手法について、簡単な再現実験も行ってみましたのでその結果も報告させていただきます。

具体的には、DeNAの提供するいくつかのサービスのログインページに対して、出現する<input>タグを分類して、ログインIDを入力するフォーム、パスワードを入力するフォームを判別できるかどうかを試してみました。

詳細

グーグルで「ログイン」で検索して出てくる上位の41のサイトのログインページのHTMLから、

<input>タグを抽出し
・これらの<input>タグがログインIDなのか、パスワードなのか、ログインと関係ないタグなのかを手動でラベル付けした

ものを学習データとして利用しています。 学習データは合計218個のフォームで、ラベルの分布は

hyu01.png

のようになっています。

学習データ(mysqlのダンプ形式)

学習ログインページURLリスト

・文書のベクトル表現にはBag of Wordsを用いている

・文書ベクトルはLSI(潜在意味解析)による次元圧縮を行ったのち、ロジスティック回帰を用いてラベル推定を行っている

アルゴリズム実装にはPythonの機会学習ライブラリgensimを用いました。

学習・推定スクリプト

また、モデルの精度を評価するためのテストデータはいくつかの弊社サービスのログインページ内の10のフォームに対して検証を行っています。

hyu02.png

実験結果

検証実験の結果は以下のようになります。ログインIDに対するPrecision、Recall、パスワードに対するPrecision、Recallおよび全体のAccuracyを評価しています。

hyu03.png

データ数が小さいので確定的なことを述べるのは難しいですが、なんとなくうまくいっていそうです。再実行が簡単にできるUI自動テストというユースケースを考えると、Precisionが低いことはある程度許容できること、また本当は入力対象のフォームだったが推定時に取りこぼしてしまったケースがなかったこと(Recall 100%)を考えると実用的に利用できそうな気もしてくる結果です。

さて、誤判定をしている2つのケースですがこれはどちらも、本当はログインIDではないフォームを、ログインIDフォームとして誤判定しています。具体的にには、例えば以下のようなものでした。

<input type="email" id="register-subject-id" name="subject_id" autocomplete="on" placeholder="メールアドレス" class="txtfield w-max" value="">

このフォームタグがあるログインページは

image18392389.png

のような画面です。

このログインページには「メールアドレスでログイン」と「メールアドレスで会員登録」の2つのメールアドレス入力欄がありますが、今回の実験ではこの2つのフォームをどちらもログインID用の入力フォームと判定しています。本物のログインIDフォームの属性値と会員登録用フォームの属性値はほとんど同じであり、このケースは<input>タグの属性値のみを用いて判別するのは難しかった例と言えるかと思います。

今回の実験では簡単のため、原論文の実装とは異なり<input>タグ内部の属性直のみを用いていました。これを原論文と同じように各フォームの周辺のHTMLタグの値(ラベルの値など)を学習・推定に用いれば、このような誤判定も解決できるかもしれません。

まとめ

今回はICST 2017で発表された「Using Semantic Similarity in Crawling-based Web Application Testing」という論文について紹介させていただきました。再現実験では、とても単純な例とはいえ、UI自動テストへの機械学習適用の可能性を感じさせる結果を得ることができました。

本当にこのような手法がうまくいくのであれば、フォーム入力の自動化だけでなく自動テスト実装の様々な場面で利用することができると考えられ、より実践的なユースケースでの実験を引き続き進めていく予定です。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Google Cloud Next'17 で GCP の中の人達と話してきた

こんにちは。村田 (yuichi1004) です。スマホアプリが PC でプレイできるプラットフォーム AndApp の開発に携わっています。App Engine + Go が好きです。

この度、3/8-10 にサンフランシスコで行われた Google Cloud Next'17 (Next) に参加してきました。その中で、『Next は GCP の中の人と話をする絶好の機会である』ことが分かったので、その話をしようと思います。

Nextとは

各地で開催される Google Cloud Platform (GCP) の技術発表会です。昨年までは GCP 中心のイベントでしたが、今年からは GSuite を中心としてエンタープライズ系の技術発表も兼ねたイベントとなりました。その関係もあってか、昨年の 2,000 人を大きく上回る 10,000 人規模で開催されました。

IMG_3016.JPG

我々 DeNA は、積極的に GCP を使っています(弊社のGCP導入にあたってはGoogle Cloud Platform Japan Blog の紹介記事をご確認ください)。今年は特に本腰を入れて、総勢 12 名でイベントに押しかけ、情報収集とディスカッションにあたりました。

Next は中の人と話す絶好の機会

Next の情報はすでに各種メディアで公開されていますし、各セッションの動画 は無料で公開されています。ですから、話を聞きに行く・情報を仕入れるだけならばわざわざカリフォルニアまで出向く必要はありません。Next の真髄は GCP の中の人と話せる絶好の機会 であるということです。

GCP の各セッションで登壇する人は各プロダクトを担当するプロダクトマネジャーやエンジニアになります。セッション以外にも、プロダクトの紹介ブースや、Meet The Expert というコーナーもあります。普段自分たちが使っている製品や興味のある製品を開発している人たちと直に話せるということです。

「Cloud Spanner のインスタンスって何なの?」と質問をぶつけてみました

自分は Cloud Spanner に特に興味をもっているのですが、どうしても Cloud Spanner の「インスタンス」や「ノード」が何を指しているのか分かりませんでした。そこで Cloud Spanner のブースに行ってプロダクトマネジャーとセールスエンジニアにこの疑問をぶつけてみました!

cloud-spanner-instance.JPG

担当者がその場で図を描いて事細かに説明してくれました。Google の Spanner の論文 と見比べてみると、ノードとは論文で言うところの Spanserver であり、インスタンスはノードの集合のようです。

ここで大事なことは、Cloud Spanner 上でノード数を 1 と指定すると、3 つのゾーンにそれぞれノードと書かれた箱が描かれる点です。つまり、 特定の物理マシン上で稼働するソフトウェアではなく、3 つのゾーンに分散して動作するソフトウェアスタックをノードと呼ぶ ということのようです。そのため Cloud Spanner は仮にノード数 1 で動作させたとしても 3 つのゾーンに分散して可用性を確保してくれます。

こうしたディープな話をダイレクトに聞くことができることこそが Next 最大の魅力だなと思いました。

英語が苦手、わざわざカリフォルニアまで行けないという方も多いと思います。そういう場合は Google Cloud Platform Community Slack をチェックすることをおすすめします。こちらの Slack にも、プロダクトマネジャーや開発者が目を通しています。質問すると丁寧に返事が返ってきます。

社内報告会も行いました

帰国後、DeNA 社内で Next 参加報告会を開催しました。各自現地で仕入れてきた情報や、ディスカッションを経て得られた情報を共有しました。

internal-report.jpg

GCP の注目度が上がる中、DeNA 社内でも GCP を活用したプロダクトの開発が注目されつつあります。現地のプロダクトマネジャーやエンジニアから得た情報を活かしつつ、今後のより魅力的な製品開発に活かしていきたいです。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2017 開催レポート【4】

こんにちは。ゲーム事業本部開発基盤部の池田です。

去る2月10日、DeNAは技術カンファレンス「DeNA TechCon2017」を開催しました。
全4回に渡る振り返り記事も本記事で最後となります。

今回は、筆者が聴講した以下のセッションの内容を紹介します:

  • Bステージ「AndApp開発における全て」KOBAYASHI ATSUSHI
  • Dステージ「DeNA内製ゲームエンジンの現状と目指す未来」ERA KAZUTAKA

また、最後のレポート記事ということで、カンファレンスのクロージングの模様なども合わせてお伝えします。

AndApp開発における全て

オープンプラットフォーム事業本部システム開発部のKOBAYASHI ATSUSHIは、2016年11月にローンチされたAndAppというサービスの舞台裏について発表しました。

056_20170227.JPG

AndAppはスマートフォン向けゲームをPC上でプレイできるプラットフォームで、2017年3月現在、15タイトルが配信されています。
そのサーバサイドのシステムは、従来のオンプレミス環境のサービスとは異なり、Google App Engine Standard Environment(以下、GAE SE)上で動作しています。
また、開発言語も従来のPerlとは異なり、GAE SEで利用可能なGo言語が採用されました。

講演の前半では、AndAppの開発の中で、どのように技術選定を行って上記の構成となったかを述べました。その大きな理由の1つとして、開発・運用する上で絶対に必要な工数以外は、サービスを作る工数に当てたかったから、という点が挙げられました。

後半のトピックは、AndAppのシステムアーキテクチャや開発体制、コストについてでした。
アーキテクチャとしては機能単位でコンポーネント化するMicroservices構成が取られ、それに合わせて、少人数チームを数多く作る開発体制が取られました。
Microservicesとして、本講演時点で26のサービスが稼働しています。

講演のまとめの中で、既存の技術や運用にとらわれずにモノづくりに集中できる環境を作ることの重要性が述べられました。
最後に、「一番大切なことは、めいっぱい楽しむこと。ワクワクしよう!」と締め括られました。

スライド資料

DeNA内製ゲームエンジンの現状と目指す未来

Japanリージョンゲーム事業本部開発基盤部のERA KAZUTAKAは、DeNA内製ゲームエンジン「Lift Engine」の現状と目指す未来について発表しました。

DSC_4350.jpg

Lift Engine®Cocos2d-xをベースとして、ゲーム開発において不足していた機能を実装し、最適化を施した内製ゲームエンジンです。
採用タイトルとしては、「デナレンジャー」や「ガールアックス(*1)」があります。

2DゲームエンジンとしてのLift Engineの紹介の後、Lift Engineを3Dゲームエンジンとして使うための取り組みについて、説明しました。

Lift Engine 3Dで新規に実装した機能として、コマンドバッファを用いてレンダリングを専用スレッドで行うレンダリングパイプライン、コリジョン判定やSIMD対応した行列演算を含む算術関数、独自クラスを用いたシリアライザなどが挙げられました。

Arcana」は、Lift Engine 3Dと共に用いられるゲーム開発のためのアプリケーションフレームワークです。
Lift Engine 3Dでは汎用的・基本的な機能の提供に留め、上位レイヤに位置付けられるArcanaによって、よりゲーム機能の実装に即したモジュール群や、ゲームの作り方を規定する仕組み等を提供します。

講演のまとめの中で、「面白いゲームを作るためには、品質向上に時間を割くことが重要」と述べられました。
今後のLift Engine 3Dでは、まずはゲーム開発のトライ・アンド・エラーの周期を短くすることに注力し、開発・運用効率の最大化を目指していきます。

スライド資料

クロージング

カンファレンスを締め括るクロージングでは、今年も弊社取締役の川崎が登壇し、総括と謝辞を述べました。

DSC_7597.jpg

以前のDeNAでは、レガシーな技術にこだわって使い続ける傾向もありましたが、最近はユーザにより大きな価値を届けるため、新しい技術も積極的に採用しています。
本カンファレンス全体を通して、そのようなDeNAの技術に対する姿勢が伝わったなら幸いです。

昨年に続いて今年も会を開催できただけでなく、昨年を上回る規模のご来場を頂けたことを嬉しく思います。
この場をお借りして、御礼を申し上げます。
特にカンファレンスに足を運んで頂いた方々については、誠にありがとうございました。

本記事執筆時点では、まだ各セッションの動画は公開されておりませんが、追ってTechConのサイトにて公開を予定しています。
Twitterの公式アカウントFacebookページによる案内をお待ち下さい。

それでは、来年もTechConでお会いしましょう!

IMG_0390.jpg

スタッフ集合写真

脚注

(*1) ガールアックス - Google Play の Android アプリ

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2017 開催レポート【3】

こんにちは、 SWET グループの加藤です。

DeNA TechCon 2017 が2017年2月10日に開催されました。

DeNA TechCon レポート第 3 回となる本記事では、 DeNA の基盤技術に迫った

の 3 つの発表をご紹介します。

DeNAの動画配信サービスを支えるインフラの内部

024.JPG

IT基盤部の HATA がライブ配信の SHOWROOM とスマートフォンの生放送・実況配信サービス Mirrativ を題材に、動画配信サービスを安定して運用するためのノウハウについて発表しました。

生放送のための Origin サーバと Edge サーバの構成、負荷分散、障害発生時の自動対応、低遅延を実現するための工夫、インスタンスの状態遷移、監視体制、オートスケールの仕組みについてなど、盛りだくさんの内容でした。

特に、オートスケールに関しては、求められるものに応じて何度もスクラッチから実装し直しているとのこと。

こうして作られたインフラ基盤によって、 SHOWROOM 3周年記念の 24 時間生放送や AKB48 45th シングル選抜総選挙、横浜DeNAベイスターズ主催試合生中継など多くの視聴者のいた放送でも安定して配信できたそうです。

スライド: DeNAの動画配信サービスを支えるインフラの内部 #denatechcon from DeNA

DeNAでのチート診断・脆弱性診断の取り組み

134.JPG

セキュリティ技術グループの SUGIYAMA が、サーバー・クライアントで成り立つスマホ向けゲーム開発におけるチート対策について発表しました。

セキュリティ・キャンプでの講義 にも使われたチート対策の学習用アプリを題材に、典型的なチート手法が紹介されました。

この学習用アプリはブラウザで動くため開発者ツールで簡単に改竄できるため、チートを行う攻撃者の視点から脆弱性対応を学べるとのこと。また、ネイティブアプリであってもチートの手法は基本的に同じであり、クライアントに関しては完全なチート防止は無理なので、サーバ側でのデータ改竄を防止することが重要だそうです。

スライド: DeNA_Techcon2017_DeNAでのチート・脆弱性診断への取り組み from Toshiharu Sugiyama

147.JPG

また、スマートフォン向けゲームのチート対策に関しては、同じセキュリティ部の MURAKAMI の発表「SafetyNetを使ってゲームを守る」もありました。こちらもあわせて見ると、より理解が深まると思います。

DeNAの取り組むテストエンジニアリング

157.JPG

SWET グループの OKITA KUNIO が発表しました。 SWET は SoftWare Engineer in Test を意味する言葉であり、 DeNA ではソフトウェアテストをリードする役割を持つ部署です。

テストエンジニアリングに求められるスキルの紹介や、事業サポートとテスト基盤といった、ロールにあわせた SWET 内でのチーム体制が説明されました。

また、新たな取り組みとして、ツールのバージョンアップを監視し、即座に動作確認を行い、アップデートしても安全化をチェックするマスティフというツールや、安定したパイプラインを実現するための Microservices の構成、クローラの探索による自動チェッキングといった挑戦が語られました。

さらに、 AI による E2Eテストの自動化にも取り組んでいるとのこと。現在はまだ学習データを収集するための基盤づくりの段階だそうですが、将来的にはこれまで踏み込まれなかった領域にまで自動化が進みそうです。

最後に

この他にも、 TechCon では数多くの発表がなされました。公式サイトのスケジュール画面 に、発表の動画とスライドへのリンクがありますので、どうぞごらんください。

次回の記事が DeNA TechCon レポートの最終回となります。お楽しみに!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2017 開催レポート【2】

こんにちは。ゲーム事業本部開発基盤部の池田です。

去る2月10日、DeNAは技術カンファレンス「DeNA TechCon2017」を開催しました。
公開可能な資料については、公式サイトのスケジュール画面からリンクしておりますので、まだチェックしていないという方は是非ご覧ください。
追って、各セッションの動画もアップ予定です。

本記事は、この「DeNA TechCon2017」振り返り記事の第2弾となります。

今回は特に、DeNAの新たなチャレンジ領域である AI 分野について、Aステージで筆者が聴講した以下の3講演について取り上げます:

  • 基調講演:「実世界の人工知能」株式会社Preferred Networks岡野原大輔様
  • 「強化学習を利用した自律型GameAIの取り組み〜高速自動プレイによるステージ設計支援〜」MASHIKO RYOSUKE, SEKIYA EIJI
  • 「DeNA AIシステム部におけるクラウドを活用した機械学習基盤の構築」SEO NAOTOSHI

基調講演―実世界の人工知能

基調講演では、株式会社Preferred Networks岡野原大輔氏が登壇しました。

DSC_6045.jpg

講演の前半では、畳み込みニューラルネットワークが近年の研究でどのように複雑に進化し、ディープラーニング(深層学習)と呼ばれるようになったかを解説しました。
深層学習で使われる畳み込みニューラルネットワークでは、ネットワークの層数やニューロン数が、それまでのものより桁違いに多くなっています。

この深層ニューラルネットワークが、現在、様々な分野で応用されつつあります。

講演では、応用分野として「自動車」「ロボット」「異常検知」「バイオ・ヘルスケア」「コミュニケーション」「クリエーター」といった分野における取り組みについて取り上げられました。

特に、「クリエーター」分野においては、線画にいい感じに着色する PaintsChainer が最近インターネットなどで話題になったことは、記憶に新しいのではないでしょうか。

結びとしては、深層学習・教科学習の進化は著しく、研究段階から実用化・ビジネス化チームが付き添うことが大事と締め括られました。

強化学習を利用した自律型GameAIの取り組み〜高速自動プレイによるステージ設計支援〜

こちらのセッションは前半・後半の2部構成でした。

前半では、強化学習そのものについてAIシステム部SEKIYA EIJIが発表しました。
まず、強化学習の仕組みについて簡単な解説をした後、2014年に登場した新手法であるDeep Q-Networksの概要を示しました。
次に、強化学習に関する最新の動向として、NIPS 2016で発表されたDeepMind LabやOpenAI Universeなどについて取り上げました。

後半では、強化学習の利用例として、FINAL FANTASY Record Keeperにおける自律型GameAIの活用事例について、同じくAIシステム部のMASHIKO RYOSUKEが発表しました。

DSC_6525.jpg

FINAL FANTASY Record Keeperでは、ボスのパラメータ調整を行うため、バトルを自動プレイするAIに対するニーズがありました。

このバトルAIの行動決定アルゴリズムとして、探索的アプローチであるMonte Carlo Tree Searchと、ニューラルネットを用いたアプローチであるNEAT, Q-learningを適用した結果が比較解説されました。
結果として、ニューラルネットを用いた方法において、学習時間が掛かるなど課題はあるものの、人がプレイする場合と遜色ないレベルでの勝率を達成することができました。

講演の最後では、ゲームへのAI活用のポイントとして、ゲームシステムの設計段階でどこまでAIを利用するか考慮し、シミュレータやデータ形式を用意しておくことの重要性が挙げられました。

DeNA AIシステム部におけるクラウドを活用した機械学習基盤の構築

AIシステム部のSEO NAOTOSHIは、DeNAにおけるクラウドを活用した機械学習システム基盤の構築について発表しました。

DSC_6743.jpg

DeNAの機械学習システムのインフラ面においては、「潤沢なGPU」「隔離された環境」「素早い構築」「運用が楽」「自由度を高く」「ミスが起きにくい」という6つの要素が求められていました。
本発表では、これらの要素一つひとつを達成するために、AWSやGCPを活用したインフラ環境の構築方法について示しました。
例えば、「素早い構築」については、TerraformやItamaeといったツールを活用し、AWS, GCPの両方に対応した環境構築をコード化していることが語られました。

発表の後半には、GPU学習環境をオンデマンドでスケールさせるために整備したツールや、APIサービス環境の構成が取り上げられました。
GPU環境をスケールさせるための内製ツール「ec2-scale-run」の中ではDockerが活用されています。このツールでは、使われなくなったインスタンスを再利用し、また不要になったら確実にシャットダウンする仕組みがあることが説明されました。

結びに

本記事を通して、DeNAがAI分野においてどのようなチャレンジ・取り組みをしているか、少しでも伝われば幸いに思います。

余談ですが、Aステージの講演では社員によるグラフィックレコーディングがリアルタイムに行われ、完成したものは展示スペースに貼り出されました。

下の写真は、基調講演のグラフィックレコードとなります。

CR9A7145.jpg

次回の記事でも引き続き、発表されたセッションの模様を紹介していく予定です。
お楽しみに!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2017 開催レポート【1】

こんにちは、 SWET グループの加藤です。

DeNA TechCon 2017 が2017年2月10日に開催されました。昨年に続き、第2回目です。

今回から全4回に渡り、 TechCon 2017 の様子をお伝えします。

第1回となる本記事では、 Opening の様子、そして SAKAI KENGO による『DeNA private cloudのその後』のセッションについてご紹介します。

CR9A6825.jpg

CR9A6920.jpg

オープニング

IMG_0018.jpg

オープニングでは木村 (hidek) による Dena TechCon の主旨が述べられました。

TechCon は DeNA の技術チャレンジ総決算です。先人の技術と知恵で DeNA はここまで成長したわけですが、その恩返しの意味も込めて、エンジニアの挑戦で得た知見を社会に還元したいという思いが語られました。

特に、 DeNA は、これから力を入れていく AI についてのアウトプットを増やしてゆくつもりです。 AI は社会を変革する可能性を持ちます。 DeNA の創業技術はインターネット関連技術ですが、それに加えて AI も DeNA の技術の中心に据えて、本気でやっていくという姿勢を表明しました。

展示

CR9A6814.jpg

IMG_9874.jpg

CR9A6801.jpg

トークセッションだけでなく、 DeNA の技術を紹介する会場展示も行われました。たくさんの方が、実機ゲームサンプルやキービジュアル、社内開発のミドルウェア紹介の展示に足を止めていました。

DeNA private cloudのその後

IT 基盤部の SAKAI KENGO が DeNA の社内インフラ基盤について発表しました。

スライド: DeNA private cloudのその後 #denatechcon from DeNA

昨年の Dena TechCon で紹介した、サーバやネットワークの構成がこの一年間でどう変わったかに焦点が当てられました。

過去のエンジニアブログの記事にも書かれたように、 DeNA はオンプレミスのサーバにおいて、 Ceph を SDS(Software Defined Storage) として使い、 OpenStack で構築した Private Cloud 構成を取っています。

2016 年 7 月より開発環境を OPenStack へ移行し、現在ではインスタンス数は 1730, Node 数は 34 まで増えたそうです。また、将来的には LXD の導入などを計画しているとのこと。

また、従来はネットワークとサーバの管理は担当エンジニアが分かれていましたが、それを統合し、 IT 基盤エンジニアがネットワーク、サーバどちらも担当できるようにしました。これによりネットワークグループへの「依頼」削減に成功したそうです。

DeNA のインフラに関する記事は こちらこちら など、 Mobage Developer blog にもあります。読み比べると、インフラ構成について理解が深まると思います。

他記事

DeNA TechCon 2017 を紹介した記事を探してみたところ、いくつかの Web ページが見つかりました。

セッションや会場の雰囲気が伝わってきますね。

最後に

DeNA TechCon 2017 に参加されたみなさま、ご来場ありがとうございました!

次回以降は、各セッションの様子をご紹介します。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Test Engineer Meetup #1 開催レポート

こんにちは。 SWET(SoftWare Engineer in Test) の加藤です。

2016 年 9 月 14 日、 Test Engineers Meetup #1 が開催されました。

この Meetup のテーマは

  • テストエンジニアとはどういう仕事なのか?
  • テストエンジニアがいることでどういうことがチームに起こるのか
  • テストエンジニアは今後どういう方向を目指すべきなのか

についてです。

300 名以上のかたが参加登録されるたいへん大きなイベントになり、当日は大盛況でした。あいにく会場のキャパシティから 130 名までしか受け入れられず、キャンセル待ちとなり参加いただけなかったみなさまには申し訳なく思います。

Talk (10 分 x 5)

5 人のテストエンジニアが、それぞれの組織での取り組みについて発表を行いました。

@Kazu_cocoa (Cookpad)

テストエンジニアの一端 from Kazuaki MATSUO

Cookpad でのテストエンジニアが解決する課題とスキルセットについての発表でした。

モバイルアプリのテストや、 OSS への貢献といった Cookpad 独特の取り組みが印象的でした。

@miyajan (Cybozu)

テストエンジニアと組織構造 @Cybozu from Jumpei Miyata

テストエンジニアと組織構造についての発表でした。

自ら設立したテストエンジニアリングチームが組織横断的な活動を行うようになった経緯や、今後はさらに各部署にも入り込むハイブリッドな組織にする、という展望が紹介されました。

@okitan (DeNA)

SWET (SoftWare Engineer in Test) という組織の取り組みの範囲についての発表でした。

もともとモバゲーというサービスだけを見ていた組織が、横断組織になり、それぞれの事業のチームが自ら成長し改善を行えるようにサポートする、と取り組み方を変えていくことについてが話されました。

@shoma (Mercari)

メルカリにおいての QA チームの取り組みと、そのなかでの SET (Software Engineer in Test) の担当領域についての発表です。

仕事の成果を数値化して説明しにくいこと、そして予防のコストを数字にする大変さについて、特に実感のこもったお話を聞けました。

Naito (Rakuten)

ソフトウェア品質とは何か、その程度は測定できるのか、などについての発表でした。

参加者への質問を交えたインタラクティブなセッションで、現実の問題にテストエンジニアリングで取り組むことについて、熱い意見が交わされました。

パネルディスカッション

テスト駆動開発の実践、 power-assert の開発で知られる @t_wada さんの司会で、テストエンジニアについてパネルディスカッションが開かれました。

お寿司とビール、そしてお菓子が会場に運ばれ、和やかな雰囲気でのトークになりました。

今回のために t_wada さんが用意した質問が、各登壇者に投げかけられました。

  • テストエンジニアってどんな仕事?
  • テストエンジニアがいるとどういうことが起こる!?
  • テストエンジニアの世界に興味を持ったきっかけは
  • 他チームとの関係はどうなっている?

会場からの質問も飛び交いました。

  • これから伸ばしていきたい能力は?
  • テストエンジニアとしてのロールモデルは?
  • 開発チームからの要求で工夫していることは?
  • 異なる文化圏の人間が協力して QA を行うときに壁になることは?
  • ソフトウェア品質をどうやって数値化している?

とてもすべての内容をここに書ききれないのですが、特に興味深かったのは、開発生産性の数値化という難問に対して、デプロイ完了までの時間やリグレッションテストの時間を計測し、それを指標にしているという Cookpad での事例紹介でした。

継続的なデプロイを行ううえで、待ち時間が発生するとかなりのマイナスになってしまう。それを避けるために、短時間でのデプロイとテストを実現することが価値の指標になる、とのことで、個人的にもこのアプローチに納得しました。

終わりに

DeNA の SWET グループでは、自動テスト、 CI 、ソフトウェア品質の向上・開発生産性向上に取り組んでいます。

テストエンジニアリングや CI/CD 技術基盤に興味のある方は、ぜひこちらの募集ページからご応募ください。

We are hiring です。

また、 Test Engineers Meetup #1 という名前からわかる通り、今回は第一回目。もちろん第二回目も計画しています。今回はテストエンジニアリングを行う組織に注目した発表が主でしたが、次回は具体的なテスト戦略、品質を上げる方法論についても触れていければと思います。

そしてですが、参加されたかたはぜひどんな形でも構いませんのでフィードバックをいただければ幸いです。ご参加された方にはアンケートを送付いたしましたので、ぜひ感想・ご意見をください。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

CircleCI Meetup #1 開催レポート

こんにちは。SWET(Software Engineer in Test)の栗田です。

弊社SWETグループは、

  • DeNAサービス全般の品質向上
  • DeNAエンジニアの開発生産性向上

の2つのミッションのもと、ソフトウェアテストの自動化や、エンジニアの生産性向上のためのツールの開発・導入などを行うソフトウェア・エンジニアの集団です。

これらの取り組みの一環として、弊社では開発プロセスに継続的インテグレーション(Continuous Integration、以下CI)を早くから導入してきました。
近年、プロダクトの開発サイクルがどんどんと短くなっていくにつれ、その中で品質を担保する手段の一つであるテスト自動化と、それを開発プロセスに含めるCIは、開発に必須の要素となっています。

CIを実装するCIツールは世の中に数多くありますが、その中でもJenkinsは、フリーかつオープンソースであることや、豊富なプラグインによる柔軟性などから、CIの世界ではデファクトと言っていいほど広く使われています。
弊社でも、これまでJenkinsを利用して数多くのプロダクトのCIを実装してきました。

しかし社内のプロダクトが多様化することにより、開発プロセスそのものも多様化し、かつ開発サイクルが短期化するにつれ、Jenkinsを利用する上でのデメリットも顕在化してきました。

1.Jenkins構築の大変さ

Jenkinsはその柔軟さにより、様々な開発プロセスにおいてCIを実装可能です。反面、インストールした初期の状態から、実際に使い始められる状態にするまで、数多くの設定を行わねばなりません。この設定の多さが、素早くCIを始めたいプロジェクトでは障害となっており、開発開始と同時にCIを導入できない原因の一つとなっていました。

2.Jenkins運用の大変さ

開発プロセスが多様化すると、1台のJenkinsですべての開発プロセスに対応することが困難になります。
そのため、各プロジェクト向けにJenkinsを構築し、運用することになります。Jenkinsの運用では、プロダクトのビルド・テストに使うミドルウェア・フレームワークを定期的にバージョンアップする必要があります。
特にスマホアプリ開発では、android-sdkやXcodeなどを新バージョンが出るたびにインストールし、かつ古いバージョンも維持しておく場合がほとんどです。こういった作業は、ほぼすべてのプロジェクトで行う必要があり、そのコストはバカになりません。

これらの問題を解決すべく、SWETグループでは、

  1. Jenkinsへの機能追加を基本とした、新しいCIツールの開発
  2. クラウドCIツールの導入

の2つを進めています。

今回は、2. のクラウドCIツールの導入について、様々なツールの評価を行った結果、CircleCI Enterpriseを導入することとなりました。

CircleCIは、Githubと連携できるコンテナ型のCIツールです。ここでのコンテナ型とは、近年急速に普及しているコンテナ仮想化技術を使い、ビルドごとにコンテナを割り当てることで、各プロジェクトに独立したビルド環境を提供するタイプのツールを指します。
CircleCIでは、コンテナのベースとなるOSイメージに、よく利用されるミドルウェア群があらかじめインストールされており、初期セットアップが不要です。またデフォルトのミドルウェア群に含まれていないものでも、circle.ymlとよばれる設定ファイルに追加ミドルウェアを記述し、Githubのリポジトリに含めることで、容易に追加できます。
また社内に1台セットアップし、各プロジェクトで共有するため、管理コストを集約することもできました。

CircleCI Meetup 当日の様子

今回、CircleCI社のメンバが来日することに合わせ、弊社でのCIツールに対する取り組み紹介や、日本国内のCircleCIユーザの交流・技術共有などを目的に、弊社主催という形でCircleCI Meetupを開催いたしました。

Meetupでは、まずCircleCIエバンジェリストKevin Bell氏より、CircleCIの便利な機能の一つである、ビルド実行コンテナへのSSHログイン機能についてや、実行したテストの情報を閲覧するテストメタデータな機能などについてご紹介頂きました。
他CircleCIの機能については、公式ドキュメントがございますので、そちらをご覧ください。

次に、私から弊社でのCircleCI導入に至る経緯をお話させていただきました。

その後、CyberAgent社よりstormcat24さんにお越しいただき、同社でのCircleCI導入後、どのように活用されているかなどについてお話頂きました。弊社より先に導入されていることもあり、社内での導入推進や、その際に気をつける点など、頷くところが多く、今後の参考にしていきたいと思いました。

上記3つのセッションのあと、乾杯を挟んでLTがありました。事前応募のLT枠の方に加え、当日飛び込みのLTもあり、大変盛り上がりました。

  • はてなブログへの自動投稿
  • GCP/GKEへのデプロイ
  • CircleCIクライアントアプリ「CI2Go」(iOS)
  • 何台ものサーバへのセキュリティアップデートの適用
  • CentOSへのCircleCI Enterprise構築 ...など

どのテーマもこれまで見たことがない事例ばかりで、非常に興味深かいものでした。
当日の発表資料は、こちらのイベントページよりご覧いただけます。

circleci_meetup_1_1.JPG

満員のセッションの様子

circleci_meetup_1_2.JPG

会場で配られたCircleCIステッカー

circleci_meetup_1_3.JPG

参加者からの質問に答える Kevin Bell 氏(写真中央)

今回は130名の参加枠にかかわらず、キャンセル待ちが出るほどの応募があり、当日残念ながらご参加頂けなかったみなさまには大変申し訳ありませんでした。
しかしながら、これほどの多くの応募があり、改めてCircleCIの人気を実感いたしました。
また懇親会の中で、Jenkinsに対する課題や、CIをどうやって社内で広めていくかなどについて、参加者の方からたくさんの質問を頂き、私自身、企業内開発におけるCIについて、改めて考える機会をいただきました。

終わりに

SWETグループでは、CIだけでなく、プロダクトの品質向上・エンジニアの開発生産性向上に日々取り組んでいます。また、この役割に積極的に取り組んでくれる仲間を探しています。興味のある方は、ぜひこちらの募集をご覧ください!

最後に、今回のMeetup主催に快く協力いただいたCircleCI社メンバ、また会を盛り上げていただいた発表者の方に、厚く御礼申し上げます。
ありがとうございました!!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2016のセッション動画を公開しました!

dena_techcon_2016_logo

TechCon 2016のセッションをスライド・動画アーカイブでご覧いただけます!

こんにちは。Iketakiです。

1/29に開催されました DeNA TechCon 2016 の動画アーカイブを公開いたしました! (※DeNA TechCon 2016については、こちらの記事などをご覧ください)

イベントの公式HP内の「SCHEDULE」より、各登壇者の当日のスライドと、動画アーカイブをご覧いただくことができます。

スライド・動画へはこちらから!

capture

(公式HPに遷移します)

また、動画は、YouTubeのDeNA Channelからもご覧いただけます。

当日ご来場することができなかったみなさまや、セッションにご興味のあるみなさまは、ぜひスライドや動画をご覧いただければと思います。

イベントレポートはこちらから!

当日の会場の様子や各セッションの要点を、以下の開催レポートにまとめております。 こちらもぜひご覧ください。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2016 開催レポート【4】

こんにちは。SWETの加藤です。

1月29日、DeNAは技術カンファレンス「DeNA TechCon 2016」を開催いたしました。 DeNAエンジニアブログでは数回に渡りその内容を振り返り、発表がどのようなものだったかをご紹介します。

第4回となる本記事は、以下の講演についてのものになります。

DeNAが取り組む Software Engineer in Test

品質向上と開発生産性向上を目的とした、SWETという部署が紹介されました。

登壇者はSWETの NAKAGAWA MASAKI ( @ikasam_a )です。

3A4A4959.JPG

GoogleでのSET(Software Engineer in Test)に由来するSWET(SoftWare Engineer in Test)の役割や、DeNAでSWETが発足してから現在までの歩みが語られました。

SWETではブラウザテストを自動的に実行するSeleniumがよく使われており、Seleniumを実際のアプリケーションテストに導入する手順やTIPSを解説するSelenium実践入門にSWETのメンバーが執筆に参加しているそうです。

また、SWETが扱っている最新の案件として、スマートフォンアプリのテストを管理・実行する、STFというデバイスファームが説明されました。このSTFはCyberAgent社発のオープンソースのプロジェクトで、Android端末を管理し、ブラウザから操作できるという機能を持っています。SWETではこれをモバイル自動テストに導入するため、v2.0.0で追加されたAPIを実装しました。

最後は、SWETというキャリアパスについての話題となりました。SWETはまだ認知度は高くないが、開拓すべき新技術が多く、アーキテクトに繋がるひとつの道である、という見解が述べられました。

スライドはこちらからどうぞ: DeNAが取り組む Software Engineer in Test

DeNAの分析を支える分析基盤

DeNAのサービスにおいてユーザの志向や反応を分析する分析推進部から、弊社の YAMADA KENSHINが登壇しました。

IMG_8837.JPG

アナリストに求められる役割や、現在のDeNAの分析体制、分析基盤のこれまでの歩みについてが話されました。DeNAではもともとサービスの開発チームが評価・分析を行っていたのですが、モバゲーが急成長するにつれて、分析の専門チームが必要とされるようになってきたそうです。2010年に専門組織が発足し、大量のログからユーザ行動を分析するために、HadoopやVerticaなどを導入しながら、増大するデータに対処してきたのだとか。

さまざまなサービスの分析を行う全体構成についても説明されました。ログの回収と監視、集計バッチのフロー、分析結果の可視化のために、CassandraやStorm/HBaseを組み合わせて使っているとのこと。また、KPIレポートを作成するために、Argusという内製のレポートツールを開発したそうです。

また、分析にとどまらないデータ活用の取り組みとして、ハッカドールのような推薦システムが紹介されました。ユーザーの行動から、趣味にあったゲームを推薦したり、ファッションのテイストが似ている商品に誘導する仕組みに応用できるそうです。

スライドはこちら: DeNAの分析を支える分析基盤

これからの Microservices

理想的なMicroservicesの実現に求められるAPIやそのプロトコル、サービスのアーキテクチャがトピックとなりました。

弊社の YAMAGUCHI TORU (@zigorou)の発表です。

3A4A5470.JPG Microservicesの概念と、その目的、利点と欠点、実現するために必要な要素などが説明されました。

MicroservicesとMonolithicなアーキテクチャの違いや、RESTという制約が現実の課題にどこまで有効かなど、現実のアプリケーションとRESTの思想がどう結びつくのかが語られました。また、Content Negotiation、JSON SchemaとJSON Hyper Schema、API Gateway、Access tokenなどについて、Microservicesのアーキテクチャでアプリケーションを実装する観点からの見解が述べられました。

スライドはこちらです: これからの Microservices

結びに

DeNA TechCon 2016の紹介記事は今回が最後となります。

わずか1日間のイベントでしたが、非常に濃密な時間でした。高度な内容が多く、私個人としても学ぶことが大きかったと感じます。興味を持たれたかたは、ぜひ発表のスライド資料もご覧ください。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2016 開催レポート【3】

こんにちは。IT基盤部の安武です。

1月29日に行われた「DeNA TechCon 2016」から、早2週間余りが経ちました。
2月16日現在、上の公式サイトでは、一部セッションを除くスライド資料が公開されております。
セッション動画の方はもう少し時間が掛かるようです。気になる方は公式ツイッターからの案内をチェックしてみて下さい。

さて、今回は筆者が聴講した以下の2セッションについて、かいつまんで内容を振り返って行きます。

Webを速くするためにDeNAがやっていること 〜HTTP/2と、さらにその先〜

本セッションでは、DeNA が行っている Web 基盤技術の研究開発について、特に HTTP/2 と H2O を主軸に発表を行いました。
登壇者は、H2O の主開発者 OKU KAZUHO (@kazuho) です。

発表の導入として、Web システムにおけるパフォーマンス向上の2つのアプローチが紹介されました。即ち、スループットの最適化とレスポンスタイムの高速化です。
スループット最適化の例としては、弊社の HIGUCHI (@ahiguti)が開発した HandlerSocket for MySQL についても触れられました。

3A4A4734.JPG

その後、HTTP/2 誕生の背景を示し、HTTP/2 におけるスループットの最適化とレスポンスタイムの高速化の仕様について説明しました。

OKU KAZUHO が開発する H2O は、現時点で世界最速の HTTP/2 実装と言われています。 発表では、H2O がどのように HTTP/2 を実装して、最適化・高速化を達成しているか解説しました。

発表の最後に、HTTP/2 が約束する Web の未来は明るいこと、DeNA が H2O 開発の成果を社会に還元し、HTTP/2 サーバ実装の分野で競争をリードしていることを述べました。

DeNAインフラの今とこれから

本発表は前後半の2部構成でした。
前半の「今編」では、DeNA の現在のシステム・インフラストラクチャーの概況とその運用について。 そして後半の「これから編」では、今後そのインフラ構成をどのように変えていくかと、そのねらいや意義について、発表しました。

前半 〜今編〜

登壇者は、入社4年目のインフラエンジニア KABE TOMOYA (@limitusus)です。

発表ではまず、DeNA のサービスを支えるシステム基盤のサーバ構成や台数といった概況、及びそれらを管理する人的体制について紹介されました。
その後は、主にシステム運用で使われる数々のツールや、それらの利用方法の説明に多くの時間を割きました。

最後に、DeNA インフラにおける AWS を中心としたクラウド活用の事例を紹介し、オンプレミスとの比較について見解を述べました。

3A4A4990.JPG

後半 〜これから編〜

後半には、IT基盤部部長の ONO ATSUSHI が登壇しました。

発表の導入には、2つの数字を紹介しました。 1つ目は、IT基盤部が2015年に関わった新規案件の数、そして2つ目は、IT基盤部が関わる事業ドメインの数です。

3A4A5008.JPG

多くの案件を少人数で運営していくには、Deep なものを Deep にしていくだけでなく、Easy なものを Easy に運用するための工夫が必要になります。
本発表では、主に後者の点にフォーカスした今後の取り組みについて紹介しました。

具体的には、OpenStack、Ceph、LBaaS といった要素技術を組み合わせて、オンプレミス上にプライベートクラウド環境を構築し、既存システムをリプレースしていく取り組みを行っていく方針です。

結びに

今回、紹介した2セッションは、現在の私の業務範囲にも非常に近いものです。
上手く紹介できたかわかりませんが、ご興味を持たれた方は是非、スライド資料や、今後公開される発表動画も合わせてご覧ください。

来週もまた、別セッションの振り返り記事が投稿される予定です。
そちらも、どうぞお楽しみに。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2016 開催レポート【2】

こんにちは。SWETの加藤です。

1月29日、DeNAは技術カンファレンス「DeNA TechCon 2016」を開催いたしました。 DeNAエンジニアブログでは数回に渡りその内容を振り返り、発表がどのようなものだったかをご紹介します。

第2回となる本記事は、以下の講演についてのものになります。

カンファレンス全体を紹介する、前回の記事はこちらです

DeNAのゲーム開発を支える技術クライアントサイド編

弊社の BONO HIRONORI による、HTML5のブラウザゲームの基盤技術の発表です。

DeNAがパートナーに提供している、CreateJSベースのゲームエンジン CreateJS-Lite(仮)と、さらにネイティブAPIを使うことにより高速化したCreateJS-Lite Acceleratorが紹介されました。

CreateJS-Lite(仮) Acceleratorは近日リリース予定のラプラスリンクに使われています。

ちなみに、CreateJSはオープンソースのJS製ゲームエンジンで、CanvasなどHTML5の機能を利用したブラウザゲームを開発できるものです。

発表概要

3A4A4616.JPG

CreateJS-Lite(仮)と CreateJS-Lite Acceleratorは、ネイティブアプリ並の品質を、ブラウザゲーム並の開発費で作るために作られているとのこと。

なお、CreateJSの実行速度を10倍にする(!)というミッションで作られたそうです。

CreateJSはもともとCanvas 2Dで画像を描画しているが、CreateJS-Lite(仮)ではCanvasではなくWebGLやNative OpenGL ESを使うことで高速化したらしいです。また、サウンドも、CreateJSで使われるWeb AudioやHTML Audioだけでなく、OpenSL ESも使うようにしているのだとか。

さらに、CreateJS-Lite(仮)では、キャッシュにIndexedDBを利用しているそうです。IndexedDBはバイナリを扱えるので、それを使って画像や音声をキャッシュしているんですね。

ただ、CreateJS-Lite(仮)はCreateJSの100%互換ではなく、バグもあるそうです。たとえば、メモリ使用量が多くなり、CSSアニメーションみたいなCPUを使う機能と同時に使いにくいなど課題もあるのだとか。そういった事情から、CreateJSアニメーションの負担を軽くしたり、不要なCreateJSオブジェクトを削除するなどの工夫をゲーム開発者にしてもらっているそうです。

CreateJS-Lite(仮) AcceleratorはCreateJS-Lite(仮)を更に高速化したものです。こちらはネイティブAPIを直接呼び出しているため、理論上はネイティブアプリと同等の処理速度が出せるようになっています。

感想

スピーカーのユニークな人柄が表れた発表でした。「CreateJSの速度を10倍にする」と聞いたときは本気かこの人はと思ったものですが、やろうと思えばネイティブアプリレベルまで高速化はできるんですね。驚きました。

スライドはこちら: DeNAのゲーム開発を支える技術 (クライアントサイド編) from denatech2016

DeNAのゲーム開発を支えるGame Backend as a Service

Sakashoという、社内で開発・運用しているBaaSについての発表です。Sakashoはネイティブアプリゲーム開発のサーバサイドを担当するもので、これさえあれば、ゲーム開発者がサーバ側の開発をほぼしなくてもよくなります。

Sakashoという名前が表に出るのは今回初めてとのこと。妙なネーミングですが、これは日本酒のプロフェッショナルを意味する「酒匠」からとったようです。

なお、当初は弊社の YOKOTA TAKEHIKO (@i_am_skirnir) が発表する予定だったのですが、スピーカーを交代して HARUYAMA MAKOTO (@Spring_MT) の発表となりました。

発表概要

IMG_8648.JPG

Sakashoはゲームのサーバサイドを担当するが、それをクライアントで利用するためのSDKも提供しており、課金・Push通知などOS依存の機能も用意しているそうです。ランキング、掲示板、ギルド、ログインボーナス......。「スマートフォン向けゲームならあるだろう」という機能が一通り揃っているとのこと。

Sakashoを開発するにあたり、最初からMicroservices的な設計で開発していったのですが、そのことを今は後悔しているそうです。

まず、Microservicesは運用工数がけっこうかかるとのこと。Sakashoチームは10人前後で構成されているのですが、担当を細かくわけてはおらず、全員が全部を見る状態になっていて、結局管理工数が大きくなってしまったのだとか。今では「最初はモノリシックな作りにして、あとで必要になってから分けたほうがよかった」と考えているそうです。

また、Sakashoの開発言語にはRubyを選択したそうです。DeNAはPerlの会社のイメージが強かったが、Rubyで開発、運用をこなしているメンバーが多かったし、フォローできる人材もいたため、Rubyを採用できると考えたのだとか。

ただ、Perlで作られた資産をRubyに移行するにはそれなりの苦労もあったようです。たとえば、DeNAで使っているdaemontoolsでRubyのWebアプリケーションを管理するための仕組みを作ったこと(詳しくは 「Server::Starterに対応するとはどういうことか」の補足 に書かれています)や、社内でのPerl Webアプリケーションと同様の運用体制を実現するために、UnicornのWorker状態監視ライブラリやUnicornのデバッグ用ライブラリを作ったことなどが話題になりました。ほかにも、社内Rubygemsサーバーを構築したり、社内アプリ配信ツールのIotaをRailsで作って、社内での実績を作ってRubyへの信頼を高めていったそうです。

感想

Sakasho便利そうですよね。これがあったら、面倒な、それでいて必要不可欠な作業がかなり省略できて、ゲーム開発が楽になりますね。

Microserviceの失敗について、率直な振り返りがなされたのが印象的でした。開発の初期段階ではモノリシックに作ったほうが効率が良くなってしまうのですよね。設計をMicroservices的にするかはよく考えてからのほうがよく、もしもMicroservicesにするのなら、軌道に乗ってからにすべき、という教訓が得られました。

そういえば、先日開催されたCookpad TechConf 2016で、巨大なモノリシックアプリケーションとなったサービスの分割に関する発表がありました。こちらの発表では、モノリシックなアプリケーションを分割するのに苦労したという話だったのですが、開発効率の観点からすれば、開発の初期ではモノリシックに作ったほうがよく、最初期にモノリシックなサービスにしたのはむしろ大正解だったのではないかなと思いました。

また、開発言語にRubyを採用した結果、自分たちでRubyのライブラリをたくさん作ることになったというエピソードも興味深いです。Webアプリケーションの開発といえばいまや「とりあえずRubyでRails」と考えてしまいがちですが、案外、PerlにあってRubyにないライブラリがあったりするのですよね。欲しいライブラリがRubyにないとき、自分たちでライブラリを作れる技術力がSakashoチームの強みになっていることがわかりました。

スライドはこちら: DeNAのゲーム開発を支える Game Backend as a Service from Makoto Haruyama

他の来場者の方のまとめ

DeNA TechCon 2016をブログ記事にまとめてくださった方もいます。ぜひこちらもご覧ください。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

DeNA TechCon 2016 開催レポート【1】

こんにちは。IT基盤部の安武です。
去る1月29日、DeNA で初となる技術系カンファレンス「DeNA TechCon 2016」を開催いたしました。
当日は雨天にも関わらず、のべ1000人以上の方々にご来場いただきました。ありがとうございました!

さて、本エンジニアブログでは、これから数回に分けて「DeNA TechCon 2016」の内容を振り返り、紹介していきます。
第1回となる今回は、カンファレンス全体の進行や内容を、ざっと振り返りたいと思います。

進行

カンファレンスは、以下のような流れで進行しました。

  • オープニング
  • 講演(4トラック×4〜8本)、及び カジュアルトーク
  • クロージング
  • 懇親会

前日までの準備やリハーサルを積み重ねたおかげで、特に大きなトラブルもなく、スムーズに会を進行することができました。

内容

まず、オープニングでは、弊社の執行役員システム本部長である木村から、カンファレンスの概要と意気込みをお伝えしました。

IMG_8531.JPG

続くメインの講演の内容について、各トラックのコンセプトを簡単に紹介します。

  • 会場A「DeNAが切り拓く最前線」 ... HTTP/2 や Software Test など、業界の中でも比較的新しめの技術トピックについて、DeNA の直近の取り組みを発表しました。
  • 会場B「DeNAの新しい挑戦」 ... VRサービスや自動運転など、DeNA の様々なサービスにおける技術的挑戦について紹介しました。
  • 会場C「DeNAを支える技術」 ... DeNA の数多くのサービスを支えるインフラや技術基盤について発表しました。
  • 会場D「DeNAのゲーム開発」 ... DeNA の主力事業であるゲームについて、開発技術の変遷や要素技術に関するセッションを行いました。

一部を除く発表の動画や資料は、追って「DeNA TechCon 2016」のサイト上で公開される予定です。

講演の裏では、会場の1部屋を使ってカジュアルトークの発表を行っていました。
「新卒エンジニアから見たDeNA」「シニアエンジニアから見たDeNA」という2つのお題で、何名かのエンジニアに各々のテーマでトークを行ってもらいました。

IMG_8441.jpg

IMG_8744.jpg

そして、クロージングでは弊社取締役の川崎から、本カンファレンスの総括と謝辞を述べました。

3A4A5563.JPG

その後は、会場のレイアウトを一部変更して、懇親会が催されました。
お寿司やビールなどの飲食物が提供され、和やかな雰囲気で交流が行われました。

簡単でしたが、以上で今回の振り返りは終わりです。

次回以降は、私や他の社員が実際に聴講したセッションについて、ピックアップして内容を紹介します。

紹介するセッションを直にお聞きになった方には、新しい内容はないかと思いますが、「気になっていたけど見られなかった」というものがありましたら、次回以降の記事もご覧いただければ幸いです。

おまけ

カンファレンス当日の様子がわかるような写真を、何枚か掲載しておきます。

20160129_110852.jpg
通路の展示物
IMG_8353.JPG
会場で配布したノベルティの一部
IMG_8385.JPG
ロボットタクシー実験車両
IMG_8498_m.jpeg
会場Aのオープニング前の様子
IMG_8919.JPG
会場Bでの発表のグラフィック・レコーディング
IMG_8301_m.jpeg
スタッフ集合写真

多数のご来場をいただき、ありがとうございました!!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

Global Scrum Gathering Prague参加レポート#1

こんにちは。貝瀬です。 ヒューマンリソース部門で、組織開発や人材企画を担当しています。もともとはエンジニア畑の出身でして、4年ほど前に自部門の開発プロセスを改善することを目的にスクラムを導入しました。現在は、社内でスクラムを導入したい人たち、スクラムを実践するなかで困っている人たちをサポートする立場でスクラムに関わっています。

11/16〜11/18の3日間、国際学会派遣制度を利用して、プラハで行われたGlobal Scrum Gatheringに参加してきました。今回のブログでは、1日目に出席したセッションについてレポートします。

Scrum Gathering について

スクラムギャザリングは、大きく分けて、トーク型セッション、ワークショップ型セッション、オープンスペースから構成されるイベントです。Globalを冠するスクラムギャザリングは、ヨーロッパ、アメリカ、その他の地域でそれぞれ1回ずつ、年間3回開催されています。私見ですが、ヨーロッパはスクラムを取り巻く組織や人のテーマが多く、アメリカはスクラムフレームワークそのものやスクラムと相性の良い技術のテーマが多いようです。

ギャザリングが行われたホテルはこんな雰囲気でした。プラハの旧市街という場所にある、観光に便利なロケーションです。 IMG_2221.JPG

メイン会場です。場所が遠いせいか、アジア圏から参加した方は少なめでした。 IMG_2211.JPG

Organizing for Complexity

Evernote Camera Roll 20151124 200238_1.jpg

Speaker : Niels Pflaeging氏 Session : Opening Keynote

1日目のオープニングキーノートです。ダイナミックに変化する複雑な市場環境において、ビジネスで成功を収めるためにどのような組織であるべきかという話がされました。

Evernote Camera Roll 20151125 173042_1.jpg Evernote Camera Roll 20151125 173042_2.jpg

従来の組織の形を左側の図(Industrial Age)とすると、Niels氏の提唱する組織の概念は右側の図(Knowledge Age)となります。Knowledge Ageの組織では、意思決定の権限と顧客とのコミュニケーションを中央層(マネジメント)から外層(現場)に非中央化しています。外層に所属する人たちが市場とのコミュニケーションを通じて学習しながら、意思決定を行っていきます。中央層の人たちは、外層の人たちを必要に応じてサポートします。外層と中央層の人たちの役割は、動的にスイッチします。

Evernote Camera Roll 20151124 200238_2.jpg

このモデルでは、意思決定をするためのナレッジと権限が組織の隅々に分散され、ハイパフォーマンスな組織が実現できるそうです。概要は理解できたのですが、どのようにして実現するのかはまだイメージができていません。書籍も頂いたので、じっくり読み込んで理解を深めたいと思います。

SlideShareにスライドも公開用されています。

From Non-Violent Communication to Potential-Focused Communication

Speaker : Ralph Miarka氏 Session : Talk

コミュニケーション手法に関するトークセッションです。Non-Violent Communication(非暴力コミュニケーション:NVC)とソリューションフォーカスという2つのコミュニケーション手法を組み合わせたものが、Ralph氏の提案するPotential-Focused Communication(ポテンシャルフォーカスコミュニケーション:PFC)ということでした。

NVCでは4つの要素に着目してコミュニケーションを行う手法です。

  1. 観察(Observation)
  2. 感情(Feeling)
  3. ニーズ(Need)
  4. リクエスト(Request)

PFCでは、より解決策に焦点をあてるため、以下のようなコミュニケーションになるようです。

  1. Preferred Observation
  2. Preferred Feeling
  3. Need
  4. Solution-Focused Question

例が示されないと分かり難いですね。ということで、Ralph氏が紹介していたサンプルも掲載します。

  1. When I'll see that {preferred observation}
  2. Then I'd be {preferred feeling}
  3. Because I value {need}
  4. {Open question} e.g. How could we manage that?

※ 適当な日本語訳が用意できずすみません...

相手との関係性改善、問題の早期解決促進に有用なコミュニケーション手法だということです。色々な方と1on1ミーティングをすることが多いので、今回紹介した4つの要素を意識したコミュニケーションも実践してみようと思います。

Looking Beyond Agile - Using Customer Experience Management (CEM) to Build the "Right" Product

Speaker : De Gregorio, Biase氏 Session : Talk

Evernote Camera Roll 20151207 132158_1.jpg

スクラムでは、 Build the right thing(正しいモノを作る)のはプロダクトオーナーの役割、Build the thing right(正しくモノを作る)のは開発チームの役割と定義されています。本セッションでは、正しいモノを作るための方法論として、CEM(Customer Experience Management:顧客経験管理)、特にSCO(Successful Customer Outcome)についての紹介がなされました。

SCOはリーンキャンバスと似た用途で用いられるようで、SCOにアラインするようにフィーチャーを定義したり、MVP(Minimum Viable Product)を定義したりするようです。

Evernote Camera Roll 20151207 132158_2.jpg Evernote Camera Roll 20151207 132159_3.jpg

こちらも資料が公開されています。

まとめ

1日目に参加した3つのセッションを、簡単にレポートさせていただきました。次回は残りのセッションをお届けします。

雑記

チェコは個人的に大好きな国の一つです(縁あって、プラハは今回で二度目の訪問となります)。あまりなじみのない国かもしれませんが、日本人に親しみの深いラガービールやピルスナービールは、チェコが発祥だと言われています。ビールに合わせて作っているせいなのか分かりませんが、料理も日本人の口に良く合います。周りに海がないせいか、肉料理が主体です。観光客向けのお店は例外ですが、ビール1杯100円〜200円、メインディッシュ1皿500円程度でお腹いっぱいになることができます。夕食にお腹いっぱいビールと食事を頼んでも、2000円はかからない計算ですね。

次回の雑記ではチェコの町並みをレポートしたいと思います。

専用のビールグラスで提供されるお店が多いです。このサイズだと100円代で飲めます。 Evernote Camera Roll 20151207 195207_1.jpg

メインディッシュにはだいたいクネドリーキ(茹でパン)がついてきます。これが案外美味しいんです。 Evernote Camera Roll 20151207 195207_2.jpg

ザワークラウト(キャベツの酢漬け)のスープです。飲んだ日の翌朝に最高なのですが、これを食べているとまた飲みたくなってきます。 Evernote Camera Roll 20151207 195207_3.jpg

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

WWDC15参加レポート

こんにちは。@kenmazと申します。2013年にDeNAに中途入社して以来、マンガボックスのiOSアプリ開発を担当しています。

さて今回DeNAの国際学会/カンファレンス参加支援制度を利用し、Appleの開発者向け会議であるWWDC15に参加してきました。 私個人としても初めてのWWDC、そして初めてのサンフランシスコ滞在ということで、刺激の多い充実した一週間となりました。

WWDC15 について

WWDC15は6/8から6/12の5日間にわたって開催されました。

1_wwdc.jpg

初日のキーノートスピーチでは、ティム・クックを始めとするAppleのトップ陣が登壇し、一般のユーザー向けの内容を含む発表が行われました。初日の午後は、開発者向けのキーノートスピーチとも言える「Platform State of Union」というセッションがあります。開発者はまずこのセッションを聴講することで、今年のWWDCの発表内容の全体像を把握することができます。

3_keynote.jpg 朝4:30からキーノートの行列に並んだ結果、真ん中よりちょっと前よりの位置の席をゲット

2日目以降は、各技術の詳細を紹介するセッションがひとコマ40分で、9:00〜18:00の間にびっちりと予定されています。セッションのスケジュールはWebサイトやWWDCのiOSアプリで公開されているので、参加者は興味のあるセッションを調べスケジューリングし、各会議室に移動してセッションを聴講します。まるで大学時代の授業を受けているような感覚でした。

スクリーンショット 2015-06-18 18.25.18.png びっしりスケジュール

WWDC15注目トピックス

さて、今回のWWDCでは、iOS,OSX,watchOSという3つのOSの存在感が非常に強く打ち出されていました。昨年まではiOSとOSXに関するセッションがほとんどでしたが、今回新たにwatchOSがテーマに加わり、さらにSwiftに関するセッションも増えました。昨年のWWDCと比べてもセッションの数が増え、最終日まで非常に濃い時間を過ごすことができました。

そんな沢山のセッションの中から、個人的に興味深く感じたセッションの内容をざっくりと紹介します。

2_register.jpg レジストレーションを完了しご満悦の図

watchOS 2

従来のWatchKitを用いて開発されたアプリは、ユーザインタフェースの表示と入力操作のみApple Watchの実機上で処理され、その他のあらゆる処理はペアリングされたiPhone上で動作するExtensionのプロセス上で実行されていました。

そのためWatchアプリを動作させるには必ずiPhoneが近くにある必要があり、またWatchアプリを操作するたびにiPhoneとの通信が発生するので、動作も若干もっさりしていました。また、使用できるAPIにも大きな制限がありました。

今回発表されたwatchOS 2では、このあたりの問題が一気に解決されました。

まず、従来iPhone上で動作していたExtensionのプロセスがApple Watch上で動作することにより、基本的にすべてのアプリの処理がWatch上で実行されるようになりました。これにより、iPhoneが近くになくてもWatchアプリは動作するようになり、またほとんどの処理がWatch上で完結するため、もっさり感の解消も見込まれます。

また使用できるAPIの制限も大幅に緩和され、グラフィックス処理、モーションセンサーへのアクセス、そしてApple Watchから直接インターネットにアクセスすることも可能になりました。また時計盤上に表示される情報を制御するためのComplicationを開発するためのAPIも公開されました。

watchOS 2により、より多くのアイデアをWatchアプリとして開発できる環境が整ってきました。まだ世間一般にはまだいまいち浸透していないApple Watchですが、watchOS 2 の登場により、生活を大きく変える、あっと驚くようなアプリが登場するかもしれません。

4_breakfast.jpg

事情により写真は載せれないので代わりに朝食の様子でも・・

Universal linksとSearch

地味ですが今後iOSアプリを開発する上で重要になってきそうなのが、Universal linkと、App Searchです。

これまでアプリ上のコンテンツを友達に共有したい場合は、例えばアプリ内の"シェア"ボタンをタップしてURLをSNSやチャットなどで送信し、URLを受け取った側はwebブラウザ上でコンテンツを閲覧するか、対応するアプリを持っていればURLスキームの仕組みを使って、webブラウザを経由してアプリを起動する、ということを行ってきました。

どうしてもWebブラウザを経由する必要があり、あまりスマートな共有の方法とはいえませんでした。

Universal linkは、URLをタップしたらWebブラウザを経由せず、ダイレクトにアプリを起動し目的のコンテンツを表示する、といったスマートな体験を可能にする機能です。

Artboard 2.png

またApp Searchは、iOSのSpotlight検索画面から、アプリ内のコンテンツを検索可能にするための機能です。

検索のために必要なデータは、Cloud IndexというAppleがホストするサーバー上に集約されます。世界中のユーザがアプリを使ってコンテンツを表示するたびに、Cloud Indexにコンテンツのインデックスが蓄積されていき、それらが各ユーザのSpotlight検索の検索結果に反映されます。また、Web上のコンテンツにも対応するアプリの情報をタグとして記述しておくことで、Applebotと呼ばれるAppleのWebクローラーがクローリングを行い、その結果もCloud Indexに反映されます。

たとえば、「いま巷で"恋と嘘"というマンガが話題らしいな・・」と思ったらSpotlight検索で「恋と嘘」を検索すると、検索結果として「マンガボックス」が表示され、アプリがインストール済みであれば検索結果をタップするだけで、アプリが起動しダイレクトに「恋と嘘」を読み始めることができます。

あるいは「アップルパイを作りたいのでレシピを見たいな・・」と思った場合は「アップルパイ」と検索すると、アップルパイのレシピを表示できるアプリの一覧が検索結果として表示されます。

このように、Universal link や App Searchが充分に普及すれば、Webブラウザを経由すること無く、あらゆる情報やコンテンツへのアクセスにアプリが使われるようになるかもしれません。自分たちのアプリのコンテンツがきちんとCloud Indexにインデクシングされるように設計しておくことが、今後重要になりそうです。

Swift2

WWDC初日のキーノートスピーチでは様々な取り組みが紹介されましたが「Swiftをオープンソースとして公開する」という発表の時が一番客席が沸いていました。そんなホットなSwiftですが、Swift2では様々な新機能が追加されました。

個人的に興味深かったのは Availability Checking の機能です。以下のようなif文を書くことでiOSのバージョンごとにアプリの挙動を変えられるようになります。

available.png

これまでも respondsToSelector メソッドを使うことで同様の分岐を実現することは可能でしたが、あまり安全な手法とはいえませんでした。基本的にrespondsToSelectorの引数には任意の文字列を指定することが可能なので、タイプミスなどで存在しないメソッド名を指定してしまったり、そもそもうっかりrespondsToSelectorによるチェックをし忘れてしまったとしても、エラーもなくコンパイルは成功してしまいます。

一方で Availablity Checking ではコンパイラがアプリのDeployment Targetで指定されたOSバージョンと、コード上のAPI呼び出しをチェックすることで、このあたりの安全性を保証してくれます。

例えばDeployment Target = iOS8 に設定されたアプリでは、

if #available(iOS 9.0, *) {...}

でチェックされたブロック内でのみ、iOS9のAPIを呼ぶコードを書くことができます。Availabiliy CheckingをせずにiOS9のAPIを呼び出すコードを書くと、コンパイルエラーが発生するため、うっかりiOS9のAPIを呼び出すコードを書いてしまった、というようなミスを完全に排除できます。

Availablity Checking はBaseSDKがiOS9以上であれば使用可能なので、アプリ自体はiOS7以降のサポートを維持しつつ、最新のiOS9のAPIを積極的に使っていく、といったことも可能になります。

また、Availablity Checking機能を使えるのはSwiftだけなので、既存のコードをObjective-CからSwiftにマイグレーションする大きなモチベーションにもなりそうです。

その他にも、新たに以下のような機能や改善が追加されました。

  • 新しいコンパイラ最適化レベルであるWhole Module Optimaztionの追加
  • try-catchによるエラーハンドリングのサポート
  • protocol extension
  • guard構文
  • SDKが提供するAPIのSwift最適化など

また、Swiftによるプロトコル指向プログラミングについてのセッションや、Swiftプログラムのチューニング、ObjcとSwiftの相互運用性についてのセッションなど、プログラミングテクニック的なセッションも数多くあり、非常に興味深い内容でした。

以上のとおり、Swiftはバージョン2.0によってかなり進化を続けており、またSwiftのみで恩恵を受けられる機能の追加もかなり多くあり、今後よりいっそうObjective-CからSwiftへの移行がすすみそうです。

Multitasking

アプリから離れることなく別のアプリを起動することができるSlide Over、画面を2分割して複数のアプリを同時に操作できるようにする Split View などの機能が公開されました。

機能の素晴らしさもさることながら、これまで開発者に向けて Size Class や AutoLayout などのAdaptive UI系の技術の利用が盛んに推奨されてきましたが、それもこのような機能を実現するための布石のひとつだったのか、と思うと関心してしまいます。

ラボ

セッションだけでなく「ラボ」もWWDCの大きな魅力の1つです。WWDC期間中の9:00〜18:00まで、会場にはiOS/OSX/watchOSを開発したApple社員が多数常駐しているブースがあり、各技術についての質問や改善要望など、なんでも相談にしにいける、というのがラボです。またAppStoreのレビューチームもラボを開いているので、審査官に対して、直接アプリの審査について質問したり、リジェクトされた場合にその理由を詳細に深堀りして質問することもできます。またAppleのデザインチームもラボを構えているので、自分の作ったアプリのUIについてアドバイスを貰ったりすることも可能です。

ラボは、これまで日々の開発でつまづいたり悩んだりしたことを、一気に解決する絶好のチャンスです。また初日にXcode7が公開されたので、さっそくダウンロードし、新しいAPIを使ってみて、そこで出た疑問などもすぐにラボに聞きに行けるのが楽しかったです。

今回は、以下の様な質問や相談をラボに持ち込みました。

  • App Review Lab
    • コンテンツのエロ・グロ表現の基準に関する質問
    • IDFAの取り扱い方についての質問
    • IPアドレス制限によるコンテンツの出し分けに関する質問
  • StoreKit and Reeipts Lab
    • Sandbox環境における不可思議なIAPの挙動についての質問(=>結局原因がわからず、再現手順をまとめてフォーラムに投稿しといて!とのことでした)
  • Internationalization Lab
    • Export/Import Localization機能の改善要望
    • Storyboardをローカライズする際のstringsファイル再生成時の問題について
  • App Search and Spotlight Lab
    • iOS9で導入されたApp Search機能を実際に使ったサンプルアプリを作ってみたけど動かないんだけど?(=>僕のプログラミングミスでしたorz)
  • Core Data Lab
    • CoreData周りで原因が解決出来ないクラッシュがあったのでその相談(=>解決!)
  • UIKit and UIKit Dynamics Lab
    • UIViewController/UIViewのライフサイクルに関する質問

その他、細かい質問など、カジュアルに質問しに行ける雰囲気がよく、何度も質問しにいきました。

6_lab_coredata.jpg こちらはCore Data Labの行列。みんな問題を抱えています。

英語について

ラボで相談に乗ってくれるApple社員の方々とは、基本的に英語でのコミュニケーションになります。自分自身、そんなに英語が得意というわけではないのですが、意外となんとかなりました。とにかく質問しに行く前にしっかり質問したいことを頭のなかで整理すれば、とりあえず自分の言いたいことは伝わりました(と思っています)。ときどき相手が何を言っているかわからないこともありましたが、何度も聞き返すことで、(ありがたいことに)表現をいろいろ変えて説明してくれるので、助かりました。

また、ラボでのやりとりはすべてiPhoneのボイスメモアプリで録音させてもらったので、理解できなかった会話をあとで聴き直す、といったこともできて良かったです。

WWDC関連イベント

WWDC開催期間中は、サンフランシスコ現地のIT企業によるミートアップやパーティなどのイベントが盛んに行われていました。18:00までセッションを受講した後は、それらのイベントに参加するのも楽しかったです。今回私が参加したイベントを幾つか紹介します。

WWDC Hike

WWDCの開催前日にWWDC参加者が集まって、サンフランシスコの北部の海岸沿いをハイキングしよう!というイベントです。WWDCのレジストレーションを完了し、記念品としてもらったジャケットを着てサンフランシスコの街中をうろついていると、このイベントの主催者に偶然声をかけられ、ぜひ来なよ!と誘われたため参加することにしました。

イベントのwebページには集合場所が曖昧にしか書かれておらず、いざ集合時間になってもあまり人がいなかったのでがっかりしていましたが、徐々に腕にApple Watchを巻きつけた人々や、WWDCジャケットをきた人々がわらわらと集まりはじめ、最終的には200人ほどの参加者が集まりました。日本人の参加者はどうやら私だけのようでしたが、慣れない英語を使いながら、ロンドン、ドイツ、モロッコなど、世界中のアプリ開発者たちとプログラミングの話や母国についての話などが出来たりして、非常に楽しかったです。

計4時間ほど海沿いの歩きづらい道を歩いたので、日々の運動不足もあり、相当疲労しましたが良い思い出となりました。

10_hike.jpg

14_hike2.jpg

CocoaPods meetup

iOS/OSXアプリ開発におけるライブラリの管理の定番ツールであるCocoaPodsの開発者達によるミートアップです。Twilloという会社のオフィスを使って開催されました。普段からよく使っているツールの開発者たちの話を聞けるのは楽しいものです。

8_cocoapods.jpg

Foursquare WWDC15 Event

Foursquare/SwarmのiOSアプリ開発者によるプレゼンテーション&パーティのイベントです。Foursquareのオフィスはいかにもベンチャー、という感じでなかなか雰囲気が良かったです。こちらのイベントでも各国の開発者といろいろ雑談することができました。

9_foursq.jpg

Realm Party

iOS/Android向けの組み込みデータベースを開発しているRealmという会社で開催されたパーティです。日本のiOS開発界隈で有名な岸川さんや、rebuild.fmでお馴染みの宮川さんも参加しており、楽しい時間を過ごせました。後半はなぜかマリオカート大会が行われました。すごく難しかったです。。

15_realm.jpg

DeNA West訪問

DeNAのサンフランシスコの拠点であるDeNA Westにも訪問しました。海沿い&ジャイアンツの球場が目の前にあるというロケーションが非常に良かったです。現地のエンジニアと話したり、お土産をいっぱいもらったりしました。

11_denawest.jpg

シリコンバレー観光

サンフランシスコ滞在の最終日にはスケジュールに余裕が合ったので、現地の友人と一緒に車でシリコンバレーをめぐり、Apple、Google、Youtube、Twitterなどの有名IT企業を(外からですが)訪問しました。またエンジニアなら一度は行ってみたいと言われるコンピューター・ヒストリー・ミュージアムにも立ち寄ることができました。憧れの?シリコンバレーの雰囲気を味わうことができ、良かったです。

13_apple.jpg

まとめ

私は2008年ごろからiOSの開発に携わってきましたが、毎年WWDCのチケットが取れず悔しい思いをしていました。今回は幸運な事にチケットをゲットすることが出来、さらに費用面やその他の面で会社にバックアップしていただきました。また(チームのみんなには申し訳ないですが)しばし仕事のことを忘れWWDCにどっぷり浸かることができ、エンジニアとしても非常によい刺激を受けることができた一週間となりました。

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

げんなま「ゲームプラットフォーム開発の舞台裏」版開催レポート

こんにちは、エンジニアの新卒採用を担当している福島です。
先日行われた、学生向けイベント「げんなま」について、レポートします!

※げんなまプログラミング教育版SHOWROOM版MYCODE版のレポートも併せてご覧下さい。

今回の登壇者


登壇者.jpg

今回は、「ゲームプラットフォーム開発の部隊裏」と称して、
DeNAのプラットフォーム事業を牽引してきた2名のエンジニアと、
このイベントではお馴染みの南場が登壇しました。

  • 木村(執行役員 システム本部長)
  • 山口(オープンプラットフォーム事業本部 副事業本部長 シニアアーキテクト)
  • 南場智子(司会者)

Mobage Open Platformを立ち上げた2人のエンジニアですが、
この2人はプラットフォーム開発を通じて、事業を作ると同時に
DeNAの技術力・技術コミュニティへの関わりを強化してきました。

※その辺りの話が、山口のスライドにまとまっています!

そんな背景もあり、今回のげんなまは、
今までに比べて、かなり技術寄りです!

そんな中、ところどころ、司会の南場が非技術者ならではのわかりやすい言葉で
議論に食らいついていく、珍しい場面も見られました。


リクエストを1つも落とさない、Hot Deployへの挑戦

IMG_7391.JPG

イベント前半は、プラットフォーム立ち上げ時の技術的課題について触れました。

webサービスは日々細かな修正を加え、改善させていくことが多いですが、
動いているwebアプリケーションに修正を反映させる「deploy」という作業が発生します。

deployの仕方はサービス要件によって違い、
金融機関のシステムのように不整合が許されなかったり、
システムの変更の際にwebアプリケーションにアクセスが来ると不都合がある場合などには、
サービス停止を行って deploy を行う事もありますし、
直近来ているリクエストを捌き切るのを待ってプログラムのリスタートを行うといった仕組みなどがあります。

Mobage Open Platformも高頻度で deploy することを想定していたのですが、
その際、多大なリクエストを1件も落とさない、「Hot Deploy」に挑戦しようと
FastCGI Server としてwebアプリケーションを構築しました。
しかし、FastCGI Server と当時利用していた daemontools との相性があまり良くなく、
当時は断念しました。
このような、現場の生々しいチャレンジと失敗談についてもイベントでは語られました。

大規模トラフィックを支える技術

プラットフォームでは、複雑な更新処理も走りますが、
そのたびにユーザへのレスポンスを待たせるわけにはいきません。

Mobage Open Platformで使われている、Q4Mという仕組みを題材に、
Queue処理について説明しました。

Mobage Open Platformでは、Q4Mを使うことによって、
レスポンスの高速化だけでなく、DBへの都度接続を減らすことができ、
大幅な負荷削減に繋がりました。

若いエンジニアの皆さんへ

イベントの中では、座談会・質問を通じて学生エンジニアへのメッセージを伝えました。

■技術コミュニティとの関わり方

色んなサービスを作っていく中で、OSSにはいつもお世話になっている。
(前述のQ4Mもその一つ。)
その分、自分が作ったものは必要な人に使ってもらえるようにすることで還元することは、非常に大切。

気をつけたいのは、コミュニティなどの勉強会に出かけるのが楽しくて、
それ自体が目的化してしまうこともあるということ。

コミュニティで有名なスーパーハッカーになりたい、というより、
「あのプロダクトを作ったエンジニア」として有名になりたい、
そういうエンジニアがDeNAを選ぶ事が多いですね。

「技術はあくまでモノづくりの武器でしかない」という考え方を、DeNAでは大切にしています。

■どんな風に技術を学べばいい?

駆け出しのエンジニア(自称)からの質問にも、同じメッセージを伝えました。

RSSなどを使って最新の情報はキャッチするようにはしていますが、
結局は「何を作りたいか」がブレないことが大切。
そのために必要な技術を学んでいけば、自然と身についていくものです。


次回はキュレーション

今回は技術の難しめの話でしたが、技術好きな学生に好評を頂きました!
また、DeNAエンジニア共通で大切にしている考え方に改めて触れられたことが、
とても良かったです。

次回はまた、サービス開発に焦点を当てて、
キュレーションのエンジニア・プロダクトオーナーが登壇します!

開催日時:6月18日(木) 18:30 開場 19:00 開演
開催場所:渋谷ヒカリエ DeNA本社
対象:2016年もしくは2017年卒予定のエンジニア志望学生
申し込み方法:メールにてお受けしています。
 宛先:shinsotsu@dena.jp
 件名:6/18 げんなま参加エントリー
 本文:お名前、ヨミガナを明記してください


※2017年新卒エンジニアも参加できるようになりましたので、お気軽にご参加下さい!

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る

げんなま「小学1年生へのプログラミング教育」版開催レポート

こんにちは。
エンジニアの新卒採用を担当している、福島です。

4月2日に開催された、「げんなま」は、
「武雄市で実施している小学1年生へのプログラミング教育」を題材として、
CTOの川崎が登壇しました。

こちらのプロジェクトについては、インターネットなどで話題になっている割に、
その詳細は社内でも殆ど知っている人がいないという程、表に出ていませんでした。

今回はプロジェクトの生々しい話のみならず、
CTO川崎の生々しいエンジニアライフについてもご紹介しており、
みなさん ドン引き 興味津津でした!

※げんなまSHOWROOM版MYCODE版のレポートも併せてご覧下さい。

今回の登壇者

DSC_0271.JPG


今回登壇したのは、DeNAのCTO 川崎修平。

「げんなま」の毎回のファシリテート役でもある南場(DeNA ファウンダー)とは、
大学院生時代のアルバイトの時から、固い信頼関係があります。

CTO川崎修平の実態


川崎は、モバオクから始まり、Mobageやポケットアフィリエイト、
SHOWROOMのアプリなど、DeNA数々のプロジェクトを成功に導いてきました。

DSC_0234.JPG
▲川崎のDeNAでの経歴

川崎はCTOになった今も、がっつり現場に入って、
難しい技術・スピードが求められる開発を
一手に引き受けています。

仕事をしていて楽しいことは、
「普通だったら、1ヶ月くらいかかるかな」という仕事を、
「1週間でできるでしょ?」って言われて、
2日で仕上げるような時

と言う通り、川崎の開発のスピードは社内のエンジニアをいつも驚かせます。


今回は、その集中力の源、ドーピングとも言える、
開発グッズもお披露目しました。

DSC_0255.JPG

開発の必需品。左から、「午後ティー」(毎朝1本飲む)、
「お腹をふくらませる錠剤」、「頭を冷やす冷えピタ」、
「呼吸を忘れた時のための酸素」


武雄市、小学1年生へのプログラミング教育


全員に触れてもらえる「公教育」というアプローチ


DSC_0217.JPG

(南場) 「私はずっと、プログラミングが出来る人を
増やす必要があると唱えてきました。」


プログラミング教育を事業として展開している会社に
出資もしているDeNAですが、
これまで、プログラミング教育を
自社で進めたことは一度もありませんでした。


(川崎) 「プログラミング教育は、絶対に必要だけど、
DeNAの強みを活かせる領域では無いと考えていました。
塾など、教育に慣れている会社の方が合っていると思っていたからです。」


ですが、今回のプロジェクトは、今まで行われていたものとは
違う要素を持ったものでした。


(川崎) 「対象が小学校1年生、しかも公教育で全員を対象とする。
これは、何かを良い方向に変えられる可能性を感じました。」


(南場) 「全員をエンジニアにしたいというわけではありません。
今の大人が当たり前にハサミやのりを使えるように、
全員がプログラミングが何かを知っていて、
それぞれの進む道で、ITを用いて何ができるのかを
考えられるようになって欲しいと思っています。」


(川崎) 「そのためには、一つ教科が増えた・・・と感じるのではなく、
楽しい、怖くない、と思ってもらう事が、一番大事なことでした。」

先生と何度も打ち合わせし、プログラムを決定

実際に授業をする前には、先生と念入りに打ち合わせをしました。
先生も、プログラミングに関しては全くの初心者。
カリキュラムは川崎が考え、
それが45分の授業に収まるように、プロの先生と調整していきました。

DSC_0261.JPG

最終的に実施した、全8回のカリキュラム


8回の授業ごとに、毎回振り返りを行い、ちょっとずつ教材も修正していきます。
そのため、Scratch等の既存言語は今回は利用せず、
小回りの効く、かつタブレットで操作できる
専用言語を川崎自ら開発しました。

DSC_0260.JPG


自分で書いた絵・写真が、タブレットの中を動き出す

その中でも特にこだわったのは、自分で書いた絵や写真を、
登場人物として動かせるようにしたところです。

子どもたちは、作り出したい世界を決めて、
そのために必要な手法をとして、
for 文や if 文の概念を学んでいきました。

DSC_0283.JPG

イベントの中では、1年生が卒業生に送った、
「卒業生がみんなでロケットにのって飛んで行く」
というプログラムも披露されました。

DSC_0304.JPG


7~9割辛くても、全部自分で作る

イベントの中で、いかにも川崎らしい、生々しい声を拾えたので、
掲載しておきます。

インタビューとかで「苦しかったことはありますか?」 と聞かれるといつも、「特にない」と答えてました。

実は今、あるプロジェクトの佳境なんですが、めちゃめちゃ苦しいです。
苦しい時になると、「そういえばあの時も苦しかった」と、色々思い出します。

開発をしていて、楽しい時間なんて、1割から3割あればいい方。
残り7~9割は、辛い、地味な作業。
でも、この地味な作業を、人に任せたり手を抜いたりすることで、
プロダクト全体のコンセプトが壊れてしまうことがあることも知っている。

一切妥協せずに作り上げたものが、世の中に出た時は素直に嬉しいし、
それが成功して不可能に近い負荷対策が要求されたりするのは、
最高のご褒美。

そうしていると、開発中の苦しかったことなんて、また全部忘れてしまうんですね。

DSC_0245.JPG


質疑応答

プログラミング教育に携わったことがあるという方も参加しており、
いろんな質問が出てきました。

for 文や if 文の概念は大人に教えても苦労する。どうやって教えるのですか?

川崎 「とにかく目的に合わせて使ってみて、
使ったらできた、を繰り返すことで、知っているという状態にしました。
進み続けるには、とにかくこのブロックの中に歩くという命令を入れるんだ・・・みたいな。
1回目の授業でif文を教えるのに大失敗して、10分の休憩時間に教材を作りなおしたというエピソードもあります。」

生活に密着ということであれば、ハードと結びつける所を教えたりも検討していますか?

川崎 「それは面白いし、有りだと思う。
一方で、タブレットの中で、自分が書いた絵が、
命令通りに動き出すという、エンジニアからしたらなんともないことで、
子どもたちが目を輝かせる、その面白さも大切にしたい。」

続きを読む
ツイート
シェア
あとで読む
ブックマーク
送る
メールで送る