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 -