当前位置: 首页 > news >正文

【LLM】-08-搭建问答系统-语言模型,提问范式与 Token

目录

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 openaiopenai.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.contentresponse = 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 openaiopenai.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 openaiopenai.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.contenttokens = {'提示词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}

 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 虚拟机centos9搭建wordpress
  • c++ 自定义异常
  • 相机的内参与外参
  • 端到端自动驾驶科普向
  • 数据结构和算法入门
  • 调度器——DolphinScheduler讲解及安装教程
  • 【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解
  • 测试开发面试题---计算机网络
  • 减轻幻觉新SOTA,7B模型自迭代训练效果超越GPT-4,上海AI lab发布
  • AutoSAR自适应平台架构总览--AP的初认识
  • Python入门第二课
  • 【专题】百度萝卜快跑体验:Robotaxi发展现状与展望报告合集PDF分享(附原数据表)
  • 【CSS】继承属性
  • 【图像标签转换】XML转为TXT图像数据集标签
  • 如何预防网站爬虫攻击
  • 【Leetcode】104. 二叉树的最大深度
  • C++11: atomic 头文件
  • C++类的相互关联
  • CAP理论的例子讲解
  • django开发-定时任务的使用
  • es6
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • rc-form之最单纯情况
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • SQLServer之创建显式事务
  • vue:响应原理
  • vue-cli在webpack的配置文件探究
  • 如何胜任知名企业的商业数据分析师?
  • 我感觉这是史上最牛的防sql注入方法类
  • 新手搭建网站的主要流程
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • #php的pecl工具#
  • (2)空速传感器
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (黑马点评)二、短信登录功能实现
  • (十八)Flink CEP 详解
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一) 初入MySQL 【认识和部署】
  • (一)Linux+Windows下安装ffmpeg
  • (原创)可支持最大高度的NestedScrollView
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET CLR Hosting 简介
  • .net core 6 集成和使用 mongodb
  • .net 托管代码与非托管代码
  • .net通用权限框架B/S (三)--MODEL层(2)
  • .NET性能优化(文摘)
  • @angular/cli项目构建--http(2)
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [1]-基于图搜索的路径规划基础