PostgreSQL码农集散地

解决大模型“天马行空”“内容截断”问题

文中参考文档点击阅读原文打开, 同时推荐2个学习环境: 

1、懒人Docker镜像, 已打包200+插件:《最好的PostgreSQL学习镜像》

2、有web浏览器就能用的云起实验室: 《免费体验PolarDB开源数据库》

3、PolarDB开源数据库内核、最佳实践等学习图谱:  https://www.aliyun.com/database/openpolardb/activity 

关注公众号, 持续发布PostgreSQL、PolarDB、DuckDB等相关文章. 

大模型(LLM)“天马行空”“回复内容截断”? 原来是这些参数作祟

背景

系列文章:

你使用大模型有一些时间后, 可能会发现这些问题

  • 为什么同一个问题问大模型多次, 得到的结果不一样?
  • 为什么有时大模型的回答感觉很啰嗦, 不够聚焦和干练?
  • 为什么有时一个问题没有完全回复完, 大模型就停止返回了?
  • 为什么有时大模型感觉很有想象力, 天马行空, 有时又非常拘谨, 一点创造力都没有?

这些其实和大模型的参数有关, 可以参考如下文档的介绍

  • https://www.promptingguide.ai/zh/introduction/settings
  • https://github.com/ollama/ollama/blob/main/docs/modelfile.md#parameter
  • https://github.com/ollama/ollama/tree/main/docs

ollama文档中关于llm参数的介绍非常的详细

ParameterDescriptionValue TypeExample Usage
mirostat启用 Mirostat 采样来控制困惑度。 (default: 0, 0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0)intmirostat 0
mirostat_eta生成文本反馈的响应速度, 较低的值导致较慢的生成响应速度,较高的值导致较快的生成响应速度。 (Default: 0.1)floatmirostat_eta 0.1
mirostat_tau控制输出的连贯性和多样性之间的平衡。值越低,文本内容越聚焦、越连贯。(Default: 5.0)floatmirostat_tau 5.0
num_ctx生成下一个token时, 在已生成内容中, 从当前位置回顾上下文窗口的token数。 (Default: 2048)intnum_ctx 4096
repeat_last_n模型回溯多远(上下文窗口)以防止生成重复token。 (Default: 64, 0 = disabled, -1 = num_ctx)intrepeat_last_n 64
repeat_penalty对生成重复token的惩罚力度。较高的值(例如 1.5)将对重复的惩罚力度更大,而较低的值(例如 0.9)将更宽松。(默认值:1.1)floatrepeat_penalty 1.1
temperature模型的温度。增加温度将使模型的回答更具创意(开放), 适合需要创意的工作例如写作. 更低的温度使得回答更加精准, 适合有标准答案的场景(例如产品手册助手)。 (Default: 0.8)floattemperature 0.7
seed设置用于生成的随机数种子。将其设置为特定数字将使模型针对同一提示生成相同的文本。(默认值:0)intseed 42
stop设置停止词。遇到此停止词时,LLM 将停止生成文本并返回。可以通过stop在modelfile中定义多个单独的停止词。 (生成文本的过程中,遇到stop设定的词则停止. 例如你把stop设置为"的"字, 可能很容易就停止输出, 因为“的”字使用频率非常高. )stringstop "AI assistant:"
tfs_z减少输出中 “可能性较小的token” 的影响 (对不关键信息的减权, 例如生成token参考的上下文中的不关键信息)。较高的值(例如 2.0)将进一步减少影响,而值 1.0 则禁用此设置。floattfs_z 1
num_predict生成文本时要返回的最大token数。 (Default: 128, -1 = infinite generation, -2 = fill context)intnum_predict 42
top_k降低产生无意义答案的概率。值越高(例如 100)答案就越多样化,值越低(例如 10)答案就越保守。(默认值:40)inttop_k 40
top_p与 top-k 配合使用。较高的值(例如 0.95)将产生更加多样化的文本,而较低的值(例如 0.5)将产生更加集中和保守的文本。(默认值:0.9)floattop_p 0.9
min_ptop_p 的替代方案,旨在确保质量和多样性的平衡。参数p表示相对于最可能标记的概率,考虑标记的最小概率。例如,当p =0.05 且最可能标记的概率为 0.9 时,值小于 0.045 的 logit 将被过滤掉。(默认值:0.0)floatmin_p 0.05

使用ollama体验一下

ollama 命令行可以通过command来设置参数.

先来熟悉一下命令行的用法.

获得command帮助

