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(单个单词):
Spot、can、run(每个单词单独算一个) - 2-gram(两个连续单词):
Spot can、can run(前后两个单词绑定) - 3-gram(三个连续单词):
Spot can run(整个句子的连续单词)
再比如用户输入 Spot can run fast.:
- 2-gram:
Spot can、can run、run fast
二、再理解:什么是“重叠”?
“重叠”就是两个句子之间共有的n-gram片段——简单说,就是“你有我也有”的连续单词序列。
还是用之前的场景举例:
用户输入:Spot can run fast.(简称“输入句”)
示例句子1:Spot can run.(简称“示例1”)
示例句子2:My dog barks.(简称“示例2”)
以最常用的2-gram为例:
- 输入句的2-gram:
Spot can、can run、run fast - 示例1的2-gram:
Spot can、can run - 两者共有的2-gram:
Spot can、can run→ 这就是“重叠的n-gram” - 示例2的2-gram:
My dog、dog 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:
- 共同的2-gram数量:2个(
Spot can、can run); - 两个句子总共的独特2-gram数量:输入句有3个 + 示例1有2个 - 重复的2个 = 3个(
Spot can、can run、run fast); - 重叠得分 = 2 ÷ 3 ≈ 0.67(得分很高,说明示例1和输入句相关性强)。
输入句 vs 示例2:
- 共同的2-gram数量:0个;
- 总共的独特2-gram数量:3个(输入句)+ 2个(示例2)= 5个;
- 重叠得分 = 0 ÷ 5 = 0.0(完全无相关性)。
四、和LangChain的关联:为什么要用这个得分?
在你之前学的NGramOverlapExampleSelector中,n-gram重叠得分的作用是:
- 排序示例:得分高的示例(和输入句相关性强)会被排在前面,优先展示给模型;
- 过滤示例:通过
threshold参数筛选——比如阈值设为0.0时,会自动排除得分=0.0的示例(比如示例2),只保留有重叠的示例; - 适配任务:不用复杂的语义分析,只通过“连续单词序列”就能快速判断相关性,适合翻译、问答等需要“语言模式匹配”的任务。
比如之前的测试场景:
- 输入句
Spot can run fast.和示例1Spot can run.得分≈0.67,所以被排在最前面; - 示例
See Spot run.的2-gram是See Spot、Spot run,和输入句的重叠n-gram只有Spot相关(1-gram层面),得分低于示例1,所以排在第二位; - 示例2
My dog barks.得分=0.0,阈值设为0.0时就会被排除。
关键总结
- n-gram:连续的n个单词(n=1是单个词,n=2是两个连续词,以此类推);
- 重叠:两个句子共有的n-gram片段;
- 重叠得分:0.0(无关)~1.0(完全相关),算的是“共同n-gram ÷ 总独特n-gram”;
- 作用:LangChain用它快速筛选、排序示例,让模型拿到和输入最相关的参考。
要不要我帮你整理一份n-gram重叠得分的计算对照表,把之前LangChain示例中的所有句子两两对比,直观展示得分怎么来的?
2303

被折叠的 条评论
为什么被折叠?



