需求
作为一个写作者,我渴望更高的效率。作为一个懒人,我对于码字儿并不热衷。于是我长期以来的理想,就是自己口述,别人帮我将内容转述成优雅的文字。在人工智能大规模应用前,这意味着我需要聘请高水平助手,加以严格培训并支付高昂的费用。显然,这只能是个渴望。
如今咱们有了 OpenAI 的 Whisper 等语音识别技术,语音输入问题基本上解决了。然而,口语转写成书面语,就不容易了。我之前曾经花费大量时间,尝试使用许多种类不同的提示词来调整输出书面语风格,但效果仍不如人意。
例如我要求「严肃」一些,改写结果就变得过于拘谨;我说「生动」一点儿,它就开启「冷笑话」模式,反正它自己不尴尬;最要命的,是我告知它「简洁」一些时,原本 1000 字输入,输出也就 50 字。我对着屏幕,看着这「简洁」总结文字,哭笑不得。
探索
后来我发现,使用 “Few-shot learning”,给出样例而不自己指定提示词,效果反而更好些。
例如我这样说:
你是一位专业的写作助手,善于把别人口述的内容进行书面转化。例如输入为:“你好,今天咱们来介绍 ChatGBT 里面的 Code Interpreter 我们来看看它是什么 这个首先呢 它是一个我最近看到给我提供的新功能 因为现在啊 它是在一个灰度当中 说白了就是先给一部分用户来试用 如果大家反响不错 并且也做了一定的改进 它就再继续的把这东西推而广之 给更多的用户” 则对应的输出应该是:“今天我写作本文来为你介绍 ChatGPT 中的 Code Interpreter。它是我最近看到的新功能,正在灰度中。也就是先给一部分用户试用。如果反响不错,也做了一定改进,就能推广给更多用户。” 请你将下面口语文本整理。
你不难看出,我在原文中故意加入了一些噪声。例如,我发现在诸如 ChatGPT 这样的英文单词转写中,"GPT" 三个字母经常被误写为 "GBT"。因此,我特意将此处改为 "GBT",然后在输出中给出清晰的改写样例,让 ChatGPT 自动将这种错误识别并且纠正。
ChatGPT 根据单一样例改写的结果并非总够理想。我还会使用一些辅助说明加入提示词,比如下面这些:
请以「你」来称呼读者。输出为 Markdown 文本格式,添加合适的标点符号,中文内容用中文标点,段落之间用空行分割。自动纠正听写错误的部分
这样设定提示词嘛,结果还算可以,但依然存在问题。例如有时我输入的转写文本很长,必须分成若干段。每一段前面都输入这么长的提示词,包括样例。这不仅占用了宝贵的 token 额度,而且每次都需要 ChatGPT 对样例进行理解,导致分段改写结果风格不一,质量也很容易参差不齐。
启发
我最近学习 deeplearning.ai 和 Langchain 联合开发的课程 时,掌握了一个技巧。
在持续的 ChatGPT 对话过程中,上下文逐渐变长,可能超过预设的 token 总长度限制,导致用户无法输入新的内容。Langchain 里解决这个问题的方法,是让 ChatGPT 尝试对前面的对话内容进行总结提炼,从而「压缩」上下文,保持对话记忆。
我有了新的启发。如果我可以让 ChatGPT 帮我对照输入输出的样例,找寻精确文本风格转换提示词。后续的输入中我就不再需要每次都提供完整的输入输出样例,而只给出提炼后的明确指令。这样的好处在于把主动权控制在自己手中,保持风格和撰写质量的一致性。
其实这也恰恰是机器学习的本质。在机器学习课程中,我常常展示一张图给学生。它描绘了现代 AI 编程与传统编程的区别。
在机器学习应用之前,我们需要编程指定规则,然后机器去按照规则干活儿。机器学习(这里指监督学习)的目标,恰恰是让机器自动学习样例,了解(猜测)规则是什么,并且把规则应用在新的输入数据上。
所以,我干脆让 ChatGPT 针对我给出的输入输出样例,把对应的提示词总结出来。相当于做了一个模型训练,或者说是「逆向工程」。
Keep reading with a 7-day free trial
Subscribe to Shuyi’s Newsletter to keep reading this post and get 7 days of free access to the full post archives.