自然语言处理:第一百一十章 Dify 分段模式中的父子模式

本人项目地址大全:Victor94-king/NLP__ManVictor: CSDN of ManVictor


写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!

写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!

写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!


在 Dify 的 v0.15.0 版本中引入了新的分段模式——父子模式。官方介绍使用该模式可以在一定程度上增强知识库的检索能力和理解能力,从而显著提高 AI 生成回答的质量和准确度。

解决了什么问题?

首先,在知识库检索中会有两种不利于生成准确回答的情况:

  • 检索的结果是比较准确的,但是结果是从不同的分段中拿到的,比较分散,导致没有一个完整的上下文提供给 AI;
  • 检索的结果不太精准,比较泛化,和上面一条刚好相反,上下文可能够了,但是精准度不够。

要解决上述问题,要做到两点:

  • 合适的分块;
  • 平衡精准度和上下文之间的效果。

这就是父子检索模式诞生的背景以及它在 RAG 中解决的问题。

运行原理

简单来说:先整体后细化。

  • 子模块匹配查询:先进行子块进行精准打击,这一部分会拆得比较细,甚至一句话就是一个块;
  • 父模块提供上下文:然后根据匹配到的子块找到对应的父级,补充一下这块的信息,丰富一下匹配内容。

下图是 Dify 官网提供的父子模式关系图。

图片

举个简单点的例子:学校-年级-班级-学生。

假如我们要找小明,子模式检索出来的结果是某班级的小明或者小明本人,父模式就是提供小明所在的年纪、学校、以及在学校里的排名和表现等等。

实测

说了这么多都是对父子模式的解释说明,现在我们来一起看看它在检索这块的能力到底如何~

为了能让大家有更加清晰的对比,除了知识库所用的分段模式不同之外,这里我们将上传同样的文件、使用同样的嵌入模型和 Rerank 模型。

  • 嵌入模型:BAAI/bge-m3;
  • Rerank 模型:BAAI/bge-reranker-v2-m3;
  • 文件:JavaScript 高级程序设计第四版 PDF;
通用模式

在召回测试中找到了三个召回段落:

图片

集成到 Agent 中进行对话:

图片

召回率为两个 0.63。

父子模式

在召回测试中找到了6个召回段落:

图片

集成到 Agent 中进行回答:

图片

召回率为 0.74 和 0.72。

由此可见,父子模式下,检索召回的能力确实得到了提升。

但是随着检索能力提升带来的是分段时间的增长,父子模式下同样的文件花费了将近 20 分钟,而通用模式只需要 5 分钟。

### 分段正则表达式的使用方法 分段正则表达式通常用于处理复杂的字符串模式匹配,通过将整个表达式分解成多个部分来提高可读性和维护性。下面是一个具体的例子,在Python中实现一个分段正则表达式用来验证电子邮件地址。 #### 验证邮件地址的分段正则表达式实例 为了构建更清晰易懂的正则表达式,可以将其拆分为几个逻辑片段: - 用户名部分:由字母、数字、下划线(_)、连字符(-)组成; - 主机域名部分:至少包含两个子域,顶级域名长度为2到6个字符; ```python import re email_pattern = r""" ^ # 字符串起始位置 ([\w.-]+) # 用户名: 匹配单词字符(\w), 点(.), 和减号(-),一次或多次(+) @ # '@' 符号 ([\w-]+\.) # 域名主体: 单词字符加可能存在的连接符('-')后面跟一个小数点 +([a-zA-Z]{2,6})$ # TLD (Top Level Domain): 英文字母组成的顶级域名,长度介于2至6之间 """ def is_valid_email(email): match_obj = re.match(email_pattern, email, flags=re.X | re.I) return bool(match_obj) test_emails = ["example@domain.com", "invalid-email@", "another.example@sub-domain.co.uk"] for test in test_emails: print(f"{test}: {is_valid_email(test)}") ``` 上述代码定义了一个名为`email_pattern` 的多行字符串作为正则表达式模板[^1]。这里利用了re模块中的VERBOSE标志(re.X),允许在正则表达式内部加入空白和注释,从而让其结构更加直观明了。此外还启用了IGNORECASE选项(re.I),使得大小写不敏感。 该示例展示了如何创建易于理解和调试的复杂正则表达式,并提供了实际应用案例——即检查给定字符串是否符合标准电邮格式的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼城周杰伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值