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
20241015 Dojo ベクトルデータベース入門
Search
Mika
October 16, 2024
Business
800
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
20241015 Dojo ベクトルデータベース入門
Mika
October 16, 2024
Other Decks in Business
See All in Business
チームマネージャー(SV)のご紹介
rs_mitotakaya
0
220
Team Topologies as the 'infrastructure for agency' with humans and AI
matthewskelton
PRO
0
130
長時間実行タスクを簡単にするLambda durable functionsの活用方法
takuyaakaike
0
390
会社説明資料
kurashima
0
680
SimpleForm 会社紹介資料
simpleform
2
54k
採用ピッチ資料_キヨモトテックイチ
satoshi01
0
180
ログラス会社紹介資料 / Loglass Company Deck
loglass2019
17
550k
ブランディングサービス紹介資料《抜粋版》
brandingtechnology
0
320
紹介パートナー様向け 紹介手数料プランとご登録手順のご案内(マルコポーロ)
kimete
0
300
エージェントスキルによる最適化
mickey_kubo
2
170
How SureSmile Clear Aligners Work Step-by-Step Guide for Beginners
burtonadvancedentalmi
0
130
【結果報告】Claude×Linearで会社のタスク管理をAIにまかせて1ヶ月。業務効率150%向上したが、AIネイティブカンパニーを目指すならもっと「加速への狂気」が必要
nagatsu
1
450
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.2k
WENDY [Excerpt]
tessaabrams
11
38k
Amusing Abliteration
ianozsvald
1
200
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Being A Developer After 40
akosma
91
590k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
How to build a perfect <img>
jonoalderson
1
5.6k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
330
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Transcript
日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマーサクセス カスタマーサクセスマネージャー 船渡 美佳 小野 祐作 ベクトルデータベース入門
写真撮影 動画撮影 資料公開 SNS拡散 ◯ ◯ ◯ ◯ #IBMDojo セッション受講における注意事項
セッション中に迷惑行為が発覚した場合は、強制退出、セッション中止などの措置を講じます
• 本セッションの情報は現時点で最新のものです • 新入社員のエンジニアリングスキル習得のための研修の一環です • 先輩社員に内容を確認しておりますが、誤った表現があるかもしれません • その際はチャットにてご指摘ください • 確認し、資料等を修正いたします
セッション受講における注意事項
名前:船渡 美佳(Mika Funato) 所属:日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマーサクセス 経歴: 大学院 統計学を専攻 2024年4月
新卒入社 4月-6月 営業研修 7月1日付で部署異動 7月-8月 異動先部署の研修 自己紹介
名前:小野 祐作(Yusaku Ono, Ph.D.) 所属:日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマー・サクセス 経歴: 2010年:博士(理学)@理学 衛星リモートセンシングによる地球観測に関する研究
2010年:研究員@宇宙航空研究開発機構(JAXA/EORC) 2015年:助教@千葉大学(CEReS) 2016年:ITコンサルタント@コンサルティングファーム 2017年:データサイエンティスト@EY Japan 2018年:分析コンサルタント@ SAS Institute Japan 2020年:エキスパート→課長@舶用電気機器メーカー 2022年:カスタマー・サクセス・マネージャー@IBM Japan watsonxによるお客様のビジネス目標達成を支援中 自己紹介
ゴール • RAGを構築するうえで、 • ベクトルデータベースの選択肢 • 性能向上方法 を知るきっかけにしていただく! 対象 •
生成AIに興味のある初学者 このセッションについて
•RAGとは? •ベクトルデータベースとは? •ベクトルデータベースの比較 •ベクトルデータベースの実装紹介 目次
RAGとは?
さまざまなコンテンツを生成できるAIのこと 生成AIとは?
さまざまなコンテンツを生成できるAIのこと 生成AIとは? 大規模言語モデル LLM
生成AIとは? 生成AIってなに? 生成AIとは…
生成AIとは? IBMの就業規則を 教えて! わからないよ …
Demo watsonx.aiのチャットで 質問してみる
None
LLMによるテキスト生成に、外部情報の検索を組み合わせることで、 回答精度を向上させる技術のこと RAGとは? 〜Retrieval-Augmented Generation〜 +
RAGとは? 〜Retrieval-Augmented Generation〜 IBMの就業規則を 教えて! IBMの就業規則に 関する情報 IBMの就業規則 ① ②
③
RAGとは? 〜Retrieval-Augmented Generation〜 IBMの就業規則を 教えて! IBMの就業規則に 関する情報 IBMの就業規則 IBMの就業規則 を教えて!
IBMの就業規 則に関する情報 + IBMの就業規則は … ① ② ③ ④ ⑤
RAGとは? 〜Retrieval-Augmented Generation〜 ❶検索結果 ❷生成結果
RAGとは? 〜Retrieval-Augmented Generation〜 ❶検索結果 ❷生成結果
ベクトルデータベース とは?
ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,
4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは?
ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,
4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは? (10, 10) (10, 4) (1, 10) 甘さ 丸さ
保存形式: テキストを文字列(String)として扱う 検索方法: • キーワード検索 従来のデータベースとは? 従来のデータベース 船渡は鳥が好きです。
キーワード検索 従来のデータベース 船渡は鳥が好きです。 船渡は犬を飼っています。 船渡 鳥 田中は鳥が好きです。
保存形式: テキストをベクトルに変換 検索方法: • 類似性検索 • 似た画像、音声も検索できる ベクトルデータベースとは? ベクトルデータベース 船渡は鳥が好きです。
[0.47,-0.12,0.26,0.89,-0.71,…]
虎→[?????] テキストをベクトルに変換 単語→ベクトル表現 犬→[0.47, -0.12, 0.26, 0.89, -0.71, …] 猫→[0.46,
-0.10, 0.54, -0.31, 0.96, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 ※イメージです
テキストをベクトルに変換 単語→ベクトル表現 犬→[0.47, -0.12, 0.26, 0.89, -0.71, …] 猫→[0.46, -0.10,
0.54, -0.31, 0.96, …] 虎→[0.46, -0.15, 0.56, 0.31, 0.87, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 虎
類似性検索とは? (10, 10) (10, 4) (1, 10) 甘さ 丸さ ベーグル
= (9, 10)
ベクトルデータベースとは? 従来のデータベース ベクトルデータベース 特徴 従来のデータベース ベクトルデータベース 保存形式 文字列 ベクトルに変換 検索方法
キーワード検索 類似性検索
ベクトルデータベースとは? ◎メリット ×デメリット 類似性検索が可能 大きな計算リソースが必要 データの柔軟性 ベクトル変換時の モデル依存 ※モデル:テキストをベクトルに変換する際のルール(ex. 甘さ、丸さ)
https://ibm.biz/BdaYrz
ベクトルデータベース の比較
ベクトルデータベースの比較 • Elasticsearch: キーワード検索と類似性検索のどちらもサポートしている • Milvus: 類似性検索に特化していて、数百万から数十億のベクトルデータでも高速 に処理できる • Chroma:
軽量でシンプル。RAGなど生成AIのデータ検索に適している Elasticsearch Milvus Chroma Open source ◯ ◯ ◯ Cloud management ◯ ◯ ×
ベクトルデータベース の実装
• RAGを前提としたベクトルデータベースへのデータの • 追加(insert) • 検索(search) • 削除(delete) • 環境
• OS:macOS • Python 3.11.3 • Langchain • Embedding model:intfloat/multilingual-e5-large ベクトルデータベースの実装
使用するデータの紹介 • 生成AIに作成させた就業規程が 書かれたwordファイル • word2ページ分
使用するデータの紹介 • 検索検証用のQ&A
追加(insert)
from langchain_community.document_loaders.word_document import UnstructuredWordDocumentLoader from langchain_text_splitters.character import RecursiveCharacterTextSplitter from langchain_huggingface.embeddings
import HuggingFaceEmbeddings Insert 共通部分 loader = UnstructuredWordDocumentLoader(file_path=‘data/就業規程.docx’) data = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=256,chunk_overlap=0) documents = text_splitter.split_documents(documents=data) パッケージ 読み込み ドキュメント 読み込み Chunkで分割
Chunkとは? • かたまりという意味 • テキストを特定の長さで分割 したもの • ベクトルデータベースでは、 チャンク単位でテキストが検 索される
from langchain_community.document_loaders.word_document import UnstructuredWordDocumentLoader from langchain_text_splitters.character import RecursiveCharacterTextSplitter from langchain_huggingface.embeddings
import HuggingFaceEmbeddings Insert 共通部分 loader = UnstructuredWordDocumentLoader(file_path=‘data/就業規程.docx’) data = loader.load() text_splitter = RecursiveCharacterTextSplitter(chunk_size=256,chunk_overlap=0) documents = text_splitter.split_documents(documents=data) model_name = ‘intfloat/multilingual-e5-large’ embedding = HuggingFaceEmbeddings(model_name=model_name) パッケージ 読み込み ドキュメント 読み込み Chunkで分割 モデル取得
Elasticsearch insert from elasticsearch import Elasticsearch from langchain_elasticsearch import ElasticsearchStore
vector_store = ElasticsearchStore.from_documents( documents=documents, embedding=embedding, index_name=”elastic“, es_connection=client ) client = Elasticsearch(hosts=<INPUR YOUR HOSTNAME>, ca_certs=<INPUT YOUR CA CERTIFICATES FILE>) Elasticsearchの パッケージ 読み込み サーバー接続 追加
Milvus insert from langchain_milvus import Milvus vector_store = Milvus.from_documents( documents=documents,
collection_name=”milvus”, embedding=embedding, connection_args={‘host’:<INPUR YOUR HOSTNAME>, ‘port’:<INPUR YOUR PORT NUMBER>} ) 追加 Milvusの パッケージ 読み込み
Chroma insert from langchain_chroma import Chroma vector_store = Chroma.from_documents( documents=documents,
collection_name=”chroma”, embedding=embeddings, persist_directory=‘chroma_langchain_db’ ) Chromaの パッケージ 読み込み 追加
追加(Insert)の所感 • ElasticsearchとMilvusは、先輩にサーバーを立ててもらっ たものを使った、自分1人ではまだ構築できない • Chromaは、実行するとローカルにベクトルデータベースが 立つ、簡単に実行することができてまさに初心者向け • 今回のようなword2ページほどの軽いデータは、遅いと感じ ることもない
検索(search)
Search 共通 answer = vector_store.similarity_search( query=‘勤続3年半ですが、有給休暇は何日もらえますか?’ )
検索結果 Elasticsearch Query Answer 勤続3年半ですが、有給休暇は何日もら えますか? 祝日は、日本国の法律で定められた全ての国民の祝日とする。 年末年始休暇は、12月29日から翌年1月3日までの6日間とする。 有給休暇は、次の基準に基づいて付与される。 社員が入社後6か月間継続勤務し、全労働日の8割以上出勤した場合、10日の有給休暇が付与される。
以後、勤務年数に応じて次の通り有給休暇が付与される。 勤続1年6か月:11日 勤続2年6か月:12日 勤続3年6か月:14日 勤続4年6か月:16日 勤続5年6か月:18日 勤続6年6か月以上:20日 家から会社まで直線距離で35キロありま すが、住宅手当は受けられますか? 住宅手当:社員の居住地が勤務地から直線距離で30キロメートル以上離れている場合に支給される 手当。支給額は居住地の家賃に応じて、月額2万円を上限とする。 第10条(賞与) 賞与は、夏季(6月)及び冬季(12月)の年2回支給する。 賞与額は、会社の業績および個人の業績評価に基づき、決定する。 第11条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
検索結果 Milvus Query Answer 勤続3年半ですが、有給休暇は何日もら えますか? 祝日は、日本国の法律で定められた全ての国民の祝日とする。 年末年始休暇は、12月29日から翌年1月3日までの6日間とする。 有給休暇は、次の基準に基づいて付与される。 社員が入社後6か月間継続勤務し、全労働日の8割以上出勤した場合、10日の有給休暇が付与される。
以後、勤務年数に応じて次の通り有給休暇が付与される。 勤続1年6か月:11日 勤続2年6か月:12日 勤続3年6か月:14日 勤続4年6か月:16日 勤続5年6か月:18日 勤続6年6か月以上:20日 家から会社まで直線距離で35キロありま すが、住宅手当は受けられますか? 住宅手当:社員の居住地が勤務地から直線距離で30キロメートル以上離れている場合に支給される 手当。支給額は居住地の家賃に応じて、月額2万円を上限とする。 第10条(賞与) 賞与は、夏季(6月)及び冬季(12月)の年2回支給する。 賞与額は、会社の業績および個人の業績評価に基づき、決定する。 第11条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
検索結果 Chroma Query Answer 勤続3年半ですが、有給休暇は何日もら えますか? 祝日は、日本国の法律で定められた全ての国民の祝日とする。 年末年始休暇は、12月29日から翌年1月3日までの6日間とする。 有給休暇は、次の基準に基づいて付与される。 社員が入社後6か月間継続勤務し、全労働日の8割以上出勤した場合、10日の有給休暇が付与される。
以後、勤務年数に応じて次の通り有給休暇が付与される。 勤続1年6か月:11日 勤続2年6か月:12日 勤続3年6か月:14日 勤続4年6か月:16日 勤続5年6か月:18日 勤続6年6か月以上:20日 家から会社まで直線距離で35キロありま すが、住宅手当は受けられますか? 住宅手当:社員の居住地が勤務地から直線距離で30キロメートル以上離れている場合に支給される 手当。支給額は居住地の家賃に応じて、月額2万円を上限とする。 第10条(賞与) 賞与は、夏季(6月)及び冬季(12月)の年2回支給する。 賞与額は、会社の業績および個人の業績評価に基づき、決定する。 第11条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
None
None
1. Chunkの切り方を工夫する 1. 章条項ごとにChunkを切る 2. Embedding Modelを変える 3. ドキュメント内の図表を文章に書き下す 検索における工夫ポイント
None
2. Embedding Modelを 変える https://ibm.biz/BdaYrz
https://ibm.biz/BdaYry 3.ドキュメント内の表を文章 に書き下す 表 文章
削除(delete)
Elasticsearch delete from elasticsearch import Elasticsearch index = ”elastic" if
index in indices: client.indices.delete(index=index) Elasticsearch の パッケージ 読み込み client = Elasticsearch(hosts=host, ca_certs=‘cacert.pem’) indices = client.cat.indices(index=‘*’, h=‘index’).splitlines() サーバーと接続 “elastic” があったら削除
Milvus delete connections.connect(host=‘host’, port=‘port’) collections = list_collections() from pymilvus import
connections from pymilvus import list_collections from pymilvus import drop_collection collection = ”milvus” if collection in collections: drop_collection(collection_name=collection) Milvusの パッケージ 読み込み サーバーと接続 “milvus” があったら削除
Chroma delete import chromadb client = chromadb.PersistentClient(path=‘chroma_langchain_db’) collections = client.list_collections()
collection_name=”chroma” for collection in collections: if collection.name == collection_name: client.delete_collection(name=collection_name) Chromaの パッケージ 読み込み サーバーと接続 “chroma” があったら削除
Demo Elasticsearchを使用して RAGを実行してみる
勤続3年半ですが、有給休暇 は何日もらえますか? RAG構成図 ① 検索結果 質問をベクトル化、検索 ③ + ① 有給休暇は…
② ③ ④ ⑤
None
まとめ
• RAGやベクトルデータベースについて • 代表的な、Elasticsearch、Milvus、Chromaの違いについて • その基礎的な実装方法について 今後の課題 • より実に近いデータを使った性能向上の検討 •
RAGのための生成AIとの連携 • プロンプトエンジニアリング • 最新の情報をキャッチアップする まとめ Qiita:https://qiita.com/mmmmmika
アンケート
None
None
アンケート (姓)船渡 (名)美佳
[email protected]
TechXchange
None