LikeGiver

LikeGiver

基于LLM的问答对提取

443
0
0
2023-12-22
  • 2024-04-11更新:新增自动朗读音乐

(自动朗读 --- suno-ai)

背景

现在LLM训练需要数据,而数据清洗又可以基于LLM(有环图的依赖关系)

因为业务需要,最近在用gpt-3.5基于网络数据生成、筛选、润色出很多问答对,效果似乎还挺不错(结合场景需要,我让他模仿客服语气的)

2023-12-22 11-32-20 的屏幕截图.png但是目前我没有参考很多资料,这基本是我拍脑袋做的:数据加载进来(用了llama-index之类的)——>让gpt生成json格式问答对——>让gpt筛选——>让gpt润色(业务需要无法开源,但是这思路很简单,大家自己实现应该也不难,这篇文章主要是讲讲涉及到的技术)

我觉得这个过程非常不专业,因此我开始搜索一点网上做法参考参考

目前看到一篇6个月前的:https://towardsdatascience.com/from-chaos-to-clarity-streamlining-data-cleansing-using-large-language-models-a539fa0b2d90 他的应用场景是一个序列分类场景,在我这场景也多少用的到

人家确实很专业,我认为他的代码很优雅,prompt也更清晰,所以先放在这参考,等我把他参考文献先看一遍。

涉及技术:

1. prompt工程(上限低但成本也很低的快速提高大模型效果的好办法)

我之前对prompt工程理解很浅而且不是很感兴趣,之前也做过连续prompt的fine-tune,但是在我那个场景下fine-tune prompt效果不佳,之前大模型刚出来很多人能靠prompt工程水文章,但是这东西和应用场景非常贴近,还和模型具体咋练的有关,越来越难水了,最近似乎在流行用大模型生成prompt。

现在由于业务需求(我是负责人的乙方!),所以我还是要秉持专业精神学习一下prompt工程!

教程1: OpenAI的官方短文:Best practices for prompt engineering with OpenAI API (十分钟)

https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api

八条简单小技巧,教你当个做个人的甲方,第二条“Put instructions at the beginning of the prompt and use ### or """ to separate the instruction and context”感觉对我很有用,第八条有点骚操作了,多加个import效果就更好?很难绷

数据提取时,temperature应该设置为0?我之前好像忽略了。。。

教程2: OpenAI的官方大教程:Guides: Prompt engineering

https://platform.openai.com/docs/guides/prompt-engineering

这个教程不仅更加专业,而且对prompt的理解很有趣,把chain of thought和rag都算进prompt工程了(所以我一直在干prompt工程,只缘身在此山中了)

有个点蛮重要的,就是应该创建evaluation来test prompt的改变,然后他推荐了自己的项目:https://github.com/openai/evals

但是好像私货很多,似乎不是很适合用来测试自己的模型,只支持openai的

2. llama-index

3. streamlit (可选,我用来可视化的)

官方参考文档https://docs.streamlit.io/library/advanced-features/session-state#initialization

当前效果:

2024-01-09 15-12-59 的屏幕截图.png目前已经支持多种文件格式的问答对提取(pdf、txt、docx、mp4),过滤、润色、格式转化还未集成进来,其实即使集成进来对效果的提升也有限,我认为还是得在问答对生成这步骤对pipeline做一些修改,现在基于单个chunk提取问答对,因为上下文信息的缺失,提取出来的信息并不能达到与上下文独立出来,许多问答对无法单独拿出来作为一个知识片段。如果在润色步骤引入不同的上下文,应该可以弥补这个问题。

问题示例

  1. 问答对独立性问题:比如我拿我们的课本《大数据技术原理与应用(第三版) (林子雨)》做一个提取,即使我在system_prompt中要求提取独立于上下文的问答对,但是提取出来的question还是会用“这本书”这样的字眼,chunk中是包括了书名的,但是模型没有充分理解我们的需求。

2024-01-09 15-19-37 的屏幕截图.png

这个问题也可能由于该chunk中就是没有包括书名导致,比如下图中各类命令的question,其实都缺乏了语境是要在linux系统中:

2024-01-09 15-20-00 的屏幕截图.png