首页 > 其他分享 >大模型agent开发之transformer

大模型agent开发之transformer

时间:2024-09-08 16:28:07浏览次数:6  
标签:transformer text 模型 agent token 文档 长度 文本 chunk

文档转换器

将文档分成小的,有意义的语句块。
将小的块组合成一个更大的块,直到达到一定大小。
一旦达到一定大小,接着开始创建与下一个块重叠的部分。

 

1. 分割文档

文档分割可以使用langchain组件中的RecursiveCharacterTextSplitter方法,这是一种文本分割器。可以根据指定的字符或者字符集进行递归分割,并且可以尽可能保持内容的完整性和连贯性。

    def doc_segment(self, file):
        # 加载要分割的文档
        with open(file) as f:
            fragment = f.read()

        # 初始化分割器
        text_splitter = RecursiveCharacterTextSplitter(
            chunk_size=50,  # 切割文本块大小,一般通过长度函数计算
            chunk_overlap=20,  # 切分的文本块重叠大小,一般通过长度函数计算
            length_function=len,  # 长度函数,也可以传递tokensize函数
            add_start_index=True,  # 是否添加起始索引
        )
        text = text_splitter.create_documents([fragment])

        return text

这里chunk_size指定了每个文本块的最大长度,chunk_overlap指定了相邻块之间的重叠部分。length_function表示使用的长度函数,add_start_index添加起始索引。

2. 分割字符串

langchain组件中也可以使用CharacterTextSplitter作为文本分割器,这是一种基于字符串分割的简单分割器。这是一种按照预设字符串长度将文本划分为较小的段落,适合处理简单任务,将一段文本分会固定大小的块。

  def str_segment(self, str_data):
        # 加载要分割的文档
        with open(str_data) as f:
            fragment = f.read()
        # 初始化分割器
        text_splitter = CharacterTextSplitter(
            chunk_size=50,  # 切割文本块大小,一般通过长度函数计算
            chunk_overlap=20,  # 切分的文本块重叠大小,一般通过长度函数计算
            length_function=len,  # 长度函数,也可以传递tokensize函数
            add_start_index=True,  # 是否添加起始索引
            is_separator_regex=False,  # 是否使用正则表达式
        )
        text = text_splitter.create_documents([fragment])
        return text

3. 代码文档分割

RecursiveCharacterTextSplitter.from_language() 是 Langchain 中 RecursiveCharacterTextSplitter 类的一个静态方法,用于根据指定的语言作为文本分割器并且支持解析编程语言。

    def code_segment(self, code_file):

        py_spliter = RecursiveCharacterTextSplitter.from_language(
            language=Language.PYTHON,
            chunk_size=50,
            chunk_overlap=10,
        )
        python_doc = py_spliter.create_documents([code_file])
        return python_doc

这里的language参数为指定的语言。

4. token文本分割

CharacterTextSplitter.from_tiktoken_encoder是Langchain中CharacterTextSplitter类的静态方法,主要是利用OpenAI中tiktoken库来基于token长度来进行文本分割。

 def token_segment(self, token_data):
        # 要分割的文档
        with open(token_data) as f:
            frgment = f.read()
        text_spliter = CharacterTextSplitter.from_tiktoken_encoder(
            encoding_name="gpt-3.5-turbo", #指定 tiktoken 编码器
            chunk_size=4000,  # 切割文本块大小,一般通过长度函数计算
            chunk_overlap=30,  # 切分的文本块重叠大小,一般通过长度函数计算
        )
        text = text_spliter.create_documents([frgment])

        return text

这里的encoding_name参数指定模型作为tiktoken的编码器,默认模型为gpt-3.5-turbo。

5. 文档总结和翻译

文档总结和翻译需要安装doctran

pip install doctran

doctran是专门进行文档翻译、总结和精练的库。

   # 文档总结翻译
    def summ_trans_doc(self, file):
        doctrans = Doctran(
            openai_api_key="http://localhost:11343/api/chat",
            openai_model="llama3",
            openai_token_limit=8000
        )
        docments = doctrans.parse(content=file)
        # 总结文档&翻译&精练文档
        translated_summary = docments.summarize(token_limit=800).translate(language="chinese").refine(
            topics=["test1", "test2"]).execute()
        return translated_summary=

