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

![sky.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/f2852832-39b0-e93a-edeb-fb412d03063e.jpeg)
# はじめに
前回は、Chroma、FAISS、QdrantのVectorDBを用いて、chainlitを適用して生成AIから結果を出してみました。今回はもう少し質問を重ねて、その結果とスコアを確認していきたいと思います。

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

では、行ってみます。

# いろいろ質問してみる
３つのVectorDBを用いて、生成AIに質問を４つ投げてみます。

##### １問目「組み合わせ処置およびその方法」の特許を申請した会社は？
３つとも、真っ先に「日立製作所」と答えています。
正解は「グラクソスミスクライン、インテレクチュアル、プロパティー、ディベロップメント、リミテッド」
ブブー!!🙅

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/a9549022-289e-2b3f-c8f7-759d5711a636.png)

##### ２問目「遊技機」というタイトルの特許を出願した会社は？
３つとも、何も考えずに「株式会社ユニバーサルエンターテインメント」。
正解は「株式会社三共」
ブブー!!!🙅🙅

##### ３問目「地下構造物および地下構造物の構築方法」の特許を出願した会社は？
３つとも正解ですが、鹿島建設も含まれるので、QdrantとFAISSがより正しいです。

##### ４問目「株式会社ミツバ」の特許の概要は？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784222/867e46a2-76a2-8fe5-c041-34b522045939.png)

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

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

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

##### １問目
###### 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`なので、１回のリクエストに対して３つの文章を取得します。FAISSを例に挙げるとスコアはそれぞれ`0.28125483` `0.2917313` `0.29624453`です。
３つのVectorDBを比較するとQdrantのスコアは0.8以上で高そうです。ただ間違ってますが。
他は0.3くらいですね。


##### ２問目

###### 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はアホみたいにスコアが高いですね。
その他２つはスコアが低いです。

##### ３問目

###### 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のスコアはぶっちぎりです(;´д｀)トホホ。

##### ４問目
###### 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くらいで守り控えめだし・・・
評価が難しいです。
ただ、言えることは、３つのVectorDB共に、だいたい間違っているという事でしょうか。


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