LangChain实战课03学习笔记 | 豆包MarsCode AI刷题

154 阅读3分钟

加载文件

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 文件:

  1. for file in os.listdir(base_dir)::遍历 base_dir 目录中的所有文件。
  2. file_path = os.path.join(base_dir, file):构建每个文件的完整路径。
  3. if file.endswith('.pdf')::检查文件名是否以 .pdf 结尾。
  4. loader = PyPDFLoader(file_path):如果文件是 PDF 文件,创建一个 PyPDFLoader 实例,传入文件路径。

另外,这里要提前安装依赖pypdf、doc2txt两个库

词嵌入

词嵌入(Word Embedding)是一种将词语映射到向量空间的技术,使得词语可以用固定长度的向量表示。这些向量捕捉了词语之间的语义关系,使得相似的词语在向量空间中距离较近。常见的词嵌入方法包括 Word2Vec、GloVe 和 FastText 等。

词嵌入的有关思想方法

  1. 向量表示:每个词语被表示为一个固定长度的向量(通常是高维向量,如 100 维或 300 维)。
  2. 语义关系:词嵌入捕捉了词语之间的语义关系。例如,在一个好的词嵌入模型中,"king" - "man" + "woman" 的结果应该接近 "queen"。
  3. 训练方法:词嵌入通常通过无监督学习方法从大量文本数据中训练得到。

常见的算法

  1. Word2Vec:由 Google 提出,包括两种模型:CBOW(Continuous Bag of Words)和 Skip-gram。CBOW 通过上下文预测中心词,Skip-gram 通过中心词预测上下文。
  2. GloVe:由 Stanford 提出,基于全局词共现矩阵进行训练,捕捉全局统计信息。
  3. FastText:由 Facebook 提出,扩展了 Word2Vec,通过考虑词的子词(subword)信息来生成词嵌入。

向量数据库

向量数据库(Vector Database)是一种专门用于存储和检索高维向量数据的数据库。它在处理需要高效相似性搜索的应用场景中非常有用,如推荐系统、图像检索、自然语言处理等。

主要概念

  1. 向量表示:数据(如文本、图像、音频等)被转换为固定长度的向量,这些向量捕捉了数据的特征。
  2. 相似性搜索:向量数据库支持高效的相似性搜索,可以快速找到与查询向量最相似的向量。
  3. 高维索引:为了提高检索效率,向量数据库通常使用高维索引结构,如 KD 树、LSH(局部敏感哈希)和 HNSW(分层导航小世界图)。

常见的向量数据库

  1. FAISS:由 Facebook AI Research 提供的开源库,支持高效的相似性搜索和聚类。
  2. Annoy:由 Spotify 开发的用于高效相似性搜索的库,基于随机投影树。
  3. Milvus:一个开源的向量数据库,支持大规模向量数据的存储和检索。