投稿者「mizushima」のアーカイブ

AIチームの立ち上げとこれから

mizushima|2019年12月18日
エンジニア組織

こんにちは。開発部の水島(@0xb5951)です。

ランサーズ Advent Calender18日目の記事です。

昨日は長島さんのプロジェクトをうまく回せた時の感動を味わいたいという記事でした。

この度、ランサーズ株式会社でAIチームを立ち上げる運びとなりましたので、

チームのミッションや目指していく方向性について書こうと思います。

 

チームのミッションについて

AIチームでは以下のミッションを軸に開発を行なっていきます。

「社会的信用が高いプラットフォームをAIで実現する」

(create social trusted plattform by AI)

 

ランサーズ株式会社は2019年12月16日にマザーズへ上場し、これからよりパブリックな目で見られるようになります。

ランサーズというサービスは単なるWebサービスではなく、生活の一部になっている人やそこで生計を立てている人、社内の一部機能として運用している企業などもあり、そういう人たちにとっては社会インフラのようなサービスになっています。

僕たちはこういう人をもっと増やしていきたいし、そこで使ってくれる人に安心して使ってもらえるプラットフォームを作りたいです。

これらのミッションや課題感は会社の成長戦略に即したアプローチにもなっています。

成長可能性に関する説明資料[ランサーズ株式会社]

 

もちろん今までもこうした取り組みや施策は行われてきましたが、ここに対してデータとアルゴリズムの力で問題を解決していきたいと思っています。

ランサーズは2008年から12年に渡って運用されているサービスで独自性が高いデータが集まっていますが、

現時点ではそれを十分に活用できているとは言い難いです。

AIチームでは仮説に対して、データドリブンで課題とペインを発見して、デザイン、アルゴリズムの力で問題解決に取り組んでいきます。

 

ランサーズでのAI定義

ランサーズでは機械学習だけではなく、広義的なAIを定義としています。

  • ルールベース
  • 統計モデル
  • 機械学習モデル
  • 深層学習モデル

我々の仕事は機械学習や深層学習モデルを使うことではなく、データやアルゴリズムによって課題を解決することだと思っています。

ML周りは運用コストや耐障害性、知見の管理、アーキテクチャのことを考えるとまだまだ考慮点や問題点が多いので、

盲目的に機械学習や深層学習を選択するではなく、ルールベースやシンプルな統計モデルなども選択肢として考えています。

シンプルなモデルで課題が解決できないと場合に積極的に使っていくのが、社会実装しやすいフローなのではないかと思っています。

 

ミッションを実現するためのゴールステップ

ゴールステップの定義ですが、これらのステップはどのフェーズでやめても一定価値があるモノに設定しました。

これらのゴールステップを設定することで、単発的な施策が乱立する状況を防ぎ、長期的な視点を持って開発を行うことを目指しています。

またこれらを定義することで、開発メンバーが全体の流れを把握し、施策間のカニバリズムを起こしてしまうような事態を防ぎ、かつ主体的な開発を行うことができるようになるのではないかと思っています。

 

Step0. ランサーズオブジェクトを評価、活用できる仕組みを作る

ユーザの行動や依頼情報を適切に取得できるようにし、それを活用できる基盤を作ります。

ランサーズオブジェクトというのは依頼、提案、ユーザ情報などのことを指します。

上位のStepで必要になるデータを収集可能にし、それを運用可能にすることが目的です。

そのためのMLアーキテクチャの見直しやデータ収集タスクは継続的に行う必要があるのでStep 0としています。

 

Step1. プラットフォームの健全性をあげる

ランサーズオブジェクトの情報を元に不適切な依頼やスパム、不適切な行動をするユーザーなどをフィルタリングします。

ランサーズ内には、一定内容に見合ってない低価格な依頼や規約違反となる依頼、スパムなどが存在します。

これらの問題によってランサーズの信頼イメージやUXを損なってしまったり、トラブルの原因になる恐れがあります。

まずはこのようなコアな問題に向き合い、プラットフォームにきた全ての人が特にトラブルなくスムーズに依頼を完了できることを目指します。

 

