还在用BERT做文本分类?分享一套基于预训练模型ERNIR3.0的文本多分类全流程实例【文本分类】

news2024/12/26 0:42:08

目录

  • 🍀一、前言
  • 🌱二、多分类场景简介
  • 🍃三、前期准备阶段
    • 🟥3.1 运行环境准备
    • 🟧3.2 文心ERNIE系列模型介绍
    • 🟨3.3 预训练模型加载
    • ⬜3.4 加载项目代码
  • 💐四、数据准备阶段
    • 🟩4.1 数据处理流程
    • 🟦4.2 加载内置数据集
    • 🟪4.3 加载自定义数据集
    • 🟫3.4 训练数据格式
  • 🌸五、模型训练阶段
    • ⬛5.1 预训练模型微调
      • 🥒5.1.1 CPU/GPU配置
      • 🥦5.1.2 模型主要参数配置
      • 🥬5.1.3 注意事项
    • 🔴5.2 训练评估与模型优化
    • 🟠5.3 模型预测
  • 🌻七、总结
  • 🌼八、参考文献

在这里插入图片描述

🍀一、前言

    文本分类任务是自然语言处理中最常见的任务之一。文本分类简单定义来说就是对给定的文本,可以是一句话、一段文本、一篇文章利用文本分类器进行分类和打标签。文本分类任务广泛应用于长短文本、情感分析、新闻分类、事件类型分类、政务信息分类、商品类型分类、文章类型分类、论文类别、专利领域、案件描述、罪名分类、意图分类、论文专利分类、邮件自动分类、评论类型分类、药物反应分类、对话分类、税收分类、投诉分类、广告检测、敏感违禁内容分类、内容安全检测、预情分析、话题分类等等日常或者专业领域中。
本文内容简介:本文主要是根据PaddleNLP框架,利用中医疗搜索检索词意图分类数据集为样例,来介绍多分类场景实例。本文会全流程介绍文本分类场景的建模流程,包括从前期准备阶段、数据准备阶段、模型训练与评估阶段。


🌱二、多分类场景简介

    文本分类任务可以根据标签类型分为多分类(multi class)、多标签(multi label)、层次分类(hierarchical)等三类任务,从以下新闻文本分类样例中就可以知道三种分类任务的区别。文本分类具体方案可以参考文本分类方案,飞浆PaddleNLP涵盖了所有!
在这里插入图片描述
     多分类(multi class)任务定义:二分类/多分类数据集的标签集含有两个或两个以上的类别,所有输入句子/文本有且只有一个标签。在文本多分类场景中,我们需要预测输入句子/文本最可能来自 n 个标签类别中的哪一个类别。例如上图中的多分类样例,第一个场景中说明了新闻分类 游戏 是输出的标签。
     多分类任务方案介绍:
     
(1)效果领先:
使用在中文领域内模型效果和模型计算效率有突出效果的ERNIE 3.0 预训练语言模型作为训练基座,ERNIE 3.0 轻量级系列提供多种尺寸的预训练模型满足不同需求,具有广泛成熟的实践应用性。
     (2)高效调优: 文本分类应用依托TrustAI可信增强能力和数据增强API,提供模型分析模块助力开发者实现模型分析,并提供稀疏数据筛选、脏数据清洗、数据增强等多种解决方案。
     (3)简单易用: 开发者无需机器学习背景知识,仅需提供指定格式的标注分类数据,一行命令即可开启文本分类训练,轻松完成上线部署,不再让技术成为文本分类的门槛。


🍃三、前期准备阶段

