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

Kaggle - LLM Science Exam上:赛事概述、数据收集、BERT Baseline

文章目录

    • 一、赛事概述
      • 1.1 OpenBookQA Dataset
      • 1.2 比赛背景
      • 1.3 评估方法和代码要求
      • 1.4 比赛数据集
      • 1.5 优秀notebook
    • 二、BERT Baseline
      • 2.1 数据预处理
      • 2.2 定义data_collator
      • 2.3 加载模型,配置trainer并训练
      • 2.4 预测结果并提交
      • 2.5 相关优化

在这里插入图片描述
  前言:国庆期间哪也没去,重装了win10,conda和python环境,然后重点解读 Kaggle - LLM Science Exam赛事的优秀代码,希望可以学到些东西。

一、赛事概述

1.1 OpenBookQA Dataset

  OpenBookQA Dataset是由美国艾伦人工智能研究院(Allen Institute for AI)发布的一个问答技术评测集,其主要目的是通过选择题考试的方式来测试和评估人工智能系统的问题回答能力,以下是更详细的介绍。

  1. 发布背景
    许多之前的阅读理解数据集都是基于抽取式的方法,只需要从给定的上下文中抽取答案,而没必要进行更深层次的推理。OpenBookQA要求模型需要利用基础知识来回答问题,进行更复杂的推理。

  2. 数据集构成
    OpenBookQA包含5957个四选一的科学常识问题(4,957 train, 500 dev, 500 test)。这些问题需要根据包含1326个科学事实的小“书本”来回答。问题采样自维基百科页面。

  3. 模型表现
    回答OpenBookQA的问题不仅需要给定知识库中的科学常识,还需要额外的广泛常识知识。这些问题既不能通过检索算法回答正确,也不能通过词语共现算法回答正确。Strong neural baselines在OpenBookQA上只能达到约50%的准确率,与人类92%的准确率存在明显差距。

  4. 附加数据
    该数据集还提供了5167个群众贡献的常识知识,以及扩展的训练集、开发集、测试集,每个问题对应其所考察的核心科学事实、人类准确率、清晰度评分等信息。

  5. 数据集意义
    OpenBookQA推动了机器阅读理解从抽取式到推理式的发展,评估了模型在开放域知识下的深层理解和推理能力。

1.2 比赛背景

赛事地址:Kaggle - LLM Science Exam

  • LLM的能力:随着大型语言模型的能力不断扩展,研究领域中出现了使用LLMs来表征自身的趋势。因为许多现有的自然语言处理基准测试已经被最先进的模型轻松解决,所以有趣的工作是利用LLMs创建更具挑战性的任务,以测试更强大的模型。
  • 数据生成:比赛使用了gpt3.5模型,该模型基于从维基百科中提取的各种科学主题的文本片段,要求它编写一个多项选择问题(附带已知答案),然后过滤掉简单的问题。
  • 资源受限:本次比赛是一场代码比赛,GPU和时间都受到限制
  • 挑战性:虽然量化和知识蒸馏等技术可以有效地缩小语言模型以便在更少的硬件资源上运行,但这场比赛仍旧充满挑战。目前,目前在 Kaggle 上运行的最大模型有大约 100 亿个参数,而 gpt3.5 有 1750 亿个参数。如果一个问答模型能够轻松通过一个比其规模大10倍以上的模型编写的问答测试,这将是一个真正有趣的结果。另一方面,如果更大的模型能够有效地难住较小的模型,这对LLMs自我评估和测试的能力具有引人注目的影响。
  • 竞赛旨在探讨比gpt3.5小10倍以上的问答模型能否有效回答gpt3.5编写的问题。结果将揭示LLM的基准测试和自我测试能力。

1.3 评估方法和代码要求