step2. プラットフォームの流動性をあげる

ランサーズが提供するサービス間の最適化やプラットフォームのパーソナライズに取り組みます。

現在ランサーズでは以下のサービス群を提供しています。

 

このフェーズではプラットフォームに来たユーザを適切に誘導し、柔軟なサービス提供を目指していきます。

リコメンドなどを使い、ユーザのニーズを動的に満たすような機能を作成したいと思っています。

 

Step3. プラットフォームへの流入をあげる

プラットフォームの認知やユーザの獲得を目指します。

上記でプラットフォームの柔軟な受け入れ体制が整ったので、流入量の増加に取り組みます。

国内だけではなく、海外ドメインへの取り組みを行い、さらに広い範囲での働き方を目指していきます。

 

ランサーズのデータ環境

ランサーズではBig Queryを主体とした分析基盤「capybara(カピバラ)」を構築しています。

ランサーズの分析基盤(capybara)と運用について紹介

以下がシステム構成図です。

Big Query上にDHWを構築し、ログやユーザデータなどが集約されるようになっています。

またデータの可視化にはRedashを採用しています。

AIチームの開発もデータ側に寄せ、GCP上でモデリングまでを行う予定です。

その他のインフラはAWSで構成されているので、モデルのデプロイはそちらで行います。

 

カルチャー

英語でのコミュニケーション

一月から優秀なインド人エンジニアのジョインが決まっています。

前職は日本の企業で働かれていたので、日本語もある程度わかりますが、

チャレンジも込めて英語でのコミュニケーションをメインでやっていきたいと思っています。

 

テックで遊ぶ

また、いかに技術で遊ぶかということも大事にしていきたいと思っています。

外発的な動機ではなく、内発的に自ら楽しんで進めていけるといいなと思います。
楽しむのは当然で、一定成果を作ることも前提にもっていて、遊びながらプロダクトを作っていきたいです。

仕事を楽しむだと、ドメインが仕事に閉じているのでもっとアグレシッブにやっていきたいです。

 

オープン&フラット

ランサーズ社自体にも「超オープン超フラット」というカルチャーがあります。

これはとても良い文化だと思っているので、僕たちのチームもこれを意識したコミュニケーションや情報共有などを行なっていきます。

 

おわりに

僕たちのチームでは一緒に開発してくれるメンバーを募集しています!

 

課題解決のスピード感を担保する高速なプロトタイプ作成、データドリブンな課題解決、適切なデータアーキテクチャ構築などなどやりたいことはいっぱいあります。

副業でのジョインや共同研究、メンターなど様々な関わり方を実現できると思います。

興味を持った方は以下から応募いただけると嬉しいです!待っています!

明日は@manamin0521さんです!

Lancers(ランサーズ) Advent Calendar 2019

 

ランサーズ開発合宿2019 Amazon Sumerianで3D受付システムを作る

mizushima|2019年11月21日
AWS

開発部の水島(@0xb5951)です。

かなり遅くなりましたが、2019年の開発合宿レポートを書こうと思います。

僕たちのチームでは、Amazon Sumerianを使って、ランサーズくんで受付システムを作成しました。

 

 

開発合宿について

合宿は例年1泊2日で行われており、なるべく業務とか違う文脈で自由にアウトプットしようというのが主題です。

 

今回の合宿場所は静岡県の城ヶ崎海岸でした。

(渋谷から新幹線使ってだいたい2時間ぐらいです)

道中、熱海で一旦降りて足湯開発とかしてました。

 

今回の宿はAirbnbで予約したのですが、豪邸すぎて入るのに戸惑いました。

庭に謎オブジェクトがありました。

 

家にスタジオあって、ドラムセットあるってどういうこと…

 

一通り豪邸で遊んだので、開発スタート!

 

今回やった内容

AWSが提供しているAmazon Sumerianというサービスを使って、ランサーズくんという弊社のマスコットで3D応答システムを作成しました。

 

↑ランサーズくん

 

Amazon Sumerianとは

