加载文件
for file in os.listdir(base_dir):
# 构建完整的文件路径
file_path = os.path.join(base_dir, file)
if file.endswith('.pdf'):
loader = PyPDFLoader(file_path)
documents.extend(loader.load())
elif file.endswith('.docx'):
loader = Docx2txtLoader(file_path)
documents.extend(loader.load())
elif file.endswith('.txt'):
loader = TextLoader(file_path)
documents.extend(loader.load())
我们仅以读pdf的一步为例
这段代码通过以下步骤读取 PDF 文件:
- for file in os.listdir(base_dir)::遍历 base_dir 目录中的所有文件。
- file_path = os.path.join(base_dir, file):构建每个文件的完整路径。
- if file.endswith('.pdf')::检查文件名是否以
.pdf结尾。 - loader = PyPDFLoader(file_path):如果文件是 PDF 文件,创建一个 PyPDFLoader 实例,传入文件路径。
另外,这里要提前安装依赖pypdf、doc2txt两个库
词嵌入
词嵌入(Word Embedding)是一种将词语映射到向量空间的技术,使得词语可以用固定长度的向量表示。这些向量捕捉了词语之间的语义关系,使得相似的词语在向量空间中距离较近。常见的词嵌入方法包括 Word2Vec、GloVe 和 FastText 等。
词嵌入的有关思想方法
- 向量表示:每个词语被表示为一个固定长度的向量(通常是高维向量,如 100 维或 300 维)。
- 语义关系:词嵌入捕捉了词语之间的语义关系。例如,在一个好的词嵌入模型中,"king" - "man" + "woman" 的结果应该接近 "queen"。
- 训练方法:词嵌入通常通过无监督学习方法从大量文本数据中训练得到。
常见的算法
- Word2Vec:由 Google 提出,包括两种模型:CBOW(Continuous Bag of Words)和 Skip-gram。CBOW 通过上下文预测中心词,Skip-gram 通过中心词预测上下文。
- GloVe:由 Stanford 提出,基于全局词共现矩阵进行训练,捕捉全局统计信息。
- FastText:由 Facebook 提出,扩展了 Word2Vec,通过考虑词的子词(subword)信息来生成词嵌入。
向量数据库
向量数据库(Vector Database)是一种专门用于存储和检索高维向量数据的数据库。它在处理需要高效相似性搜索的应用场景中非常有用,如推荐系统、图像检索、自然语言处理等。
主要概念
- 向量表示:数据(如文本、图像、音频等)被转换为固定长度的向量,这些向量捕捉了数据的特征。
- 相似性搜索:向量数据库支持高效的相似性搜索,可以快速找到与查询向量最相似的向量。
- 高维索引:为了提高检索效率,向量数据库通常使用高维索引结构,如 KD 树、LSH(局部敏感哈希)和 HNSW(分层导航小世界图)。
常见的向量数据库
- FAISS:由 Facebook AI Research 提供的开源库,支持高效的相似性搜索和聚类。
- Annoy:由 Spotify 开发的用于高效相似性搜索的库,基于随机投影树。
- Milvus:一个开源的向量数据库,支持大规模向量数据的存储和检索。