Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyで動かす検索機能
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
matsudai
September 12, 2025
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyで動かす検索機能
engineer unite meetup vol.2
https://enun.connpass.com/event/367436/
matsudai
September 12, 2025
More Decks by matsudai
See All by matsudai
Rubyでゲームを作りたい
matsudai
0
44
SmTでRaspberry Pi Picoを動かす
matsudai
0
69
Ruby × 車 (その後) ~課題:オフライン対応~
matsudai
0
68
Ruby × 車 ~ 愛車のデータを取得せよ! ~
matsudai
2
280
流行れ! AI Tuber!
matsudai
0
150
Islands on Rails !!
matsudai
0
77
ruby.wasmが簡単にビルドできるようになっていた
matsudai
0
190
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
My Coaching Mixtape
mlcsv
0
170
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
550
Thoughts on Productivity
jonyablonski
76
5.2k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.8k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
We Are The Robots
honzajavorek
0
280
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
We Have a Design System, Now What?
morganepeng
55
8.2k
Transcript
Rubyで動かす検索機能 ONNXモデルによるベクトル検索の実装とRAGへの応用
自己紹介 名前: matsudai / ふじはら 所属: R&D室 係長 松江でソフトウェアエンジニアをやっています。 Ruby、React、Javaなどを利用した製造業向け Webシステム開発など。
趣味:ゲーム、プログラミング。 リポジトリ: https://github.com/matsudai/enun_vol2_sample
もくじ • 背景 • 検索手法 ◦ RAGのステップ ◦ キーワード検索とセマンティック検索 ◦
セマンティック検索の実装 • デモ • まとめ リポジトリ: https://github.com/matsudai/enun_vol2_sample
背景 • Google検索に「AI による概要」が追加されるなどRAGが普及。 ◦ RAG (Retrieval Augmented Generation) …
検索結果からの生成。 • 大手クラウドからは文書を登録→検索で使える簡単なサービスの提供。 ◦ Google Cloudでは「Vertex AI Search」、AWSでは「Knowledge bases for Amazon Bedrock」など。 → 仕組みを知りたいので触ってみる!
検索手法 ① RAGのステップ 生成AIは一般的な知識を持っているため、必要なデータの検索が重要。 → 膨大な量の業務データから、生成に必要なものだけ取得する🤔 検索 生成 (OpenAI APIなど)
入力 DB ファイル
検索手法 ② キーワード検索とセマンティック検索 • キーワード検索: いわゆる全文検索・タグ検索など。 ◦ キーワードを抽出して突合する。 ◦ 分かち書き(文節での区切り)や正規化(半角・全角を揃える)など古くから研究。
例:「これはペンです」 → 「これ/は/ペン/です」 → 「ペン」で検索可能。 • セマンティック検索: ◦ 意図・文脈による突合。 ◦ あいまいな表現・キーワードが未記載でも検索できる。 例:「これはペンです」「紙に書けます」が近い文脈。 ◦ → 今回はこちらを実装してみる!
検索手法 ③ セマンティック検索の実装 • メジャーな手法は埋め込み検索: ◦ 1)ベクトル化: 文章をトークン(単語)に分割 → トークンの並びをベクトルで表現。
◦ 2)検索: ベクトルの類似度(距離など)で近いものを判定。 • 実装方針: ◦ 1)検索対象の情報を事前にベクトル化 「これはペンです」 [1, 26, 8, 92, ...] [0.1, 0.6, 0.8, …] 「目玉焼きを食べる」 [13, 9, 5, 32, ...] [0.3, 0.2, 0.6, …] ◦ 2)ユーザ入力(検索クエリ)をベクトル化して、上記と突合 「紙に書くもの」 [9, 58, 6, 44, ...] [0.2, 0.5, 0.9, …] トークナイザ DB ファイル 入力 埋め込みモデル トークナイザ 埋め込みモデル 距離計算
検索手法 ③ セマンティック検索の実装 • 技術選定: ◦ トークナイザ/埋め込みモデル: infloat/multilingual-e5-small ▪ Microsoftが開発した多言語対応の埋め込みモデル。
▪ ランタイムに ONNX Runtime Ruby を利用。 ※ Microsoftが主導して作成された、オープンな機械学習モデルのフォーマット。 Python以外での利用が難しいモデルを変換できる。 ◦ DB: SQLite (拡張に sqlite-vec) ▪ ローカル環境でDB+ベクトルの類似度計算が可能。 トークナイザ DB ファイル or ユーザ入力 埋め込みモデル
検索手法 ③ セマンティック検索の実装 • 実装: ◦ 入力をトークンに変換します。 例: 「これはペンです」 → [1,
26, 8, 92, ...] トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ 埋め込みを生成します。 ◦ 正確なベクトルを計算するため 「Average
pooling」処理をします。 Pythonだと自動でやってくれるのですが Rubyの場合は自前実装です。 (細かいことは気にしないで OK!) 例: [1, 26, 8, 92, ...] → [0.1, 0.6, 0.8, …] トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ 埋め込みを生成します。 ◦ 正確なベクトルを計算するため 「Average
pooling」処理をします。 Pythonだと自動でやってくれるのですが Rubyの場合は自前実装です。 (細かいことは気にしないで OK!) 例: [1, 26, 8, 92, ...] → [0.1, 0.6, 0.8, …] トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ SQLiteにベクトルを保存します。 ※ SQLite vec
拡張で使える vec_f32() 関数を利用します。 トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ ユーザ入力も同様に、ベクトル化します。 ◦ SQL vec
拡張の構文 MATCH にて、近いベクトルを 持つテキストを検索します。 トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
検索手法 ③ セマンティック検索の実装 • 実装: ◦ ユーザ入力も同様に、ベクトル化します。 ◦ DBから、近いベクトルを持つテキストを検索します。 ※
SQL vec 拡張の構文 MATCH を利用します。 Happy End … トークナイザ DB ファイル or ユーザ入力 埋め込みモデル 検索!
デモ リポジトリ: https://github.com/matsudai/enun_vol2_sample
• RAGにおいてより業務に近い「検索」の部分を自分で実装してみた。 ◦ 実装自体はそこまで難しくなく、モデルの精度やコスパが大事。 • ローカルのモデルはクラウドのものとは違うユースケースになりそう。 ◦ Pros. : 高速・無料・機密性
◦ Cons. : 精度・PC資源(メモリ・CPU・ストレージ) ◦ → 定額制のAIエージェントであれば試行回数が稼げるので良さそう? ▪ 例: AI小説の執筆、仕様書を考慮したコーディングなど。 まとめ リポジトリ: https://github.com/matsudai/enun_vol2_sample