AWSが提供する VR/AR/3Dアプリケーションを手軽に作成できるサービスです。

https://aws.amazon.com/jp/sumerian

このサービスを使うことで、ブラウザ上で3Dモデルの作成からデプロイまで比較的簡単に行うことができます。

公開されたシーンへのアクセスもURLを渡すだけでOKなのも、かなり良いと思います。

webVRに対応していれば、見ることが可能なのでVRデバイスはもちろん、スマホからでも見ることが可能です。

 

またブラウザ上で開発するため、開発環境を作成する必要がありません。

初心者へのハードルも低く、ブラウザにアクセスすれば開発できるので、異なる環境での開発も可能です。

↓メイン画面

 

アセットも比較的用意されています。

いくつかの制約もありますが、自作モデルやアセットなどを使用することもできます。

 

配置したエンティティに対して、様々なメソッドを付与させることができます。

 

配置したエンティティに動きを定義したい場合や、ワークフローを作りたい場合も簡単に構築することができます。

使用できるメソッドも十分にあったので、少なくとも今回使った範囲では困ることはありませんでした。

 

完成した作品を公開したい時は、右上の公開から「パブリックリンクを生成する」を押すだけでOKです。

簡単!

 

開発!

今回のアーキテクチャ

Sumerianを使って、受付システムを作成します。まずは当初のアーキテクチャ設計を示します。

 

今回は会社の受付にタブレットを配置して、3Dアプリケーション+VUI(音声UI)で受付システムを作成します。

来訪の方が来たら、ランサーズくんモデルが喋って、受付をしてくれるシステムです。

 

Amazon Lexは機械学習を使ったChat botサービスで、ユーザからの入力に対しての応答文を生成してくれます。

Amazon PollyはいわゆるTTSサービスで、入力された文書を読み上げることができます。

これらを組み合わせて、ユーザと自動応答を行い、来訪と目的をSlack通知するサービスを作るつもりでした。

 

思わぬ誤算

進めていくうちに、キモであるAmazon Lexが日本語に対応していないことが分かりました。

Lexが使えないと、文章生成部が使えないので、方向を自動応答からパターン応答に変更し、以下のようなアーキテクチャにしました。

SumerianではHTML要素を3Dで配置することができるので、ユーザ行動ベースのパターン分岐に変更しました。

Lexで応答を生成していた部分を、あらかじめ喋らせる内容と次に出すHTML要素を決めておき、置き換えることをしました。

こうすることで3DモデルのUIを担保しつつ、音声応答に対応することができます。

※Pollyには日本語の音声モデルが男女一種類ずつ存在します(2019年11月現在)。ありがとうAmazon

 

もくもくタイム

アーキテクチャが定まったので、あとは開発するのみです!

途中ご飯を作ったり、お風呂に入ったりしながら楽しく開発することができました。

完成

はい。ランサーズくんです。

やりと盾もってるから、ランサーズくんです。

このモデルはSumerianを使ってブラウザ上で作成しました。

1泊2日という期限もあり、時間も厳しかったですが、Slack連携以外はなんとか時間内で作成することができました。

 

モデルも弊社サービスを使って、募集すれば素晴らしいものが出来上がると思うので、会計と相談しつつ今後の課題としたいと思います。

https://www.lancers.jp/

さいごに、各チームで成果物を発表しあいました。

gRPCや、社内の負債をなくしたり、SmartHRのAPI活用して業務改善したりなど、普段向き合えない問題に取り組んで面白かったと思います。

今年の開発合宿記事

ランサーズ開発合宿2019 GASとSmartHR APIで業務効率化

 

最後に

このような取り組みが存在することが僕はとても好きです。

普段の業務以外にも、単純に何かを作ることを楽しもうみたいなスタンスがエンジニアの中にあるのはとても大事なことだと思います。

普段あまり関わらない人と一緒に開発したり、夜更かししながら楽しく開発したりできる時間はとても充実していました。

来年も行けることを楽しみにしておきます。読んでいただいてありがとうございました。

SlackでEtherを送りあえるサービスをLambdaで実装した話

mizushima|2018年11月14日
Blockchain

