首页 / 资料库 / OpenAI 实践手册

资料库8 分钟读完MITOpenAI文本比对嵌入

文本对比的几种做法

译自《Text Comparison Examples》 · 查看英文原文

原文出处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 个令牌)
  • 对每个文本片段做嵌入
  • 把这些嵌入存进你自己的数据库,或者存进 PineconeWeaviateQdrant 这类向量检索服务
  • 搜索时(实时计算):
  • 对搜索词做嵌入
  • 在数据库里找出最接近的嵌入
  • 返回排名靠前的结果

完整的代码示例见 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) 修改了衡量嵌入之间距离的函数。

这篇在讲什么,跟咱们的课怎么对?

资料库是大厂公开教材的中文译本,偏原理和工程做法。想看面向中小企业的白话版本,去入门课场景课