我正在制作聊天机器人的原型,它可以检索许多CSV文件。此CSV文件具有字段标题、视频ID(Youtube)、文本(描述+转录)。我使用Langchain中的CharacterTextSplitter.from_tiktoken_encoder()将文本拆分为100个标记。因此,每个CSV都有如下结构。所有的视频都是关于汽车的。
videoId0_0.csv:标题0|videoId0|text_chunk0
videoId0_1.csv:标题0|videoId0|text_chunk1
videoId0_2.csv:标题0|videoId0|text_chunk1
videoId1_0.csv:title1|videoId1|text_chunk0
videoId1_0.csv:title1|videoId1|text_chunk1
videoId1_0.csv:title1|videoId1|text_chunk1
CSV的示例如下所示。
title,videoId,text
ë¨ìë¤ì´ ê¼½ë ìµê³ ì ì¸ë¨ ... BMW ì í 5ìë¦¬ì¦ í리뷰 / ì¤í ë·°., SiKVRD6fgIU, â
ì¤í ë·° ìì¹ê¸°ë?.....
我将这些CSV文件加载到Chroma DB中作为矢量存储,如下所示。
import os
from langchain.chains import RetrievalQAWithSourcesChain
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import DirectoryLoader
from langchain.embeddings.sentence_transformer import SentenceTransformerEmbeddings
from langchain.vectorstores import Chroma
data_path = os.path.join( os.getcwd(), 'duplicated_data' )
loader = DirectoryLoader(data_path, glob="*.csv")
docs = loader.load()
embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")
# load it into Chroma
db = Chroma.from_documents(docs, embedding_function, persist_directory="./chroma_db")
我通过查询数据
similarity()
如下所示。
answers = db2.similarity_search("BMW")
但它返回的数据与我的查询无关,例如奔驰、现代,或者返回的数据中没有关于宝马的内容。怎么了?