如何使用最大边际相关性(MMR)选择实例:优化相似性与多样性

163 阅读2分钟
## 引言

在构建AI模型时,选择合适的训练或推理示例至关重要。最大边际相关性(Maximal Marginal Relevance, MMR)能够在优化输入相似性的同时,保持选择的多样性。本文将探讨如何使用MMR选择实例,以提高模型的泛化能力和准确性。

## 主要内容

### 什么是最大边际相关性(MMR)

MMR是一种选择示例的技术,综合考虑示例与输入的相似性和示例之间的多样性。它基于余弦相似度来选择与输入最相似的示例,同时惩罚与已选择示例过于接近的候选示例。

### 实现方式

我们可以使用`langchain`库中的`MaxMarginalRelevanceExampleSelector`来实现实例选择。以下代码展示了如何使用该选择器。

```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,
)

# 定义FewShotPromptTemplate
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"],
)

# 使用API代理服务提高访问稳定性
print(mmr_prompt.format(adjective="worried"))

比较:MMR与语义相似性选择

我们可以将MMR选择器与仅基于相似性的选择器进行比较,观察其在选择示例上的差异。

# 使用语义相似性进行选择
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"))

潜在挑战和解决方案

  • 网络限制:由于某些地区的网络限制,访问API可能不稳定。建议使用API代理服务来提高访问稳定性。
  • 参数调优:选择合适的参数如k(选择示例数量)可能需要多次实验。
  • 数据规模:处理大型数据集时,计算相似性可能会面临性能问题。可以考虑分段处理或使用更高效的数据结构。

总结和进一步学习资源

MMR是一种有效的示例选择方法,有助于提高模型的准确性和多样性。通过合理的参数设置和技术调整,我们可以充分发挥其潜力。感兴趣的读者可以进一步研究以下资源:

参考资料

  1. LangChain GitHub: github.com/hwchase17/l…
  2. FAISS GitHub: github.com/facebookres…

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

---END---