【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}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一款允许使用Docker部署本地托管的、基于 Web 的 PDF 操作工具

大家好,今天给大家分享的是一个基于Spring Boot开发的开源项目,旨在提供一个功能强大的基于Docker的本地托管PDF操作工具Stirling PDF。 项目介绍 Stirling-PDF是一个全面的PDF工具箱,适用于个人和企业用户,尤其对于那些重视数据…

CasaOS设备使用Docker安装SyncThing文件同步神器并实现远程管理

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

C++树形结构(1 基础)

目录 一.基础: 1.概念: 2.定义: Ⅰ.树的相关基础术语: Ⅱ.树的层次: 3.树的性质: 二.存储思路: 1.结构体存储: 2.数组存储: 三.树的遍历模板: 四.信…

用 python scipy 库模拟拥塞控制模型

接着昨天的继续说,参见 inflight 守恒建模。 欧拉数值解看起来不够优雅,所以我打算找个别的方式试一下,顺便学一下 python,我不会编程,但也不是一点也不会,我稍微会一点,所以想进一步学习一点。…

记录unraid docker更新的域名

背景:级联 一、安装内容 unraid更新docker,之前一直失败,修改网络后可以进行安装。 二、查看域名 查看域名,发现是走github的,怪不得有一些docker无法正常更新 三、解决方法 更改代理,这里为unraid的…

STM32智能城市交通管理系统教程

目录 引言环境准备智能城市交通管理系统基础代码实现:实现智能城市交通管理系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:城市交通管理与优化问题解决方案与优化收尾与总结 1. 引言 智能城…

Vue2高级用法

Vue2高级用法 1、mixin复用【vue不会用了,了解一下】1.1 基础使用1.2 选项合并1.3 全局混入1.4 细数 mixin 存在的问题 2、vue.js 动画特效& 常见组件库介绍2.1 进入/离开基础使用示例2.2 进入/离开自定义过度类名2.3 进入/离开动画钩子2.4 多组件过渡与…

c++树(一)定义,遍历

目录 树的定义 树的基本术语 树的初始起点:我们定义为根 树的层次: 树的定义: 树的性质 性质1: 性质2: 树形结构存储的两种思路 树的遍历模板 树上信息统计方式1-自顶向下统计 树上信息统计方式2-自底向上统…

【UbuntuDebian安装Nginx】在线安装Nginx

云计算:腾讯云轻量服务器 操作系统:Ubuntu-v22 1.更新系统软件包列表 打开终端并运行以下命令来确保你的系统软件包列表是最新的: sudo apt update2.安装 Nginx 使用以下命令安装 Nginx: sudo apt install nginx3.启动 Nginx…

Docker-Compose配置zookeeper+KaFka+CMAK简单集群

1. 本地DNS解析管理 # 编辑hosts文件 sudo nano /etc/hosts # 添加以下三个主机IP 192.168.186.77 zoo1 k1 192.168.186.18 zoo2 k2 192.168.186.216 zoo3 k3注:zoo1是192.168.186.77的别名,zoo2是192.168.186.18的别名,zoo3是192.168.186.1…

企元数智引领新零售合规分销系统免费送

企元数智近日宣布推出全新的新零售合规分销系统,并免费向企业提供这一创新解决方案。这一举措旨在帮助更多企业实现数字化转型,提高管理效率,促进业务增长。 新零售合规分销系统是企元数智引领的一项全新数字解决方案,涵盖了销售数…

Linux第四节课(指令与权限)

1、date指令(时间) 程序运行到自己的每一个关键时刻,都要自己打日志! 日志包括时间、日志等级、日志具体信息、其他信息等,然后按照行为单位写入文件中,这个文件被称为日志文件! 在日志文件中筛选信息时&#xff0c…

【Unity国产化信创平台】虚拟机VMware Workstation Pro虚拟机下载安装

目录 一、虚拟机软件VMware Workstation Pro下载 二、虚拟机安装流程 1.傻瓜式安装 2.是否自动安装WHP 一、虚拟机软件VMware Workstation Pro下载 https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion 官网各种访问出错,下载界面总是…

H3CNE(vlan与子接口技术)

目录 10.1 vlan间通信技术 示例一(多臂路由): 10.2 子接口技术 示例二(子接口技术): 10.3 vlannif接口技术 10.3.1 三层交换机与VLANNIF技术 示例三VLANNIF配置(将交换机当成路由器使用&…

DLMS/COSEM中公开密钥算法的使用_椭圆曲线加密法

1.概述 椭圆曲线密码涉及有限域上的椭圆曲线上的算术运算。椭圆曲线可以定义在任何数字域上(实数、整数、复数),但在密码学中,椭圆曲线最常用于有限素数域。 素数域上的椭圆曲线由一组实数(x, y)组成,满足以下等式: 方程的所有解的集合构成…

Go语言---list的声明、常用方法以及遍历

List所在的库 Go语言的链表实现在其标准库的container/list代码包中。 import "container/list"这个包含了两个公开的程序实体:List和Element。 List代表一个双向链表,其零值为一个空的、可用的链表;Element代表双向链表中的一个…

Python | Leetcode Python题解之第279题完全平方数

题目: 题解: class Solution { public:// 判断是否为完全平方数bool isPerfectSquare(int x) {int y sqrt(x);return y * y x;}// 判断是否能表示为 4^k*(8m7)bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7;}int numSquares(i…

注册邮箱需要实名认证吗

注册邮箱需要进行实名认证吗?都需要认证哪些信息呢?邮箱实名认证提高安全性和责任感,但可能涉及隐私顾虑。本文将详细介绍邮箱实名认证的相关内容。 一、邮箱实名认证的定义和目的 1、定义 电子邮件实名验证是指客户在注册电子邮件服务时&…

初阶数据结构之栈和队列

栈和队列是两种特殊的线性表,都可以用数组或者链表来实现,接下来就让我们看看栈和队列会有什么奥秘吧~ 目录 1.栈 1.1栈的概念 1.2栈的实现 1.2.1 Stack.h 1.2.2 Stack.c 1.2.3 test.c 2.队列 2.1队列的概念 2.2队列的实现 2.2.1 Queue.h 2…

【科研】# Taylor Francis 论文 LaTeX template模版 及 Word模版

【科研写论文】系列 文章目录 【科研写论文】系列前言一、Word 模板(附下载网址):二、LaTeX 版本方法1:直接网页端打开(附网址)方法2:直接下载到本地电脑上编辑下载地址说明及注意事项 前言 给…