🟥3.1 运行环境准备

  • python >= 3.6
  • paddlepaddle >= 2.3
  • paddlenlp >= 2.4
  • scikit-learn >= 1.0.2

     安装PaddlePaddle:环境中paddlepaddle-gpu或paddlepaddle版本应大于或等于2.3, 请参见飞桨快速安装根据。


     安装PaddleNLP:安装PaddleNLP默认开启百度镜像源来加速下载,如果您使用 HTTP 代理可以关闭(删去 -i https://mirror.baidu.com/pypi/simple),更多关于PaddleNLP安装的详细教程请查见PaddleNLP快速安装。

pip install --upgrade paddlenlp -i https://mirror.baidu.com/pypi/simple

     安装sklearn:直接通过pip来安装即可,只需要注意一下版本。

pip install scikit-learn==1.0.2

🟧3.2 文心ERNIE系列模型介绍

     最新开源ERNIE 3.0系列预训练模型:

  • 110M参数通用模型ERNIE 3.0 Base
  • 280M参数重量级通用模型ERNIE 3.0 XBase
  • 74M轻量级通用模型ERNIE 3.0 Medium
    在这里插入图片描述
    文档链接: https://github.com/PaddlePaddle/ERNIE
    ERNIE模型汇总
    ERNIE模型汇总

    在这里插入图片描述
         目前直接定义name就可以调用的主要为下面几类:目开源 ERNIE 3.0 Base 、ERNIE 3.0 Medium 、 ERNIE 3.0 Mini 、 ERNIE 3.0 Micro 、 ERNIE 3.0 Nano 五个模型:

         ERNIE 3.0-Base (12-layer, 768-hidden, 12-heads)
         ERNIE 3.0-Medium (6-layer, 768-hidden, 12-heads)
         ERNIE 3.0-Mini (6-layer, 384-hidden, 12-heads)
         ERNIE 3.0-Micro (4-layer, 384-hidden, 12-heads)
         ERNIE 3.0-Nano (4-layer, 312-hidden, 12-heads)

🟨3.3 预训练模型加载

     PaddleNLP内置了ERNIE、BERT、RoBERTa、Electra等40多个的预训练模型,并且内置了各种预训练模型对于不同下游任务的Fine-tune网络。用户可以使用PaddleNLP提供的模型,完成问答、序列分类、token分类等任务。查阅 预训练模型 了解更多。这里以ERNIE 3.0模型为例,介绍如何将预训练模型Fine-tune完成文本分类任务。PaddleNLP采用AutoModelForSequenceClassification,AutoTokenizer提供了简单易用的接口,可以用过from_pretrained() 方法来加载不同的预训练模型,在输出层上叠加一层线性层,且相应预训练模型权重下载速度快、稳定。下面以ERNIE 3.0中文base模型为基础,演示如何添加预训练语言模型和分词器:

from paddlenlp.transformers import AutoModelForSequenceClassification,AutoTokenizer
num_classes = 10
model_name = 'ernie-3.0-base-zh'
model = AutoModelForSequenceClassification.from_pretrained(model_name,num_classes=num_classes))
tokenizer = AutoTokenizer.from_pretrained(model_name)

⬜3.4 加载项目代码

     首先,克隆paddlenlp对应的想项目代码:

git clone https://github.com/PaddlePaddle/PaddleNLP.git
checkout release/2.4
cd PaddleNLP/applications/text_classification/multi_class/

     然后可以看到整个项目的代码结构,代码结构如下:

multi_class/
├── deploy # 部署
│   └── predictor # 离线部署
│   │   ├── infer.py # 测试脚本
│   │   ├── predictor.py 离线部署脚本
│   │   └── README.md # 离线部署使用说明
│   ├── paddle_serving # PaddleServing在线服务化部署
│   │   ├──config.yml # 服务端的配置文件
│   │   ├──rpc_client.py # 客户端预测脚本
│   │   ├──service.py # 服务端的脚本
│   │   └── README.md # 在线服务化部署使用说明
│   └── triton_serving # Triton在线服务化部署
│       ├── README.md # Triton部署使用说明
│       ├── seqcls_grpc_client.py # 客户端预测脚本
│       └── models
├── train.py # 训练评估脚本
├── predict.py # 预测脚本
├── export_model.py # 静态图模型导出脚本
├── utils.py # 工具函数脚本
├── prune.py # 裁剪脚本
└── README.md # 多分类使用说明

