前言
年底了,有几个项目的客户还在催着一些新提的需求在春节前上线
有几天没学习LangChain框架相关知识了,抽空继续学习研究
嵌入
嵌入(Embedding)可以将文本转换为向量表示,从而实现文本的语义分析和相似度计算
简单来说,就是给每个文本分配一个"数字身份证",相似的文本会有相似的"身份证号码"
应用场景
日常我们接触到的实际的场景应用,比如:
- 智能搜索:比如在文档库中查找与查询语义相关的内容,而不仅仅是关键词匹配
- 问答系统:找到与用户问题最相关的文档片段作为答案依据
- 推荐系统:根据用户兴趣向量推荐相关内容
代码实现
示例提供了两个例子,一个是文本对比,一个是文本搜索
from langchain_huggingface import HuggingFaceEmbeddings
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
import os
# 示例 1: 使用 HuggingFace 嵌入模型(无需 API 密钥)
def use_huggingface_embeddings():
"""使用 HuggingFace 提供的预训练模型生成嵌入"""
print("\n=== 使用 HuggingFace 嵌入模型 ===")
# 创建嵌入模型实例
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
# 示例文本
texts = [
"猫是一种常见的家养宠物",
"狗是人类最好的朋友",
"大象是陆地上最大的动物",
"家养宠物中猫特别普遍"
]
# 生成嵌入向量
print("生成文本嵌入向量...")
vectors = embeddings.embed_documents(texts)
# 查看嵌入向量的维度
print(f"嵌入向量维度: {len(vectors[0])}")
# 计算文本之间的相似度
print("\n计算文本之间的相似度:")
similarity_matrix = cosine_similarity(vectors)
for i, text1 in enumerate(texts):
for j, text2 in enumerate(texts):
if i < j: # 避免重复计算
similarity = similarity_matrix[i][j]
print(f"'{text1}' 与 '{text2}' 的相似度: {similarity:.4f}")
# 示例 2: 文本搜索功能
def text_search_demo():
"""使用嵌入实现简单的文本搜索功能"""
print("\n=== 文本搜索功能演示 ===")
# 创建嵌入模型实例
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
# 文档集合
documents = [
"Python 是一种广泛使用的高级编程语言",
"LangChain 是一个用于构建 LLM 应用的框架",
"机器学习是人工智能的一个分支",
"深度学习是机器学习的一个子领域",
"数据科学涉及数据的分析和可视化"
]
# 生成文档嵌入
doc_vectors = embeddings.embed_documents(documents)
# 用户查询
query = "什么是 LangChain?"
print(f"\n查询: {query}")
# 生成查询嵌入
query_vector = embeddings.embed_query(query)
# 计算查询与每个文档的相似度
similarities = cosine_similarity([query_vector], doc_vectors)[0]
# 按相似度排序
sorted_indices = np.argsort(similarities)[::-1]
# 显示搜索结果
print("\n搜索结果(按相似度排序):")
for i, idx in enumerate(sorted_indices):
print(f"{i+1}. 相似度: {similarities[idx]:.4f} - {documents[idx]}")
# 运行示例
if __name__ == "__main__":
print("LangChain 嵌入示例")
print("=" * 50)
# 运行 HuggingFace 嵌入示例
use_huggingface_embeddings()
# 运行文本搜索示例
text_search_demo()
print("\n示例运行完成!")
运行结果如下:
HuggingFaceEmbeddings 类
来源:langchain-huggingface 包中的类
功能:封装了 HuggingFace 的预训练嵌入模型,提供统一的接口用于文本向量化
主要方法:
- embed_documents(texts):批量为多个文本生成嵌入向量
- embed_query(text):为单个查询文本生成嵌入向量
all-MiniLM-L6-v2 模型
轻量级:
- 基于 MiniLM 架构(BERT 的轻量级版本)
- 模型大小约 80MB,适合在资源受限环境中使用
多语言支持:
- 支持多种语言的文本嵌入
性能平衡:
- 在速度和嵌入质量之间取得了良好平衡
- 虽然比大型模型(如 BERT-base)小,但在大多数任务上表现接近
适用场景:
- 文本相似度计算
- 语义搜索
- 文本分类
- 聚类分析
相关依赖安装
pip install langchain-huggingface sentence-transformers scikit-learn numpy
小结
现在对于嵌入概念有了大概的了解,里面的一些代码技术细节是越看越晕,多看多理解吧,代码多运行看看,现在只是简单的跑通了例子,里面大概用了什么库,大概代码是怎么回事,后面实战项目遇到问题再针对性研究吧
当然,也可能后面实战项目一行代码不写,纯面向AI嘴遁式开发
工作比较忙,断断续续学习研究,收获不大多少有点,慢慢来,加油!
欢迎留言交流,如果觉得有帮助,可以
点个赞支持一下公众号:草帽lufei