理解 Token 索引 vs 字符位置

以下是对“理解 Token 索引与字符位置的区别”的内容整理,条理清晰,结构完整,保持技术细节,方便阅读,无多余解释:


🔍 理解 Token 索引 vs 字符位置

文本分块方法中返回的索引是 token 索引,而不是原始文本中的字符位置。理解这一点对正确使用和调试文本处理流程至关重要。


📄 原始文本与 Tokenization 的区别

示例文本

"人工智能正在改变世界。"

字符位置(原始文本)

字符
位置012345678910

Token 位置(tokenizer 处理后)

Tokens = ["人", "工", "智", "能", "正", "在", "改", "变", "世", "界", "。"]
索引 =   [0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10]

🔢 各分块方法的返回值示例


1️⃣ 语义分块(chunk_semantically)

text = "人工智能正在改变世界。它使得许多任务自动化。"

Tokenizer 分词结果:

Tokens = ["人", "工", "智", "能", "正", "在", "改", "变", "世", "界", "。","它", "使", "得", "许", "多", "任", "务", "自", "动", "化", "。"]
索引 =    [0,   1,   2,   3,   4,   5,   6,   7,   8,   9,   10,11,  12,  13,  14,  15,  16,  17,  18,  19,  20,  21]

假设返回值为:

[(0, 11), (11, 22)]

表示:

  • 第1块:token索引 0-10,“人工智能正在改变世界。”
  • 第2块:token索引 11-21,“它使得许多任务自动化。”

2️⃣ 固定大小分块(chunk_by_tokens)

text = "人工智能正在改变世界。它使得许多任务自动化。"
chunk_size = 5

返回值示例:

[(0, 5), (5, 10), (10, 15), (15, 20), (20, 22)]

表示:

  • 第1块:token索引 0-4,“人工智能正在”
  • 第2块:token索引 5-9,“改变世界。”
  • 第3块:token索引 10-14,“它使得许多”
  • 第4块:token索引 15-19,“任务自动化”
  • 第5块:token索引 20-21,“。”

3️⃣ 按句子分块(chunk_by_sentences)

text = "人工智能正在改变世界。它使得许多任务自动化。我们需要适应这些变化。"

Tokenizer 分词结果假设为:

句子1"人工智能正在改变世界。" → token索引 0~10  
句子2"它使得许多任务自动化。" → token索引 11~21  
句子3"我们需要适应这些变化。" → token索引 22~33

设置每个块 1 个句子,返回值:

[(0, 11), (11, 22), (22, 34)]

❓ 为什么返回 token 索引?

原因说明
✅ NLP 模型处理的是 token模型输入必须是 token 序列,不能直接处理原始字符
✅ 精确控制长度Token 数量直接决定能否通过模型输入限制(如 BERT 的 512 token)
✅ 对齐后续处理流程向量化、分块拼接、交叉注意力等操作都基于 token 索引进行

🔁 实际代码中的字符位置 → Token 索引映射

部分关键转换流程如下:

# 从 splitter 获取字符级位置
nodes = [(node.start_char_idx, node.end_char_idx)for node in self.splitter.get_nodes_from_documents(...)
]# token_offsets 是 tokenizer 返回的每个 token 的字符起止位置
start_chunk_index = bisect.bisect_left([offset[0] for offset in token_offsets], char_start
)
end_chunk_index = bisect.bisect_right([offset[1] for offset in token_offsets], char_end
)

最终输出的 (start_chunk_index, end_chunk_index) 就是基于 tokenizer 的 token 索引范围

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《异常链机制详解:如何优雅地传递Java中的错误信息?》

大家好呀!👋 作为一名Java开发者,相信你一定见过各种奇奇怪怪的异常报错。但有没有遇到过这样的情况:明明只调用了一个方法,却看到异常信息像俄罗斯套娃一样一层层展开?🤔 这就是我们今天要讲的…

vector 常见用法及模拟

文章目录 1. vector的介绍与使用1.1 vector的构造1.2 vector iterator 的使用1.3 有关大小和容量的操作1.4 vector 增删查改1.5 vector 迭代器失效问题(重点)1.6 vector 中二维数组的使用 2. vector 的模拟实现2.1 拷贝构造和赋值重载的现代写法2.2 memc…

数据结构与算法分析实验11 实现顺序查找表

实现顺序查找表 1.上机名称2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件4.1.2 实现文件4.1.3 源文件 4.2 实现展效果示 上机体会 1.上机名称 实现顺序查找表 顺序查找表的基本概念 顺序查找表是一种线性数据结构,通常用于存储…

实践官方的 A2A SDK Python

内容列表 • 注意• 我的环境• A2A SDK Python 注意 这只是一个原型,并且在快速的变化,本篇教程也随时可能过期,可以在A2AProtocol blog最终更新的文章。 我的环境 • Python 3.13• uv: uv 0.7.2 (Homebrew 2025-04-30)• Warp• Olla…

langchain 接入国内搜索api——百度AI搜索

