Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
生成AIを活用したZennの取り組み事例
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
igarashi
September 29, 2025
Technology
960
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
生成AIを活用したZennの取り組み事例
DevelopersIO 2025 Sapporo で発表したセッションのスライドです。
https://classmethod.connpass.com/event/366068/
igarashi
September 29, 2025
Transcript
31 slides
⽣成AIを活⽤した Zennの取り組み事例 Igarashi Ryosuke 新規事業統括部 Zennチーム
⾃⼰紹介 2 Igarashi Ryosuke • 2015年 ⼊社 ◦ バックエンドエンジニア •
2021年 から Zennチーム ◦ Next.js / Ruby on Rails / Google Cloud
Zennで⽣成AIを活⽤した主な取り組み 3 • 記事のAIレビュー機能 • 記事のレコメンド機能 ← 今⽇はこれのお話 • コンテンツのスパムチェック •
⾃然⾔語でのDB問い合わせ
Zennで⽣成AIを活⽤した主な取り組み 4 その他は、現在開催中の "Zennfes 2025" の動画で紹介しています。 https://zenn.dev/events/zennfes-2025
⽣成AIを活⽤した 記事のレコメンド機能
レコメンド機能に取り組む背景 6 • トップページのトレンド(Trending)が偏りがち ◦ Web開発系の記事に⼈気が集まる傾向 ◦ 少し前までは⽣成AI/AI駆動開発など⼀⾊に ◦ 良くも悪くもトレンドを反映
• 読者に読みたいコンテンツを届けるのはコンテンツ投 稿サイトの使命 → 機械学習を使わず、⽣成AIを使ってパーソナライズされ たレコメンドを!
やったこと 7 • phase 1. 6次元ベクトルによる類似検索(βリリース) • phase 2. Embeddingsによる類似検索(検証のみ) • phase
3. トピックベースの類似検索(現在)
phase 1 6次元ベクトルによる類似検索(βリリース)
作戦 9 • トレンドと同じ期間(おおよそ公開から1週間)の記事を推薦する ◦ 記事の総数が少ないためピンポイントな推薦は難しい ◦ ざっくりとした6つのカテゴリー分類での推薦を⽬指す • 記事の内容を⽣成AIに読み込ませて特徴を数値化
◦ 6つのカテゴリーそれぞれに対する関連度を、6次元ベクトルで表現 • ユーザーが興味を⽰した記事のベクトルからユーザーの興味ベクトル計算 • 記事とユーザーのベクトル類似検索でレコメンド記事を提供
詳細 10 ①生成AIにより記事の特徴を 数値化(ベクトル化) ②ユーザーが興味を示した記事のベクトル を集計して、ユーザーの興味を数値化(ベク トル化) ③ベクトルが近い記 事を抽出 【記事の特徴ベクトル】
【ユーザーの興味ベクトル】
プロンプト 11 ←ここに記事の本⽂が⼊る
出⼒例 12
技術トピック 13 • ⽣成AIは Vertex AI - Gemini 2.5 Flash
を使⽤ ◦ レスポンスのフォーマットをJSON Schemaで定義できる ◦ 思考(thinking)を有効にすると、深い洞察を⾏う • ベクトル計算はpgvector(PostgreSQL拡張)を使⽤ ◦ vector型フィールド ◦ ユークリッド距離、コサイン類似度、内積などの演算 ◦ 近似近傍検索⽤のインデックス
より詳しくは 14 https://zenn.dev/team_zenn/articles/zenn-recommend-system
結果 15 • ⽣成AIによる特徴抽出は⾼い精度で実現できた。 • 多くのユーザーが求める"レコメンド"と期待値のズレ ◦ ユーザーフィードバックの結果 ▪ レコメンデーションの精度向上/関連性の問題(計8件)
▪ フィルタリング/パーソナライズ機能の要望(計11件) ▪ 表⽰コンテンツの多様性/量(計5件) ▪ UI/UXの改善要望(計8件) ▪ その他(計2件) ◦ ⾒せ⽅の問題もあった
phase 2 Embeddingsによる類似検索(検証のみ)
作戦 17 • phase 1の結果、レコメンドの精度に関する期待値ギャップに課題があった。 • 精度を上げるには6次元のベクトルでは⾜りない。 ◦ ベクトルを増やす? ▪
いくつあれば⼗分? ▪ ベクトル定義の更新のたびに全件更新が必要... • Embeddingsを使ってより精度の⾼い類似検索を! • ユーザーの興味ベクトルは作れないので、直近で閲覧した記事に類似する記事 を提案する
Embeddingsとは 18 • 単語、⽂章、画像、⾳声などのデータを数値ベクトルに変換すること。 • 元のデータの意味や⽂脈を数値空間で表現し、意味的に似ているデータはベ クトル空間上で近くに配置される。 • セマンティック検索(あいまい検索)、RAGなどに活⽤される。
• Embeddingsには Gemini API - gemini-embedding-001 を使⽤ ◦ 次元数は最⼤(デフォルト)3072 から
128まで圧縮可能 ▪ 今回は768次元で検証 ◦ タスクに応じたEmbeddings ▪ SEMANTIC_SIMILARITY(テキスト類似度に最適) ▪ CLASSIFICATION(ラベルに従ってテキスト分類に最適化) ▪ CLUSTERING(テキストをクラスタ化するように最適化) ▪ RETRIEVAL_DOCUMENT / RETRIEVAL_QUERY(テキスト検索向けに最適化) ▪ など 技術トピック 19
出⼒例 20 • AWS ECS オートスケーリング Cooldownを知った【2025夏】 ↓に類似する記事 • [類似度:
0.896] AWS ECS オートスケーリングの種類を学びました • [類似度: 0.838] ECSにAWS Gravitionを導⼊すると何が良いのか調べてみた • [類似度: 0.817] ECS Fargateのソフトウェア‧アップデート運⽤を考える • [類似度: 0.803] Amazon ECSのアベイラビリティゾーンリバランシングをCDK で設定する⽅法
検証結果 21 • SEMANTIC_SIMILARITY を使⽤して記事本⽂を10,000件程度ベクトル化 • 類似検索の傾向 ◦ ある程度の⽂量の記事は類似性が⾼い記事が検出しやすい ◦
短い記事やidea記事は微妙 • 結果のコントロールの難しさを感じた
(参考)ハイブリッド検索 ※時間が余ってたら 22 • Embeddingsは意味や⽂脈の類似性を捉えるが、単語レベルの類似性は弱い • より精度を⾼めるには、キーワードの類似性も掛け合わせたハイブリッド検 索を使う • 2種類のベクトル
◦ 密なベクトル(意味的、Embeddingsはこっち) ◦ 疎なベクトル(キーワード的) • 2つのベクトルの類似度を合成してランキングを作る
(参考)ハイブリッド検索 23 出典: https://cloud.google.com/vertex-ai/docs/vector-search/about-hybrid-search?hl=ja 密なベクトル 疎なベクトル
(参考)ハイブリッド検索 24 • 疎なベクトルの⽣成には、TF-IDF や BM25 のような統計⼿法や、学習済のモ デル(SPLADEなど)を⽤いる。 • ハイブリッド検索は最近のベクトルDBサービスにはだいたい備わっていそ
う。pgvectorでもサポートあり。 • それぞれのベクトルで類似検索を⾏い、リランキングをする。
phase 3 トピックベースの類似検索(現在)
作戦 26 • phase 2 検証時点のチーム内の声 ◦ もっと直近の閲覧状況を反映した記事が⾒たい ◦ もっと質の⾼い記事が推薦されてほしい
• 閲覧履歴を記録し、直近10件の記事に頻出するトピックを抽出 • 直近3ヶ⽉以内に公開された記事のうち⼈気度が⾼い記事の中から、トピック の類似度が⾼い記事を抽出 • ルールベースの推薦
お試しください 27
課題 28 • 記事に適切なトピックが設定されているか • ユーザーの記事に対する興味の測り⽅‧重み付け • ユーザーの興味がないトピックへのフィードバック
まとめ
まとめ 30 • ⽣成AIによって記事のスコアリングは⾼い精度で実現した • Embeddingsは明確で⼗分な⽂章量があれば⾼い精度でベクトルが類似する • レコメンドはとても奥が深い ◦ やり⽅が無限にある
▪ ルールベース、コンテンツベース、協調フィルタリング、など ◦ 変数が多すぎる ▪ ユーザーの⾏動(ポジティブ‧ネガティブ)、コンテンツ属性、など ◦ UI/UXも⼤事 ▪ 期待値コントロール、推薦の納得感、など
None
More Decks by igarashi
See All by igarashi
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
1.4k
Webエディタライブラリ 「CodeMirror」から学ぶ Webアプリ開発のテクニック
ryosukeigarashi
0
2.4k
Other Decks in Technology
See All in Technology
大江戸Ruby会議でデータベース クライアントの話をするのは 間違っているだろうか
yahonda
1
120
SSFの現在地 ― CAEP/RISCからAI Identityへ
oidfj
0
430
異夢同船〜異なる夢でも同じ船でなんとかする〜
fortegp05
0
150
AWS Quick 入門 | 目指せ Quick マスター 01
inariku
PRO
2
340
Steering と Hook (チームの決まりを守らせる) | 目指せ Kiro マスター 06
inariku
PRO
2
120
JAWSコミュニティに 参加して1年経った結果
ssakita
0
140
Shared Signals Framework 仕様解説
oidfj
0
420
Microsoft Entra Kerberos で実現するクラウド デバイス管理
tamaiyutaro
2
680
Claude Codeで作ったアプリを安全に公開する/Built with Claude Japan 2026
yoshidashingo
0
240
Intro to Kiro (One agent, every surface) | Kiro: Zero to Hero 01
inariku
PRO
2
120
Quick Automate | 目指せ Quick マスター 12
inariku
PRO
1
110
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
210
Featured
See All Featured
Un-Boring Meetings
codingconduct
0
490
How Software Deployment tools have changed in the past 20 years
geshan
3
35k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.7k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
350
エンジニアに許された特別な時間の終わり
watany
109
250k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
560
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
300
A better future with KSS
kneath
240
18k
RailsConf 2023
tenderlove
30
1.6k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
880
Accessibility Awareness
sabderemane
1
300