🐷

LangChainを用いて大量ファイルをロードするVectorDBを作ってみた(6)

2024/05/25に公開

sky.jpg

はじめに

前回は、Chroma、FAISS、QdrantのVectorDBを用いて、chainlitを適用して生成AIから結果を出してみました。今回はもう少し質問を重ねて、その結果とスコアを確認していきたいと思います。

https://qiita.com/ogi_kimura/items/d1d263ece0e23c7d7576

では、行ってみます。

いろいろ質問してみる

3つのVectorDBを用いて、生成AIに質問を4つ投げてみます。

1問目「組み合わせ処置およびその方法」の特許を申請した会社は?

3つとも、真っ先に「日立製作所」と答えています。
正解は「グラクソスミスクライン、インテレクチュアル、プロパティー、ディベロップメント、リミテッド」
ブブー!!🙅

image.png

2問目「遊技機」というタイトルの特許を出願した会社は?

3つとも、何も考えずに「株式会社ユニバーサルエンターテインメント」。
正解は「株式会社三共」
ブブー!!!🙅🙅

3問目「地下構造物および地下構造物の構築方法」の特許を出願した会社は?

3つとも正解ですが、鹿島建設も含まれるので、QdrantとFAISSがより正しいです。

4問目「株式会社ミツバ」の特許の概要は?

image.png

いずれも間違っています・・・(;´д`)トホホ
Chromaの回答は最悪です。先ほどの質問に引きずられているのでしょうか?本当はパチンコ好きか?(笑)。

というわけで、現段階では使い物にならないという結果になってしまいました。

スコアを確認

では、次にスコアを確認したいと思います。

1問目
Chroma
---------------document.metadata---------------
{'name': '0007353890', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353801\\0007353881\\0007353890\\0007353890.xml'}
0.2812548279762268
---------------document.metadata---------------
{'name': '0007354085', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\0007354081\\0007354085\\0007354085.xml'}
0.2917313277721405
---------------document.metadata---------------
{'name': '0007354359', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354301\\0007354351\\0007354359\\0007354359.xml'}
0.2962445020675659
Qdrant
---------------document.metadata---------------
{'name': '0007353890', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353801\\0007353881\\0007353890\\0007353890.xml', '_id': '5237eba7fea34e858248d38a8914a21b', '_collection_name': 'manga_data'}
0.8593926166776151
---------------document.metadata---------------
{'name': '0007354085', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\0007354081\\0007354085\\0007354085.xml', '_id': '23dfce8ce7c143b9a693724d16d037ee', '_collection_name': 'manga_data'}
0.8541343519082232
---------------document.metadata---------------
{'name': '0007354359', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354301\\0007354351\\0007354359\\0007354359.xml', '_id': 'b112d1a5c3ca4557aa7a3ce9206fafdf', '_collection_name': 'manga_data'}
0.8518777313964644
FAISS
---------------document.metadata---------------
{'name': '0007353890', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353801\\0007353881\\0007353890\\0007353890.xml'}
0.28125483
---------------document.metadata---------------
{'name': '0007354085', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\0007354081\\0007354085\\0007354085.xml'}
0.2917313
---------------document.metadata---------------
{'name': '0007354359', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354301\\0007354351\\0007354359\\0007354359.xml'}
0.29624453

similarity_search_with_scoreの引数はk=3なので、1回のリクエストに対して3つの文章を取得します。FAISSを例に挙げるとスコアはそれぞれ0.28125483 0.2917313 0.29624453です。
3つのVectorDBを比較するとQdrantのスコアは0.8以上で高そうです。ただ間違ってますが。
他は0.3くらいですね。

2問目
Chroma
{'name': '0007354038', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\00007354031\\0007354038\\0007354038.xml'}
0.24904297292232513
---------------document.metadata---------------
{'name': '0007353658', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353651\\0007353658\\0007353658.xml'}
0.2504054605960846
---------------document.metadata---------------
{'name': '0007353679', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353671\\0007353679\\0007353679.xml'}
0.25191378593444824
Qdrant
{'name': '0007354038', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\0007354031\\0007354038\\0007354038.xml', '_id': '1f7c475156f94bb1b9488aa96ff3c924', '_collection_name': 'manga_data'}
0.8754785101083004
---------------document.metadata---------------
{'name': '0007353658', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353651\\0007353658\\0007353658.xml', '_id': '865211e1873545cb911e483e3c2ad616', '_collection_name': 'manga_data'}
0.8747972500841864
---------------document.metadata---------------
{'name': '0007353679', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353671\\0007353679\\0007353679.xml', '_id': 'eb684b75efdb4bab8032e2f61289f964', '_collection_name': 'manga_data'}
0.8740430907051734
FAISS
{'name': '0007354038', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\0007354031\\0007354038\\0007354038.xml'}
0.24904296
---------------document.metadata---------------
{'name': '0007353658', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353651\\0007353658\\0007353658.xml'}
0.2504055
---------------document.metadata---------------
{'name': '0007353679', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353671\\0007353679\\0007353679.xml'}
0.25191385

これも、Qdrantはアホみたいにスコアが高いですね。
その他2つはスコアが低いです。

3問目
Chroma
---------------document.metadata---------------
{'name': '0007354018', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\00007354011\\0007354018\\0007354018.xml'}
0.24291792511940002
---------------document.metadata---------------
{'name': '0007353574', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353501\\0007353571\\0007353574\\0007353574.xml'}
0.2998692989349365
---------------document.metadata---------------
{'name': '0007353745', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353701\\0007353741\\0007353745\\0007353745.xml'}
0.3072134256362915
Qdrant
{'name': '0007354018', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\0007354011\\0007354018\\0007354018.xml', '_id': '77942319596842948e79b54d7210ab33', '_collection_name': 'manga_data'}
0.8785410448120645
---------------document.metadata---------------
{'name': '0007353574', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353501\\0007353571\\0007353574\\0007353574.xml', '_id': 'ee52cc55593f44abaa7b0333871732f3', '_collection_name': 'manga_data'}
0.8500652876336717
---------------document.metadata---------------
{'name': '0007354151', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354101\\0007354151\\0007354151\\0007354151.xml', '_id': '91db9a21959e4e48a91f5b4a329fbe34', '_collection_name': 'manga_data'}
0.849666061061804
FAISS
{'name': '0007354018', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354001\\0007354011\\0007354018\\0007354018.xml'}
0.2429179
---------------document.metadata---------------
{'name': '0007353574', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353501\\0007353571\\0007353574\\0007353574.xml'}
0.29986942
---------------document.metadata---------------
{'name': '0007354151', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007354101\\0007354151\\0007354151\\0007354151.xml'}
0.30066788

これもQdrantのスコアはぶっちぎりです(;´д`)トホホ。

