【LLM】-08-搭建问答系统-语言模型,提问范式与 Token
创始人
2024-11-18 15:04:53
0

目录

1、语言模型

1.1、训练过程:

1..2、大型语言模型分类:

1.3、指令微调模型训练过程:

2、Tokens

3、Helper function辅助函数 (提问范式)

4、计算token数量


 

1、语言模型

大语言模型(LLM)是通过预测下一个词的监督学习方式进行训练的。具体来说,

1.1、训练过程:

1)首先准备一个包含数百亿甚至更多词的大规模文本数据集。

2)从这些文本中提取句子或句子片段作为模型输入。模型会根据当前输入 Context 预测下一个词的概率分布。

3)通过不断比较模型预测和实际的下一个词,并更新模型参数最小化两者差异,语言模型逐步掌握了语言的规律,学会了预测下一个词。

这种以预测下一个词为训练目标的方法使得语言模型获得强大的语言生成能力

 

1..2、大型语言模型分类:

1)基础语言模型(Base LLM)通过反复预测下一个词来训练的方式进行训练,没有明确的目标导向。可能给出与问题无关的回答。

例如,给它一个 Prompt ,比如”中国的首都是哪里?“,很可能它数据中有一段互联网上关于中国的测验问题列表。这时,它可能会用“中国最大的城市是什么?中国的人口是多少?”等等来回答这个问题。

2)指令微调的语言模型(Instruction Tuned LLM)则进行了专门的训练,以便更好地理解问题并给出符合指令的回答。

例如,对“中国的首都是哪里?”这个问题,经过微调的语言模型很可能直接回答“中国的首都是北京”,而不是生硬地列出一系列相关问题。

指令微调使语言模型更加适合任务导向的对话应用。它可以生成遵循指令的语义准确的回复,而非自由联想。

 

1.3、指令微调模型训练过程:

1)在大规模文本数据集上进行无监督预训练,获得基础语言模型。需要大量数据集

2)使用包含指令及对应回复示例的小数据集对基础模型进行有监督 fine-tune,这让模型逐步学会遵循指令生成输出

3)为了提高语言模型输出的质量,常见的方法是让人类对许多不同输出进行评级,例如是否有用、是否真实、是否无害等。

4)增加生成高评级输出的概率。这通常使用基于人类反馈的强化学习(RLHF)技术来实现。

 

import openai  openai.api_key = "EMPTY" openai.api_base = "http://192.168.1.1:20000/v1"   def get_completion(messages, model="chatglm3-6b", temperature=0.7):     completion = openai.ChatCompletion.create(         model=model,         messages=[{"role": "user", "content": messages}],         temperature=temperature     )     # print(str(response.choices[0].message))     return completion.choices[0].message.content   response = get_completion("中国的首都是哪里?") print(response) 

 

2、Tokens

LLM 实际上并不是重复预测下一个单词,而是重复预测下一个 token 。

对于一个句子,语言模型会先使用分词器将其拆分为一个个 token ,而不是原始的单词。

对于生僻词,可能会拆分为多个 token 。这样可以大幅降低字典规模,提高模型训练和推断效率。

对于 "Learning new things is fun!" 这句话,每个单词都被转换为一个 token ,

对于较少使用的单词,如 "Prompting as powerful developer tool",单词 "prompting" 会被拆分为三个 token,即"prom"、"pt"和"ing"。

# 设置温度系数=0,确保每次生成一致 response = get_completion("Take the letters in lollipop \ and reverse them", temperature=0) print(response) 

16f0592768ee4427a07488c767bb7cc1.png

实际"lollipop" 反过来应该是 "popillol"。

分词方式也会对语言模型的理解能力产生影响

当您要求颠倒 "lollipop" 的字母时,由于分词器(tokenizer) 将 "lollipop" 分解为三个 token,即 "l"、"oll"、"ipop"

 

3、Helper function辅助函数 (提问范式)

a425ce86d2d74e7582d2920e0f91e983.png

 

提问格式区分了“系统消息”和“用户消息”两个部分。

通过设置助手角色,减少无效输出,帮助其生成针对性强的回复。

