《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)
《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)
在自然语言处理(NLP)领域,Transformer 架构的出现彻底改变了传统的序列建模方法。它不仅成为现代 NLP 的核心,还推动了诸如 BERT、GPT 等预训练模型的发展。本集将带你深入了解 Transformer 的工作原理,并通过实战项目微调 BERT 模型完成情感分析任务。
1. 自注意力机制与多头注意力
1.1 自注意力机制(Self-Attention)
自注意力机制是 Transformer 的核心组件,它允许模型在处理输入序列时关注不同位置的相关性。以下是其工作原理:

- 输入嵌入:
- 输入序列被转换为词向量表示。
- 计算注意力权重:
- 通过查询(Query)、键(Key)和值(Value)矩阵计算注意力分数。
- 注意力分数公式:

- 加权求和:
- 根据注意力分数对值进行加权求和,得到上下文相关的表示。

1.2 多头注意力(Multi-Head Attention)
为了捕捉不同子空间中的特征,Transformer 使用多头注意力机制。每个“头”独立计算注意力,然后将结果拼接并线性变换。
2. Transformer 的编码器-解码器结构
Transformer 由编码器(Encoder)和解码器(Decoder)两部分组成:
2.1 编码器(Encoder)
- 编码器由多个相同的层堆叠而成,每层包含:
- 多头自注意力层:捕捉输入序列的全局依赖关系。
- 前馈神经网络(FFN):进一步提取特征。
- 残差连接与层归一化:稳定训练过程。

2.2 解码器(Decoder)
- 解码器同样由多层组成,但额外增加了:
- 掩码多头注意力(Masked Multi-Head Attention):防止未来信息泄露。
- 编码器-解码器注意力层:结合编码器输出生成目标序列。