💐四、数据准备阶段

🟩4.1 数据处理流程

     通过使用PaddleNLP提供的 load_datasetMapDatasetIterDataset ,可以方便的自定义属于自己的数据集。
     目前PaddleNLP的通用数据处理流程如下:
          1. 加载数据集(内置数据集或者自定义数据集,数据集返回 原始数据)。
          2. 定义 trans_func() ,包括tokenize,token to id等操作,并传入数据集的 map() 方法,将原始数据转为 feature 。
          3. 根据上一步数据处理的结果定义 batchify 方法和 BatchSampler 。
          4. 定义 DataLoader , 传入 BatchSampler 和 batchify_fn() 。


在这里插入图片描述
     PaddleNLP提供了以下数据集的快速读取API,实际使用时请根据需要添加splits信息,PaddleNLP Datasets API:供参考:

在这里插入图片描述

🟦4.2 加载内置数据集

     快速加载内置数据集 目前PaddleNLP内置20余个NLP数据集,涵盖阅读理解,文本分类,序列标注,机器翻译等多项任务。目前提供的数据集可以在 数据集列表 中可以找到。
以 cola 数据集为例:load_dataset() 方法会从 paddlenlp.datasets 下找到cola数据集对应的数据读取脚本(默认路径:paddlenlp/datasets/cola.py),并调用脚本中 DatasetBuilder 类的相关方法生成数据集。load_dataset() 方法提供了一个 name 参数用来指定想要获取的子数据集。使用方法如下:

from paddlenlp.datasets import load_dataset
train_ds, dev_ds = load_dataset("glue", name="cola", splits=("train", "dev"))
for i in range(3):
    print(train_ds[i])

🟪4.3 加载自定义数据集

     通过使用PaddleNLP提供的 load_dataset() , MapDataset 和 IterDataset 。任何人都可以方便的定义属于自己的数据集。从本地文件创建数据集 从本地文件创建数据集时,我们 推荐 根据本地数据集的格式给出读取function并传入 load_dataset() 中创建数据集。
     以 中医疗搜索检索词意图分类 任务中的数据为例:


def read_local_dataset(path, label_list=None, is_test=False):
    """
    Read dataset
    """
    with open(path, 'r', encoding='utf-8') as f:
        for line in f:
            if is_test:
                items = line.strip().split('\t')
                sentence = ''.join(items)
                yield {'text': sentence}
            else:
                items = line.strip().split('\t')
                sentence = ''.join(items[:-1])
                label = items[-1]
                yield {'text': sentence, 'label': label_list[label]}

# data_path为read()方法的参数
map_ds = load_dataset(read_local_dataset, data_path='数据集/data1/dev.txt', label_list=label_list, lazy=False)

注解:
     1. 需要注意的是,只有PaddleNLP内置的数据集具有将数据中的label自动转为id的功能(详细条件参见 创建DatasetBuilder)。
     2. 像上例中的自定义数据集需要在自定义的convert to feature方法中添加label转id的功能。
     3. 自定义数据读取function中的参数可以直接以关键字参数的的方式传入 load_dataset() 中。而且对于自定义数据集,lazy 参数是必须传入的。

🟫3.4 训练数据格式

     训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考可以借助一些开源文本分类数据标注工具进行标注。
     本文将以CBLUE数据集中医疗搜索检索词意图分类(KUAKE-QIC)任务为例进行介绍,如何加载本地固定格式数据集进行训练,指定格式本地数据集目录结构:

data/
├── train.txt # 训练数据集文件
├── dev.txt # 开发数据集文件
├── test.txt # 可选,测试数据集文件
├── label.txt # 分类标签文件
└── data.txt # 待预测数据文件
!wget https://paddlenlp.bj.bcebos.com/datasets/KUAKE_QIC.tar.gz
!tar -zxvf KUAKE_QIC.tar.gz
!mv KUAKE_QIC data

     训练、开发、测试数据集:文本与标签类别名用tab符’\t’分隔开,文本中避免出现tab符’\t’。

  • train.txt/dev.txt/test.txt 文件格式:

