Skip to main content

根据n-gram重叠选择

NGramOverlapExampleSelector根据与输入最相似的示例选择和排序示例,根据ngram重叠得分。ngram重叠得分是一个介于0.0和1.0之间的浮点数,包括0.0和1.0。

该选择器允许设置阈值得分。ngram重叠得分小于或等于阈值的示例将被排除。默认情况下,阈值设置为-1.0,因此不会排除任何示例,只会重新排序它们。将阈值设置为0.0将排除与输入没有ngram重叠的示例。

from langchain.prompts import PromptTemplate  
from langchain.prompts.example_selector.ngram_overlap import NGramOverlapExampleSelector
from langchain.prompts import FewShotPromptTemplate, PromptTemplate

example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="输入:{input}\n输出:{output}",
)

# 这些是一个虚构任务创建反义词的示例。
examples = [
{"input": "快乐", "output": "悲伤"},
{"input": "高", "output": "矮"},
{"input": "精力充沛", "output": "无精打采"},
{"input": "晴朗", "output": "阴沉"},
{"input": "有风", "output": "平静"},
]

API参考:

# 这些是一个虚构的翻译任务的示例。
examples = [
{"input": "看见Spot跑。", "output": "Ver correr a Spot."},
{"input": "我的狗叫。", "output": "Mi perro ladra."},
{"input": "Spot会跑。", "output": "Spot puede correr."},
]
example_prompt = PromptTemplate(  
input_variables=["input", "output"],
template="输入:{input}\n输出:{output}",
)
example_selector = NGramOverlapExampleSelector(
# 这些是可供选择的示例。
examples=examples,
# 这是用于格式化示例的PromptTemplate。
example_prompt=example_prompt,
# 这是选择器停止的阈值。
# 默认情况下设置为-1.0。
threshold=-1.0,
# 对于负阈值:
# 选择器按ngram重叠得分对示例进行排序,并不排除任何示例。
# 对于大于1.0的阈值:
# 选择器排除所有示例,并返回一个空列表。
# 对于等于0.0的阈值:
# 选择器按ngram重叠得分对示例进行排序,
# 并排除与输入没有ngram重叠的示例。
)
dynamic_prompt = FewShotPromptTemplate(
# 我们提供一个ExampleSelector而不是示例。
example_selector=example_selector,
example_prompt=example_prompt,
prefix="给出每个输入的西班牙语翻译",
suffix="输入:{sentence}\n输出:",
input_variables=["sentence"],
)
# 一个与"Spot会跑。"有很大ngram重叠的示例输入,
# 与"My dog barks."没有重叠。
print(dynamic_prompt.format(sentence="Spot can run fast."))

给出每个输入的西班牙语翻译

输入:Spot会跑。
输出:Spot puede correr。

输入:看见Spot跑。
输出:Ver correr a Spot。

输入:我的狗叫。
输出:Mi perro ladra。

输入:Spot can run fast.
输出:
# 您也可以将示例添加到NGramOverlapExampleSelector中。
new_example = {"input": "Spot玩接球。", "output": "Spot juega a buscar."}

example_selector.add_example(new_example)
print(dynamic_prompt.format(sentence="Spot can run fast."))

给出每个输入的西班牙语翻译

输入:Spot会跑。
输出:Spot puede correr。

输入:看见Spot跑。
输出:Ver correr a Spot。

输入:Spot玩接球。
输出:Spot juega a buscar。

输入:我的狗叫。
输出:Mi perro ladra。

输入:Spot can run fast.
输出:
# 您可以设置一个阈值,排除示例。
# 例如,将阈值设置为0.0
# 排除与输入没有ngram重叠的示例。
# 由于"My dog barks."与"Spot can run fast."没有ngram重叠,
# 它被排除。
example_selector.threshold = 0.0
print(dynamic_prompt.format(sentence="Spot can run fast."))

给出每个输入的西班牙语翻译

输入:Spot会跑。
输出:Spot puede correr。

输入:看见Spot跑。
输出:Ver correr a Spot。

输入:Spot玩接球。
输出:Spot juega a buscar。

输入:Spot can run fast.
输出:
# 设置小的非零阈值
example_selector.threshold = 0.09
print(dynamic_prompt.format(sentence="Spot can play fetch."))

给出每个输入的西班牙语翻译

输入:Spot会跑。
输出:Spot puede correr。

输入:Spot玩接球。
输出:Spot juega a buscar。

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

给出每个输入的西班牙语翻译

输入:Spot can play fetch.
输出: