为什么确定性很重要

语言模型中的确定性指的是在相同条件下,给定相同的输入时能够一致地产生相同的输出。这一特性对于以下方面至关重要:

  • 可重复性:确保在不同运行中可以获得相同的结果,这对于调试和迭代开发至关重要。
  • 一致性:保持响应的一致性,在自动化客户支持等场景中尤为重要,因为对同一查询的不同响应可能是不希望的。
  • 测试:通过提供一个稳定的测试基础,促进模型或算法的评估和比较。

温度=0的作用

语言模型中的温度参数控制输出的随机性。较高的温度会增加响应的多样性和创造性,而较低的温度会使模型更加可预测和保守。设置temperature=0基本上关闭了随机性,导致模型在每一步选择最可能的下一个词。这对于实现确定性至关重要,因为它最小化了模型输出的方差。

温度=0的影响

  • 可预测的响应:模型将始终选择最可能的路径,从而在输出中具有高度的可预测性。
  • 创造力:为了可预测性而付出的代价是减少了创造力和响应的多样性,因为模型不会探索不太可能的选项。

利用种子增强控制

种子参数是增强确定性的另一个工具。它为模型中使用的随机数生成器设置初始状态,确保每次运行都使用相同的“随机”数序列。当与temperature=0结合使用时,此参数提供了更高程度的可预测性。

示例:

import pandas as pd

from pandasai import SmartDataframe

from pandasai.llm import OpenAI



# Sample DataFrame

df = pd.DataFrame({

    "country": ["United States", "United Kingdom", "France", "Germany", "Italy", "Spain", "Canada", "Australia", "Japan", "China"],

    "gdp": [19294482071552, 2891615567872, 2411255037952, 3435817336832, 1745433788416, 1181205135360, 1607402389504, 1490967855104, 4380756541440, 14631844184064],

    "happiness_index": [6.94, 7.16, 6.66, 7.07, 6.38, 6.4, 7.23, 7.22, 5.87, 5.12]

})



# Instantiate a LLM

llm = OpenAI(

    api_token="YOUR_API_TOKEN",

    temperature=0,

    seed=26

)



df = SmartDataframe(df, config={"llm": llm})

df.chat('Which are the 5 happiest countries?') # answer should me (mostly) consistent across devices.

当前限制:

AzureOpenAI 实例

虽然种子参数在我们库中的OpenAI实例中有效,但需要注意的是,此功能尚未在AzureOpenAI中提供。使用AzureOpenAI的用户仍然可以使用temperature=0来减少随机性,但没有种子提供的额外可预测性。

系统指纹

如文档中所述(OpenAI Seed):

有时,由于OpenAI在我们端对模型配置所做的必要更改,确定性可能会受到影响。为了帮助您跟踪这些更改,我们公开了system_fingerprint字段。如果此值不同,您可能会看到由于我们在系统上所做的更改而导致的输出不同。

解决方案和未来更新

对于AzureOpenAI用户:依靠temperature=0来减少随机性。请继续关注未来的更新,因为我们正在努力将种子功能与AzureOpenAI集成。 对于OpenAI用户:同时使用temperature=0和种子以实现最大的确定性。