>>> /?  
Available Commands:  
  /set            Set session variables  
  /show           Show model information  
  /load <model>   Load a session or model  
  /save <model>   Save your current session  
  /clear          Clear session context  
  /bye            Exit  
  /?, /help       Help for a command  
  /? shortcuts    Help for keyboard shortcuts  

  Use """ to begin a multi-line message.  

设置用法

>>> /set  
Available Commands:  
  /set parameter ...     Set a parameter  
  /set system <string>   Set system message  
  /set history           Enable history  
  /set nohistory         Disable history  
  /set wordwrap          Enable wordwrap  
  /set nowordwrap        Disable wordwrap  
  /set format json       Enable JSON mode  
  /set noformat          Disable formatting  
  /set verbose           Show LLM stats  
  /set quiet             Disable LLM stats  

设置参数用法

>>> /set parameter  
Available Parameters:  
  /set parameter seed <int>             Random number seed  
  /set parameter num_predict <int>      Max number of tokens to predict  
  /set parameter top_k <int>            Pick from top k num of tokens  
  /set parameter top_p <float>          Pick token based on sum of probabilities  
  /set parameter num_ctx <int>          Set the context size  
  /set parameter temperature <float>    Set creativity level  
  /set parameter repeat_penalty <float> How strongly to penalize repetitions  
  /set parameter repeat_last_n <int>    Set how far back to look for repetitions  
  /set parameter num_gpu <int>          The number of layers to send to the GPU  
  /set parameter stop <string> <string> ...   Set the stop parameters  

列出配置

>>> /show  
Available Commands:  
  /show info         Show details for this model  
  /show license      Show model license  
  /show modelfile    Show Modelfile for this model  
  /show parameters   Show parameters for this model  
  /show system       Show system message  
  /show template     Show prompt template  

列出已定义的参数

>>> /show parameters  
Model defined parameters:  
stop                           "<|start_header_id|>"  
stop                           "<|end_header_id|>"  
stop                           "<|eot_id|>"  

例子

1、停止词的使用

>>> /set parameter stop 太阳  
Set parameter 'stop' to '太阳'  
>>> 请使用简体中文回答天上有几个太阳  
有很多个这样的  

2、为什么有时一个问题没有完全回复完, 大模型就停止返回了?

>>> /set parameter num_predict 10    
Set parameter 'num_predict' to '10'  
>>> 请使用简体中文回答天上有几个太阳  
看来你也很感兴趣!  

  说  

3、为什么有时大模型感觉很有想象力, 天马行空, 有时又非常拘谨, 一点创造力都没有?

温度低, 偏拘谨

>>> /set parameter temperature 0.1  
Set parameter 'temperature' to '0.1'  
>>> 写一首赞美妇女的诗    
美丽的女性,  

  你是天空中的星星,  
你是阳光下的花朵,  
你是温暖的春风。  

  你的笑容可以照亮整个世界,  
你的眼睛像清澈的泉水,  
你的声音像婉转的曲调。  

  你是母亲,带来生命和希望,  
你是妻子,带来爱情和温暖,  
你是朋友,带来支持和理解。  

  你是天空中的云朵,  
你是阳光下的雨滴,  
你是温暖的夏日。  

  美丽的女性,  

  你是世界上最美丽的宝贝。  

温度高, 更具有创造力

>>> /set parameter temperature 1000  
Set parameter 'temperature' to '1000'  
>>> 写一首赞美妇女的诗  
女性啊,世界上的美好,  

  像绚丽的大天空般,她闪光奪目的,  

  她能为生活带来温馨与幸福,  

  在人间,也是春日花儿开放的地方。  

  在阳光下,面床的妩媚,  
散发出清凉的风;  

  那倩倩柔若无骨的身材,  

  透射出女性的一切特点;  

  你比金子的宝贝,  

  更加精致,也更加耀眼。  

4、为什么有时大模型的回答感觉很啰嗦, 不够聚焦和干练?

mirostat_tau值低, 聚焦、干练

>>> /set parameter mirostat_tau 0.1  
Set parameter 'mirostat_tau' to '0.1'  
>>> 请使用简体中文回答天上有几个太阳  
实际上,每一颗恒心在自己体系里都有一颗“太阳”。  

  那么问题来了:这是在我们的整个恒星体系中每个恒星都是独一无二的。  

mirostat_tau值高, 啰嗦

>>> /set parameter mirostat_tau 1000  
Set parameter 'mirostat_tau' to '1000'  
>>> 请使用简体中文回答天上有几个太阳  
那么你问得好啊!  

  事实上,我们能看到每一个恒心体系中的只有1颗。  

  不过,它们也许有一颗比较大且亮光,而我们自己却只有一颗日子!  

  这可能是很常见的一个特点,也有许多这样不明显的小变化存在,但它们就是非常特殊和重要。  

参考

  • https://www.promptingguide.ai/zh/introduction/settings
  • https://github.com/ollama/ollama/blob/main/docs/modelfile.md#parameter
  • https://github.com/ollama/ollama/tree/main/docs

本期彩蛋-招商中,有需要的小伙伴可联系嵌入...

文章中的参考文档请点击阅读原文获得. 


欢迎关注我的github (https://github.com/digoal/blog) , 学习数据库不迷路.  

近期正在写公开课材料, 未来将通过视频号推出, 欢迎关注视频号:

Image