4問目
Chroma
{'name': '0007353637', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0 0007353631\\0007353637\\0007353637.xml'}
0.3015143871307373
---------------document.metadata---------------
{'name': '0007353633', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353631\\0007353633\\0007353633.xml'}
0.3088327646255493
---------------document.metadata---------------
{'name': '0007353635', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353631\\0007353635\\0007353635.xml'}
0.3088327646255493
Qdrant
{'name': '0007353890', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353801\\0007353881\\0007353890\\0007353890.xml', '_id': '5237eba7fea34e858248d38a8914a21b', '_collection_name': 'manga_data'}
0.8514235452387626
---------------document.metadata---------------
{'name': '0007353637', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353631\\0007353637\\0007353637.xml', '_id': '13da9984b56d4da987a3aef88feb01d9', '_collection_name': 'manga_data'}
0.84924282872426
---------------document.metadata---------------
{'name': '0007353883', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353801\\0007353881\\0007353883\\0007353883.xml', '_id': '64fb3613f8c845d2a0ff73566fb08b12', '_collection_name': 'manga_data'}
0.8467399453540712
FAISS
---------------document.metadata---------------
{'name': '0007353890', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353801\\0007353881\\0007353890\\0007353890.xml'}
0.29721403
---------------document.metadata---------------
{'name': '0007353637', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353601\\0007353631\\0007353637\\0007353637.xml'}
0.3015144
---------------document.metadata---------------
{'name': '0007353883', 'source': 'C:\\Users\\ogiki\\langchain_book\\JPB_2023185\\DOCUMENT\\P_B1\\0007353801\\0007353881\\0007353883\\0007353883.xml'}
0.30652013

結果から

うーん、Qdrantは自信満々のスコアで間違ってるし、ChromaとFAISSはいつも0.3くらいで守り控えめだし・・・
評価が難しいです。
ただ、言えることは、3つのVectorDB共に、だいたい間違っているという事でしょうか。

まとめ

単純にテキストをVectorDBに突っ込んだだけでは、商用では全く使い物にならないことがわかりました。
次回は別の方法を試してみようと思います。
今回の大量ファイルのうちXML形式のものを対象として、XMLパースを実施し、必要な部分だけを取り出す方法を検討してみます。

Discussion