<文本>‘\t’<标签>
<文本>‘\t’<标签>

  • train.txt/dev.txt/test.txt 文件样例:

25岁已经感觉脸部松弛了怎么办 治疗方案
小孩的眉毛剪了会长吗? 其他
172的身高还能长高吗? 其他
冻疮用三金冻疮酊有效果么? 功效作用

**分类标签:**label.txt(分类标签文件)记录数据集中所有标签集合,每一行为一个标签名。

  • label.txt 文件格式:

<标签>
<标签>

  • label.txt 文件样例:

病情诊断
治疗方案
病因分析
指标解读
就医建议

**待预测数据:**data.txt(待预测数据文件),需要预测标签的文本数据。

  • data.txt 文件格式:

<文本>
<文本>

  • data.txt 文件样例:

黑苦荞茶的功效与作用及食用方法
交界痣会凸起吗
检查是否能怀孕挂什么科
鱼油怎么吃咬破吃还是直接咽下去


🌸五、模型训练阶段

⬛5.1 预训练模型微调

🥒5.1.1 CPU/GPU配置

     如果使用CPU训练,只需将设备参数配置改为 –device cpu;同时可以设置多核训练,只需将多核训练参数配置成 –nproc_per_node 8,说明是8核训练;

python -m paddle.distributed.launch --nproc_per_node 8 --backend gloo train.py \
  --model_name ernie-3.0-medium-zh \
  --dataset_dir ./data/ \
  --save_dir checkpoint \
  --device cpu \
  --learning_rate 3e-5 \
  --epochs 100 \
  --max_seq_length 128 \
  --batch_size 32 \
  --early_stop True

     如果使用GPU训练,可以指定gpus参数进行单卡/多卡训练。使用多卡训练可以指定多个GPU卡号,例如 –gpus 0,1。如果设备只有一个GPU卡号默认为0,可使用nvidia-smi命令查看GPU使用情况:

unset CUDA_VISIBLE_DEVICES
python -m paddle.distributed.launch --gpus 0,1 train.py \
  --model_name ernie-3.0-medium-zh \
  --dataset_dir ./data/ \
  --save_dir checkpoint \
  --device gpu \
  --learning_rate 3e-5 \
  --epochs 100 \
  --max_seq_length 128 \
  --batch_size 32 \
  --early_stop True 

🥦5.1.2 模型主要参数配置

     数据集定义: 以公开数据集CBLUE数据集中医疗搜索检索词意图分类(KUAKE-QIC)任务为示例,在训练集上进行模型微调,并在开发集上使用准确率Accuracy评估模型表现。数据集默认为:默认为"cblue"。
     主要的配置的参数为:

  • model_name: 内置模型名,或者模型参数配置目录路径。默认为ernie-3.0-base-zh。
  • data_dir: 训练数据集路径,数据格式要求详见数据标注。本地数据集路径,数据集路径中应包含train.txt,dev.txt和label.txt文件;默认为None。
  • save_dir:保存训练模型的目录,包括参数、训练体制和静态图;默认保存在当前目录checkpoint文件夹下。
  • max_seq_length: 最大句子长度,超过该长度的文本将被截断,不足的以Pad补全。提示文本不会被截断。ERNIE模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数;默认为128。
  • device: 选用什么设备进行训练,可选cpu、gpu、xpu、npu。如使用gpu训练,可使用参数gpus指定GPU卡号。
  • learning_rate: 预训练语言模型参数基础学习率大小,默认为6e-5。将与learning rate scheduler产生的值相乘作为当前学习率。
  • batch_size:批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为32。
  • early_stop:选择是否使用早停法(EarlyStopping);默认为False。
  • **num_train_epochs: **训练轮次,使用早停法时可以选择100。
  • weight_decay:控制正则项力度的参数,用于防止过拟合,默认为0.01。
  • early_stop_nums:在设定的早停训练轮次内,模型在开发集上表现不再上升,训练终止;默认为4。 epochs: 训练轮次,默认为100。
  • warmup:是否使用学习率warmup策略;默认为False。
  • warmup_proportion:学习率warmup策略的比例数,如果设为0.1,则学习率会在前10%steps数从0慢慢增长到learning_rate, 而后再缓慢衰减;默认为0.1。
  • logging_steps: 日志打印的间隔steps数,默认5。
  • init_from_ckpt: 模型初始checkpoint参数地址,默认None。
  • seed:随机种子,默认为3。

