原文出处:Text Comparison Examples 原作者:OpenAI · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与 OpenAI 所有。
OpenAI API 的嵌入(embedding)接口可以用来衡量文本片段之间的关联度或相似度。
嵌入借助了 GPT-3 对文本的理解能力,在无监督学习和迁移学习的基准测试中取得了当时领先的成绩。
嵌入可以用在语义搜索、推荐、聚类分析、近似重复检测等场景。
更多背景可以读 OpenAI 发布的两篇博客公告:
想和其他嵌入模型做横向对比,可以看 Massive Text Embedding Benchmark (MTEB) Leaderboard。
语义搜索
嵌入既能单独用来做搜索,也能作为一个更大系统里的一个组件。
用嵌入做搜索,最简单的做法是这样:
- 搜索之前(预先计算):
- 把你的文本语料切成不超过令牌(token)上限的片段(
text-embedding-3-small的上限是 8,191 个令牌) - 对每个文本片段做嵌入
- 把这些嵌入存进你自己的数据库,或者存进 Pinecone、Weaviate、Qdrant 这类向量检索服务
- 搜索时(实时计算):
- 对搜索词做嵌入
- 在数据库里找出最接近的嵌入
- 返回排名靠前的结果
完整的代码示例见 Semantic_text_search_using_embeddings.ipynb。
在更复杂的搜索系统里,可以把嵌入之间的余弦相似度(cosine similarity)当作众多特征之一,用来给搜索结果排序。
问答
想让 GPT-3 给出可靠的、诚实的回答,最好的办法是把原始文档交给它,让它能在文档里找到正确答案。配合上面的语义搜索流程,你可以用很低的成本在文档语料里检索相关信息,再把这些信息通过提示词(prompt)交给 GPT-3 去回答问题。我们在 Question_answering_using_embeddings.ipynb 里演示了这个做法。
推荐
推荐和搜索很像,区别在于输入不再是自由形式的文本查询,而是一组条目里的某个项目。
用嵌入做推荐的示例见 Recommendation_using_embeddings.ipynb。
和搜索一样,这些余弦相似度分数可以直接拿来给条目排序,也可以作为更大型排序算法里的特征。
定制嵌入
OpenAI 的嵌入模型权重不能微调(fine-tuning),但你仍然可以用自己的训练数据,把嵌入定制到具体应用里。
在 Customizing_embeddings.ipynb 里,我们给出了一种用训练数据定制嵌入的方法。思路是训练一个自定义矩阵,用嵌入向量去乘这个矩阵,得到新的定制嵌入。训练数据够好的话,这个矩阵会帮助你放大与训练标签相关的特征。这个矩阵乘法可以等价地理解为:(a) 修改了嵌入本身,或者 (b) 修改了衡量嵌入之间距离的函数。