先做个广告:如需代充值GP4会员及购买GPT帐号,请添加站长客服微信:gptchongzhi
本文来自DataLearnerAI官方博客:
推荐使用ChatGPT中文版,国内可直接访问:https://ai.gpt86.top
在最新的OpenAI官方接口文档中,新增了top_logprobs
和logprobs
这2个参数。这2个参数是一起配合使用的。后者是一个布尔类型,表明模型的返回结果中是否增加输出每个token的概率,而top_logprobs
参数是一个整数类型,取值范围是0-5之间。如果top_logprobs
设置为true,那么模型会根据top_logprobs
的设置结果,返回输出结果中每个token及其后续的n个单词的概率。
需要注意的是,这个参数开启理论上应该不会增加token的输出数量,也就是不会增加成本。
top_logprobs和logprobs参数的含义解释
下图是OpenAI的大模型输出测试页面的一个截图,显示了这两个参数是如何帮助我们理解和调试大模型输出的。
上图是这个参数返回结果的一个可视化截图。其中,带背景色的文本是大模型返回的补全结果,点击其中的每一个单词(token)就可以看到这个token其实是根据词汇表中每个token的概率选择得到的。在图中,大模型返回的The inner planets
中的planets位置的前5个token的概率分别如下:
planets =96.27%and=0.73%four =0.69%planet =0.27%solar =0.23%
这意味着,大模型认为根据前面的文本,这个位置输出planets
的概率是96.27%,剩余的概率如上面所示,所以大模型很大概率这里输出了planets
,不过也可能因为概率的问题输出其它的token,这个和概率抽样以及设置的temperature有关。
上面的参数中如果top_logprobs
设置为5,logprobs
设置为true,就会出现图中每一个token位置最多的5个候选结果和概率。在大模型的输出中有一个temperature参数(0到2之间),如果这个temperature设置为0,那么模型总是会选择概率最高的token输出,这个值设置得越高越有可能选择候选项中其它概率的token输出。这其实也是大模型有可能会输出幻觉的原因(选择了概率较低的单词就很有可能出现与直觉或者事实可能不符的结果)。
top_logprobs和logprobs参数有什么用?
这个参数其实非常有价值,在实际应用中,可以考虑引入用以降低大模型幻觉以及提高大模型输出的确定性等。
在聊天应用中,需要大模型有一定的多样性,因此,通常要把temperature设置高一点。而如果是一些开发应用中,例如上面回答科学问题,temperature设置得高意味着模型可能会输出一些不应该出现的结果,这可能会导致错误信息的输出。
在此前的参数设置中,我们是无法获得大模型输出的每个token的概率的。而此次OpenAI开放了最多每个位置输出5个token的概率可以极大提高了大模型实际应用中的可控性。
举个例子来说,下图是将temperature设置为0的时候,大模型输出的结果:
temperature设置为0意味着大模型总是选择概率最高的token输出,这很容易出现大量的重复的或者无法理解的文本。是不符合要求的。但是,如果设置得过高可能会导致“幻觉”大量出现。如果有了概率输出,我们可以让模型稍微多样化输出一些结果,然后通过判单模型选择的token的概率判断模型是否在胡说。例如,如果大模型输出了一组结果,但是里面出现了很多低概率的token,那么有可能意味着这个输出是“幻觉”的概率比较高。此时可以考虑多输出几组。
使用困惑度解释top_logprobs和logprobs参数及其价值
根据推特的九原客(9hills)童鞋的提醒,这个概率是和模型的困惑度计算是有关系的。
困惑度(Perplexity)是自然语言处理中的一个重要指标,常用于评估语言模型的性能(公式就不列了,它是一个序列的概率加权和,还得配上指数,感兴趣的童鞋自己看)。
在推理中,大模型需要根据前面的文本计算下一个单词的概率。如果此时,大模型计算得到词汇表中下一个应该出现的单词所有概率都一样,这意味着大模型无法确定下一个单词是什么只能随机选择。但如果下一个单词概率计算结果是某一个单词出现概率100%,其它都是0,这意味着模型可以非常确定选择这个单词不会出错。这就是困惑度的含义。困惑度的值越低,模型对输出的结果的确定性越高。
简单的理解就是,困惑度其实就像是一个衡量我们模型“困惑”的指标。如果我们的模型对于预测下一个词感到“困惑”,那么它的困惑度就会很高;反之,如果模型能够很好地预测下一个词,那么它的困惑度就会很低。
有了上面的概率结果,我们可以考虑使用类似的原理计算输出的困惑度,进而帮助我们判断模型对答案输出的“确定性”。
这就是这两个参数的价值以及实际可以应用的地方。