使用最大边际相关性选择示例——优化AI模型的多样性和相似性

81 阅读3分钟
# 使用最大边际相关性选择示例——优化AI模型的多样性和相似性

## 引言

在人工智能领域,模型的性能往往依赖于训练集和输入示例的质量。在选择示例时,我们希望既能选择与输入最相似的示例,又能保证所选示例的多样性。最大边际相关性(MMR)示例选择器正是为了解决这一问题而设计的。本文将介绍如何在项目中使用 `MaxMarginalRelevanceExampleSelector` 来优化示例选择,同时提供实用代码示例和常见问题的解决方案。

## 主要内容

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

最大边际相关性是一种选择策略,旨在平衡相似性和多样性。在选择数据示例时,MMR 方法通过计算示例与输入之间的余弦相似度来评估相似性,同时在每次选择后对已选择的示例施加惩罚以优化多样性。

### MMR 示例选择器的工作原理

1. **相似性计算**: 首先,MMR 算法通过计算输入数据与每个示例的余弦相似度来评估相似性。
2. **迭代选择**: 在选择过程中,采用一种迭代的方法,每次选择完一个示例后,对其他示例的选择顺序进行调整,使得所选示例集具有多样性。

### 环境设置和代码实例

下面是一个使用 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"},
]

example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
    examples,
    OpenAIEmbeddings(),  # 使用OpenAI提供的嵌入向量
    FAISS,  # 使用FAISS库进行向量搜索 # 使用API代理服务提高访问稳定性
    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"))

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"))

常见问题和解决方案

  1. 网络限制问题: 在某些地区,访问外部API可能会受到网络限制。建议使用API代理服务来提高访问稳定性和速度。

  2. 多样性与相似性平衡: 调整 k 值来实验不同的示例数量对最终结果的影响,以优化选择策略。

总结和进一步学习资源

通过使用 MaxMarginalRelevanceExampleSelector,可以显著提升模型的示例选择过程,不仅提高输入相似度还增加响应多样性。为了更深入地学习,请参考以下资源:

参考资料

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

---END---