🥬5.1.3 注意事项

     (1)程序运行时将会自动进行训练,评估。同时训练过程中会自动保存开发集上最佳模型在指定的 save_dir 中,保存模型文件结构如下所示:

checkpoint/
├── model_config.json
├── model_state.pdparams
├── tokenizer_config.json
└── vocab.txt

     (2)如需恢复模型训练,则可以设置 init_from_ckpt , 如 init_from_ckpt=checkpoint/model_state.pdparams 。
     (3)如需训练英文文本分类任务,只需更换预训练模型参数 model_name 。英文训练任务推荐使用"ernie-2.0-base-en"、“ernie-2.0-large-en”。
     (4)英文和中文以外语言的文本分类任务,推荐使用基于96种语言(涵盖法语、日语、韩语、德语、西班牙语等几乎所有常见语言)进行预训练的多语言预训练模型"ernie-m-base"、“ernie-m-large”。

🔴5.2 训练评估与模型优化

     训练评估主要是借助模型在测试集中的表现,具体表现就是看在测试集上评价指标。如果指标已经达到要求,那就不需要再进行效果调优工作了。
     如果模型效果不佳,可以从数据层面、模型层面进行分析。
     (1)数据层面可以做bad case分析,筛选数据,提高数据质量;此外,还可以做数据增强,解决数据长尾问题,增加数据数量。
     (2)模型层面上可以做参数调优,尝试不同的模型参数,进行优化。比如说learning_ratebatch_size、max_seq_length。

🟠5.3 模型预测

     训练结束后,输入 待预测数据 和 类别标签对照列表,使用训练好的模型进行,默认在GPU环境下使用,在CPU环境下修改参数配置为–device “cpu”:

python predict.py \
	--device "gpu"  \
  --max_seq_length 128 \
  --batch_size 32 \ 
  --dataset_dir "data"

     可支持配置的参数:
     params_path:待预测模型参数文件夹;默认为"./checkpoint/"。
     dataset_dir:本地数据集路径,数据集路径中应包含data.txt和label.txt文件;默认为None。
     max_seq_length:ERNIE模型使用的最大序列长度,最大不能超过512, 若出现显存不足,请适当调低这一参数;默认为512。
     batch_size:批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为32。
     device: 选用什么设备进行训练,可选cpu、gpu、xpu、npu;默认为gpu。

🌻七、总结

     本文内容回顾:本文着重讲解了多分类场景的原理以及实例,并且以paddleNLP代码来实现了建模流程。具体实例是标准的数据–中医疗搜索检索词意图分类数据集。
     后期还会继续讲解文本分类相关的场景、案例、模型调优方法、数据标注等内容,敬请期待。
     如果觉得文章对您有帮助,请给博主点赞、收藏、关注,博主会不断推出优质的文章。
在这里插入图片描述

     本博主内相关文章:
     1.文本分类方案,飞浆PaddleNLP涵盖了所有!
     2.用深度学习解决大规模文本分类问题
     3.基于深度学习的文本分类方法库(NLP)
     4.word2vec的应用----使用gensim来训练模型
     5.NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)

🌼八、参考文献

  • https://github.com/PaddlePaddle/PaddleNLP/tree/release/2.4/applications/text_classification/multi_class
  • https://paddlenlp.readthedocs.io/zh/latest/get_started/quick_start.html
  • https://aistudio.baidu.com/aistudio/projectdetail/4362154?spm=a2c6h.12873639.article-detail.10.68784bb6FMvsSX&contributionType=1

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

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