import openai  openai.api_key = "EMPTY" openai.api_base = "http://192.168.1.1:20000/v1"   def get_completion(messages, model="chatglm3-6b", temperature=0.7,max_tokens=500):     completion = openai.ChatCompletion.create(         model=model,         messages=messages,         temperature=temperature,         max_tokens=max_tokens ,     )     # print(str(response.choices[0].message))     return completion.choices[0].message.content  # 由于我的模型在返回结果中出现了英文、繁体中文,所以添加了额外提示词内容 messages =  [     {'role':'system',      'content':'你是一个助理, 并以 Seuss 苏斯博士的风格作出回答。回答结果中不要出现英文,仅使用简体中文'},     {'role':'user',      'content':'就快乐的小鲸鱼为主题给我写一首短诗'}, ] response = get_completion(messages, temperature=1) print(response) 

9142899203f74934a7e89d0fe0a99437.png

# 长度控制 messages =  [     {'role':'system',      'content':'你的所有答复只能是一句话'},     {'role':'user',      'content':'写一个关于快乐的小鲸鱼的故事'}, ] response = get_completion(messages, temperature =1) print(response)

小鲸鱼快乐地在水中游,因为它喜欢这份自由和轻松的感觉。

messages =  [     {'role':'system',      'content':'你是一个助理, 并以 Seuss 苏斯博士的风格作出回答,只回答一句话'},     {'role':'user',      'content':'写一个关于快乐的小鲸鱼的故事'}, ] response = get_completion(messages, temperature =1) print(response)

快乐的小鲸鱼每天在海底漫游,与朋友们玩耍,享受着美好的生活。

 

4、计算token数量

import openai  openai.api_key = "EMPTY" openai.api_base = "http://192.168.20.113:20000/v1"   def get_completion(messages, model="chatglm3-6b", temperature=0.7,max_tokens=500):     completion = openai.ChatCompletion.create(         model=model,         messages=messages,         temperature=temperature,         max_tokens=max_tokens ,     )     content = completion.choices[0].message.content      tokens = {         '提示词prompt_tokens': completion['usage']['prompt_tokens'],         '生成回复completion_tokens': completion['usage']['completion_tokens'],         '总total_tokens': completion['usage']['total_tokens'],     }     return content, tokens   # 长度控制 messages =  [     {'role':'system',      'content':'你是一个助理, 并以 Seuss 苏斯博士的风格作出回答。'},     {'role':'user',      'content':'就快乐的小鲸鱼为主题给我写一首短诗'}, ] response,token_dict = get_completion(messages, temperature =1) print(response,'\n', token_dict) 

 {'提示词prompt_tokens': 35, '生成回复completion_tokens': 133, '总total_tokens': 168}

 

 

相关内容

热门资讯

我想要做鸭子 做鸭子需要具备一定的烹饪技巧和食材,您可以先学习相关知识和技巧,然后准备好食材,按照步骤进行烹饪。祝...
wps云空间如何清除 登录WPS账户,进入云空间,选中需要删除的文件或文件夹,点击右键选择“删除”即可。彻底清除WPS云空...
wps回车后自动编号怎么回事(... 在WPS中,如果回车后自动编号,可能是启用了"自动编号"功能。要取消这个功能,可以在"开始"选项卡中...
叫叫怎么绑定亲情号-叫叫app... 在叫叫APP中,进入个人中心,选择“亲情号”功能,点击“添加亲情号”,输入要绑定的手机号码,验证后即...
qss代表什么 qss代表“快速切换系统”(Quick Switching System),是苹果公司为其设备提供的...
[C#面对对象] 之抽象方法 ... 1.虚方法 我的理解        "法国的“巴黎公社”,俄国的“十月革命”ÿ...
React 18【实用教程】(... 搭建开发环境含@配置,react-developer-tools 和 Redu...
什么渗透测试 渗透测试是一种模拟黑客攻击的评估方法,通过模拟恶意行为来发现系统的安全漏洞,以便修复和提高安全性。渗...
mssecsvc是什么 mssecsvc是微软Windows操作系统中的一个服务,全名为“Microsoft Securit...
【React】箭头函数:现代 ... 文章目录一、箭头函数的基本语法二、箭头函数的特性三、在 React 中的常见用法四、最佳实践在现代 ...