提交根据平均精度 @ 3 (MAP@3) 进行评估:
在这里插入图片描述

  其中 ,𝑈 为测试集中的问题数量,𝑃(𝑘) 为截断值为 𝑘 时的精确度,𝑛 为每个问题的预测数量,𝑟𝑒𝑙(𝑘) 为指示函数,如果排名为 𝑘 的项目是相关的(正确的)标签,则等于1,否则为0

  另外,某个问题正确预测后,后续将跳过该标签的其他预测,以防止刷准确度。举例来说,假设有一个测试集,里面有3个问题的正确答案都是A,如果有一个模型对这3个问题给出以下答案,那么以下情况都会得到平均精确度1.0的分数:

[A, B, C, D, E] # 问题1预测
[A, A, A, A, A] # 问题2预测
[A, B, A, C, A] # 问题3预测

  这意味着一旦找到正确答案(A),之后的预测不再影响平均精确度分数。

  本次比赛必须以notebook提交,且CPU和GPU运行时间少于9小时。禁用互联网,但是允许使用公开的外部数据,包括预先训练的模型。另外提交文件必须命名为 submission.csv

1.4 比赛数据集

  本次比赛是回答由gpt3.5模型生成的4000道多选题组成的测试集。测试集是隐藏的,当提交notebook后,才会有实际的测试数据进行评测。

  • train.csv : 200个样本,问题+答案,以显示数据格式,并大致了解测试集中的问题类型。
  • test.csv : 测试集,只包含题目,答案省略。
  • sample_submission.csv : 提交格式示例

具体的训练集格式如下:

# Let's import the public training set and take a look
import pandas as pdtrain_df = pd.read_csv('/kaggle/input/kaggle-llm-science-exam/train.csv')
train_df.head()

在这里插入图片描述
  对于测试集中的每个 id 标签,您最多可以预测 3 个标签 。submission.csv文件应包含header并具有以下格式:

id,prediction
0,	A B C
1,	B C A
2,	C A B
etc.

1.5 优秀notebook

  1. 《Starter Notebook: Ranked Predictions with BERT》:Bert Baseline,使用bert-base-cased和比赛提供的200个训练集样本进行训练,Public Score=0.545

  2. 《[EDA, Data gathering] LLM-SE ~ Wiki STEM | 1k DS》:比赛提供的200个样本太少了,作者LEONID KULYK先分析了比赛数据集,然后同样使用 gpt3.5 上收集了1000个Wikipedia样本,即Wikipedia STEM 1k

  3. 《LLM-SE ~ deberta-v3-large -i | 1k Wiki》:LEONID KULYK使用自己收集的1000个Wikipedia样本和比赛训练集样本一起训练,模型是deberta-v3-large。notebook中有最终模型权重,可直接推理,LB= 0.709

  4. 《New dataset + DEBERTA v3 large training!》:0.723→0.759

    • Radek 基于LEONID KULYK的工作,使用自己生成的500个额外数据训练DEBERTA v3 large,Public Score=0.723
    • 作者后来又生成了6000条数据,融合为6.5K数据集,并在此基础上训练模型,得到了三个模型权重,上传在Science Exam Trained Model Weights。通过《Inference using 3 trained Deberta v3 models》三个模型分别预测之后概率取平均,Public Score=0.737。而使用Voting Ensemble集成投票,Public Score=0.759
    • 作者最后上传了15k high-quality train examples
  5. 《Open Book LLM Science Exam》:jjinho首次提出了Open Book方法,

  6. 《Open Book LLM Science Exam - Reduced RAM usage》:quangbk改进了jjinho方法中的内存效率。

  7. 《OpenBook DeBERTaV3-Large Baseline (Single Model》): Anilquangbk的Open Book方法与Radek的DEBERTA v3 large training结合起来,Public Score=0.771

  8. 《Sharing my trained-with-context model》:MgoksuANIL的方法中的DeBerta large进行微调(使用了自己制作的数据集),top public LB=0.807

  9. 《How To Train Open Book Model - Part 1》、《How To Train Open Book Model - Part 2》:CHRIS DEOTTEmgoksu的基础上,加入自己制作的60k数据集进行训练,设置NUM_TITLES_INCLUDE = 5 和 NUM_SENTENCES_INCLUDE = 20,Public Score=0.819

  10. 《LLM Science Exam Optimise Ensemble Weights》:作者主要基于CHRIS DEOTTE的工作,使用了他训练的模型权重。另外为了增加多样性,还融合了其它几个没有使用Open Book的deberta-v3-large模型,Public Score=0.837。作者还写了《Using DeepSpeed with HF🤗 Trainer》等等

  11. 《LLM-SciEx Optimise Ensemble Weights(better models)》:通过模型融合,Public Score=0.846

  12. 《with only 270K articles》:作者自己制作了270K Wikipedia数据,使用LongFormer 模型进行训练,Public Score=0.862

  13. 《Platypus2-70B with Wikipedia RAG》:SIMJEG结合了上述方法8和12,最终Public Score=0.872。做了详细的解释。ALI在 《Explained Platypus2-70B + Wikipedia RAG》中对SIMJEG的notebook做了详细的说明。