相关文章

变不可能为可能——记房产推销员佟鑫海

有勤奋&#xff0c;就会有所收获。傲人的成绩和背后的努力密切相关。俗话说得好&#xff0c;没卖不掉的房子&#xff0c;仅有卖不掉房子的艺人经纪人。关键是你是否有恒心。 在明升&#xff0c;总会有这样一群影子&#xff0c;他们每天精力旺盛&#xff0c;衣着光鲜&#xff0…

【C/C++ SOCKET编程】基于TCP协议实现服务器客户端的简单通信

什么是SOCKET Socket又称"套接字"&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求&#xff0c;使主机间或者一台计算机上的进程间可以通讯。 TCP/IP协议 从字面意义上讲&#xff0c;有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议…

unsafe.Pointer和uintptr的区别

unsafe 包 func Alignof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Sizeof(x ArbitraryType) uintptr type ArbitraryType int type Pointer *ArbitraryType在unsafe包中&#xff0c;只提供了3个函数&#xff0c;两个类型。就这么少的量&#xf…

【数据结构进阶】布隆(Bloom Filter)过滤器【哈希+位图的整合】

布隆(Bloom Filter)过滤器【哈希位图的整合】 1、什么是布隆过滤器&#xff1f; 布隆过滤器&#xff08;Bloom Filter&#xff09;是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空…

物联网与射频识别技术,课程实验(四)

实验4—— 基于帧的时隙ALOHA(FSA)算法的实现与性能分析 实验说明&#xff1a; 利用Python或Matlab模拟基于帧的时隙ALOHA算法&#xff1b; 分析标签数量k、帧中所含时隙个数n对信道利用率的影响&#xff0c;其中&#xff0c; 信道利用率发送数据的时间/(发送数据的时间信道空…

【JavaEE】线程的状态转换

新年快乐! 祝新的一年万事胜意! 魅力无限! 随心所欲! 蒸蒸日上! 文章目录1. 线程的基本状态2.Java中线程的状态3. 线程的转换1. 线程的基本状态 操作系统中线程有三个基本状态,就绪状态,运行状态,阻塞状态. 就绪状态, 已经获得除CPU之外的所有资源,只要得到CPU,可立即执行. …

(二十五)大白话数据库无法连接故障的定位,Too many connections

文章目录 1、你是否遇到过Too many connections?2、linux的文件句柄数量被限制1、你是否遇到过Too many connections? 今天要给大家分析另外一个真实的大家都经常会碰到的数据库生产故障,就是数据库无法连接的问题。 大家会看到的异常信息往往是“ERROR 1040(HY000): Too …

ubuntu18.04下mysql数据库安装和C语言连接操作

数据库在应用系统开发中很常见&#xff0c;在众多的数据库中&#xff0c;mysql总是会占有一席之地。本篇说明一下如何在ubuntu18.04上安装mysql数据库。 目录 1.更新环境 2.安装mysql数据库系统 3.检测是否安装成功 4.启动、重启、关闭&#xff0c;删除 5.给root用户设置…

vue3+Ts使用vuex模块化和非模块化管理的2种方式(非pinia)

官网写的很清楚&#xff1a;https://vuex.vuejs.org/zh/guide/typescript-support.html 2种方式 (都不是使用pinia的) 1&#xff1a;复杂版本(不定义自己的 useStore 组合式函数) 使用的时候需要在vuex引入 useStore 在store文件引入导出的key import { useStore } from ‘vu…

CSS3新增的has伪类选择器,让你能轻松选择父元素

文章目录一、语法二、链式操作三、兼容性问题CSS现在新增了一个允许我们选择父元素的伪类&#xff1a;has选择器。可以将其当做父级选择器。 一、语法 选择器1:has(选择器2){} /* 表示选择包含有选择器2的所有的选择器1 比如&#xff1a;*/ div:has(p) {background: black; }…

