当前位置: 首页 > news >正文

LangChain教程——文本嵌入模型

上篇文章我们学习了LangChain教程——Chain链,这篇文章我们学习LangChain教程——文本嵌入模型。

文本嵌入模型

文本嵌入模型(Embeddings)用于文本转换为向量,为语义搜索、相似性计算等任务提供了基础支持。

其提供了两种方法将文本向量化:

  • 文档向量化(embed_documents):接收参数是字符串数组;

  • 句子向量化(embed_query):接收参数是字符串;

在使用文本嵌入模型前,需要执行如下代码安装sentence-transformers。

pip install sentence-transformers

示例代码如下:

from langchain_huggingface import HuggingFaceEmbeddings# 模型地址
embeddings_path = "F:\model\ge-large-zh-v1.5"
# 实例化模型
embeddings = HuggingFaceEmbeddings(model_name=embeddings_path)text="你好,你知道白巧克力吗?"
# 句子向量化
result=embeddings.embed_query(text)
# 文档向量化
doc_result=embeddings.embed_documents([text])print(result[:10])
print(doc_result[0][:5])

运行结果如下:

[-0.033717427402734756, -0.03865227848291397, -0.01294323056936264, -0.020587250590324402, -0.0017022894462570548, -0.05969524011015892, -0.04599889740347862, -0.0034713181667029858, 0.026392975822091103, -0.023560168221592903]
[-0.033717427402734756, -0.03865227848291397, -0.01294323056936264, -0.020587250590324402, -0.0017022894462570548]

这样就可以得到了文本向量,得到了向量数据,需要存储在数据库中。

向量存储

文本嵌入一般都与向量数据库配合使用,实现高效的相似性搜索。LangChain官方提供了三种开源、免费、可用于本地机器的向量数据库示例(chroma、FAISS、Lance)。

这里我们简单使用chroma向量数据库来配合文本嵌入,以后的文章会详细介绍。

在使用chroma前,需要执行如下安装chroma,

pip install chromadb

首先实例化模型,示例代码如下:

# 文本文件加载器
from langchain_community.document_loaders import TextLoader
# 文本分割器
from langchain.text_splitter import CharacterTextSplitter
# 矢量存储数据库
from langchain_community.vectorstores import Chroma
from langchain_huggingface import HuggingFaceEmbeddings
# 模型地址
embeddings_path = "F:\model\ge-large-zh-v1.5"
# 实例化模型
embeddings = HuggingFaceEmbeddings(model_name=embeddings_path)

接下来对文档进行分割切片,示例代码如下:

# 加载文档
raw_documents=TextLoader('计算机技术与软件专业技术资格(水平)考试简介.txt',encoding='utf-8').load()
print(raw_documents)# 实例化文本分割器
text_splitter=CharacterTextSplitter(chunk_size=200,     # 分割后文本最大长度chunk_overlap=20,      # 文档之间重叠度separator="\n"         # 按换行符优先分割
)
# 对文本进行分片
documents=text_splitter.split_documents(raw_documents)
print(len(documents))
print(documents[0])

运行结果如下:

也可以使用split_text方法进行分片,示例代码如下:

# 加载文档
raw_texts=open('计算机技术与软件专业技术资格(水平)考试简介.txt',encoding='utf-8').read()
print(raw_texts)# 对文本进行分片
texts=text_splitter.split_text(raw_texts)
print(len(texts))
print(texts[0])

运行结果如下:

接下来将矢量化文本加载到Chroma向量数据库中,示例代码如下:

db=Chroma.from_documents(documents,embeddings)
db_texts=Chroma.from_texts(texts,embeddings)
print(db)
print(db_texts)

运行结果为:

<langchain_community.vectorstores.chroma.Chroma object at 0x000002487E641330>
<langchain_community.vectorstores.chroma.Chroma object at 0x0000018DAC94A530>

默认情况下存储数据库的路径:

windows:用户/用户名/.cache/chroma/xxx
Linux:/home/<username>/.cache/chroma/xxx

接下来就可以进行实例化一个检索器用来矢量查询与检索,示例代码如下:

# 实例化检索器
ret=db.as_retriever()
docs=ret.invoke('计算机软件资格考试由哪些部门进行领导的')
print('检索出相似文档数量',len(docs))
print("第一个文档的内容:",docs[0].page_content)

运行结果如下:

好了,LangChain教程——文本嵌入模型就简单讲到这里,下一篇我们学习LangChain教程——文档加载、转换器。

公众号:白巧克力LIN

该公众号发布Python、数据库、Linux、Flask、Django、自动化测试、Git、算法、前端、服务器、AI等相关文章!

- END -

http://www.dtcms.com/a/279323.html

相关文章:

  • 20250714让荣品RD-RK3588开发板在Android13下长按关机
  • Debezium日常分享系列之:提升Debezium性能
  • 制造业实战:数字化集采如何保障千种备件“不断供、不积压”?
  • 16.避免使用裸 except
  • MFC扩展库BCGControlBar Pro v36.2新版亮点:可视化设计器升级
  • 计算机毕业设计Java轩辕购物商城管理系统 基于 SpringBoot 的轩辕电商商城管理系统 Java 轩辕购物平台管理系统设计与实现
  • 面向对象的设计模式
  • 【数据结构】树(堆)·上
  • js的局部变量和全局变量
  • 测试驱动开发(TDD)实战:在 Spring 框架实现中践行 “红 - 绿 - 重构“ 循环
  • Bash vs PowerShell | 从 CMD 到跨平台工具:Bash 与 PowerShell 的全方位对比
  • vue3 服务端渲染时请求接口没有等到数据,但是客户端渲染是请求接口又可以得到数据
  • 7.14 map | 内存 | 二维dp | 二维前缀和
  • python+Request提取cookie
  • 电脑升级Experience
  • python transformers笔记(Trainer类)
  • 代码随想录算法训练营第三十五天|416. 分割等和子集
  • LLM表征工程还有哪些值得做的地方
  • 内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
  • 防火墙技术概述
  • Qt轮廓分析设计+算法+避坑
  • Redis技术笔记-主从复制、哨兵与持久化实战指南
  • 第五章 uniapp实现兼容多端的树状族谱关系图,剩余组件
  • 学习C++、QT---25(QT中实现QCombobox库的介绍和用QCombobox设置编码和使用编码的讲解)
  • SQL ORM映射框架深度剖析:从原理到实战优化
  • 【Unity】MiniGame编辑器小游戏(十三)最强射手【Shooter】(下)
  • ElasticSearch重置密码
  • 嵌入式 Linux开发环境构建之Source Insight 的安装和使用
  • c++算法二
  • 不同Linux版本下安装Synopsys工具的差异与选择建议