二、BERT Baseline

  此部分参考《Starter Notebook: Ranked Predictions with BERT》,作者直接使用bert_base模型对训练集中的200个样本进行3个epoch的训练,然后再进行推理。大部分代码参考的是HF官方文档《Multiple choice》

2.1 数据预处理

import pandas as pd
from datasets import Datasettrain_df = pd.read_csv('/kaggle/input/kaggle-llm-science-exam/train.csv')
train_ds = Dataset.from_pandas(train_df)
train_df.head()

在这里插入图片描述


from transformers import AutoTokenizermodel_dir = 'bert-base-cased'
tokenizer = AutoTokenizer.from_pretrained(model_dir)options = 'ABCDE'
indices = list(range(5))
option_to_index = {option: index for option, index in zip(options, indices)}
index_to_option = {index: option for option, index in zip(options, indices)}def preprocess(example):# AutoModelForMultipleChoice 需要的是question/answer对,所以问题被复制5次first_sentence = [example['prompt']] * 5second_sentence = []# 遍历选项(A 到 E)并将它们添加到 second_sentence 列表中for option in options:second_sentence.append(example[option])tokenized_example = tokenizer(first_sentence, second_sentence, truncation=True)# 将答案映射为索引,并将其添加到 tokenized_example 中作为标签tokenized_example['label'] = option_to_index[example['answer']]return tokenized_example# 使用数据集映射(map)预处理函数到训练数据集,同时删除不需要的列
tokenized_train_ds = train_ds.map(preprocess, batched=False, remove_columns=['prompt', 'A', 'B', 'C', 'D', 'E', 'answer'])
print(tokenized_train_ds[0])
{'id': 1, 'input_ids': [[101, 5979, ...], [101, 5979, ...], [101, 5979, ...], [101, 5979, ...], [101, 5979, ...]], 'token_type_ids': [[0, 0, ...], [0, 0, ...],[0, 0, ...],[0, 0, ...],[0, 0, ...]], 'attention_mask': [[1, 1,...],[1, 1,...],[1, 1,...],[1, 1,...],[1, 1,...]], 'label': 0}

  可以看到,每个样本的问题被重复5次后和5个选项合并,解码后的结果input_ids、token_type_ids、attention_mask都是5个元素的嵌套列表,等于一个样本被拆成5个样本。

有关填充和截断的详细信息,可参考官方文档《Padding and truncation》

2.2 定义data_collator