计算机网络期末考试重点归纳

第 1 章 概述 1. 网络的基本特点 连通性共享性 2. internet 和 Internet 的含义 internetInternet中文名称互连网互联网/因特网名词性质通用名词专用名词名词解释指由多个计算机网络互连而成的计算机网络指当前全球最大的、开放的、由众多网络连接而成的特定互连网&#xff…

电子学会2020年6月青少年软件编程(图形化)等级考试试卷(一级)答案解析

目录 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 二、判断题&#xff08;共10题&#xff0c;每题2分&#xff0c;共20分&#xff09; 三、编程题&#xff08;共3题&#xff0c;每题10分&#xff0c;共30分&#xff09; 青少年软件编程…

Ubuntu22.04下安装MongoDB(6.0版本)并进行相关数据库操作

前言 昨天用ubuntu22.04安装redis-5.0.5服务&#xff0c;因为版本不兼容&#xff0c;导致问题频发&#xff0c;最终在老师帮助下解决了&#xff0c;这又一次提醒了版本兼容的重要性 MongoDB安装与部署 因为所用ubuntu版本为22.04&#xff0c;所以不能按照老师所给文档进行安…

图书管理系统(Java实现简易版)

目录前言预期效果分析1. book包1.1 Book类1.2 BookList 类2. user包2.1 User类2.2 AdminUser类2.3 NormalUser类3. opera包3.1 IOPeration 接口3.2 AddOperation 类3.3 BrrowOperation 类3.4 DelOperation 类3.5 ExitOperation 类3.6 FindOperation 类3.7 ReturnOperation 类3.…

wikijs-一款wiki系统

2022&#xff0c;别了。 1、介绍 wikijs是一款知识共享wiki&#xff0c;优点是有权限管理系统、支持多人协作共同维护、支持markdown格式、支持评论、风格简洁等等。适合作为个人博客&#xff0c;或者小团队的文档知识库。 效果图&#xff1a; 2、部署流程 2.1、安装dock…

前端 | 装饰你的github profile(github 首页)

1.创建存储库 您可以创建一个与您的 github 帐户名同名的存储库 添加README文件 2.编辑README.md 现在&#xff0c;可以根据自己的喜好修改 repo 中的自述文件&#xff0c;但我在考虑包含哪些信息时查看了其他开发人员的资料。通常包括简短的介绍、使用的技术堆栈和联系方式…

【JAVA进阶】包装类,Arrays类,Lambda表达式

&#x1f4c3;个人主页&#xff1a;个人主页 &#x1f525;系列专栏&#xff1a;JAVASE基础 目录 一、包装类 二、Arrays类 三、Lambda表达式 一、包装类 其实就是8种基本数据类型对应的引用类型。 基本数据类型 引用数据类型 byte Byte short Short int Integer l…

GPU存储器架构

上表表述了各种存储器的各种特性。作用范围栏定义了程序的哪个部分能使用该存储器。而生存期定义了该存储器中的数据对程序可见的时间。除此之外&#xff0c;Ll和L2缓存也可以用于GPU程序以便更快地访问存储器。 总之&#xff0c;所有线程都有一个寄存器堆&#xff0c;它是最快…

Vue 页面渲染的流程

前言 在 Vue 核心中除了响应式原理外&#xff0c;视图渲染也是重中之重。我们都知道每次更新数据&#xff0c;都会走视图渲染的逻辑&#xff0c;而这当中牵扯的逻辑也是十分繁琐。 本文主要解析的是初始化视图渲染流程&#xff0c;你将会了解到从挂载组件开始&#xff0c;Vue…

2022年度总结与2023未来规划

这里写自定义目录标题2022年计划完成情况原始计划生活方面技术方面完成情况2023年规划初步安排技术方面生活方面2022年计划完成情况 原始计划 生活方面 健身&#xff08;体重增到145&#xff09;争取发展一个新的爱好&#xff08;游泳、拳击&#xff09;会做6个菜&#xff0c…