Recruit Data Blog

  • はてなブックマーク

目次

自己紹介

はじめまして、京都大学大学院エネルギー科学研究科に所属していますM1の下野祐太です。普段は、深層強化学習を利用したタンパク質の高効率サンプリング手法の開発というテーマで研究をしたり、別の長期インターンシップにおいて時系列データの解析などをしています。

今回、様々なプロダクトを展開し大規模なデータを保有しているリクルートに興味をもち、アルバイトに応募しました。そこで10/6〜11/15という約1か月の間、リクルートのアルバイト生として取り組んだ内容について紹介します。

test

背景

『Airインボイス』について

私は今回のアルバイトにおいて、 『Airインボイス』 というSaaSを開発するチームでお世話になりました。まずは『Airインボイス』というサービスについて説明します。『Airインボイス』は、請求書をスマホで撮影するとアプリが振込に必要な情報を自動でデータ化し、そのまま支払いまで行うことができる請求書管理サービスです。

具体的には以下の図に示すような、「請求書を撮影」「請求書をまとめて振込予約」「振込指定日に自動で振り込み」の3ステップで利用ができます。

出典:『Airインボイス』ホームページ (https://airregi.jp/invoice/)

この『Airインボイス』というサービスを利用することによって、以下のようなメリットが挙げられます。

  • 請求書を撮るだけで支払いまでできる
  • 支払い忘れの不安から解放してくれる
  • 振込手数料は業界最安値

今回はこの『Airインボイス』というサービスのうち、AI技術が活用されているデータ化の部分に関する業務に取り組みました。

アルバイトの目標

『Airインボイス』では、OCR技術を用いてアップロードされた請求書画像を読み取り、データ化を実施しています。しかし請求書の読み取りというタスクの性質上、非常に高い精度が求められます。

それに加えて、請求書画像の読み取りには以下のような課題があります。

  • 請求書が撮影される条件やアップロード方式にばらつきがある

    例) 請求書に影が入る・請求書に折れ目が入る・ズームの度合いが異なる・写真でアップロードするかPDFでアップロードするかの違いがある

  • 請求書自体のフォーマットにばらつきがあり、また変化していく

    請求書のフォーマットは一定ではなく、今後インボイス制度の施行に伴い形式自体も変化することが想定される。

したがって、限られた期間でこのような課題を解決して求められている高水準の精度を達成するためには、機械学習モデルの精度改善イテレーションを高速化することが有効です。

この精度改善イテレーションを細分化すると、大きく「訓練・推論・評価・分析」という4つの要素に分解できます。

このうち訓練や推論を自動的に実施するパイプラインは既にチーム内で構築されていましたが、評価や分析は分析者がオフラインで行なっていました。そのためサービスの拡大に伴ってリクエストが増加するにつれて、評価・分析作業が精度改善イテレーションのボトルネックになっていました。そこで評価指標の算出を行い、動的な分析が可能なダッシュボードをオンラインで更新するパイプラインの開発を、アルバイトの目標としました。

実施内容

ここからは具体的に、アルバイトで実施したことについて説明します。アルバイトで実施したことは大きく前半と後半で分割することができます。まず前半では開発するパイプラインの設計書としてADR(Architecture Decision Records)を作成しました。そして後半では、作成したADRに基づいて評価・分析パイプラインの実装に取り組みました。

ADRの作成

まずADRについて簡単に説明します。ADRとは、開発業務などを実施する際に、その設計を選択した背景や決定事項などの履歴を記録として残しておいたものになります。これを文書化して残すことで、後からどのような経緯があって現在の設計が採用されているのか、という文脈や背景を振り返ることが容易になるというメリットが得られます。詳しくは こちら の記事を参照していただければと思います。

今回のアルバイトではADRとして以下の2つを作成しました。

  1. 評価・分析パイプラインの構築に関するスコープ設計、及び実装の優先度付け

    まずユーザーストーリーを考え、評価・分析パイプラインを構築するために必要になる機能を洗い出しました。それを基に、各機能の実装に関して優先度付けを実施しました。

  2. 詳細な実装方法の決定

    1のADRで決めた機能に対して、どのような技術を利用して実装していくのかを決めました。例えば分析のパイプラインでは、ダッシュボードの作成を考えていましたが、どのような技術やサービスを利用するのかを、それぞれの技術のメリット・デメリットやユーザーストーリー(例:誰がいつ何の目的でどうやってダッシュボードを利用するのか)を踏まえて決定しました。

VertexAIを利用したパイプラインの構築

今回、GCP(Google Cloud Platform)のVertexAIというサービスを利用して、評価・分析パイプラインを構築しました。VertexAIというサービスを利用した理由は、既存の訓練・推論パイプライン構築時に利用されていたためです。VertexAIを用いる上での利点として、主に以下の4つが挙げられます。

  • MLOpsの開発をする上で、各種GCPサービスを実行するコンポーネントが揃っている
  • タスク間のデータ受け渡しが容易である
  • ワークフローエンジンとして使いやすい
  • セキュアな環境でもパイプラインを動かすことができる

今回VertexAIを用いて開発した、評価・分析パイプラインの大まかな流れは以下の通りです。

また、このような構成にする上で考慮した点としては変更の容易性が挙げられます。それぞれの処理をVertexAIのコンポーネントとして定義することで、後から処理を変更するときも、1つのコンポーネントの修正だけで対応することが可能です。

使用した技術

評価・分析パイプラインを構築するために使用した技術とその用途を、以下にまとめます。

サービス名 ロゴ 用途
VertexAI パイプラインの構築
Google Cloud Storage 非構造データの保存
BigQuery 構造データの保存
Artifact Registry パイプラインのコンポーネントとしてのコンテナの管理
Data Portal ダッシュボードの作成

パイプライン実行結果

