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

生成AIを活用したZennの取り組み事例

Avatar for igarashi igarashi
September 29, 2025

 生成AIを活用したZennの取り組み事例

DevelopersIO 2025 Sapporo で発表したセッションのスライドです。

https://classmethod.connpass.com/event/366068/

Avatar for igarashi

igarashi

September 29, 2025
Tweet

More Decks by igarashi

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 2 Igarashi Ryosuke • 2015年 ⼊社 ◦ バックエンドエンジニア •

    2021年 から Zennチーム ◦ Next.js / Ruby on Rails / Google Cloud
  2. レコメンド機能に取り組む背景 6 • トップページのトレンド(Trending)が偏りがち ◦ Web開発系の記事に⼈気が集まる傾向 ◦ 少し前までは⽣成AI/AI駆動開発など⼀⾊に ◦ 良くも悪くもトレンドを反映

    • 読者に読みたいコンテンツを届けるのはコンテンツ投 稿サイトの使命 → 機械学習を使わず、⽣成AIを使ってパーソナライズされ たレコメンドを!
  3. 作戦 9 • トレンドと同じ期間(おおよそ公開から1週間)の記事を推薦する ◦ 記事の総数が少ないためピンポイントな推薦は難しい ◦ ざっくりとした6つのカテゴリー分類での推薦を⽬指す • 記事の内容を⽣成AIに読み込ませて特徴を数値化

    ◦ 6つのカテゴリーそれぞれに対する関連度を、6次元ベクトルで表現 • ユーザーが興味を⽰した記事のベクトルからユーザーの興味ベクトル計算 • 記事とユーザーのベクトル類似検索でレコメンド記事を提供
  4. 技術トピック 13 • ⽣成AIは Vertex AI - Gemini 2.5 Flash

    を使⽤ ◦ レスポンスのフォーマットをJSON Schemaで定義できる ◦ 思考(thinking)を有効にすると、深い洞察を⾏う • ベクトル計算はpgvector(PostgreSQL拡張)を使⽤ ◦ vector型フィールド ◦ ユークリッド距離、コサイン類似度、内積などの演算 ◦ 近似近傍検索⽤のインデックス
  5. 結果 15 • ⽣成AIによる特徴抽出は⾼い精度で実現できた。 • 多くのユーザーが求める"レコメンド"と期待値のズレ ◦ ユーザーフィードバックの結果 ▪ レコメンデーションの精度向上/関連性の問題(計8件)

    ▪ フィルタリング/パーソナライズ機能の要望(計11件) ▪ 表⽰コンテンツの多様性/量(計5件) ▪ UI/UXの改善要望(計8件) ▪ その他(計2件) ◦ ⾒せ⽅の問題もあった
  6. 作戦 17 • phase 1の結果、レコメンドの精度に関する期待値ギャップに課題があった。 • 精度を上げるには6次元のベクトルでは⾜りない。 ◦ ベクトルを増やす? ▪

    いくつあれば⼗分? ▪ ベクトル定義の更新のたびに全件更新が必要... • Embeddingsを使ってより精度の⾼い類似検索を! • ユーザーの興味ベクトルは作れないので、直近で閲覧した記事に類似する記事 を提案する
  7. • Embeddingsには Gemini API - gemini-embedding-001 を使⽤ ◦ 次元数は最⼤(デフォルト)3072 から

    128まで圧縮可能 ▪ 今回は768次元で検証 ◦ タスクに応じたEmbeddings ▪ SEMANTIC_SIMILARITY(テキスト類似度に最適) ▪ CLASSIFICATION(ラベルに従ってテキスト分類に最適化) ▪ CLUSTERING(テキストをクラスタ化するように最適化) ▪ RETRIEVAL_DOCUMENT / RETRIEVAL_QUERY(テキスト検索向けに最適化) ▪ など 技術トピック 19
  8. 出⼒例 20 • AWS ECS オートスケーリング Cooldownを知った【2025夏】 ↓に類似する記事 • [類似度:

    0.896] AWS ECS オートスケーリングの種類を学びました • [類似度: 0.838] ECSにAWS Gravitionを導⼊すると何が良いのか調べてみた • [類似度: 0.817] ECS Fargateのソフトウェア‧アップデート運⽤を考える • [類似度: 0.803] Amazon ECSのアベイラビリティゾーンリバランシングをCDK で設定する⽅法
  9. 作戦 26 • phase 2 検証時点のチーム内の声 ◦ もっと直近の閲覧状況を反映した記事が⾒たい ◦ もっと質の⾼い記事が推薦されてほしい

    • 閲覧履歴を記録し、直近10件の記事に頻出するトピックを抽出 • 直近3ヶ⽉以内に公開された記事のうち⼈気度が⾼い記事の中から、トピック の類似度が⾼い記事を抽出 • ルールベースの推薦
  10. まとめ 30 • ⽣成AIによって記事のスコアリングは⾼い精度で実現した • Embeddingsは明確で⼗分な⽂章量があれば⾼い精度でベクトルが類似する • レコメンドはとても奥が深い ◦ やり⽅が無限にある

    ▪ ルールベース、コンテンツベース、協調フィルタリング、など ◦ 変数が多すぎる ▪ ユーザーの⾏動(ポジティブ‧ネガティブ)、コンテンツ属性、など ◦ UI/UXも⼤事 ▪ 期待値コントロール、推薦の納得感、など