为什么使用百度AI搜索 学习langchain的过程中,遇到使用search api的时候,发现langchain官方文档中支持的搜索工具大多是国外的,例如google search或bing search,收费不说,很多还连接不上(工具 | LangChain…

[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念

[强化学习的数学原理—赵世钰老师]学习笔记01-基本概念 1.1 网格世界的例子1.2 状态和动作1.3 状态转移1.4 策略1.5 奖励1.6 轨迹、回报、回合1.6.1 轨迹和回报1.6.2 回合 1.7 马尔可夫决策过程 本人为强化学习小白,为了在后续科研的过程中能够较好的结合强化学习来…

Java开发经验——阿里巴巴编码规范经验总结2

摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制,因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…

Java大师成长计划之第18天:Java Memory Model与Volatile关键字

📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在Java多线程编程中,线程…

js前端分片传输大文件+mongoose后端解析

最近一直在完善mongoose做webserver的项目,其中程序升级要通过前端传输升级包到服务器。 因为第一次写前端代码,分片传输的逻辑,网上一堆,大同小异,而且版本啊,API不一致的问题,导致头疼的很。后…

MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构

大家好,我是此林。 目录 1. 前言 2. minimind模型源码解读 1. MiniMind Config部分 1.1. 基础参数 1.2. MOE配置 2. MiniMind Model 部分 2.1. MiniMindForCausalLM: 用于语言建模任务 2.2. 主干模型 MiniMindModel 2.3. MiniMindBlock: 模型的基本构建块…

引言:Client Hello 为何是 HTTPS 安全的核心?

当用户在浏览器中输入 https:// 时,看似简单的操作背后,隐藏着一场加密通信的“暗战”。Client Hello 作为 TLS 握手的首个消息,不仅决定了后续通信的加密强度,还可能成为攻击者的突破口。据统计,超过 35% 的网站因 TL…

Dockerfile 完全指南:从入门到最佳实践

Dockerfile 完全指南:从入门到最佳实践 1. Dockerfile 简介与作用 Dockerfile 是一个文本文件,包含了一系列用于构建 Docker 镜像的指令。它允许开发者通过简单的指令定义镜像的构建过程,实现自动化、可重复的镜像构建。 主要作用&#xf…

Python httpx库终极指南

一、发展历程与技术定位 1.1 历史演进 起源:httpx 由 Encode 团队开发,于 2019 年首次发布,目标是提供一个现代化的 HTTP 客户端,支持同步和异步操作,并兼容 HTTP/1.1 和 HTTP/2。背景: requests 库虽然功…

app加固

1、什么是加固? 我们之前讲的逆向,大多数都是用加密算法去加密一些明文字符串,然后把得到的结果用 Base64、Hex等进行编码后提交。加固其实也一样,只不过他通常加密的是 dex文件而已。但是 dex 文件加密以后,安卓系统是没法直接运行的。所以加固的核心&…

Win全兼容!五五 Excel Word 转 PDF 工具解决多场景转换难题

各位办公小能手们!今天给你们介绍一款超牛的工具——五五Excel Word批量转PDF工具V5.5版。这玩意儿专注搞批量格式转换,能把Excel(.xls/.xlsx)和Word(.doc/.docx)文档唰唰地变成PDF格式。 先说说它的核心功…

springCloud/Alibaba常用中间件之Nacos服务注册与发现

文章目录 SpringCloud Alibaba:依赖版本补充六、Nacos:服务注册与发现1、下载安装Nacos2、服务注册1. 导入依赖(这里以服务提供者为例)2. 修改配置文件和主启动类3. 创建业务类4. 测试 3.服务映射1. 导入依赖2. 修改配置文件和主启动类3. 创建业务类和RestTemplate配置类用来提…

uniapp中score-view中的文字无法换行问题。

项目场景: 今天遇到一个很恶心的问题,uniapp中的文字突然无法换行了。得..就介样 原因分析: 提示:经过一fan研究后发现 scroll-view为了能够横向滚动设置了white-space: nowrap; 强制不换行 解决起来最先想到的是,父…

【STM32 学习笔记】I2C通信协议

注:通信协议的设计背景 3:00~10:13 I2C 通讯协议(Inter-Integrated Circuit)是由Phiilps公司开发的,由于它引脚少,硬件实现简单,可扩展性强, 不需要USART、CAN等通讯协议的外部收发设备,现在被广…

【网络原理】数据链路层

目录 一. 以太网 二. 以太网数据帧 三. MAC地址 四. MTU 五. ARP协议 六. DNS 一. 以太网 以太网是一种基于有线或无线介质的计算机网络技术,定义了物理层和数据链路层的协议,用于在局域网中传输数据帧。 二. 以太网数据帧 1)目标地址 …

控制台打印带格式内容

1. 场景 很多软件会在控制台打印带颜色和格式的文字,需要使用转义符实现这个功能。 2. 详细说明 2.1.转义符说明 样式开始:\033[参数1;参数2;参数3m 可以多个参数叠加,若同一类型的参数(如字体颜色)设置了多个&…