ChatGPT 之 LangChain的文本切割方法对比

这篇具有很好参考价值的文章主要介绍了ChatGPT 之 LangChain的文本切割方法对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

ChatGPT面向对话格式的文本理解很好,但如果要把网络上的文章让ChatGPT直接分析则会有格式的问题。文本清洗是个大课题,讲起来需要很多篇幅,优化起来前路漫漫。

本文基于稍微加工后的文本内容,使用LangChain的CharacterTextSplitter 和 RecursiveCharacterTextSplitter两个文本切割方法做效果对比,因为文本切割的效果直接影响知识库方向ChatGPT反馈的效果

先说结论,CTS比RTCS稍好,利用明确的段落分隔符可以避免一些初级问题发生,一些高级的问题两者都会发生。

以下文本内容来自大爆发:最后一波上半年能开标的50多个项目,预算超50亿元,标黄的内容是测试关键数据。

ChatGPT 之 LangChain的文本切割方法对比

直接贴出运行结果,红框是出错的地方都是来自RTCS(RecursiveCharacterTextSplitter):

ChatGPT 之 LangChain的文本切割方法对比 CTS 返回结果是使用CharacterTextSplitter做text_splitter,它是基于符号做段落切割,本文选择####作为段落的分割符。

RTCS 返回结果是使用RecursiveCharacterTextSplitter,它是基于固定大小做段落切分。

再次总结结论,CTS比RTCS稍好,可以避免一些初级问题发生。


接下来贴出源代码,分为两部分:input.py和output.py。

以下是Input.py的源码,是很关键很关键很关键的地方,用embedding和切割存数据到向量数据库:

import os
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter

# 1 定义embedding
os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"
os.environ["OPENAI_API_BASE"] = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002", deployment="lk-text-embedding-ada-002", chunk_size=1)

# 2 定义文件 
loader = TextLoader(".\\单文件\\项目信息.txt", "utf-8")
pages = loader.load_and_split()

# 3 重要!!!初始化加载器
# 按符号切分段落
text_splitter_CTS = CharacterTextSplitter(
    separator = "####",
    chunk_size = 500, #chunk_size = 1000,
    chunk_overlap = 0
)
split_docs_CTS = text_splitter_CTS.split_documents(pages)
print(f'CharacterTextSplitter documents:{len(split_docs_CTS)}')
#print(split_docs_CTS)
#写入向量数据库
print(f'写入CTS向量数据库')
vectordb = Chroma.from_documents(split_docs_CTS, embedding=embeddings, persist_directory="./CTS/")
vectordb.persist()

# 按固定尺寸切分段落
text_splitter_RCTS = RecursiveCharacterTextSplitter(
    chunk_size = 500, #chunk_size = 1000,
    chunk_overlap = 200
)
split_docs_RCTS = text_splitter_RCTS.split_documents(pages)
print(f'RecursiveCharacterTextSplitter documents:{len(split_docs_RCTS)}')
#print(split_docs_RCTS)
#写入向量数据库
print(f'写入RCTS向量数据库')
vectordb = Chroma.from_documents(split_docs_RCTS, embedding=embeddings, persist_directory="./RTCS/")
vectordb.persist()
 

以下是Output.py的源码,调用ChatGPT基于向量数据库搜索出来的文字片段组织文字来回答:文章来源地址https://www.toymoban.com/news/detail-489717.html

import os
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import CharacterTextSplitter
from langchain import OpenAI,VectorDBQA
from langchain.chains import RetrievalQA
from typing import Dict, Any

os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxxxxxxxxx"
os.environ["OPENAI_API_BASE"] = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"

dict: Dict[str, Any] = {
    "deployment_id": "lk-gpt-35-turbo"
}
embeddings = OpenAIEmbeddings(model="text-embedding-ada-002", deployment="lk-text-embedding-ada-002", chunk_size=1)
openAiLLm = OpenAI(temperature=0.9, model_name="gpt-35-turbo", model_kwargs=dict, max_tokens=100)


db_CTS = Chroma(persist_directory="./CTS/", embedding_function=embeddings)
db_RTCS = Chroma(persist_directory="./RTCS/", embedding_function=embeddings)

print('----------------')

question_list=["介绍一下重庆市新型数字交通物联网大数据服务平台的金额、截止时间",
               "介绍一下广州城市职业学院项目的金额、截止时间",
               "介绍一下吴中区智慧教育项目的预算、截止时间",
               "介绍一下之江实验室项目的预算、截止时间"]