インターンの水島です。

現在は開発部でCREチームとブロックチェーンチームに参加しており、来年度ランサーズに新卒として入社する予定です。

今回はブロックチェーン実証実験の一環として、Slack上でEtherを送り合うことができる社内インフラのLambda化を行なったので経緯を含めて発信したいと思います。

ブロックチェーンチームに入った経緯

2年程前から暗号通貨に興味を持ち、情報を追っかけたり、論文を読んだりしているうちにブロックチェーンそのものの面白さを感じるようになっていました。

その関係で個人でもブロックチェーンの論文をチェックしたり、CryptoZombiesなどで学習したりしていましたが、一体この技術で何ができるのかと結局わからぬままでした。

インターンとして参加していたランサーズでブロックチェーンのプロジェクトもあると聞いたので、これは!!と思い、開発部長に直談判し、ブロックチェーンチームに参加しました。

この時、実力のわからないインターンをさくっとプロジェクトに入れるなんてかなり自由度が高い会社だなと感じたのを覚えています。

実装内容

今回僕が担当した内容は一緒にプロジェクトを進めているblockbaseさんから頂いたコードをLambdaで動くようにする部分でした。
blockbaseさんから頂いたコードは以下のリポジトリで確認可能です。
https://github.com/block-base/ethertip

今回の実装における最終的な構成図は以下のようになりました。

機能としては、大まかにまとめると

  1. Slack上でスタンプを押すことで相手にtipを送る
  2. DynamoDBに保存されたtipやアドレスなどの情報を確認できる
  3. 溜まったtipを引き出したいときにEthereumネットワークにデプロイしているコントラクトから引き出す。

となります。

今回はERC725というEthereum上の規格を使い、Etherを引き出すときに認証を行なっています。

またそれに加えERC725で扱うIdentityに対してClaimの管理ができるようになるERC735も導入しています。

AWSとの格闘

僕は今までAWSを触ったことがなく、AWSに関してAmazonがやってるクラウドサービス群ぐらいの認識ぐらいしかありませんでした。ほぼほぼ一からのスタートでしたが、いい機会だと思って取り組みました。

概念導入としてLambdaの本をチュートリアル的に一冊こなしました。
ここでLambdaとはどういうものか、使うにはどのような知識が必要かを大体把握しました。他にもいいなと思った本があるのでリンクを貼っておきます。

Lambda学習のオススメ本
AWS Lambda実践ガイド

実践AWS Lambda 「サーバレス」を実現する新しいアプリケーションのプラットフォーム

この過程でLambdaの面白さにハマり、個人でもLambdaを使ったserverlessアプリケーションの開発も行うようになりました。

今回は大まかな実装が完了している点、Expressを導入している点からaws-serverless-expressというモジュールを利用しました。

このモジュールはCloudformationでの実装を前提としていましたが、Cloudformationを使用するとプログラムの柔軟性が損なわれてしまうため、API Gatewayなど諸々の設定はこちら側で行いました。時間はかかりましたが、結果としてAPI Gatewayについてしっかり学ぶことができたので良かったと感じています。

頂いたコードをLambdaに対応させる部分でうまくいかなかったり、IAMロールが正しく設定されておらず認証で詰まったり、LambdaでのCORS認証で詰まったり、つまづくことも多かったです。

しかし、幸いなことにランサーズには優秀で親切な先輩エンジニア諸氏がおられましたので何とか実装にまで持っていくことができたと思います。

まとめ

今回の実装を通してAWSとEthereumベースのブロックチェーンに関する知識がかなり深まったと感じます。すごく面白い分野なので、これからも開発を続けたいと思います。

実装の過程で上手くいかないことは多かったですが、それよりも優秀な方達にサポートされている環境で新しいことに挑戦できることがすごく楽しかったです!

最後に今回実装したEthertipのリポジトリを載せておきますので、一度見てみてください!https://github.com/LancersDevTeam/ethertip

興味を持った方はご意見、ご質問を頂けると嬉しいです。お待ちしてます!

ここまでご覧頂きありがとうございました。