#  datacollator 来自 https://huggingface.co/docs/transformers/tasks/multiple_choice
# 每个batch中对问答对进行动态填充(dynamically pad),所以不需要将每个问答对都填充到模型最大序列长度
from dataclasses import dataclass
from transformers.tokenization_utils_base import PreTrainedTokenizerBase, PaddingStrategy
from typing import Optional, Union
import torch@dataclass
class DataCollatorForMultipleChoice:tokenizer: PreTrainedTokenizerBasepadding: Union[bool, str, PaddingStrategy] = Truemax_length: Optional[int] = Nonepad_to_multiple_of: Optional[int] = Nonedef __call__(self, features):# features就是4个样本(batch size=4)label_name = "label" if 'label' in features[0].keys() else 'labels'# 对每个样本(feature,字典格式)使用pop删除key为label的键值对,返回被删除的值# 所以feature被删除了label键值对,而labels的值是四个样本label列表[0, 0, 1, 0]labels = [feature.pop(label_name) for feature in features] batch_size = len(features)  						# 批次大小num_choices = len(features[0]['input_ids'])			# 选项数flattened_features = [[{k: v[i] for k, v in feature.items()} for i in range(num_choices)] for feature in features]flattened_features = sum(flattened_features, [])batch = self.tokenizer.pad(flattened_features,padding=self.padding,max_length=self.max_length,pad_to_multiple_of=self.pad_to_multiple_of,return_tensors='pt',)batch = {k: v.view(batch_size, num_choices, -1) for k, v in batch.items()}batch['labels'] = torch.tensor(labels, dtype=torch.int64)return batch
  • 传入数据:features为四个样本数据,每个样本格式和tokenized_train_ds[0]的格式一样

    [{'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...], 'label': 0}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...], 'label': 0}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...], 'label': 1}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...], 'label': 0}]
    
  • 去除label标签:labels = [feature.pop(label_name) for feature in features] ,通过字典的pop方法,去除了每个样本中的label键值对,并将label的值取出,最终labels=[0, 0, 1, 0]。这一步之后,每个feature为:

    {'input_ids': [[...], [...], [...], [...], [...]], 'token_type_ids': [[...], [...], [...], [...], [...]], 'attention_mask': [[...], [...], [...], [...], [...]]}
    
  • 执行flattened操作,此时flattened_features为:

    [[{'input_ids': ..., 'token_type_ids': ..., 'attention_mask': ...}, {...}, {...}, {...}, {...}], 
    [{...}, {...}, {...}, {...}, {...}], 
    [{...}, {...}, {...}, {...}, {...}],[{...}, {...}, {...}, {...}, {...}]]
    
  • sum(flattened_features, [])操作后,flattened_features为:

    # 加和操作后的flattened_features,成了20个样本
    [{'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]},
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]},
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]},
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]},
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]},
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]},
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]}, 
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]},
    {'input_ids': [...], 'token_type_ids': [...], 'attention_mask': [...]}, ...]
    

这一步是将嵌套列表转为一维列表,方便后续解码时方便进行pad和batch操作。

  • 最终结果为:
{'input_ids': tensor([[[ 101, 2627...,    0]]]),
'token_type_ids': tensor([[[0, 0, 0,  ..., 0, 0]]]),
'attention_mask': tensor([[[1, 1, 1,  ..., 0, 0]]]),
'labels': tensor([0, 0, 1, 0])}

2.3 加载模型,配置trainer并训练

from transformers import AutoModelForMultipleChoice, TrainingArguments, Trainer
model = AutoModelForMultipleChoice.from_pretrained(model_dir)output_dir = 'finetuned_bert'
training_args = TrainingArguments(output_dir=output_dir,evaluation_strategy="epoch",save_strategy="epoch",load_best_model_at_end=True,learning_rate=5e-5,per_device_train_batch_size=4,per_device_eval_batch_size=4,num_train_epochs=3,weight_decay=0.01,report_to='none')trainer = Trainer(model=model,args=training_args,train_dataset=tokenized_train_ds,eval_dataset=tokenized_train_ds,tokenizer=tokenizer,data_collator=DataCollatorForMultipleChoice(tokenizer=tokenizer))trainer.train()
Epoch	Training Loss	Validation Loss
1			No log			1.564447
2			No log			1.527968
3			No log			1.417341