doctrans.parse用于解析输入file的内容。

.summarize()对文档进行总结,通过token设置来限制总结内容大小。

.translate()将文档总结翻译成中文。

.refine()对文档根据指定的主题进行精练。

.execute()执行整个链式操作并获取结果。

标签:transformer,text,模型,agent,token,文档,长度,文本,chunk
From: https://www.cnblogs.com/Ethereal-hzc/p/18402864

相关文章

  • VMD-CNN-BiLSTM(变分模态分解-卷积神经网络-双向长短记忆网络)组合预测模型
      VMD-CNN-BiLSTM是一种结合了变分模态分解(VariationalModeDecomposition,VMD)、卷积神经网络(ConvolutionalNeuralNetwork,CNN)和双向长短记忆网络(BidirectionalLongShort-TermMemory,BiLSTM)的复合模型。该模型主要用于处理和分析时间序列数据,特别是在预测和分析复......
  • 基于大语言模型智能体的自主机器学习
    文章介绍了MLR-Copilot框架,这是一种利用大型语言模型(LLMs)来自动化机器学习研究中创意生成、实验设计和实施过程的方法。该框架分为三个阶段:首先通过阅读现有研究文献,使用LLM驱动的IdeaAgent来生成研究假设和实验计划;其次,ExperimentAgent将这些计划转换为可执行的代码,并检索原型代码......
  • 如何评估不同预训练任务对MLM模型性能的影响?
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • 8G 显存玩转书生大模型 Demo
    8G显存玩转书生大模型Demo首先第一步依旧是创建我们的开发机,选择上我们需要选择10%的开发机,镜像选择为Cuda-12.2。在输入开发机名称后,点击创建开发机。这里就不放创建的流程图了环境配置#创建环境condacreate-ndemopython=3.10-y#激活环境condaactivate......
  • PNAS | 基因组预训练网络模型精准预测 DNA 突变
    ❝我们能教会计算机理解人类语言,同样也能让它们读懂DNA。2023年10月31日,加利福尼亚大学伯克利分校的科学家们在《美国科学院院刊》(PNAS)上发表了一篇突破性研究,提出了一种基于无监督DNA语言模型的新方法,该方法在全基因组范围内预测基因变异效果上,超越了现有的保守性评分模型。......
  • 音频-语言大模型原理
    重磅推荐专栏:《大模型AIGC》《课程大纲》《知识星球》本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和StableDiffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经验......
  • 深入FastAPI:掌握使用多个关联模型的高级用法
    在构建RESTfulAPI时,经常需要处理复杂的数据关系。FastAPI通过支持多个关联模型,使得定义这些关系变得简单直观。这种方法不仅提高了代码的可维护性,还增强了API的灵活性。通过使用Pydantic库,我们可以轻松定义数据模型及其关联,从而在FastAPI应用中实现强大的数据处理逻辑。无论是一对......
  • 直接训练SNN:从LIF模型到MNIST分类的完整实战【含源码】
    我们计划使用原生Python代码直接训练SNN,并在相同的精度、超参数和网络结构下与SpikingJelly进行精度对比。以下是基准方法和相关教程的链接:时间驱动:使用单层全连接SNN识别MNIST—SpikingJellyalpha文档在直接训练SNN时,我们需要实现以下三个方面:LIF神经元:实现充电、......
  • solidworks模型导出urdf(超详细)
    目录写在前面的话1solidworks文件2安装sw2urdf插件3完整步骤3.1设置基准轴3.2设置点3.3设置坐标轴3.4设置sw2urdf参数3.5导出可能的问题3.6ros2编译3.7成功结果画面写在前面的话刚进组1个月,我的博士研究方向是自动驾驶,还没入门,先看了古月居的ros2框架课......
  • 数据分析训练模型后输出模型评估报告
    数据分析训练模型后输出模型评估报告1、模型评估指标1.1、概念:A:n个正样本,检测到是真值的数量B:m个负样本,检测到是真值的数量C:n个正样本,检测到假值的数量D:m个负样本,检测到假值的数量1.2、准确率(Accuracy)正确预测的样本数量与总样本数量的比值。优点:易于理解和计......