for i in range(0,len(question_list)):
    question_text=question_list[i]

    qa_CTS = RetrievalQA.from_chain_type(llm=openAiLLm, chain_type="stuff", retriever=db_CTS.as_retriever(), return_source_documents=False)
    # 进行问答
    result = qa_CTS({"query": question_text}) 
    print("CTS 返回结果:" + str(result))#.split('\n')[0])
    print('------')

    qa_RTCS = RetrievalQA.from_chain_type(llm=openAiLLm, chain_type="stuff", retriever=db_RTCS.as_retriever(), return_source_documents=False)
    # 进行问答
    result = qa_RTCS({"query": question_text}) 
    print("RTCS 返回结果:" + str(result))#.split('\n')[0])
    print('***********************************************')

到了这里,关于ChatGPT 之 LangChain的文本切割方法对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【RapidAI】P1 中文文本切割程序

    文件名: chinese_text_splitter.py 文件地址: E:CodeKnowledge-QA-LLMKnowledge-QA-LLM-mainknowledge_qa_llmtext_splitterchinese_text_splitter.py Author: @SWHL、@omahs CSDN Author: me(脚踏实地的大梦想家) Original Code: url re 正则表达式。在文本处理中,正则表达式可用于验证、搜索、提取和替换文本中

    2024年02月09日
    浏览(17)
  • ChatGPT长文本对话输入方法

    ChatGPT PROMPTs Splitter 是一个开源工具,旨在帮助你将大量上下文数据分成更小的块发送到 ChatGPT 的提示,并根据如何处理所有块接收到 ChatGPT(或其他具有字符限制的语言模型)的方法。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 该工具默认情况下会确保将文本分为每个请求

    2024年02月14日
    浏览(19)
  • springboot 过滤器链 来自 chatgpt

    当需要在Spring Boot中配置多个过滤器时,可以按照以下步骤进行操作: 创建多个自定义过滤器类:首先,你需要创建多个实现 javax.servlet.Filter 接口的自定义过滤器类,每个过滤器类都需要实现 doFilter 方法来定义过滤器的逻辑处理。 配置过滤器链:在Spring Boot应用程序的配置

    2024年02月12日
    浏览(29)
  • GPT4限制被破解!ChatGPT实现超长文本处理的新方法

    目录 前言 使用chat-gpt过程中有哪些痛点 1.无法理解人类情感和主观性  2.上下文丢失 3.约定被打断 那如何去解决这个痛点 Transformer(RMT)怎么去实现的 1.Transformer 模型 2.RMT模型  3.计算推理速率 4.渐进学习能力 总结 写到最后 大家好,我是AI大侠,AI领域的专业博主 ChatGPT已经

    2024年02月06日
    浏览(48)
  • ChatGPT的前世今生,到如今AI领域的竞争格局,本文带你一路回看!

      73年前,“机器思维”的概念第一次被计算机科学之父艾伦·图灵(Alan Turing)提出,从此,通过图灵测试成为了人类在AI领域为之奋斗的里程碑目标。 73年后的今天,在AI历经了数十年的不断进化、迭代后,目前为止仍旧没有任何一款AI从真正意义上的通过图灵测试。 而Ch

    2024年02月04日
    浏览(28)
  • 基于Langchain的txt文本向量库搭建与检索

    这里的源码主要来自于Langchain-ChatGLM中的向量库部分,做了一些代码上的修改和封装,以适用于基于 问题 和 包含数据库表描述的txt文件 (文件名为库表名,文件内容为库表中的字段及描述)对数据库表进行快速检索。 splitter.py myfaiss.py embedder.py Config是用来传参的类,这里略

    2024年02月04日
    浏览(25)
  • Win11新建不了文本文档?Win11右键无法新建文本文档的解决方法

    ​Win11系统具有稳定、速度快、系统干净等特点,深受用户的喜爱,但是在使用中难免会出现一些问题,就比如右键无法新建文本文档的情况,出现这一情况的原因很有可能是由于系统文件缺失问题,对此我们一起来看看小编是如何解决的吧。 还有详细的一键重装系统方法

    2024年02月08日
    浏览(51)
  • #langchain | RAG |富文本一致性解析 | NLP # langchain支持的9种PDF内容提取方式

    参考文件: langchain_community.document_loaders.pdf.AmazonTextractPDFLoader How to Extract Data From PDFs Using AWS Textract With Python Amazon Textract langchain-pdf

    2024年04月24日
    浏览(35)
  • LangChain 使用文本描述的方式操作MySQL中的数据

    在 LangChain 中提供了 SQLDatabaseChain ,可以通过语义文本去操作 MySQL 中的数据,例如在 MySQL 中有如下表数据: 用户表 写入测试数据: 角色表 写入测试数据: 工作组表: 写入测试数据: 用户角色关系表 写入测试数据: 用户工作组关系表 写入测试数据: 构建 SQLDatabaseChain 使

    2024年02月14日
    浏览(26)
  • 【Unity每日一记】如何从图片中切割对象(一键切割图集的方法你掌握了吗?)

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【软件设计师高频考点暴击】 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【u

    2024年04月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包