2.4 预测结果并提交

  1. 直接使用trainer预测
test_df = pd.read_csv('/kaggle/input/kaggle-llm-science-exam/test.csv')
# 测试集没有answer列,加上这一列以保持和训练集格式一致,方便使用同样的处理方式
test_df['answer'] = 'A'  
test_ds = Dataset.from_pandas(test_df)
tokenized_test_ds = test_ds.map(preprocess, batched=False, remove_columns=['prompt', 'A', 'B', 'C', 'D', 'E', 'answer'])test_predictions = trainer.predict(tokenized_test_ds) # 结果是PredictionOutput格式,包含predictions、label_ids、metrics三个字段
test_df.head()

在这里插入图片描述

import numpy as np
def predictions_to_map_output(predictions):# 对每一行的预测结果按照降序排列,并获取每行的前三个答案的索引# np.argsort默认是对列表中元素值进行升序排列,并返回排序后元素值对应的索引top_answer_indices = np.argsort(-predictions)[:,:3]top_answers = [' '.join([index_to_option[idx] for idx in row]) for row in top_answer_indices]return top_answers
# 获取测试集的id列,作为提交文件的id列
submission_df = test_df[['id']] 
submission_df['prediction'] = predictions_to_map_output(test_predictions.predictions)
submission_df.head()
	id	prediction
0	0	D B E
1	1	B A D
2	2	A C D
3	3	C D A
4	4	E D C
  1. 重新加载模型预测

如果是重新打开notebook后再预测,需要先加载模型,设置推理的trainer参数再进行预测

from transformers import AutoModelForMultipleChoice, TrainingArguments, Trainer
model_checkpoint = "finetuned_bert/checkpoint-150"
model = AutoModelForMultipleChoice.from_pretrained(model_dir)
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
# 只进行推理
inference_args = TrainingArguments(output_dir="./inference_results",  # 推理结果的保存目录per_device_eval_batch_size=8,     # 每个设备的推理批量大小
)trainer = Trainer(model=model,                  # 已加载的模型eval_dataset=tokenized_test_ds,args=inference_args,          # 推理的参数data_collator=DataCollatorForMultipleChoice(tokenizer=tokenizer)
)test_predictions = trainer.predict(tokenized_test_ds) 

后面的步骤都一样了。

2.5 相关优化

  1. 《LLM-SE ~ deberta-v3-large -i | 1k Wiki》:LEONID KULYK使用自己收集的1000个Wikipedia样本和比赛训练集样本一起训练,模型是deberta-v3-large。notebook中有最终模型权重,可直接推理,LB= 0.709
  2. 《New dataset + DEBERTA v3 large training!》:0.723→0.759
    • Radek 基于LEONID KULYK的工作,使用自己生成的500个额外数据训练DEBERTA v3 large,Public Score=0.723
    • 作者后来又生成了6000条数据,融合为6.5K数据集,并在此基础上训练模型,得到了三个模型权重,上传在Science Exam Trained Model Weights。通过《Inference using 3 trained Deberta v3 models》三个模型分别预测之后概率取平均,Public Score=0.737。而使用Voting Ensemble集成投票,Public Score=0.759
    • 作者最后上传了15k high-quality train examples

相关文章:

Kaggle - LLM Science Exam上:赛事概述、数据收集、BERT Baseline

文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook 二、BERT Baseline2.1 数据预处理2.2 定义data_collator2.3 加载模型,配置trainer并训练2.4 预测结果并提交2.5 相关优化 前言:国庆期间…...

数据分析三剑客之一:Numpy详解及实战

1 NumPy介绍 NumPy 软件包是Python生态系统中数据分析、机器学习和科学计算的主力军。它极大地简化了向量和矩阵的操作处理。Python的一些主要软件包(如 scikit-learn、SciPy、pandas 和 tensorflow)都以 NumPy 作为其架构的基础部分。除了能对数值数据…...

