如何使用Embedding提升回答质量
summary
使用 embedding 计算语料和提问的相似度,在 prompt 里补充相对准确的上下文语料 (prompt design),来获取更准确的回答
OpenAI 提供了 Completion API 来实现问答的功能。但是它只提供了固定的 models,用户不能修改他们的 model,不过可以使用 fine-tune 来生成自己的 model。
但是如果我们有自己的语料库,如何才能让 GPT-3 根据我们的语料来生成正确的答案呢?
为什么不直接用 fine-tune
为了提高问答质量, Open AI 提供了 fine-tune 可以对 prompt 和 completion 进行调优,
虽然 fine-tune 可以稍微提升质量,让 API 更好的理解你的 prompt ,并输出更符合预期的结果,
但是它主要是为了节省每次 completion 提供相同 prompt 的 tokens,把类似的 prompt 可以训练成: 只需要更改具体问题,而不用重复写 context、example 。
比如我们训练
{
"prompt":"Company: BHFF insurance\nProduct: allround insurance\nAd:One stop shop for all your insurance needs!\nSupported:",
"completion":" yes"
}
{
"prompt":"Company: Loft conversion specialists\nProduct: -\nAd:Straight teeth in weeks!\nSupported:",
"completion":" no"
}
后面我们只需要提供 prompt
Company: Reliable accountants Ltd Product: Personal Tax help Ad:Best advice in town! Supported:
OpenAI 就会利用 fine-tune 学到的知识,自动返回 "yes" 或者 "no"
如果不进行 fine-tune,那么需要在每次 completion 都需要给 GPT 一个例子
Examples:*
Company: BHFF insurance
Product: allround insurance
Ad:One stop shop for all your insurance needs!
Supported: yes *
Company: Loft conversion specialists
Product: -
Ad:Straight teeth in weeks!
Supported: no
Q:Company: Reliable accountants Ltd Product: Personal Tax help Ad:Best advice in town!Supported:
可见,fune-tune 可以节省大量的请求 tokens,以减少使用费用(按 tokens 计费)
使用 Embedding
目前为了提高问答「准确率」,有两个优化方向
- 增加训练集
- 增加提问上下文,答案就在其中
OpenAI 是不允许用户来训练数据的,他的 model 是固定且通用的。所以增加训练集数据并不可行。
我们只能使用方法 2 :提供提问上下文(context)。
在 OpenAI GPT-3 API 提供的能力中,可以在 prompt 中增加上下文,来提高 completion 准确率。
但是我们如何从自己的语料库(由语料片段组成)中,找到和提问相关(答案需要在上下文中)的 context 呢?
OpenAI 提供了 Embedding 的接口,可以用 input (输入一段文字)来计算一坨 embedding 向量值。
(https://platform.openai.com/docs/api-reference/embeddings/create)
我们可以通过将「语料片段的向量」与「问题的向量」取「最相似的向量」,来判断问题和语料片段的相似(similarity)度,
这样我们在 prompt 里,把最相似的语料片段作为 context 放进 prompt ,就可以得到最正确的 completion。
相似度计算官方推荐使用 https://en.wikipedia.org/wiki/Cosine_similarity 余弦相似度
embedding 结合 fine-tune
embedding 可以将语料和提问结合,而 fine-tune 可以将我们的输入输出进行训练,让 GPT-3 更好的理解我们的提问、上下文关系。从而创建符合我们需求的服务。
综上,使用 embedding 计算语料和提问的相似度,在 prompt 里补充相对准确的上下文,来获取更准确的回答。
参考资料:
1 一个简要的 Fine-tune 介绍 https://harishgarg.com/writing/how-to-fine-tune-gpt-3-api/
2 用 embedding 问答 https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb
原文:https://zhuanlan.zhihu.com/p/609359999