開発した評価・分析パイプラインによって得られた結果の一部を、紹介したいと思います。

VertexAIの実行画面

実際に構築したパイプラインを実行すると、以下のような実行画面が表示されます。

ダッシュボードによる可視化例

今回得られた結果を可視化するため作成したダッシュボードの例を紹介します。 ダッシュボードを利用することで、得られた結果を動的に解析することが可能です。

  • 評価指標の比較

    横軸は各エンティティ(ラベル)、縦軸は評価指標の値を表しています。また各凡例はそれぞれAccuracy・Recall・Precision・F1-scoreに対応しています。

    各エンティティの評価指標の値を比較することで、精度改善を行うべきエンティティを特定することが可能です。また1つのエンティティに注目して各評価指標の値を比較することで、機械学習モデルの弱点を洗い出す(例:Recallは高いがPrecisionは低い)ことができます。

  • 散布図の描画

    横軸は請求書画像の特徴量、縦軸は評価指標の値、各点はそれぞれの請求書画像を表しています。
    横軸はモデル出力の統計量、縦軸は評価指標の値、各点はそれぞれの請求書画像を表しています。

    散布図の傾向を分析することで、得られた結果の要因を分析することができます。

請求書画像に対する可視化例

請求書画像にモデルの推論結果を直接可視化した画像を出力しました。

以下はそのサンプル画像を表しています。

出典:ビジネステンプレート (https://template.the-board.jp/invoice_templates)

この画像から推論時の具体的な挙動を、直感的に確認することができます。

またダッシュボードで得られた分析結果に対して、その要因や改善の糸口を把握することが可能になります。

まとめ

今回のアルバイトでは、GCPのVertexAIを利用して評価・分析パイプラインの開発に取り組みました。また可視化の部分はダッシュボードを作成して、動的な分析を実施できる所まで開発することができました。VertexAIを利用してみた感想として、GCPサービスとの親和性が高く 、ログや中間ファイル実行ステータスも見やすかった点は、使い勝手が良いと感じました。一方、ローカル開発向けエミュレータはなく毎回GCPにデプロイする必要があるため、トライアンドエラーに時間を要してしまう点はやりにくさを感じました。

コラム

最後におまけとして、未来のリクルートのアルバイト生に向けて、アルバイトの様子がどのようなものだったのかをお伝えしたいと思います。

※ 以下は私の個人的な体験や見解であり、リクルート全体に必ずしも当てはまる訳ではないことをご了承下さい。

アルバイトのとある1日

アルバイト期間中のとある1日において、どのようことに取り組んだのか、サンプルをお示しします。

時間 取り組んだこと
10:00 始業
10:00 - 12:00 前日立てたタスクに取り組む
12:00 - 13:00 昼食
13:00 - 13:30 メンターの方とミーティング
13:30 - 15:00 ミーティングで擦り合わせたタスクに取り組む
15:00 - 16:00 チームのミーティングに参加
16:00 - 19:00 タスクに取り組む
19:00 次の日のタスクを立てて終業

リクルートのアルバイトの特徴

  • ランダムよもやま

    リクルートではランダムよもやまという仕組みがあります。こちらでは、自分の参加しているチーム以外の方とお話ししたり、色々な質問をすることができます。他のグループで何をやっているのかや、リクルート全体のことをよく知ることができ、とても有意義なものでした。

  • 働く環境

    基本的に自宅からオンラインで業務に取り組みました。ただ制限はあるものの、希望制でオフィスに出社することも可能です。高層階のオフィスから一望できる東京の景色は素晴らしく、気分を上げて働くことができました。

  • 出社時のランチ

    オフィスに出社した時に、チームの方に美味しいランチに連れて行っていただきました。(以下の写真はその際に食べたお寿司です!)

感想・謝辞

  • 学ぶことができたこと

    これまで分析系のタスクに取り組むことが多く、開発系のタスクには初めて取り組みました。本アルバイトを通して、設計書の書き方など開発系のタスクの基礎を学ぶことができました。

    またアルバイトに参加するまでは、GCPを利用した経験がほとんどありませんでした。しかしメンターの方にサポートいただきながら実務を通して経験することができ、一通り学習することができました。

  • 参加してよかったこと

    リクルートのプロダクトについて内側から知ることができたことと、働く環境の雰囲気を肌で感じることができたことの2点が挙げられます。

    まずプロダクトに関してですが、自分の携わったサービス・ランダムよもやま・他のアルバイト生の発表などを通して、web上にはのっていない各プロダクトの背景や技術について、より深く知ることができました。プロダクトを作っている人から直接お話を聞けるのは、やはりアルバイトに参加したからこそ得られる機会だと思います。

    次に働く雰囲気に関してですが、リクルートのアルバイトではアルバイト用の課題に取り組むのではなく、実際のプロジェクトに入って業務に携わることができます。例えば、まさに今動いているプロジェクトのミーティングに参加することもできます。このようにして、実際の業務がどのような形・雰囲気で行われているのかを知ることができ、自分がリクルートで働いた時のイメージをより明確化することが可能です。

  • 少し物足りなかった点

    ランダムよもやまなどで他のチームの方とお話しする機会はありましたが、アルバイト生同士の交流はやや希薄な気がしました。特に最後の発表会はアルバイト生同士で発表を聞きにいく形が活性化されれば、様々な質問が出てより盛り上がるのではと思いました。

  • 謝辞

    アルバイト期間中は、『Airインボイス』のチームの方々をはじめとして、様々な方に大変お世話になりました。特にメンターの方は、毎日のミーティングに加えて、私の質問に対して高速かつ丁寧に答えていただき、とても助かりました。この場をお借りして感謝申し上げます、ありがとうございました。

Yuta Shimono

アルバイト生

Yuta Shimono

京都大学大学院所属