通俗详解:什么是 n-gram 重叠得分?

https://python.langchain.com.cn/docs/modules/model_io/prompts/example_selectors/ngram_overlap

通俗详解:什么是n-gram重叠得分?

n-gram重叠得分是衡量两个句子(或文本)在“连续单词序列”层面相似度的指标,核心作用是判断“用户输入”和“示例句子”的相关性——得分越高,说明两者的语言模式越接近,这也是LangChain中NGramOverlapExampleSelector选择示例的核心依据。

下面从“基础概念→计算逻辑→实际场景”一步步拆解,全程结合你之前接触的翻译任务示例(如“Spot can run.”),确保好懂且不偏离之前的使用场景。

一、先搞懂:什么是n-gram?

n-gram的本质是“连续的n个单词组成的片段”,其中:

  • n 是自定义的整数(常见1、2、3,分别叫1-gram、2-gram、3-gram);
  • gram 可以理解为“词元”,简单说就是“一段连续的单词”。

举个具体例子(用之前的英文示例,和LangChain场景一致):
句子:Spot can run.(去掉标点不影响核心,实际计算会忽略标点/大小写)

  • 1-gram(单个单词):Spotcanrun(每个单词单独算一个)
  • 2-gram(两个连续单词):Spot cancan run(前后两个单词绑定)
  • 3-gram(三个连续单词):Spot can run(整个句子的连续单词)

再比如用户输入 Spot can run fast.

  • 2-gram:Spot cancan runrun fast

二、再理解:什么是“重叠”?

“重叠”就是两个句子之间共有的n-gram片段——简单说,就是“你有我也有”的连续单词序列。

还是用之前的场景举例:
用户输入:Spot can run fast.(简称“输入句”)
示例句子1:Spot can run.(简称“示例1”)
示例句子2:My dog barks.(简称“示例2”)

以最常用的2-gram为例:

  • 输入句的2-gram:Spot cancan runrun fast
  • 示例1的2-gram:Spot cancan run
  • 两者共有的2-gram:Spot cancan run → 这就是“重叠的n-gram”
  • 示例2的2-gram:My dogdog barks → 和输入句没有任何共有的2-gram → 无重叠

三、核心:n-gram重叠得分怎么算?

重叠得分的计算逻辑很简单,本质是“共同拥有的n-gram数量 ÷ 两个句子总共的独特n-gram数量”(专业叫“Jaccard相似度”),最终得分范围是 0.0 ~ 1.0

  • 得分=0.0:完全无重叠(比如输入句和示例2);
  • 得分=1.0:完全重叠(两个句子的n-gram完全一样);
  • 得分越接近1.0:相关性越高。

用上面的例子算一遍(2-gram):

输入句 vs 示例1:

  1. 共同的2-gram数量:2个(Spot cancan run);
  2. 两个句子总共的独特2-gram数量:输入句有3个 + 示例1有2个 - 重复的2个 = 3个(Spot cancan runrun fast);
  3. 重叠得分 = 2 ÷ 3 ≈ 0.67(得分很高,说明示例1和输入句相关性强)。

输入句 vs 示例2:

  1. 共同的2-gram数量:0个;
  2. 总共的独特2-gram数量:3个(输入句)+ 2个(示例2)= 5个;
  3. 重叠得分 = 0 ÷ 5 = 0.0(完全无相关性)。

四、和LangChain的关联:为什么要用这个得分?

在你之前学的NGramOverlapExampleSelector中,n-gram重叠得分的作用是:

  1. 排序示例:得分高的示例(和输入句相关性强)会被排在前面,优先展示给模型;
  2. 过滤示例:通过threshold参数筛选——比如阈值设为0.0时,会自动排除得分=0.0的示例(比如示例2),只保留有重叠的示例;
  3. 适配任务:不用复杂的语义分析,只通过“连续单词序列”就能快速判断相关性,适合翻译、问答等需要“语言模式匹配”的任务。

比如之前的测试场景:

  • 输入句Spot can run fast.和示例1Spot can run.得分≈0.67,所以被排在最前面;
  • 示例See Spot run.的2-gram是See SpotSpot run,和输入句的重叠n-gram只有Spot相关(1-gram层面),得分低于示例1,所以排在第二位;
  • 示例2My dog barks.得分=0.0,阈值设为0.0时就会被排除。

关键总结

  1. n-gram:连续的n个单词(n=1是单个词,n=2是两个连续词,以此类推);
  2. 重叠:两个句子共有的n-gram片段;
  3. 重叠得分:0.0(无关)~1.0(完全相关),算的是“共同n-gram ÷ 总独特n-gram”;
  4. 作用:LangChain用它快速筛选、排序示例,让模型拿到和输入最相关的参考。

要不要我帮你整理一份n-gram重叠得分的计算对照表,把之前LangChain示例中的所有句子两两对比,直观展示得分怎么来的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值