使用预训练的BERT进行金融领域问答
获取更多完整项目代码数据集,点此加入免费社区群 : 首页-置顶必看
1. 项目简介
本项目旨在开发并优化一个基于预训练BERT模型的问答系统,专注于金融领域的应用。随着金融市场信息复杂性和规模的增加,传统的信息检索方法难以高效应对用户的精确问答需求。BERT(Bidirectional Encoder Representations from Transformers)模型的出现,通过深度上下文理解,展示了强大的自然语言处理能力。本项目的核心目标是在金融领域建立一个智能问答系统,能够高效、准确地解答用户的具体问题。我们利用FinBERT,一个专门针对金融文本预训练的BERT模型,作为基础,通过在金融领域的特定数据上微调模型,进一步提高其对该领域问答任务的精度和适用性。该项目的应用场景包括金融咨询服务、市场分析报告解读和用户常见问题自动解答等,目标是提升用户体验并降低信息查询时间。在项目中,涵盖数据生成、预处理、模型训练、预测及模型评估的全过程,旨在为金融行业提供高效的智能问答解决方案。
2.技术创新点摘要
FinBERT的定制化使用:该项目使用了经过特定金融文本领域预训练的FinBERT模型,进一步针对金融领域微调,这使得它能够处理特定领域的复杂问题。相比传统的BERT模型,FinBERT对金融术语、金融报告、市场分析等领域的文本理解更加精准,从而显著提高了问答任务的表现。
LSTM模型的集成:在项目中,除了BERT模型外,还引入了LSTM(长短期记忆网络)来处理特定类型的金融问答任务。通过结合LSTM模型的能力,项目可以有效地处理时间序列数据,帮助解决诸如金融市场中的时间相关性问题,使得系统对用户提问的时间上下文更加敏感。
正负样本对比学习策略:在训练过程中,项目采用了正负样本对比学习策略,即将用户问题与正确答案和错误答案进行对比,通过计算正负样本的相似度,来优化模型的训练。这种方法通过损失函数的引入,有效提高了模型对正解答的敏感性,同时减小对错误解答的误判率。
多模型框架:该项目不仅支持使用FinBERT模型,还集成了多种模型,包括基于BERT的点对点模型、对偶模型等,允许在不同任务下灵活选择最佳模型。通过多模型的融合策略,项目可以根据具体任务需求(如任务级别、领域级别)自动切换最合适的预训练模型,进一步提升系统的问答精度。
自定义数据生成与处理流程:项目中有独立的数据生成和处理模块,能够根据金融领域的特定需求生成多种数据格式,并进行有效的预处理。这包括对数据的清理、标注和特征提取等,使得模型训练数据更具针对性,减少了训练时间并提高了模型的泛化能力。
3. 数据集与预处理
本项目的数据集主要来源于金融领域的公开文本数据集和公司内部的客户问答数据,涵盖金融报告、市场分析、财经新闻等多种类型的文本。这些数据具有以下特点:1. 专业性强,包含大量的金融术语和行业特定表达方式;2. 数据文本长度不一,既有简短的用户问题,也有复杂的市场分析报告;3. 数据具有一定的时效性,涉及随时间变化的金融信息。
在数据预处理方面,首先对数据进行了清洗和筛选。针对文本数据,去除了无关字符、标点符号、特殊符号以及重复数据。接着进行了分词处理,采用BERT分词器将文本切分为子词单元,确保输入模型的数据格式符合BERT的要求。
此外,数据预处理还包括以下几步:
- 归一化:为了确保输入数据的稳定性,文本经过了标准化处理,例如统一大小写、处理数字和货币符号等。此过程确保了模型对不同形式的同一表达方式具有一致的理解能力。
- 样本构建:项目采用了正负样本对比的学习策略,在训练集中构建了“问题-正解答”和“问题-负解答”样本对,帮助模型更好地学习答案的相关性。正负样本通过特定的相似度计算方式进行构建,负样本一般是与问题无关或无效的答案。
- 特征工程:为了进一步增强模型的表现,项目在文本输入模型之前进行了一些特征工程处理。首先,提取了关键信息片段,识别出金融术语、数值信息等重要特征,确保模型能够理解这些关键信息。此外,项目还通过对句子结构的分析,捕捉文本中的上下文依赖性,使得模型对问答的语义理解更加准确。
4. 模型架构
1) 模型结构逻辑
该项目采用了基于预训练的BERT模型,并结合LSTM(长短期记忆网络)用于金融领域的问答任务。主要有两个核心模型:
- FinBERT模型:这是BERT的一个变体,专门针对金融领域的数据进行了预训练,能够更好地理解金融文本中的专业术语和上下文。该模型利用了BERT的双向编码器架构,通过深度上下文来理解用户的问题并生成答案。
- LSTM模型:项目中还集成了一个LSTM模型,用于处理某些时间序列相关的任务,尤其是在问答中存在时间依赖性的场景。LSTM通过记住和遗忘机制,能够处理带有序列依赖关系的问答任务。
在这两个模型的基础上,项目提供了点对点(pointwise)和对偶(pairwise)模型结构,这些结构用于不同的问答场景,以优化模型在不同金融任务中的表现。
2) 模型训练流程
模型的训练流程主要包括以下步骤:
- 数据加载与预处理:使用自定义的数据加载模块,系统会先处理数据集,生成“问题-正解答”和“问题-负解答”样本对。在此过程中,文本会经过分词、标准化等预处理操作,确保输入模型的格式正确。
- 训练阶段:训练时,模型将问题和对应的正负答案分别输入,通过计算正解答和负解答的相似度,使用
hinge loss
作为损失函数,优化模型的问答能力。每个训练批次中,模型首先计算正负答案的相似度,然后反向传播计算损失,更新模型的参数。 - 验证与评估:在训练完成后,模型会通过验证集进行评估,计算平均损失值(如MSE、cross-entropy等指标),并根据验证集的表现调整超参数。项目中还使用了折扣累积增益(DCG)来评估模型对候选答案的排序质量,确保模型在回答问题时能够优先输出更相关的答案。
评估指标
模型的评估主要使用以下几个指标:
- DCG (Discounted Cumulative Gain) :用于评估模型在问答任务中对候选答案的相关性排序,越相关的答案排名越靠前时,DCG得分越高。
- 平均损失值:衡量模型的误差,通过训练和验证集的损失值评估模型的整体性能。
- 正确率:验证模型在问答任务中生成的答案是否准确。
5. 核心代码详细讲解
1) 数据预处理和特征工程
文件:process_data.py
def pre_process(text):"""Returns a lower-cased string with punctuations and special characters removed."""text = str(text)# Substitute punctuations and special characters for a spacex = re.sub('[…“”%!&"@#()\-\*\+,/:;<=>?@[\]\^_`{\}~]', ' ', text)# Remove periodsy = re.sub('[\.\']', "", x)# Apply lower-caseprocessed_text = y.lower()
return processed_text
解释:
pre_process
函数对文本进行清理,将所有标点符号替换为空格,并将文本转为小写。- 通过正则表达式删除标点符号和特殊字符,确保模型输入干净的文本格式,有助于模型更好地理解金融领域的问答内容。
def process_questions(queries):"""Returns a dataframe with tokenized questions."""queries['q_processed'] = queries['question'].apply(pre_process)queries['tokenized_q'] = queries.apply(lambda row: wordpunct_tokenize(row['q_processed']), axis=1)queries['q_len'] = queries.apply(lambda row: len(row['tokenized_q']), axis=1)
return queries
解释:
process_questions
函数首先对问题文本进行预处理,清理无用字符。- 然后使用
wordpunct_tokenize
进行分词,将问题文本转化为单词列表,并统计每个问题的长度。这些特征是模型的重要输入。
def process_answers(collection):"""Returns a dataframe with tokenized answers."""collection['doc_processed'] = collection['doc'].apply(pre_process)collection['tokenized_ans'] = collection.apply(lambda row: wordpunct_tokenize(row['doc_processed']), axis=1)collection['ans_len'] = collection.apply(lambda row: len(row['tokenized_ans']), axis=1)
return collection
解释:
process_answers
类似于问题的处理方式,先对答案进行文本清理,然后分词,并计算每个答案的长度。这为后续训练提供干净、结构化的数据。
2) 模型架构构建
文件:finbert_qa.py
class BERT_MODEL():"""Fine-tuned BERT model for non-factoid question answering."""def init(self, bert_model_name):"""Initialize which pre-trained BERT model to use."""self.bert_model_name = bert_model_name
def get_model(self):"""Initialize which pre-trained BERT model to use.BertForSequenceClassification is a model from Huggingface's transformer library that contains the pretrained BERT model with a single linear classification layer."""if self.bert_model_name == "bert-base":model_path = "bert-base-uncased"elif self.bert_model_name == "finbert-domain":get_model("finbert-domain")model_path = str(Path.cwd()/'model/finbert-domain')elif self.bert_model_name == "finbert-task":get_model("finbert-task")model_path = str(Path.cwd()/'model/finbert-task')model = BertForSequenceClassification.from_pretrained(model_path)return model
解释:
BERT_MODEL
类负责初始化和加载BERT模型,用于问答任务。get_model
方法从 Huggingface 的transformers
库中加载预训练的 BERT 模型。针对不同任务,有多个模型可供选择(如bert-base
或finbert-domain
),并根据领域需求微调。
3) 模型训练和评估
文件:train_models.py
def train(self, model, train_dataloader, optimizer):"""Trains the model and returns the average loss"""train_loss = 0.0model.train()
for step, batch in enumerate(tqdm(train_dataloader)):question = batch[0].to(self.device)pos_ans = batch[1].to(self.device)neg_ans = batch[2].to(self.device)model.zero_grad()pos_sim = model(question, pos_ans)neg_sim = model(question, neg_ans)loss = self.hinge_loss(pos_sim, neg_sim).mean()loss.backward()optimizer.step()train_loss += loss.item()avg_loss = train_loss / len(train_dataloader)return avg_loss
解释:
train
方法用于模型的训练过程。- 每个训练步骤中,模型接收问题和正负答案对的输入,计算相似度,并通过
hinge_loss
来优化模型,使其能够更好地区分正负答案。 - 使用反向传播计算梯度,并通过优化器更新模型参数。
评估指标:
文件:evaluate.py
def dcg(rels, k):"""Discounted Cumulative Gain. Computes the cumulated DCG of the top-k relevant docs across all queries."""cumulated_sum = rels[0]for i in range(1, k):cumulated_sum += rels[i] / math.log(i+1, 2)return cumulated_sum
解释:
dcg
函数计算折扣累积增益(DCG),用于评估模型在问答任务中的表现,特别是在排序问题中,越相关的答案排名靠前,得分越高。
6. 模型优缺点评价
模型优点:
- 领域特化模型:项目采用了FinBERT模型,这是BERT的金融领域特化版本,能够很好地处理金融术语和复杂的文本。相较于通用BERT模型,FinBERT在处理金融领域的问答任务时更具优势,尤其在理解专业术语和领域相关的上下文时表现优异。
- 多模型集成:项目不仅结合了BERT模型,还集成了LSTM模型,用于处理时间序列任务,这种多模型融合策略使系统更灵活,可以根据不同任务选择最佳模型。
- 正负样本对比学习:通过引入正负样本对比的训练方式,模型能更好地理解答案的相关性,减少误判,显著提高了问答的准确性。
- 丰富的数据预处理和特征工程:模型对数据进行了详细的清理和处理,如分词、归一化等,为模型提供了高质量的输入数据,增强了模型的鲁棒性和泛化能力。
模型缺点:
- 模型复杂度高:由于引入了多个模型和复杂的对比学习训练方式,计算开销较大,训练时间较长,尤其是在大规模数据集上的表现可能受限。
- 对长文本表现不佳:尽管BERT对长文本有一定的处理能力,但其有限的输入长度在处理较长的金融报告或文档时,可能丢失部分关键信息,影响模型的表现。
- 缺少数据增强:项目没有提到有效的文本数据增强方法,缺少例如同义词替换、数据扰动等增强技术,可能会限制模型在应对数据多样性时的表现。
可能的模型改进方向:
- 模型结构优化:可以考虑引入更多的层次化模型结构,如结合Transformer中的最新模型(如DeBERTa或T5),进一步提高模型的精度和上下文理解能力。
- 超参数调整:通过网格搜索或贝叶斯优化等方法,对模型的学习率、批次大小、优化器等超参数进行更细致的调整,以优化模型的训练效果。
- 数据增强:在数据预处理中增加数据增强技术,如同义词替换、随机删除或插入词语,以增加训练数据的多样性,提升模型的泛化能力。
↓↓↓更多热门推荐:
ResNet18果蔬图像识别分类
全部项目数据集、代码、教程进入官网zzgcz.com
相关文章:
使用预训练的BERT进行金融领域问答
获取更多完整项目代码数据集,点此加入免费社区群 : 首页-置顶必看 1. 项目简介 本项目旨在开发并优化一个基于预训练BERT模型的问答系统,专注于金融领域的应用。随着金融市场信息复杂性和规模的增加,传统的信息检索方法难以高效…...
ReactOS系统中MM_REGION结构体的声明
ReactOS系统中MM_REGION结构体的声明 ReactOS系统中MM_REGION结构体的声明 文章目录 ReactOS系统中MM_REGION结构体的声明MM_REGION MM_REGION typedef struct _MM_REGION {ULONG Type;//MEM_COMMIT,MEM_RESERVEULONG Protect;//PAGE_READONLYY,PAGE_READ_WRITEULONG Length;…...
web相关知识学习笔记
一, web安全属于网络信息安全的一个分支,www即全球广域网,也叫万维网,是一个分布式图形信息系统 二, 1.①安全领域,通常将用户端(浏览器端)称为前端,服务器端称为后端 ②…...
App测试环境部署
一.JDK安装 参考以下AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载 二.SDK安装 安装地址:https://www.androiddevtools.cn/ 解压 环境变量配置 变量名:ANDROID_SDK_HOME 参考步骤: A…...
【论文阅读】Tabbed Out: Subverting the Android Custom Tab Security Model
论文链接:Tabbed Out: Subverting the Android Custom Tab Security Model | IEEE Conference Publication | IEEE Xplore 总览 “Tabbed Out: Subverting the Android Custom Tab Security Model” 由 Philipp Beer 等人撰写,发表于 2024 年 IEEE Symp…...
2025 - AI人工智能药物设计 - 中药网络药理学和毒理学的研究
中药网络药理学和毒理学的研究 TCMSP:https://old.tcmsp-e.com/tcmsp.php 然后去pubchem选择:输入Molecule Name 然后进行匹配:得到了smiles 再次通过smiles:COC1C(CC(C2C1OC(CC2O)C3CCCCC3)O)O 然后再次输入:http…...
iwebsec靶场 XSS漏洞通关笔记
目录 前言 1.反射性XSS 2.存储型XSS 3.DOM型XSS 第01关 反射型XSS漏洞 1.打开靶场 2.源码分析 3.渗透 第02关 存储型XSS漏洞 1.打开靶场 2.源码分析 4.渗透 方法1: 方法2 方法3 第03关 DOM XSS漏洞 1.打开靶场 2.源码分析 3.渗透分析 3.渗透过程…...
设计模式-单例模型(单件模式、Singleton)
单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 单例模式同时解决了两个问题, 所以违反了单一职责原则: 保证一个类只有一个实例。 为什么会有人想要控制一个类所拥有的实例…...
笔记本双系统win10+Ubuntu 20.04 无法调节亮度亲测解决
sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt-get update sudo apt-get install brightness-controller-simple 安装好后找到一个太阳的图标,就是这个软件,打开后调整brightness,就可以调整亮度,可…...
零基础Java第十一期:类和对象(二)
目录 一、对象的构造及初始化 1.1. 就地初始化 1.2. 默认初始化 1.3. 构造方法 二、封装 2.1. 封装的概念 2.2. 访问限定符 2.3. 封装扩展之包 三、static成员 3.1. 再谈学生类 3.2. static修饰成员变量 一、对象的构造及初始化 1.1. 就地初始化 在声明成员变…...
NumPy包(下) python笔记扩展
9.迭代数组 nditer 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效。 控制参数 nditer 提供了多种控制参数,用于控制迭代的行为。 1.order 参数 order 参数…...
极狐GitLab 17.5 发布 20+ 与 DevSecOps 相关的功能【一】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
Oracle 第1章:Oracle数据库概述
在讨论Oracle数据库的入门与管理时,我们可以从以下几个方面来展开第一章的内容:“Oracle数据库概述”,包括数据库的历史与发展,Oracle数据库的特点与优势。 数据库的历史与发展 数据库技术的发展可以追溯到上世纪50年代…...
7、Nodes.js包管理工具
四、包管理工具 4.1 npm(Node Package Manager) Node.js官方内置的包管理工具。 命令行下打以下命令: npm -v如果返回版本号,则说明npm可以正常使用 4.1.1npm初始化 #在包所在目录下执行以下命令 npm init #正常初始化,手动…...
网络地址转换——NAT技术详解
网络地址转换——NAT技术详解 一、引言 随着互联网的飞速发展,IP地址资源日益紧张。为了解决IP地址资源短缺的问题,NAT(Network Address Translation,网络地址转换)技术应运而生。NAT技术允许一个私有IP地址的网络通…...
问:数据库存储过程优化实践~
存储过程优化是提高数据库性能的关键环节。通过精炼SQL语句、合理利用数据库特性、优化事务管理和错误处理,可以显著提升存储过程的执行效率和稳定性。以下是对存储过程优化实践点的阐述,结合具体示例,帮助大家更好地理解和实施这些优化策略。…...
C++ vector的使用(一)
vector vector类似于数组 遍历 这里的遍历跟string那里的遍历是一样的 1.auto(范围for) 2.迭代器遍历 3.operator void vector_test1() {vector<int> v;vector<int> v1(10, 1);//初始化10个都是1的变量vector<int> v3(v1.begin(), --…...
深入浅出:ProcessPoolExecutor 处理异步生成器函数
深入浅出:ProcessPoolExecutor 处理异步生成器函数 什么是 ProcessPoolExecutor?为什么要使用 ProcessPoolExecutor 处理异步生成器函数?ProcessPoolExecutor 处理异步生成器函数的基本用法1. 导入模块2. 定义异步生成器函数3. 定义处理函数4…...
elementUI表达自定义校验,校验在v-for中
注意:本帖为公开技术贴,不得用做任何商业用途 <el-form :inline"true" :rules"rules" :model"formData" ref"formRef" class"mt-[20px]"><el-form-item label"选择区域" prop&qu…...
Elasticsearch 在linux部署 及 Docker 集群部署详解案例示范
1. 在 CentOS 上安装和配置 Elasticsearch 在 CentOS 系统下,安装 Elasticsearch 主要分为以下步骤: 1.1 准备工作 在开始安装之前,确保你的系统满足以下基本条件: CentOS 版本要求:推荐使用 CentOS 7 及以上版本。…...
短信验证码发送实现(详细教程)
短信验证码 接口防刷强检验以及缓存验证码阿里云短信服务操作步骤验证码发送实现 好久没发文啦!最近也是在工作中遇到我自认为需要记录笔记的需求,本人只求日后回顾有迹可寻,不喜勿喷! 废话不多说,直接上代码ÿ…...
P450催化的联芳基偶联反应-文献精读72
Chemoenzymatic Synthesis of Fluorinated Mycocyclosin Enabled by the Engineered Cytochrome P450-Catalyzed Biaryl Coupling Reaction 经工程化的细胞色素P450催化的联芳基偶联反应实现氟代麦环素的化学酶促合成 摘要 将氟原子引入天然产物有望生成具有改良或新颖药理特…...
在不支持AVX的linux上使用PaddleOCR
背景 公司的虚拟机CPU居然不支持avx, 默认的paddlepaddle的cpu版本又需要有支持avx才行,还想用PaddleOCR有啥办法呢? 是否支持avx lscpu | grep avx 支持avx的话,会显示相关信息 如果不支持的话,python运行时导入paddle会报错 怎么办呢 方案一 找公司it,看看虚拟机为什么…...
Python数据分析——Numpy
纯个人python的一个小回忆笔记,当时假期花两天学的python,确实时隔几个月快忘光了,为了应付作业才回忆起来,不涉及太多基础,适用于有一定编程基础的参考回忆。 这一篇笔记来源于下面哔哩哔哩up主的视频: 一…...
JMeter快速入门示例
JMeter是一款开源的性能测试工具,常用于对Web服务和接口进行性能测试。 下载安装 官方下载网址: https://jmeter.apache.org/download_jmeter.cgi也可以到如下地址下载:https://download.csdn.net/download/oscar999/89910834 这里下载Wi…...
【333基于Java Web的考编论坛网站的设计与实现
毕 业 设 计(论 文) 考编论坛网站设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计…...
计算机网络关键名词中英对照
物理层 IMP - Interface Message Processor - 接口信息处理机 MODEM - Modulator-Demodulator - 调制解调器 LAN - Local Area Network - 局域网 FDM - Frequency Division Multiplexing - 频分复用 TDM - Time Division Multiplexing - 时分复用 STDM - Statistical Time…...
二叉树的学习
除了根节点外的其他节点只有一个直接前驱,有多个直接前驱的逻辑结构叫做图 任何一个树都可以看成是一个根节点和若干个不相交的子树构成的; 构建思维导图时使用树形结构 题目中给出AB是堂兄弟节点说明他们处在同一层 描述两节点之间的路径是从上到下的,同层没有路径,一条边记录…...
免费开源的医疗信息提取系统:提升超声波影像的诊断价值
一、系统概述 思通数科推出的医疗信息精准抽取系统,致力于解决当前医疗行业面临的信息碎片化和数据管理难题。传统医疗过程中,超声波影像数据与诊断报告之间的脱节,往往导致信息无法有效整合,影响医生的诊断效率与准确性。我们的…...
Bash 中的 ${} 和 $() 有什么区别 ?
Bash (Bourne-Again SHell) 是一种流行的 Unix SHell,用于编写脚本。如果您使用 Bash 脚本,那么了解不同的语法元素对于提高脚本的效率和避免错误是很重要的。 在本文中,我们将解释 Bash 中 ${} 和 $() 语法之间的区别,并向您展示…...
网站建设发票/制作公司官网多少钱
目录 摘要 I ABSTRACT II 第一章 设计任务及方案分析 1 1.1 设计任务及要求 1 1.2 设计总体方案及方案论证 1 1.3 温度测量的方案与分析 1 1.31芯片选择 1 1.32实现方法简介 2 1.33 方案设计 2 第二章 芯片简介 4 2.1 STC89C52芯片简介 4 2.11引脚功能说明 4 2.2 DS18B20简介 7…...
深一网站建设/上海牛巨微seo优化
早晨起床时间:7:50 晚上休息时间:1:06 今日总结:今天继续在外场搭建实验环境。...
做网站webform mvc/优化设计七年级上册数学答案
●MySQL事务隔离级别(1)●第1节:事务概述第2节:MySQL4种事务隔离级别分析第3节:总结1 事务概述什么是事务?数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。事务的使用是数据库管理系统区别文件系统的…...
株洲网络/北京seo网站设计
一个事务中有多个对数据库操作的点 一个点完成了 事务没有结束 在数据库中就差不到这个变化 mysql的默认隔离级别 可重复读 也就是必须最起码读到已经提交了的数据 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;这行代码 将当前的会话的隔离级别设置为 读未提交…...
怎么建网站数据库/常用的网络推广方式有哪些
设置max_execution_time 来阻止太长的读SQL。那可能存在的问题是会把所有长SQL都给KILL 掉。有些必须要执行很长时间的也会被误杀。自己写个脚本检测这类语句,比如order by rand(), 超过一定时间用Kill query thread_id 给杀掉。那能不能不要杀掉而让他正…...
wordpress孵化器主题/济宁百度推广开户
事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务。事务管理特性,强制保持事务的原子性和一致性。事务启动之后…...