Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BigQuery の日本語データを Dataflow と Vertex AI でトピックモデリング / Topic modeling of Japanese data in BigQuery with Dataflow and Vertex AI

BigQuery の日本語データを Dataflow と Vertex AI でトピックモデリング / Topic modeling of Japanese data in BigQuery with Dataflow and Vertex AI

2022.04.20 Data Engineering Meetup 【ZOZO × GMOペパボ】
https://pepabo.connpass.com/event/242688/

Hiroka Zaitsu

April 20, 2022
Tweet

More Decks by Hiroka Zaitsu

Other Decks in Technology

Transcript

  1. BigQuery の日本語データを
    Dataflow と Vertex AI で
    トピックモデリング
    財津 大夏 / GMO PEPABO inc.
    2022.04.20 Data Engineering Meetup
    1

    View Slide

  2. 2
    自己紹介
    技術部 データ基盤チーム
    2012年 入社
    ● データサイエンティスト
    ● ペパボのデータ基盤「Bigfoot」の開発/運用
    ● Bigfoot を使ったデータ分析/活用
    ● Twitter : @HirokaZaitsu
    #データ基盤 #DataOps #MLOps #Python
    #SQL #統計学 #機械学習 #スバル #Fallout
    財津 大夏 Hiroka Zaitsu

    View Slide

  3. 3
    アジェンダ
    1. BigQuery 使ってますか?
    2. BigQuery に保存した日本語データのトピックモデリング
    1. トピックモデリングとは
    2. 必要なものと BigQuery での制限
    3.  今回の構成
    1. Dataflow で形態素解析
    2. Vertex AI でトピックモデリング
    3. Cloud Composer でオーケストレーション
    4. まとめと今後の展望

    View Slide

  4. 4
    1. BigQuery 使ってますか?

    View Slide

  5. BigQuery 使ってますか?
    5
    • フルマネージド型の分析データウェアハウス
    • オンデマンド課金で安い(一部定額課金にすることも可能)
    • 大量のデータに対して標準SQLで高速に集計可能
    • タイムマシンや列レベルセキュリティなどDWHを運用する上でありがたい機能が色々
    → ペパボではデータ基盤「Bigfoot」のDWHとして使っています
    Google Cloud BigQuery

    View Slide

  6. ペパボのデータ基盤「Bigfoot」の DWH まわりの構成
    6
    Data source
    logs
    metrics
    GitHub issues
    databases
    Collect data
    tbls
    datasets
    BigQuery
    bigfoot/platform
    Cloud Storage
    - Permissions
    - Datasets
    - Buckets
    Data Studio
    bigfoot/cloud-composer
    Cloud Composer
    dags/
    tbls-build
    base tbls.yml
    files
    patch files
    ( *.yml, *.json )
    patched tbls.yml
    files
    tbls-meta
    tbls
    data catalog
    Apply
    metadata
    Generate
    & Commit
    Generate
    schema.json
    & commit
    bigfoot/data-catalog
    Update
    metadata
    & commit
    Spread sheet
    View
    Send analysis results

    View Slide

  7. BigQuery 使ってますか?
    7
    • データの種類
    • サービス利用者の行動ログのデータ
    • サービスのデータベースから ELT したデータ
    • その他, 広告やお問い合わせなどのデータ
    • パイプライン構成
    • Yeti や Airbyte, SaaS の ELT ツール と Cloud Composer で ELT や集計を行う
    • 集計結果をダッシュボードや BI ツール, サービスのシステムから利用
    • 生データや集計結果を機械学習モデルの入力データとして使用 👈 ここの話をします
    ペパボで BigQuery に保存しているデータ

    View Slide

  8. 8
    2. BigQuery に保存した
    日本語データのトピックモデリング

    View Slide

  9. BigQuery に保存した日本語データのトピックモデリング
    9
    • データの潜在的なトピック(話題や分野)を教師なしで確率的に推定するモデル
    • 文章への適用例が多いが画像や音声にも適用可能
    • 文章の場合は語のトピックを推定 → 文章に含まれる語から文章のトピックを推定
    • Python だと gensim に LDA アルゴリズムの実装がある
    • TensorFlow Probability にも LDA の参考実装
    トピックモデリングとは
    画像は “Latent Dirichlet Allocation”. David M.Blei, Andrew Y.Ng, Michael I.Jordan. Journal of Machine Learning Research, vol.3, pp.993-1022, 2003. より引用
    (参考)統計数理研究所 H24年度公開講座「確率的トピックモデル」 https://www.ism.ac.jp/~daichi/lectures/H24-TopicModel/ISM-2012-TopicModels-daichi.pdf

    View Slide

  10. • 推薦
    • 現在閲覧している商品や記事と同じトピックの商品を推薦して回遊率を高める
    • 検索
    • 直近の閲覧履歴に基づいてユーザーが好む(と思われる)トピックの商品を上位に表示して
    CTR を高める
    → ペパボが運営するハンドメイド EC の minne で
      トピックモデリングをやりたい
    BigQuery に保存した日本語データのトピックモデリング
    10
    ウェブサービスでのトピックモデリングの用途の例
    minne.com での推薦のイメージ

    View Slide

  11. • トピックモデリングは語のトピックを推定する
    • 文章から語(形態素)への分解が必要
    • 英語など語をスペースで区切る言語の場合は(語形を無視すれば)スペースで分割できる
    • 日本語は機械的な区切りが文章中に存在しないので形態素解析器を使う
    • 今回はサービスで既に利用している Kuromoji を使いたい
    • 不要な語の除去なども重要
    BigQuery に保存した日本語データのトピックモデリング
    11
    トピックモデリングに必要な前処理
    mecab (http://taku910.github.io/mecab/) を用いた形態素解析の例

    View Slide

  12. BigQuery に保存した日本語データのトピックモデリング
    12
    • 高速かつ関数も豊富なので集計や簡単な文字列操作による前処理ができる
    • 正規化, ストップワードの除去, 語の出現頻度による除去など
    • Javascript UDF が利用可能
    • 外部ライブラリを使って日本語の形態素解析も出来る
    • 但しコードリソースの最大サイズ 1MB の制約があり形態素解析の場合は
    TinySegmenter(MeCab + ipadic 互換)でないと実行が難しい
    必要な前処理を BigQuery で行うことを考える
    TinySegmenter: http://chasen.org/~taku/software/TinySegmenter/

    View Slide

  13. • やりたいこと: BigQuery に保存した日本語データをトピックモデリングしたい
    • 主に必要なもの:
    • 形態素解析以外の前処理, 後段の集計を行う環境 → BigQuery
    • 形態素解析を行う環境
    • トピックモデリングを実行する環境
    • 制約:
    • Kuromoji を使いたいので BigQuery の JavaScript UDF で
    形態素解析を行うことは難しい
    BigQuery に保存した日本語データのトピックモデリング
    13
    ここまでのまとめ

    View Slide

  14. 4. 今回の構成
    14

    View Slide

  15. • やりたいこと: BigQuery に保存した日本語データをトピックモデリングしたい
    • 主に必要なもの:
    • 形態素解析以外の前処理, 後段の集計を行う環境 → BigQuery
    • 形態素解析を行う環境 → Dataflow (Beam Job Runner)
    • トピックモデリングを実行する環境 → Vertex AI のカスタムジョブ
    • 全体は Cloud Composer でオーケストレーションする
    今回の構成
    15
    全体像

    View Slide

  16. BigQuery に保存した日本語データのトピックモデリング
    16

    View Slide

  17. 今回の構成
    17
    • Apache Beam の Runner
    • Beam なので並列化が容易
    • サーバレスでリソースサイズを自由に変えられる
    • yu-iskw/kuromoji-for-bigquery を利用
    • Contribute もさせていただいてます 🙏
    • Airflow から利用可能にする変更
    • Beam のバージョンアップ
    Dataflow で形態素解析
    yu-iskw/kuromoji-for-bigquery: https://github.com/yu-iskw/kuromoji-for-bigquery
    画像は https://github.com/yu-iskw/kuromoji-for-bigquery/README.md から引用

    View Slide

  18. 今回の構成
    18
    kuromoji-for-bigquery での形態素解析の例

    View Slide

  19. • 機械学習の統合プラットフォーム
    • 機械学習に関わるタスク
    • 入力データのクレンジング, ラベル付け(アノテーション), 特徴量生成
    • モデルの選定・設計
    • ハイパーパラメータの学習ごとの記録
    • モデルの性能の管理・評価, デプロイ
    • これらのオーケストレーション
    • 機械学習に関わる環境
    • 学習させる環境
    • 推論させる環境(モデルの API 化)
    • 試行錯誤するための開発環境
    今回の構成
    19
    Vertex AI の概要

    View Slide

  20. • 元々トピックモデリングの処理は Beam Pipeline として作っていた
    • 分散処理の観点では Beam Pipeline が有利
    • サービスのエンジニアと協力して開発するので Beam を使うとややハードルがある
    • 性能監視などがしづらかった
    今回の構成
    20
    Vertex AI でトピックモデリング

    View Slide

  21. • Vertex AI ではコンテナを使ったカスタムトレーニングジョブとして学習させる
    • gensim でトピックモデリングを行うコードと Dockerfile を用意
    • コンテナには慣れている & 手元で動かしやすいのでハードルを下げられそう
    • プラットフォームに乗せて性能監視やハイパーパラメータチューニングしやすい状態になった
    今回の構成
    21
    Vertex AI でトピックモデリング
    $ gcloud builds submit \
    --tag gcr.io/project_foo/image_bar:0.0.1
    $ gcloud ai custom-jobs create \
    --region=us-central1 \
    --display-name=minne_product_topic_model_test \
    --config=custom_job_config_development.yaml \
    --service-account="foo@project_foo.iam.gserviceaccount.com"
    # custom_job_config_development.yaml
    workerPoolSpecs:
    machineSpec:
    machineType: n1-standard-4
    replicaCount: 1
    containerSpec:
    imageUri: gcr.io/project_foo/image_bar:0.0.1
    env:
    - name: ENV
    value: development
    - name: INPUT_TABLE_ID
    value: hoge
    - …

    View Slide

  22. 今回の構成
    22
    トピックモデリングの結果(一部抜粋)
    トピックID 作品名
    1 籐のふたつきかご(大)
    1 モスグリーンファークッションカバー
    1 ひょうたんランプ---secret garden
    2 ネコのコースター(革ひもセット)
    2 カワイイ~くまちゃん&お化けちゃんのハロウィンパーティー
    2 幸せの青い鳥welcomeボード ♬*゜羊毛フェルト
    3 ☆フルーツ&ドーナツ☆フォトフレーム
    3 ストロベリー グラデーション ガラスのカフェトレイ・M
    グリーン・植物
    動物
    食べ物

    View Slide

  23. • Beam Pipeline は BeamRunJavaPipelineOperator で起動
    • 基本的にオプションを渡すだけで大丈夫
    今回の構成
    23
    Cloud Composer でオーケストレーション (Beam Pipeline)
    BeamRunJavaPipelineOperator(
    task_id=f"{OWNER}_{BASE_DAG_ID}_morphological_analysis",
    jar="/home/airflow/gcs/dags/bigfoot/kuromoji-for-bigquery-bundled-0.3.0.jar",
    runner="DataflowRunner",
    pipeline_options={ # kuromoji-for-bigquery に必要なオプションを渡す
    "project": PROJECTS["bigfoot"],
    "inputDataset": DATASETS[OWNER],

    },
    dataflow_config={
    "job_name": f"{OWNER}_{BASE_DAG_ID}_dag_morphological_analysis",
    "gcp_conn_id": google_cloud_platform_conn_id(),
    },
    )

    View Slide

  24. • Vertex AI のカスタムトレーニングジョブ は Python Client 経由で起動
    • API を叩ければ良いので選択肢は幾つかありますが検証時はこの方法が安定だった
    今回の構成
    24
    Cloud Composer でオーケストレーション (Vertex AI ジョブ)
    def _run_vertex_ai_custom_training_job():
    aiplatform.init(
    project=PROJECTS["bigfoot"],
    location="us-central1",
    staging_bucket="gs://foo/",
    )
    job = aiplatform.CustomContainerTrainingJob(
    display_name=VERTEX_AI_CUSTOM_TRAINING_JOB_DISPLAY_NAME,
    container_uri="gcr.io/project_foo/image_bar:0.0.1",
    credentials=credential,
    )
    job.run(
    machine_type="n1-standard-4",
    replica_count=1,
    environment_variables=env_vars,
    )
    PythonOperator(
    task_id="create_vertex_ai_custom_training_job",
    python_callable=_run_vertex_ai_custom_training_job,
    )

    View Slide

  25. • モデルから文章(作品)のトピックを得られる
    • ユーザーごとに直近の閲覧履歴に基づいて好む(と思われる)トピックを集計
    → 作品のトピックとユーザーの好むトピックをそれぞれ BigQuery に保存
    → minne のシステムが BigQuery から KVS などに取り込んでサービスで利用
    今回の構成
    25
    Cloud Composer でオーケストレーション (トピックの集計)

    View Slide

  26. 26
    1. セクションタイトル
    5. まとめと今後

    View Slide

  27. • Google Cloud Platform でトピックモデリングのパイプラインを作った
    • データウェアハウスは BigQuery
    • 形態素解析は Dataflow
    • サービスと同じ Kuromoji, 辞書を使える
    • モデルの学習は Vertex AI
    • モデルのパラメータチューニングや性能監視がしやすくなった
    • オーケストレーションは Cloud Composer
    • パイプラインをデータサイエンティストだけで構成できた
    • データが増えた際の並列化やリソースのマネジメントが比較的容易
    • 本気でチューニングする場合はデータエンジニアと頑張る 🙏
    まとめと今後
    27
    まとめと良かったポイント

    View Slide

  28. • ペパボは事業部制
    • 現状は機械学習モデルの管理や近似最近傍探索サーバの運用が事業部ごと
    → 機械学習関連のパイプラインは Bigfoot に乗せて基盤/知見を共通化していく 🚀
    → Vertex Matching Engine などマネージドな ML サービスも頼っていく 🚀
    • 予測や仮説検証系のタスクをサービスごとのアナリストが担っている
    → 基盤を使った機械学習の利用を予測・仮説検証の分野でも進めてサイクルを高速化していく 🚀
    まとめと今後
    28
    今後の展望

    View Slide

  29. 29
    Thank You!
    Thank You!
    資料は https://speakerdeck.com/zaimy/ に公開しています

    View Slide