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

20241015 Dojo ベクトルデータベース入門

Avatar for Mika Mika
October 16, 2024

20241015 Dojo ベクトルデータベース入門

Avatar for Mika

Mika

October 16, 2024
Tweet

Other Decks in Business

Transcript

  1. 写真撮影 動画撮影 資料公開 SNS拡散 ◯ ◯ ◯ ◯ #IBMDojo セッション受講における注意事項

    セッション中に迷惑行為が発覚した場合は、強制退出、セッション中止などの措置を講じます
  2. 名前:小野 祐作(Yusaku Ono, Ph.D.) 所属:日本アイ・ビー・エム株式会社 テクノロジー事業本部 カスタマー・サクセス 経歴: 2010年:博士(理学)@理学 衛星リモートセンシングによる地球観測に関する研究

    2010年:研究員@宇宙航空研究開発機構(JAXA/EORC) 2015年:助教@千葉大学(CEReS) 2016年:ITコンサルタント@コンサルティングファーム 2017年:データサイエンティスト@EY Japan 2018年:分析コンサルタント@ SAS Institute Japan 2020年:エキスパート→課長@舶用電気機器メーカー 2022年:カスタマー・サクセス・マネージャー@IBM Japan watsonxによるお客様のビジネス目標達成を支援中 自己紹介
  3. ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,

    4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは?
  4. ベクトルとは? • 大きさと方向で表される、量 • 数字の列 例えば… クッキー:(甘さ, 丸さ) = (10,

    4) せんべい:(甘さ, 丸さ) = (1, 10) ドーナツ:(甘さ, 丸さ) = (10, 10) ベクトルとは? (10, 10) (10, 4) (1, 10) 甘さ 丸さ
  5. 虎→[?????] テキストをベクトルに変換 単語→ベクトル表現 犬→[0.47, -0.12, 0.26, 0.89, -0.71, …] 猫→[0.46,

    -0.10, 0.54, -0.31, 0.96, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 ※イメージです
  6. テキストをベクトルに変換 単語→ベクトル表現 犬→[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, …] 子供 大人 飛行機 電車 車 馬 熊 狼 犬 猫 虎
  7. • RAGを前提としたベクトルデータベースへのデータの • 追加(insert) • 検索(search) • 削除(delete) • 環境

    • OS:macOS • Python 3.11.3 • Langchain • Embedding model:intfloat/multilingual-e5-large ベクトルデータベースの実装
  8. 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で分割
  9. 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で分割 モデル取得
  10. 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の パッケージ 読み込み サーバー接続 追加
  11. 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の パッケージ 読み込み
  12. 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の パッケージ 読み込み 追加
  13. 検索結果 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条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
  14. 検索結果 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条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
  15. 検索結果 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条(福利厚生) 健康保険、厚生年金保険、雇用保険、労災保険に加入する。 社員が利用可能な福利厚生施設や、社員割引制度を提供する。 年に一度、社員全員が健康診断を受診することが義務付けられる。
  16. 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” があったら削除
  17. 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” があったら削除
  18. 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” があったら削除
  19. • RAGやベクトルデータベースについて • 代表的な、Elasticsearch、Milvus、Chromaの違いについて • その基礎的な実装方法について 今後の課題 • より実に近いデータを使った性能向上の検討 •

    RAGのための生成AIとの連携 • プロンプトエンジニアリング • 最新の情報をキャッチアップする まとめ Qiita:https://qiita.com/mmmmmika