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

目录

1、语言模型

1.1、训练过程:

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

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

2、Tokens

[3、Helper function辅助函数 (提问范式)](#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)

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

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

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

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

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

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

复制代码
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)
复制代码
# 长度控制
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}

相关推荐
Liudef0610 小时前
FLUX.1-Kontext 高效训练 LoRA:释放大语言模型定制化潜能的完整指南
人工智能·语言模型·自然语言处理·ai作画·aigc
静心问道10 小时前
大型语言模型中的自动化思维链提示
人工智能·语言模型·大模型
阿里云大数据AI技术12 小时前
OpenSearch 视频 RAG 实践
数据库·人工智能·llm
大模型开发13 小时前
零基础打造AI智能体实战教学(10)----零基础用Coze打造短视频自动洗稿工作流
llm·agent·coze
难受啊马飞2.013 小时前
如何判断 AI 将优先自动化哪些任务?
运维·人工智能·ai·语言模型·程序员·大模型·大模型学习
商汤万象开发者14 小时前
懒懒笔记 | 课代表带你梳理【RAG课程 19:基于知识图谱的RAG】
llm
静心问道15 小时前
GoT:超越思维链:语言模型中的有效思维图推理
人工智能·计算机视觉·语言模型
字节跳动视频云技术团队16 小时前
ICME 2025 | 火山引擎在国际音频编码能力挑战赛中夺得冠军
llm·aigc·音视频开发
静心问道16 小时前
大语言模型能够理解并可以通过情绪刺激进行增强
人工智能·语言模型·大模型
AI大模型17 小时前
COZE实战部署(二)—— 创建Coze应用
程序员·llm·coze