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

相关推荐
SpikeKing31 分钟前
LLM - 理解 多模态大语言模型(MLLM) 的 指令微调(Instruction-Tuning) 与相关技术 (四)
人工智能·语言模型·指令微调·数据调整·自指令·数据混合·instruction
AI小白龙*5 小时前
大模型团队招人(校招):阿里巴巴智能信息,2025届春招来了!
人工智能·langchain·大模型·llm·transformer
Alluxio6 小时前
选择Alluxio来解决AI模型训练场景数据访问的五大理由
大数据·人工智能·分布式·ai·语言模型
wx7408513267 小时前
小琳AI课堂:大语言模型如何符合伦理限制
人工智能·语言模型·自然语言处理
拥抱AGI8 小时前
我说大模型微调没啥技术含量,谁赞成谁反对?
人工智能·学习·语言模型·大模型学习·大模型入门·大模型教程
AI完全体9 小时前
AI小项目4-用Pytorch从头实现Transformer(详细注解)
人工智能·pytorch·深度学习·机器学习·语言模型·transformer·注意力机制
AI知识分享官9 小时前
智能绘画Midjourney AIGC在设计领域中的应用
人工智能·深度学习·语言模型·chatgpt·aigc·midjourney·llama
AI大模型知识分享10 小时前
Prompt最佳实践|指定输出的长度
人工智能·gpt·机器学习·语言模型·chatgpt·prompt·gpt-3
CV-杨帆13 小时前
大语言模型-教育方向数据集
人工智能·语言模型·自然语言处理
草莓屁屁我不吃16 小时前
AI大语言模型的全面解读
人工智能·语言模型·自然语言处理·chatgpt