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

AI(学习笔记第七课) 使用langchain进行文本切割

文章目录

  • AI(学习笔记第七课) 使用langchain进行文本切割
  • 学习内容:
    • 1.为什么需要文本切割(`Text split`)
      • 1.1 学习`url`
      • 1.2 为什么需要`split`文本
      • 1.3 `split`文本方法的种类
        • 1.3.1 (固定长度split)基于`tocken`--Token-based
        • 1.3.2 (固定长度split)基于`character`--Character-based
    • 2.`langchain`的文本切割(`Text split`)
      • 2.1 `langchain`的文本切割代码(固定长度-token-based)
      • 2.2 `langchain`的文本切割代码(固定长度-character-based)
    • 3. 下次内容

AI(学习笔记第七课) 使用langchain进行文本切割

  • 为什么需要文本切割(Text split)以及如何切割

学习内容:

  • 为什么需要文本切割(Text split)
  • 常见的文本切割的方法(approaches)
  • langchain文本切割示例

1.为什么需要文本切割(Text split)

1.1 学习url

  • langchain的文本切割文档
    在这里插入图片描述

1.2 为什么需要split文本

  • 现实世界的文本都是不规则长度的,需要将它们进行split,保证统一的尺寸。
  • 克服model的限制,模型一般都有一次的输入文本大小的限制。所以需要提前对文本进行split,以免超过model的尺寸限制。
  • 保证模型处理的质量,对于超大的文本,模型的处理精度会明显下降,所以需要将大文本split成小文本。
  • 提高检索精度,对于检索系统,小文本的输入能够提高检索的精度。
  • 优化计算computational资源,对于大的文本,计算资源消耗很大,而且返回结果会很慢。

1.3 split文本方法的种类

1.3.1 (固定长度split)基于tocken–Token-based

什么是token?同样,让AI回答这个问题。(解释下ai中的token@deepseek

  • 一句话核心解释
    Token是AI模型理解和生成文本(或代码、图像)时使用的基本单位。 你可以把它想象成AI世界的“原子”或“乐高积木”。
  • Token是什么?它不是简单的“词”
    很多人会认为一个Token就对应一个英文单词或一个汉字,但这并不完全准确。
    对于英文文本:一个Token通常可以是一个单词(例如:“apple”)、一个词根(例如:“un” 在 “undo” 中),甚至一个标点符号(例如:“!”)。
    例子:句子 “Don’t hesitate to ask!” 可能会被拆分成以下Tokens:[“Don”, “'”, “t”, " hesitate", " to", " ask", “!”]。你看,“Don’t” 被拆成了3个Token。
    对于中文文本:由于中文没有空格分隔,处理方式不同。通常,一个汉字或一个常见的词组会被视为一个Token。
    例子:句子 “我喜欢吃苹果” 可能会被拆分成:[“我”, “喜欢”, “吃”, “苹果”]。这里每个单元都是一个Token。
    关键点:Token是统计和语义上的单位,而不是严格的“单词”。模型通过海量数据学习,确定了如何拆分文本能最有效地捕捉含义和模式。
  • 为什么需要Token?直接处理字符不行吗?
    直接处理字符(比如每个英文字母或每个汉字)从技术上是可行的,但效率极低,原因如下:
    词汇量爆炸:如果以字符为单位,模型需要学习的组合方式太多(26个字母可以组成无数单词),导致模型非常庞大和低效。
    语义丢失:单词或词组的含义远大于单个字符的简单相加。“狗”和“猫”作为整体Token,比拆成笔画或拼音更能表达其明确的概念。
    效率与性能的平衡:Token化在“字符的细粒度”和“单词的粗粒度”之间找到了一个完美的平衡点。它既保留了足够的语义信息,又将输入控制在了可管理的规模。
  • Token是AI世界中的“计价单位”和“资源限制单位”
    • 计费基础:无论是OpenAI、Anthropic还是其他厂商,API的收费基本都是按Token数量计算的(输入和输出的Token总和)。理解Token能帮你更好地估算使用成本。
    • 上下文窗口(Context Window):这是模型一次能处理的最大Token数量(包括你的输入和它的输出)。你经常听到的“128K上下文”,就是指模型最多能同时处理128,000个Token。
    • 如果你的对话(历史记录+新问题+回复)超过了这个限制,最早的信息就会被“遗忘”(从输入中移除)。
1.3.2 (固定长度split)基于character–Character-based

这里,不采用AI专属的概念token进行分割,可以采用人类识别的character进行分割。但是API接口不一样。

2.langchain的文本切割(Text split)

2.1 langchain的文本切割代码(固定长度-token-based)

import asyncio
import bs4,os
from langchain_community.document_loaders import WebBaseLoader,UnstructuredURLLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
page_url = "https://python.langchain.com/docs/how_to/chatbots_memory/"
import tiktoken
async def load_partial_web():loader = WebBaseLoader(web_paths=[page_url],bs_kwargs={"parse_only"
http://www.xdnf.cn/news/20481.html

相关文章:

  • 面试开发工程师需要做哪些准备
  • FMC与FSMC
  • 基于扰动观察法(PO)的光伏最大跟踪策略Simulink
  • 源码部署mysql8.0.40
  • 如何客观判断自身选择的方法可持续成长和收获?
  • RPC 和 HTTP 的区别
  • 网络中的PAT:小端口映射的大能量
  • 4.存储虚拟化
  • Linux系统检测硬盘失败解救方法
  • 计算机组成原理:计算机硬件的基本组成
  • 零基础学习数据采集与监视控制系统SCADA
  • 【C++】vector 深度剖析及模拟实现
  • Jmeter性能测试
  • 【读文献】Buffer和level shift的偏置电压设计
  • Day21 保护操作系统
  • 【01背包问题变体】P1282 多米诺骨牌
  • MySQL集群高可用架构之组复制 (MGR)
  • 校园洒水车cad+三维图+设计说书
  • 金属也有“记忆力”?—聊聊二合一玛哈特矫平机如何“消除”金属的记忆
  • 修复存在坏块或05、C4、C5 S.M.A.R.T错误的硬盘
  • Spring Cloud Alibaba快速入门02-Nacos
  • FRCNet
  • Fab资源快速导入UE
  • Shell 脚本实现系统监控与告警
  • Spring Boot中MyBatis的定义与使用
  • IOC为什么交由spring容器管理?
  • 操作系统研发工作心得体会 - 于复杂性中构建秩序
  • 每日一题(2)
  • MySQL学习记录-索引
  • 携程社招前端面经