【C语言】函数的定义、传参与调用(二)

💗个人主页💗 ⭐个人专栏——C语言初步学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读: 1. 函数的嵌套调用 1.1 什么是嵌套调用 1.2 基础实现 1.3 调用流程解析 2. 函数的链式访问 2.1 …...

Sentinel安装

Sentinel 微服务保护的技术有很多,但在目前国内使用较多的还是Sentinel,所以接下来我们学习Sentinel的使用。 1.介绍和安装 Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站: 首页 | Se…...

【JVM】并发可达性分析-三色标记算法

欢迎访问👋zjyun.cc 可达性分析 为了验证堆中的对象是否为可回收对象(Garbage)标记上的对象,即是存活的对象,不会被垃圾回收器回收,没有标记的对象会被垃圾回收器回收,在标记的过程中需要stop…...

黑豹程序员-架构师学习路线图-百科:Git/Gitee(版本控制)

文章目录 1、什么是版本控制2、特点3、发展历史4、SVN和Git比较5、Git6、GitHub7、Gitee(国产)8、Git的基础命令 1、什么是版本控制 版本控制系统( Version Control )版本控制是一种管理和跟踪软件开发过程中的代码变化的系统。它…...

《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架

书籍源码 Compose官方文档 《Jetpack Compose从入门到实战》第一章 全新的 Android UI 框架 《Jetpack Compose从入门到实战》 第二章 了解常用UI组件 《Jetpack Compose从入门到实战》第三章 定制 UI 视图 《Jetpack Compose从入门到实战》第八章 Compose页面 导航 《Jet…...

基于Spring Boot的中小型医院网站的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 前台首页界面 用户登录界面 用户注册界面 门诊信息详情界面 预约挂号界面 药品详情界面 体检报告界面 管理员登录界面 用户管理界面 医师管理界面 科室类型管理界面 门诊信息管理界面 药库信息管理界面 预约挂号管理界面…...

uniapp iOS离线打包——如何创建App并提交版本审核?

uniapp 如何创建App,并提交版本审核? 文章目录 uniapp 如何创建App,并提交版本审核?登录 appstoreconnect创建AppiOS 预览和截屏应用功能描述技术支持App 审核信息 App 信息内容版权年龄分级 价格与销售范围App 隐私提交审核 登录…...

论文笔记:Contrastive Trajectory Similarity Learning withDual-Feature Attention

ICDE 2023 1 intro 1.1 背景 轨迹相似性,可以分为两类 启发式度量 根据手工制定的规则,找到两条轨迹之间基于点的匹配学习式度量 通过计算轨迹嵌入之间的距离来预测相似性值上述两种度量的挑战: 无效性: 具有不同采样率或含有噪…...

整数和字符串比较的坑

结果竟然是相同,惊呆了吧? $num1 2023快放假了; $num2 2023;if ($num1 $num2) {echo 相同; } else {echo 不相同; }num2改成字符串类型,结果:不相同,又不懵了吧? $num1 2023快放假了; $num2 2023;if…...

LeetCode 面试题 08.04. 幂集

文章目录 一、题目二、C# 题解 一、题目 幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。 说明: 解集不能包含重复的子集。 示例: 输入: nums [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1…...

【m_listCtrl !=NULL有多个运算符与操作数匹配】2023/9/21 上午11:03:44

2023/9/21 上午11:03:44 m_listCtrl !=NULL有多个运算符与操作数匹配 2023/9/21 上午11:04:00 如果您在编译或运行代码时遇到"M_listCtrl != NULL有多个运算符与操作数匹配"的错误提示,这通常是由于以下几个原因之一: 错误使用运算符:在条件判断语句中,应该使…...

Logrus 集成 color 库实现自定义日志颜色输出字符原理