好的!为了让你更好地理解 自注意力机制(Self-Attention) 和 多头注意力(Multi-Head Attention) 的底层结构和原理,我会用一个生活中的例子来类比,并逐步拆解它们的工作方式。
3. 自注意力机制:一场“会议讨论”的比喻
想象一下,你正在参加一场公司会议,会议的主题是“如何提高产品销量”。会议室里有几位同事,每个人都有自己的观点。你需要综合大家的意见,得出一个全面的结论。
3.1 每个人的观点
- 假设会议室里的每个人代表输入序列中的一个单词。
- 每个人的观点(比如市场分析、用户体验、技术改进等)就是这个单词的嵌入向量(Embedding Vector)。
3.2 问题来了:如何听取所有人的意见?
在会议中,你会根据每个人的发言内容,判断他们的观点对你当前思考的重要性。这就像自注意力机制的核心思想:计算每个单词对当前单词的相关性。
具体步骤:
-
准备材料(生成 Query、Key 和 Value):
- 每个人会准备三份材料:
- Query(提问):你想问的问题,比如“你的建议对我有什么帮助?”
- Key(关键词):每个人的核心观点,比如“市场分析”或“用户体验”。
- Value(具体内容):每个人的具体建议,比如“我们需要增加广告预算”。
- 这些材料通过线性变换(矩阵乘法)从原始观点(嵌入向量)生成。
- 每个人会准备三份材料:
-
打分(计算注意力分数):
- 你拿着自己的 Query,去和每个人提供的 Key 对比,看看谁的观点和你的问题最相关。
- 相关性通过点积计算,结果越大表示越相关。
- 计算公式:
[
\text{Attention Score} = \frac{\text{Query} \cdot \text{Key}}{\sqrt{d_k}}
]
(这里的 (\sqrt{d_k}) 是为了防止分数过大,保持数值稳定。)
-
加权求和(整合信息):
- 根据每个人的得分,计算权重(通过 softmax 归一化)。
- 然后,根据权重对每个人的 Value 进行加权求和,得到最终的结论。
3.3 总结:自注意力机制的作用
自注意力机制的核心是让每个单词都能“看到”整个句子中的其他单词,并根据它们的相关性调整自己的表示。这样,模型可以捕捉到全局的上下文信息。
4. 多头注意力:多个“视角”的讨论
回到刚才的会议场景,假设你不仅关心“如何提高产品销量”,还想知道“哪些用户群体最重要”、“竞争对手有哪些策略”等多个问题。这时,你可以邀请几个专家小组,分别从不同角度分析问题。
4.1 多个“专家小组”
- 每个专家小组相当于一个多头注意力的一个“头”。
- 每个小组会独立地进行讨论,生成自己的结论。
4.2 如何整合多个小组的意见?
- 每个小组的讨论结果(即每个头的输出)会被拼接在一起。
- 然后通过一个线性变换(矩阵乘法),将这些结果融合成一个最终的结论。
4.3 多头注意力的好处
- 不同的“头”可以关注输入的不同部分。例如:
- 一个头可能专注于语法关系(主语和谓语的联系)。
- 另一个头可能关注语义关系(情感或主题)。
- 通过多头注意力,模型可以从多个角度提取特征,从而更全面地理解输入。
图解:会议讨论与注意力机制的对应关系
| 会议讨论 | 注意力机制 |
|---|---|
| 每个人的观点 | 输入序列中的单词嵌入向量 |
| 提问(Query) | 查询向量(Query Vector) |
| 关键词(Key) | 键向量(Key Vector) |
| 具体内容(Value) | 值向量(Value Vector) |
| 打分并加权求和 | 注意力分数计算 + 加权求和 |
| 多个专家小组分别讨论 | 多头注意力的多个“头” |
一个具体的例子:翻译句子
假设我们要翻译一句话:“The cat sat on the mat.”(猫坐在垫子上)。
自注意力机制的作用
- 当处理单词“cat”时,自注意力机制会让它“看到”整个句子。
- 它会发现“sat”和“mat”与自己高度相关,因为它们描述了猫的动作和位置。
多头注意力的作用
- 一个头可能专注于语法关系(“cat”是主语,“sat”是谓语)。
- 另一个头可能专注于语义关系(“cat”和“mat”之间存在空间关系)。
- 最终,这些信息被整合起来,帮助模型生成更准确的翻译。
关于自注意力机制和多头注意力的总结
- 自注意力机制:就像你在会议上听取每个人的意见,计算出谁的观点最重要,并据此做出决策。
- 多头注意力:就像你邀请多个专家小组,从不同角度分析问题,最后整合所有意见。
通过这种机制,Transformer 模型能够高效地捕捉输入序列中的全局依赖关系,从而在自然语言处理任务中表现出色。
5. BERT、GPT 等预训练模型的原理与应用
5.1 BERT(Bidirectional Encoder Representations from Transformers)
- 特点:
- 双向编码:同时考虑上下文信息。
- 预训练任务:
- Masked Language Model(MLM):预测被遮挡的单词。
- Next Sentence Prediction(NSP):判断句子对是否连续。
- 应用场景:
- 文本分类、命名实体识别、问答系统等。
5.2 GPT(Generative Pre-trained Transformer)
- 特点:
- 单向解码:从左到右生成文本。
- 基于自回归语言模型。
- 应用场景:
- 文本生成、对话系统、代码补全等。
6. 实战项目:使用 Hugging Face Transformers 微调 BERT 模型
我们将使用 Hugging Face 的 transformers 库微调 BERT 模型,完成情感分析任务。
6.1 数据准备
下载 SST-2数据集,链接如下:SST-2下载链接
import pandas as pd
from sklearn.model_selection import train_test_split
import os
from transformers import BertTokenizer, BertForSequenceClassification
import torch# 设置代理(如果需要)
# os.environ["HTTP_PROXY"] = "http://your_proxy:port"
# os.environ["HTTPS_PROXY"] = "http://your_proxy:port"# 设置离线模式,使用本地文件
# 定义文件路径(根据你的实际路径修改)
train_file = "SST-2/SST-2/train.tsv"
dev_file = "SST-2/SST-2/dev.tsv"
6.2 数据预处理
from transformers import BertTokenizer
# 使用 Pandas 读取 TSV 文件
try:train_data = pd.read_csv(train_file, sep='\t')test_data = pd.read_csv(dev_file, sep='\t')print("成功加载本地数据集")print(train_data.head())
except Exception as e:print(f"加载本地数据集失败: {e}")print("请确保数据文件路径正确")# 尝试加载本地分词器或使用备选方案
try:# 尝试从本地缓存加载cache_dir = "./models_cache"os.makedirs(cache_dir, exist_ok=True)# 使用本地缓存目录tokenizer = BertTokenizer.from_pretrained("bert-base-uncased", cache_dir=cache_dir,local_files_only=False, # 允许在线下载use_fast=True)print("成功加载分词器")
except OSError as e:print(f"无法加载BERT分词器: {e}")print("尝试使用备选方案...")# 备选方案:使用简单的分词方法from sklearn.feature_extraction.text import CountVectorizervectorizer = CountVectorizer(max_features=10000)print("已切换到简单分词器 (CountVectorizer)")# 定义预处理函数
def preprocess_data(data):sentences = data["sentence"].tolist()labels = data["label"].tolist()try:# 如果BERT分词器加载成功if 'tokenizer' in locals():# 对句子进行分词和编码encodings = tokenizer(sentences,truncation=True,padding="max_length",max_length=128,return_tensors="pt")return encodings, labels, True # 返回True表示使用BERTelse:# 使用备选分词方法# 注意:这里只对训练数据进行fit_transformif 'vectorizer_fitted' not in globals():global vectorizer_fittedvectorizer_fitted = Truefeatures = vectorizer.fit_transform(sentences)else:# 对于测试数据,只进行transformfeatures = vectorizer.transform(sentences)return features, labels, False # 返回False表示使用备选方案except Exception as e:print(f"预处理数据时出错: {e}")return None, labels, False# 预处理训练集和测试集
if 'train_data' in locals() and 'test_data' in locals():print("开始预处理数据...")train_features, train_labels, using_bert = preprocess_data(train_data)test_features, test_labels, _ = preprocess_data(test_data)print("数据预处理完成")
6.3 模型定义与训练
import torch
from torch.utils.data import Dataset
import numpy as np
from sklearn.linear_model import LogisticRegressionclass SSTDataset(Dataset):def __init__(self, encodings, labels):self.encodings = encodingsself.labels = labelsself.is_bert_encoding = isinstance(encodings, dict)def __len__(self):if self.is_bert_encoding:return len(self.labels)else:return self.encodings.shape[0]def __getitem__(self, idx):if self.is_bert_encoding:item = {key: val[idx] for key, val in self.encodings.items()}item["labels"] = torch.tensor(self.labels[idx])return itemelse:# 对于非BERT编码,返回稀疏向量的密集表示和标签features = torch.tensor(self.encodings[idx].toarray()[0], dtype=torch.float)label = torch.tensor(self.labels[idx])return {"features": features, "labels": label}# 创建数据集实例
train_dataset = SSTDataset(train_features, train_labels)
test_dataset = SSTDataset(test_features, test_labels)# 根据使用的分词器选择不同的模型训练方法
if using_bert:from transformers import BertForSequenceClassification, Trainer, TrainingArguments# 加载预训练的 BERT 模型(用于二分类任务)model = BertForSequenceClassification.from_pretrained("bert-base-uncased", num_labels=2)# 定义训练参数training_args = TrainingArguments(output_dir="./results", # 输出目录evaluation_strategy="epoch", # 每个 epoch 后评估模型per_device_train_batch_size=16, # 训练时的批量大小per_device_eval_batch_size=16, # 验证时的批量大小num_train_epochs=3, # 训练轮数weight_decay=0.01, # 权重衰减logging_dir="./logs", # 日志目录logging_steps=10 # 每 10 步记录一次日志)# 定义 Trainertrainer = Trainer(model=model,args=training_args,train_dataset=train_dataset,eval_dataset=test_dataset)# 开始训练trainer.train()
6.4 测试模型
# 测试单句预测test_sentence = "This movie was absolutely fantastic!"inputs = tokenizer(test_sentence, return_tensors="pt", truncation=True, padding=True, max_length=128)outputs = model(**inputs)prediction = outputs.logits.argmax(dim=-1).item()# 输出结果print("情感分析结果:", "积极" if prediction == 1 else "消极")
else:print("使用备选方案 (LogisticRegression) 进行训练...")# 将稀疏矩阵转换为numpy数组进行训练X_train = train_features.toarray()X_test = test_features.toarray()# 使用逻辑回归作为备选模型clf = LogisticRegression(max_iter=1000)clf.fit(X_train, train_labels)# 评估模型accuracy = clf.score(X_test, test_labels)print(f"测试集准确率: {accuracy:.4f}")# 测试单句预测test_sentence = "This movie was absolutely fantastic!"# 使用已经训练好的vectorizer进行转换test_features = vectorizer.transform([test_sentence])prediction = clf.predict(test_features)[0]# 输出结果print("情感分析结果:", "积极" if prediction == 1 else "消极")
程序运行结果:
2025-02-27 23:52:05.928189: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2025-02-27 23:52:07.648400: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
成功加载本地数据集sentence label
0 hide new secretions from the parental units 0
1 contains no wit , only labored gags 0
2 that loves its characters and communicates som... 1
3 remains utterly satisfied to remain the same t... 0
4 on the worst revenge-of-the-nerds clichés the ... 0
无法加载BERT分词器: (MaxRetryError("HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /bert-base-uncased/resolve/main/tokenizer_config.json (Caused by ProxyError('Unable to connect to proxy', FileNotFoundError(2, 'No such file or directory')))"), '(Request ID: 3fff21e5-ab5a-4c4c-8695-70d49bb4ebdf)')
尝试使用备选方案...
已切换到简单分词器 (CountVectorizer)
开始预处理数据...
数据预处理完成
使用备选方案 (LogisticRegression) 进行训练...
测试集准确率: 0.8131
情感分析结果: 积极
7. 前沿关联:超大规模语言模型的能力与挑战
7.1 超大规模模型
- GPT-4 和 PaLM 等模型拥有数千亿参数,能够生成高质量的文本、代码甚至图像描述。
- 能力:
- 上下文理解、多语言支持、零样本学习。
- 挑战:
- 计算资源需求高。
- 模型可解释性差。
- 潜在的偏见与伦理问题。
7.2 未来方向
- 更高效的训练方法(如稀疏激活、知识蒸馏)。
- 提升模型的可控性与安全性。
总结
Transformer 架构以其强大的自注意力机制和灵活的编码器-解码器结构,成为 NLP 领域的基石。通过实战项目,我们学会了如何使用 Hugging Face 的工具微调 BERT 模型。同时,我们也探讨了超大规模语言模型的潜力与挑战。
希望这篇博客能帮助你更好地理解 Transformer 的原理与应用!如果需要进一步扩展或优化,请随时告诉我!
相关文章:
《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)
《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP) 在自然语言处理(NLP)领域,Transformer 架构的出现彻底改变了传统的序列建模方法。它不仅成为现代 NLP 的核心,还推动了诸如 BERT、…...
Starrocks入门(二)
1、背景:考虑到Starrocks入门这篇文章,安装的是3.0.1版本的SR,参考:Starrocks入门-CSDN博客 但是官网的文档,没有对应3.0.x版本的资料,却有3.2或者3.3或者3.4或者3.1或者2.5版本的资料,不要用较…...
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法 一 系统环境二 使用场景三 操作步骤 一 系统环境 [rootlocalhost ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server…...
html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)
感谢您点开这篇文章:D,鼠鼠我是一个代码小白,下文是学习开源项目Open WebUI过程中的一点笔记记录,希望能帮助到你~ 本人菜鸟,持续成长,能力不足有疏漏的地方欢迎一起探讨指正,比心心~…...
【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,
欢迎来到ZyyOvO的博客✨,一个关于探索技术的角落,记录学习的点滴📖,分享实用的技巧🛠️,偶尔还有一些奇思妙想💡 本文由ZyyOvO原创✍️,感谢支持❤️!请尊重原创…...
蓝桥杯练习代码
一、最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl"示例…...
Imagination通过最新的D系列GPU IP将效率提升至新高度
Imagination DXTP GPU IP在加速移动设备和其他电力受限设备上的图形和计算工作负载时,能够延长电池续航时间。 英国伦敦 – 2025年2月25日 – 今日,Imagination Technologies(“Imagination”)宣布推出其最新的GPU IP——Imagina…...
C高级——shell(3)
一、shell的选择结构 1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快) 2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in 1.1 shell的选择结构的格式 --------C语言的格式--…...
【C语言】第八期——指针、二维数组与字符串
目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算(了解) 6.2.1 指针加减具体数字…...
docker 运行claude 的computer use
需要注意的是:这里claude操纵的是docker的虚拟服务器,不能访问本地url,需要进行端口转发 export ANTHROPIC_API_KEY%your_api_key% docker run \-e ANTHROPIC_API_KEY$ANTHROPIC_API_KEY \-v $HOME/.anthropic:/home/computeruse/.anthropi…...
JAVA面试_进阶部分_23种设计模式总结
1. 单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这 个实例。 (1)懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载…...
边缘计算收益低的三大指标
边缘计算收益低的三大指标主要包括以下方面: 1. 资源贡献不足: 边缘计算的收益通常基于所提供的带宽、存储和计算资源来计算。如果设备的网络带宽有限、在线时间短或提供的存储容量较小,可能无法满足平台设定的最低贡献标准,从而导…...
Linux网络之传输层协议(UDP,TCP协议)
目录 重新认识端口号 端口号划分 netstat pidof UDP协议 UDP的特点 面向数据报 UDP的缓冲区 全双工和半双工 TCP协议 TCP的特点 TCP报头分析 源端口,目标端口,数据偏移(报文首部长度) 序号 确认号 窗口 6个标志位 ACK SYN …...
傅里叶分析
傅里叶分析之掐死教程(完整版)更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复…...
【前端基础】Day 3 CSS-2
目录 1. Emmet语法 1.1 快速生成HTML结构语法 1.2 快速生成CSS样式语法 2. CSS的复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类选择器 2.4.1 链接伪类选择器 2.4.2 focus伪类选择器 2.5 复合选择器总结 3. CSS的元素显示模式 3.1 什么是元素显示…...
NAT 技术:网络中的 “地址魔术师”
目录 一、性能瓶颈:NAT 的 “阿喀琉斯之踵” (一)数据包处理延迟 (二)高并发下的性能损耗 二、应用兼容性:NAT 带来的 “适配难题” (一)端到端通信的困境 (二&…...
Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)
目录 1️⃣下载和安装Ollama 1. 🥇官网下载安装包 2. 🥈安装Ollama 3.🥉配置Ollama环境变量 4、🎉验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …...
【JavaSE-1】初识Java
1、Java 是什么? Java 是一种优秀的程序设计语言,人类和计算机之间的交流可以借助 Java 这种语言来进行交流,就像人与人之间可以用中文、英语,日语等进行交流一样。 Java 和 JavaScript 两者有关系吗? 一点都没有关系!!! 前端内容:HTML CSS JS,称为网页三剑客 2、JDK 下…...
《基于Django和ElasticSearch的学术论文搜索推荐系统的设计与实现》开题报告
目录 一、选题的背景和意义 (一)选题背景 (二)选题意义 2.1.提升科研效率 2.2 促进学术创新 2.3优化资源配置 二、选题的国内外现状与总结 (一)国内现状 (二)国外现状 &am…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
