模型抽取结果附原文位置,中文与表情混在一起时怎样校验偏移
模型返回引文位置 start=3,end=5,必须先问单位是什么。Python 字符串索引按 Unicode 码点,JavaScript 常见字符串接口使用 UTF-16 代码单元,文件读取又可能按 UTF-8 字节。同一对数字在中文与表情混排时,能指向完全不同的文本。
给区间一个完整合同
本文采用含头不含尾区间,原文为“甲😀乙丙”,要引用“乙丙”。按码点是 [2,4),按 UTF-16 代码单元是 [3,5),按 UTF-8 字节是 [7,13)。表情占一个码点、两个 UTF-16 单元和四个 UTF-8 字节,不能把三个长度都叫字符数。
证据记录除起止值外,还包含 unit、quote 和原文字节摘要。偏移是否为整数也需校验,布尔值不能借用 Python 的整数关系混入。开始不得小于零,结束不得超过对应单位长度,空区间是否允许由任务合同决定;本例的证据引文不允许为空。
切回原文是最直接的核对
码点区间直接切字符串;UTF-16 区间先在规定端序的字节表示上按双字节定位,再严格解码;UTF-8 区间在编码字节上切片后严格解码。若边界落在一个字符内部,解码应失败,不用替换字符把它勉强显示出来。最后统一比较取回文本是否逐字等于 quote。
附件三组合法坐标都应还原“乙丙”。错把码点坐标标成 UTF-8 的反例会落到错误边界,预期拒收。另一反例使用更新过的原文,即使同一范围碰巧还能切出目标词,也因为摘要不符而被隔离。证据必须绑定版本,不能脱离来源文本漂移。
重复引文不能靠第一次搜索修正
真实文档可能出现两次相同短语。只执行 find(quote) 会得到第一次出现的位置,无法证明模型原本引用的是哪一段。应该先验给定区间,再结合段落或文档标识判断语境;失败时留待重取证据,不自动移动到任意一个能匹配的位置。
对原文做换行归一或 Unicode 归一也会改变坐标。若项目确实需要归一,应保存归一版本及其摘要,并说明坐标建立在这个版本上。不要从网页抽取后的文本得到位置,再拿原始 HTML 字节去验证,两者不是同一个空间。
这份检查证明位置与引文一致,不能证明引文支持答案。比如原文是“不适用于续约客户”,位置完全正确,但答案声称适用,仍属语义错误。位置验收和证据支持判断要分别记录,合成样本也不能用来宣称某个模型的抽取准确率。
配套文件与依据
本文的合成输入和参考结果可下载独立样本 a012.json,离线检查器 a012.py与样本放在同一目录后运行。检查器不调用模型接口。 使用 Python 3.12 或兼容版本,将上述文件下载到同一目录,执行 python a012.py。
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。