问题背景 下列代码实现了使用 Logurs 日志框架输出日志时根据级别不同,使用对应的自定义颜色进行输出。那么思考下代码的逻辑是怎么实现的呢? 效果如下: 代码如下: import ("fmt""github.com/sirupsen/logrus&q…...

【Java-LangChain:使用 ChatGPT API 搭建系统-2】语言模型,提问范式与 Token

第二章 语言模型,提问范式与 Token 在本章中,我们将和您分享大型语言模型(LLM)的工作原理、训练方式以及分词器(tokenizer)等细节对 LLM 输出的影响。我们还将介绍 LLM 的提问范式(chat format…...

想要精通算法和SQL的成长之路 - 最长连续序列

想要精通算法和SQL的成长之路 - 最长连续序列 前言一. 最长连续序列1.1 并查集数据结构创建1.2 find 查找1.3 union 合并操作1.4 最终代码 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 最长连续序列 原题链接 这个题目,如何使用并查集是一个小难…...

UG NX二次开发(C#)- 制图(Draft)-工程图框选制图曲线并输出制图曲线的信息

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中打开一个装配体模型3、进入工程制图模块,创建工程制图4、在VS中创建一个工程项目5、在Main()中添加选择的代码(UFun)6、在Main()中添加选择的代码(NXOpen)7、框选解决方案…...

1.7.C++项目:仿muduo库实现并发服务器之Poller模块的设计

项目完整在: 文章目录 一、Poller模块:描述符IO事件监控模块二、提供的功能三、实现思想(一)功能(二)意义(三)功能设计 四、封装思想五、代码(一)框架&#…...

Flutter笔记:build方法、构建上下文BuildContext解析

Flutter笔记 build 方法解析 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/133556333 本文主要介绍Flu…...

composer 安装和基本使用

php的包管理软件 如果没有安装php,参考这篇:添加链接描述 1.composer安装 composer官网 需要先安装好php,同时php -v输出有信息 cd /usr/localphp -r "copy(https://install.phpcomposer.com/installer, composer-setup.php);"…...

Ubuntu配置深度学习环境(TensorFlow和PyTorch)

文章目录 一、CUDA安装1.1 安装显卡驱动1.2 CUDA安装1.3 安装cuDNN 二、Anaconda安装三、安装TensorFlow和pyTorch3.1 安装pyTorch3.2 安装TensorFlow2 四、安装pyCharm4.1 pyCharm的安装4.2 关联anaconda的Python解释器 五、VScode配置anaconda的Python虚拟环境 前言&#xff…...

【产品经理】国内企业服务SAAS平台的生存与发展

SaaS在国外发展的比较成熟,甚至已经成为了主流,但在国内这几年才掀起热潮;企业服务SaaS平台在少部分行业发展较快,大部分行业在国内还处于起步、探索阶段;SaaS将如何再国内生存和发展? 在企业服务行业做了五…...

【vue 首屏加载优化】

Vue 首屏加载优化指的是通过一系列的技术手段,尽可能地缩短首屏(即页面中可见的部分)的加载时间,提高用户体验。 以下是一些常见的 Vue 首屏加载优化技巧: 使用 Vue SSR(服务端渲染)&#xff1…...

docker--redis容器部署及与SpringBoot整合-I

文章目录 1. 容器化部署docker2. 如何与SpringBoot集成2.1. 引入依赖2.2. 添加配置信息2.3. 测试类2.4. 内置的Spring Beansredis 主流客户端比较redissonlettucejedis参考1. 容器化部署docker 拉取镜像创建数据目录data 及 配置目录conf创建配置文件redis.conf启动redis容器进…...

力扣 -- 518. 零钱兑换 II(完全背包问题)

解题步骤&#xff1a; 参考代码&#xff1a; 未优化代码&#xff1a; class Solution { public:int change(int amount, vector<int>& coins) {int ncoins.size();//多开一行&#xff0c;多开一列vector<vector<int>> dp(n1,vector<int>(amount1…...

一文搞懂UART通信协议

目录 1、UART简介 2、UART特性 3、UART协议帧 3.1、起始位 3.2、数据位 3.3、奇偶校验位 3.4、停止位 4、UART通信步骤 1、UART简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff0c;通用异步收发器&#xff09;是一种双向、串行、异步的通信…...

【算法|动态规划No.7】leetcode300. 最长递增子序列

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…...

LeetCode 54 螺旋矩阵

先贴代码 ​ class Solution {public int[][] generateMatrix(int n) {int left 0;int right n-1;int up 0;int down n-1;int[][] result new int[n][n];int number 0;while(left < right && up < down) {for(int ileft;i<right;i) {number;result[up]…...

OpenCV 概念、整体架构、各模块主要功能

文章目录 1. OpenCV 概念2 OpenCV主要模块3 各模块 详细介绍3.1 calib3d 标定3.2 core 核心功能模块3.4 features2d 二维特征3.5 flann 快速近似近邻算法库3.7 highgui 高级图形用户界面3.9 imgproc 图像处理模块3.10 ml 机器学习模块3.11 objdetect 目标检测模块3.12 photo 数…...

组合数与莫队——组合数前缀和

用莫队求组合数是一种常见套路 莫队求 S ( n , m ) ∑ i 0 m ( n i ) S(n,m)\sum_{i0}^m\binom n i S(n,m)∑i0m​(in​) S ( n , m 1 ) S(n,m1) S(n,m1) 直接做个差&#xff0c;然后就相当于加上 ( n i 1 ) \binom n {i1} (i1n​) 求 S ( n 1 , m ) S(n1,m) S(n1,m)…...

俄罗斯乌克兰战况最新消息/seo网络贸易网站推广

http://www.magentocommerce.com/magento-connect/virendra/extension/7387/vs_sidebarreview magento-community/VS_Sidebarreview转载于:https://www.cnblogs.com/wangzhanjianshe/archive/2011/08/14/2326572.html...

开设网站需要什么/seo关键词快速提升软件官网

异步日志 log4j2最大的特点就是异步日志&#xff0c;其性能的提升主要也是从异步日志中受益&#xff0c;我们来看看如何使用log4j2的异步日志。 同步日志 异步日志 Log4j2提供了两种实现日志的方式&#xff0c;一个是通过AsyncAppender&#xff0c;一个是通过AsyncLogger&am…...

东莞微网站建设/昆明seo关键字推广

属性在这里只是一个统称&#xff0c;它对应两个术语attribute与property。attribute是指用户通过setAttribute设置的自定义属性&#xff0c;其值只能是字符串&#xff0c;如果没有显式定义&#xff0c;用getAttribute取值为undefined。property是指元素固有属性&#xff0c;像t…...

最近免费视频中文2019完整版/推广资源seo

要先建立好MongoDB存放数据文件和日志文件的目录&#xff0c;此处建立在/data下&#xff1a;[rootlocalhost etc]# cd /data/[rootlocalhost data]# lsmongodb_data mongodb_log在MongoDB安装目录下的bin下使用mongod启动MongoDB&#xff0c;./mongod --dbpath/data/mongodb_da…...

wordpress 产品模块/怎么建设自己的网站

1)jsp是简servlet编写的一种技术&#xff0c;它将Java代码&#xff08;一定是在服务器端执行&#xff0c;不是在客户端的浏览器那儿执行&#xff09;和html语句混在同一个文件中编写&#xff0c;只对网页中要动态产生的内容用Java代码来编写&#xff0c;而对固定不变的静态内容…...

网站开发需求/什么是seo标题优化

[彻底解决 configparser 中文乱码问题,让你的 Python3 代码更加优雅] Python3 configparser 是一个非常重要的模块,它可以帮助我们读取和写入配置文件,很多项目都会用到这个模块。但是在使用过程中,我们可能会遇到中文乱码的问题,这给我们的编码工作带来了很大的困扰。 …...