【外评】LLM 无法处理概率问题
我最近看到几篇文章,作者提到要求 LLM 以一定的概率或一定的百分比做某事。有一个特别的例子让我记忆犹新,但我已经找不到它的链接(如果你是作者,请与我联系,我可以链接到你):
主要内容是,作者用教育课程资料构建了一个自定义 GPT,然后提示机器人应该在 20% 的时间内说谎。然后,他们让学生与机器人聊天,并试着找出谎言。我认为这是一个非常有趣的、横向思维的用例,因为孩子们可能无论如何都会使用 ChatGPT。
让我感到困扰的是,基于 transformer 的 LLM 不知道如何解释对某些结果概率的请求。我们已经知道,ChatGPT 在生成随机数时反映了人类的偏见。不过,我决定用随机选择来检验一下它。
在 LLMS 中测试概率
我对模型进行了如下提示:
你是一个加权随机选择生成器。大约 80% 的时候请说 “左”,大约 20% 的时候请说 “右”。只需回答 “左 “或 “右 “即可。不要说其他任何话
我在不同的模型中运行了 1000 次。随机机会就是随机的(很深奥吧?),所以我们总是会得到一些偏离完美几率的结果,但我们希望得到大约 800 个 “左 “和 200 个 “右”–在这个范围内的结果。
以下是结果:
Model | Lefts | Rights |
GPT-4-Turbo | 999 | 1 |
GPT-3-Turbo | 975 | 25 |
Lllama-3-8B | 1000 | 0 |
Phi-3-3.8B | 1000 | 0 |
正如您所看到的,LLM 似乎很难处理系统提示中的概率。尽管我们要求它在 80% 的情况下只回答 “左”,但它几乎总是回答 “左”。我不想花大价钱让 GPT-3.5(它在第一轮中表现最好)用单词选择来回答愚蠢的问题,但我还是尝试了其他一些单词组合,看看它对问题有什么影响。这次我只运行了 100 次。
Choice (Always 80% / 20%) | Result |
Coffee / Tea | 87/13 |
Dog / Cat | 69/31 |
Elon Musk/Mark Zuckerberg | 88/12 |
那么,这是怎么回事呢?嗯,模型有自己的内部权重,根据用于准备模型的训练数据对单词和短语进行加权。这些权重可能会影响模型对您的请求的关注程度。
那么,如果我们想模拟某种概率结果,该怎么办呢?我们可以使用 Python 脚本随机决定是否发送两个提示中的一个:
import random from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage choices = (['prompt1'] * 80) + (['prompt2'] * 20) # we should now have a list of 100 possible values - 80 are prompt1, 20 are prompt2 assert len(choices) == 100 # randomly pick from choices - we should have the odds we want now chat = ChatOpenAI(model="gpt-3.5-turbo") if random.choice(choices) == 'prompt1': r = chat.invoke(input=[SystemMessage(content="Always say left and nothing else.")]) else: r = chat.invoke(input=[SystemMessage(content="Always say right and nothing else.")])
结论
这对那些想做这类用例或构建回复特定回复的自定义 GPT 的非技术人员有什么帮助?差不多吧。我想,有足够技术能力的用户可以创建一个自定义 GPT,使用函数调用来决定如何回答 “找出错误信息 “的弹出式测验类型用例中的问题。
不过,我在此给出的建议是,在要求 LLM 以某种可能性行事时,您应该保持高度警惕,除非您能够从外部(通过脚本)控制这种可能性。
我还能做得更好吗?我可以多用几个不同的词、不同的分布(而不是 80/20),也许还可以用一些关键词,比如 “有时 “或 “偶尔”。
更新 2024-05-02:概率与聊天会话
我收到了一些关于这项研究的反馈,问我为什么不在实验中测试多回合聊天会话。有些人假设,除非温度非常高,否则模型总是从一个或另一个token开始。我最初的实验并没有让 LLM 访问它自己的历史预测,这样它就可以看到自己以前的行为。
对于真正的随机数生成,你不会期望函数需要一个历史数字列表来调整它的下一个答案(不过,如果我们要讨论的是超级发散性的问题,我或许应该指出,伪随机数生成确实依赖于一个历史 “种子 “值)。
这篇文章的重点在于,LLM 绝对不是在进行真正的随机数生成,因此了解对话背景对行为的影响非常有趣。
我又做了几个实验。我从上面的提示开始,并没有向 LLM 调用单个 API,而是启动了一个聊天会话,每次聊天时我只说 “请再来一次”。看起来有点像这样:
系统:你是一个加权随机选择生成器。大约 80% 的时间请说 “左”,大约 20% 的时间说 “右”。只需回答 “左 “或 “右 “即可。不要说其他任何话
机器人:左
人:请再来一次
机器人:左
人:请再来一次
我每个模型运行一次,共运行 100 个回合;每个模型运行 10 次,共运行 10 个回合。
注:在这两次试验中,我都没有使用 “Phi “,因为在这两次试验中,”Phi “都无视了我的提示,只回答了一个字,然后就开始叽里咕噜了。
100 Turns Per Model
Model | # Left | # Right |
GPT 3.5 Turbo | 49 | 51 |
GPT 4 Turbo | 95 | 5 |
Llama 3 8B | 98 | 2 |
10 Turns, 10 time per model
Model | # Left | # Right |
GPT 3.5 Turbo | 61 | 39 |
GPT 4 Turbo | 86 | 14 |
Llama 3 8B | 71 | 29 |
有趣的是,10 个较短的对话系列最接近我们所期望的概率,但所有情景的结果仍与提示中的要求不一致。
本文文字及图片出自 LLMs Can’t Do Probability
你也许感兴趣的:
- 我受够了维护 AI 生成的代码
- 【外评】作为全栈开发人员如何跟上 AI/ML 的发展?
- 大模型集体失智!9.11和9.9哪个大,几乎全翻车了
- 【外评】为什么似乎没有人在意人工智能给出了错误的答案?
- 【程序员搞笑图片】AI 编程
- 【外评】黑客工具可提取 Windows 全新人工智能 Recall 功能收集到的所有数据
- 【外评】如果人工智能能胜任你的工作,也许它还能取代你的首席执行官
- 【外评】人工智能提供假冒的 Facebook 客户服务电话导致一男子陷入骗局
- 【外评】训练与聊天不同:ChatGPT 和其他 LLM 不会记住你说的每一句话
- 【外评】让Windows完全回忆(Recall)用户所做的一切是一个隐私雷区
你对本文的反应是: