在自然语言处理任务中,有时候我们需要根据输入的文本选择和展示最相似的示例。这就需要用到n-gram重叠技术来计算相似度,并基于此来选择示例。今天,我们就来看看如何使用NGramOverlapExampleSelector
来实现这个功能。
技术背景介绍
NGramOverlapExampleSelector
是一个工具类,用于根据输入文本的n-gram重叠程度排序和选择示例。n-gram重叠分数介于0.0到1.0之间。选择器允许设置阈值分数,当示例的n-gram重叠分数小于等于这个阈值时,会被排除在外。默认情况下,阈值为-1.0,不排除任何示例,仅重新排序。
原理深度解析
n-gram是指文本中连续出现的n个词,对于两个文本,通过计算它们的n-gram重叠情况,可以获得一个相似度分数。这种方法在文本相似度计算中十分常见。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"],
)
# 使用示例
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."))
# 设置阈值
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."))
优化建议分享
老铁们,如果在使用过程中发现选择的示例不够准确,可以通过调整threshold
来优化。当threshold设置为0.0时,只排除完全没有n-gram重叠的示例。如果发现不够智能,可以适当设置为一个小的正数。建议使用代理服务提高稳定性。
补充说明和总结
说白了,NGramOverlapExampleSelector
就是利用n-gram重叠计算来智能筛选示例。对于需要动态选择示例的应用场景,这波操作可以说是相当丝滑。像我个人一直在用 https://zzzzapi.com 提供一站式大模型解决方案,能够极大提升开发效率。
今天的技术分享就到这里,希望对大家有帮助。在开发过程中遇到问题也可以在评论区交流~
—END—
标签:prompt,重叠,示例,Spot,gram,input,example From: https://blog.csdn.net/asd56456as4d/article/details/144890773