RAG机械性分段导致的代词失效上下文缺失
作者: 柠檬叔的絮絮叨叨 来源: 柠檬叔的絮絮叨叨
很多文档,应该是用了代词,比如他、它、她这类的,这很自然,人类的语言在第一次提及某件事物之后就可以用代词来替代了,但是rag以及llm用到了chunk这个概念,也就是说,机械性得将文档分段之后,这个指代的指针丢失了上下文,scope没了,直接导致傻眼了🙄
所以….在搞之前我想了想,可能需要做代词展开[破涕为笑][破涕为笑][破涕为笑],这尼玛,把自然语言当作形式语言来理解时发现,还挺闹心的
查阅了许多文档后,发现这不是我一个人在闹心的事情。
以前在企业级应用里搞过es,所以直觉上知道尽可能把文档弄小一点,内容上内聚一点,对召回率这些会有帮助。
但这几日在于抖音的豆包的对话中,我才意识到了。
豆包错把凯撒父亲担任过的官职,作为了凯撒17岁的官职
我就在想大模型为何会犯这个错误?
我百思不得其解哦案后搜了一下百度发现。财务官在百度的结果里,是凯撒父亲的官职
虽然我也忘记了凯撒父亲的实际情况(这不重要哈)
但我今天在仔细想rag的分段的时候,我恍然大悟了。
机器一定是因为代词scope的问题产生了混乱。
也就是很多论文里提到的chunk和上下文丢失问题。
我在给rag的chromdb输入经过精心挑选过的文档时,有意识到这个问题
所以很多文档里的描述,我做了人工的上下文调整。
但这个微调的前提是在于我这个输入者需要对文档背后的内容极其熟悉
这其实对于大规模自动化来说,是不可接受的。
所以也许这也是为什么使用知识图引擎来作为rag输入确定性更好的原因吧
但是图引擎有一个哲学性的恶心问题,我不知道图数据库是否有注意到
那就是诸法无常,图数据库和sql往往没有时间
sql关系数据库里的记录是有时间的
理论上来说,记录关系的关系记录上面也可以带有timestampe
但是图数据库里,依据我的记忆,好像没有特别的支持
也不是啥大事,我的意思是,对象之间的关系往往随着时间会产生变化,而这其实也是知识的一部分。
当下llm经常也会产生很多时空错乱的幻觉,当然我觉得这种现象也可以简单的成为,时空幻觉。
比如说自己(凯撒)在公元前270年担任过执政官(他生于前100前哈)
更多AI工具,参考Github-AiBard123,国内AiBard123