蛋白质语言空间下的对比学习预测DTI

基于序列的DTI预测可以加速药物发现。而这种计算预测需要具有通用性和可扩展性,同时对输入中的细微变化保持敏感。然而,目前的计算技术不能同时满足这些目标。因此该研究开发了ConPLex,成功地利用了预训练蛋白质语言模型(PLex),并采用了蛋白质锚定的对比联合嵌入。ConPLex具有高精度,对未知数据的泛化能力,以及对诱饵化合物decoy compounds的特异性。它根据学习表征之间的距离来预测结合,从而实现大规模化合物文库和人类蛋白质组的预测。19种激酶-药物相互作用预测的实验测试验证了12种相互作用。此外,ConPLex是可解释的,这使我们能够可视化药物靶标的embedding空间,并使用embedding来表征人类细胞表面蛋白质的功能。


Decoy compounds 的化学结构通常与待筛选的药物候选化合物相似,但不具备治疗效果。Decoy compounds 的活性状态已知,它们是已知不具备治疗效果的化合物。这使得可以明确知道哪些化合物是活性的,哪些是非活性的,从而评估筛选方法的准确性。


来自:Contrastive learning in protein language space predicts interactions between drugs and protein targets
项目:https://github.com/samsledje/ConPLex

重点:ConPLex将蛋白质和潜在药物分子共同定位在一个共享的特征空间中,同时将真正的药物与该药物类似的非结合“诱饵”分子进行对比。ConPLex的速度非常快,这使得它能够快速列出候选化合物以加速药物发现。

目录

  • 背景概述
  • 区分低覆盖率和高覆盖率DTI预测
  • 方法
    • 数据集覆盖率计算
    • Benchmark设计
      • 低覆盖benchmark
      • 零样本benchmark
      • 连续benchmark
      • 高覆盖benchmark
    • ConPLex模型
      • 靶标特征化
      • 药物特征化
      • 共享的隐空间
      • 训练

背景概述

在药物发现中,一个关键步骤是针对感兴趣的蛋白质的潜在药物分子进行筛选。因此,快速和准确的DTI预测是非常有价值的。分子对接是一类重要的DTI预测方法,它使用药物和靶标的3D结构。虽然最近高通量精确的3D蛋白质结构预测模型也变得可用,甚至有些方法可以仅从蛋白质的氨基酸序列开始,但遗憾的是,分子对接和其他基于结构的方法的计算开销对于大规模DTI筛选仍然令人难以接受。另一类DTI预测方法仅隐式地使用3D结构,当输入仅包含药物的分子描述,如SMILES字符串和蛋白质靶标的氨基酸序列时,可以进行快速的DTI预测。这类基于序列的DTI方法能够实现可扩展的DTI预测,但是在对比基于结构的方法时,其获得的精度依然存在障碍。

该研究提出了ConPLex,是一种快速的基于序列的DTI方法,它利用了预训练蛋白质语言模型(PLM)的丰富特征,并表明其可以在大规模的DTI预测任务上产生最先进的性能。ConPLex来自两个主要思想,它们共同克服了以前方法的一些局限性:基于PLM的表示和对比学习。虽然已经提出了许多方法用于基于序列的DTI,例如,联邦学习(Realizing private and practical pharmacological collaboration),CNN或Transformer,但它们的蛋白质和药物表示仅由DTI基础数据构建。DTI输入之间的高度多样性,加上DTI训练数据的有限可用性(尤其是蛋白质的可用性),限制了这些方法的准确性及其在训练数据之外的推广能力。此外,一般方法往往是通过牺牲细粒度的特异性来实现的,即无法区分具有相似物理化学性质的真阳性结合化合物和假阳性结合化合物(诱饵,Decoy)。

相比之下,ConPLex的PLex(预训练词典,Pretrained Lexicographic)有助于缓解DTI训练数据有限的问题。解决DTI数据集有限问题的一种方法是将学习到的蛋白质表示从预训练的PLM转移到DTI预测任务中。DTI数据集的大小限制了以前方法学习到的蛋白质embedding质量。PLMs以无监督的方式学习数百万蛋白质中氨基酸序列的分布特征,生成基于序列的表示,具有更深层结构的见解。机器学习中的一个设计范例是,输入的高质量信息特征也可以增强简单模型的能力。第二个见解通过使用对比学习直接解决了架构中的细粒度特异性问题:一种蛋白质anchor的对比联合嵌入,将蛋白质和药物放置在共享的潜在空间中。这种联合嵌入可以分离真正的相互作用化合物和诱饵,以实现泛化和高特异性(图2)。

将这两个想法结合在一起,就得到了ConPLex,这是一种既具有泛化性又具有高度特异性的表示学习方法。在训练时没有关于给定蛋白质或药物的信息的zero-shot预测设置中,相对于其他方法,ConPLex表现特别好。实验验证,ConPLex的命中率为63%(12/19),证明了ConPLex是一种准确、高度泛化的计算工具。

ConPLex还可以在二元分类情况之外进行调整,以预测结合亲和性。除了预测精度外,联合表示还具有其他优点。蛋白质和药物在同一空间的embedding提供了可解释性,该空间中的距离有意义地反映了DTI结合功能:利用ConPLex表示对来自Surfaceome数据库(The in silico human surfaceome)的细胞表面蛋白质进行功能表征,一组2,886种定位于外质膜的蛋白质参与信号传导,并且很可能容易被配体靶向。

ConPLex非常快:作为概念验证,使用单个NVIDIA A100 GPU在不到24小时内对ChEMBL 中所有药物-人类蛋白质组进行预测(大约 2 × 1 0 10 2 ×10^{10} 2×1010对)。因此,ConPLex有潜力应用于需要大量计算的任务。注意到大多数DTI方法需要对每个药物-靶标对进行大量计算(即具有二次时间复杂度)。由于ConPLex预测仅依赖于联合空间中的距离,因此只要计算并对齐embedding(具有线性时间复杂度),就可以高效地进行预测

区分低覆盖率和高覆盖率DTI预测

该研究在两种不同的情况下对ConPLex和竞争方法的性能进行了基准测试,称之为低覆盖和高覆盖DTI预测(图1C)。ConPLex在这两种情况下都优于其竞争方法,注意,将两种机制分开有助于澄清该领域一个经常看到的问题:在不同的DTI基准中,其性能差异很大。之前已经有人进行了尝试,以使DTI基准标准化,并为模型评估开发一致的框架(Beta: A comprehensive benchmark for computational drug–target prediction)。然而,这项工作的大部分都忽略了基准测试的一个关键:differing per-biomolecule data coverage。我们将这个覆盖率定义为该数据集中存在数据点的药物或靶点的平均比例,无论这是正的还是负的相互作用。

特别的,低覆盖率数据(图1A),倾向于测量DTI领域的泛化范围,包含高度多样化的药物和靶点。由于所覆盖靶点的多样性,这些数据集可能会带来建模挑战,因为允许对化合物和蛋白质类别之间的兼容性进行广泛评估。高覆盖率数据集(图1B)代表了相反的权衡:它们在药物或靶点类型上包含有限的多样性,但报告了密集的潜在两两相互作用。因此,它们捕获了药物靶标结合的细粒度细节,并能够在特定环境中区分相似的生物分子。
fig1

  • 图1:DTI基准显示高度可变的覆盖水平。高覆盖率与低覆盖率的基准测试倾向于奖励不同类型的模型性能。
  • A:在这个低覆盖率数据集的例子中,候选药物覆盖了空间的全部多样性,并且没有两种药物是高度相似的。一个成功的模型必须准确地建模大部分药物空间,以推广到所有候选药物。
  • B:对于高覆盖率的数据集,药物倾向于针对特定的蛋白质家族。因此,一个成功的模型不需要很泛化,但必须能够捕获药物适应度中更小的变化,以实现高特异性并区分类似药物。
  • C:在对现有流行的DTI基准数据集的回顾中,现有基准覆盖范围差异很大,从几乎为零覆盖的数据集(每种药物或靶标只出现几次)到几乎完全覆盖的数据集(所有药物或靶标在数据中都是已知的)。

覆盖度的大小可以类比为局部覆盖解的数量


这两种覆盖机制对应于不同的用例:

  • 低覆盖率:当将DTI模型应用于大规模筛选以预测潜在靶标对大型化合物文库的相互作用时,低覆盖率机制是相关的,例如,药物重利用。这种规模的数据通常覆盖率很低,每个独特的生物分子只有少量已知的相互作用。因此,重要的是用于这些任务的DTI模型具有广泛的适用性,并且可以准确地推广到许多不同的蛋白质和药物家族。然而,这种泛化往往以特异性为代价,导致模型无法区分高度相似的药物
  • 高覆盖率:当优化特定的相互作用时,高覆盖率是相关的。在这里,可以训练模型对蛋白质家族或药物类别具有高度特异性,以至于训练模型为每个药物或每个靶标来捕获该生物分子的精确结合动力学。虽然这些模型可以有效地优化先导物,但它们需要对感兴趣的生物分子进行高覆盖率才能做出准确的预测,这可能并不总是可用的。此外,这种模型缺乏泛化超出训练领域的能力,因此不能用于基因组或药物库规模的预测。

ConPLex的PLM在两种情况下都具有强大的性能。在低覆盖率情况下,优势主要来自PLex,它可以利用语言模型的有效泛化来实现最先进的性能。在高覆盖率的数据集上,对比学习变得很重要,使得以高精度训练特定药物或靶标的模型变得可行,而且这些模型通常比更通用的模型表现得更好。虽然单任务模型在给定可用数据的情况下确实表现良好,但ConPLex能够在低多样性、高覆盖率的情况下实现极高的特异性,同时仍然广泛适用于数据有限的蛋白质靶点。因此,ConPLex既适用于大规模的化合物或目标筛选,也适用于细粒度、高度特异性的结合预测。
fig2

  • 图2:ConPLex模型的体系结构和训练框架。ConPLex的训练分为两个阶段,以优化泛化性和特异性。
  • A:使用预训练的PLM生成蛋白质特征(ProtBert),使用Morgan指纹生成药物特征。通过学习的非线性投影将这些特征转化到联合embedding空间。相互作用的预测基于该空间的余弦距离,并使用低覆盖率数据集上的BCE loss更新参数。
  • B:在对比阶段,靶标、药物和诱饵的三联体以同样的方式转化到共享空间中。在这里,编码embedding被视为一个度量学习问题。使用高覆盖数据集上的三元组距离损失来更新参数,以最小化靶标-药物距离,同时最大化靶标-诱饵距离。如果靶标与诱饵之间的距离大于靶标与药物之间的距离加上一些余量,则不施加额外的惩罚。
  • C:在二元Epoch和对比Epoch之间交替训练ConPLex,以同时优化两个目标。每轮后,学习率和对比余量根据退火方案进行更新。

方法

数据集覆盖率计算

1 ( i , j ) 1_{(i,j)} 1(i,j)为指示变量,意味着存在drug i i i和target j j j的观测。对于一个有 m m m个唯一drug和 n n n个唯一target的数据集,我们可以为drug d d d定义一个覆盖度: C d = 1 n ∑ j = 0 n 1 ( d , j ) C_{d}=\frac{1}{n}\sum_{j=0}^{n}1_{(d,j)} Cd=n1j=0n1(d,j)同样的,我们可以为target t t t定义覆盖度: C t = 1 m ∑ i = 0 m 1 ( i , t ) C_{t}=\frac{1}{m}\sum_{i=0}^{m}1_{(i,t)} Ct=m1i=0m1(i,t)然后,对于给定的数据集,我们可以评估drug和target覆盖度中值。


一个数据集如果具有最大覆盖度,那么对于每个药物-靶标对(即每个特定的药物与靶标的组合),将会有一个单独的数据点。因此,在这种情况下,每种药物和每个靶标的数据点指示变量都是1(全连接的二分图)。这也意味着数据集中包含了对每种药物和每个靶标的详细信息,没有重复的数据。

这个观点通常用于描述数据集的信息覆盖程度。在这个情境中,“coverage” 表示数据集中包含的不同药物-靶标对的数量。如果每种药物和每个靶标都有大量的数据点,那么覆盖度就很高。而如果数据集中只包含每种药物和每个靶标的一个数据点,那么覆盖度就很低,因为它没有提供有关药物和靶标的多样性信息。

如果数据集的药物空间和靶标空间都很大,并且都全连接,就能包含泛化信息(低覆盖)和特异性信息(高覆盖)。然而,通常是没有这种数据集的,高覆盖数据集一般总是不包含足够的多样性来训练模型广泛应用于新的药物或目标。


Benchmark设计

低覆盖benchmark

作者在三个大规模、低覆盖率的基准数据集上评估methods。DAVISComprehensive analysis of kinase inhibitor selectivity)和BindingDBBindingDB: A web-accessible database of experimentally determined protein–ligand binding affinities),由实验确定的解离常数 K D K_D KD的药物和靶点对组成。根据文献(MolTrans: Molecular interaction transformer for drug–target interaction prediction),作者将 K D < 30 K_D <30 KD<30的pair视为正DTI,而具有较大的值为负DTI。此外,来自BIOSNAPBioSNAP Datasets: Stanford biomedical network dataset collection)的ChGMiner,仅由正DTI组成。通过随机采样等量的蛋白质-药物对来产生负DTI(假设随机的对不太可能产生正相互作用)。DAVIS数据集代表了few-shot learning设置:它只包含2,086个训练的相互作用,而BindingDB和BIOSNAP分别有12,668个和19,238个。这些数据集被分成70%用于训练,10%用于验证,剩下的20%用于测试。训练数据被人为地采样,使其具有相同数量的正交互和负交互,而验证和测试数据则保留数据集中原始的比例。

零样本benchmark

作者用BIOSNAP的两种zero-shot修改来评估方法。通过从全套蛋白质中选择20%的蛋白质并选择包括这些蛋白质的任何相互作用作为测试集,创建了Unseen蛋白质集。因此,没有蛋白质同时出现在训练集和测试集。使用相应的过程来创建Unseen药物集。然后进一步划分训练集,使用7/8的交互作用进行训练,1/8的交互作用进行验证。如上所述,对数据进行人为二次采样,以便平衡训练。

连续benchmark

连续的亲和力预测数据来自TDC-DG(Therapeutics data commons: Machine learning datasets and tasks for drug discovery and development)。TDC-DG由140,746种唯一药物和477种唯一靶点组成,这些靶点来自BindingDB的相互作用。每个相互作用都用实验确定的解离常数 I C 50 IC_{50} IC50来标记。使用由TDC基准测试框架确定的训练与验证分割来训练模型,并报告测试集中预测的平均PCC系数。

高覆盖benchmark

来自Useful Decoys数据库:增强的DUD-E(Directory of useful decoys, enhanced (DUD-E): Better ligands and decoys for better benchmarking)由102个蛋白质靶点和已知的结合伙伴(平均每个靶点224个分子)组成。对于每个结合伙伴,有50个decoys,或物理化学上类似的化合物,已知不会与靶标结合。值得注意的是,其中57个靶标被分类为GPCR、激酶、核蛋白或蛋白酶。通过在类内分割靶点来生成训练-测试分割,这样在训练集和测试集中都有每个类的代表性成员。根据定义,这些数据具有高覆盖率,因为每个靶点都有几种真实化合物和诱饵化合物。

ConPLex模型

靶标特征化

作者使用预训练的PLM(ProtBERT)生成蛋白靶标的特征,即为一个长度为 n n n的蛋白质生成embeding E f u l l ∈ R n × d t E_{full}\in R^{n\times d_{t}} EfullRn×dt,然后沿着蛋白质的长度方向进行mean-pooling,得到 E ∈ R d t E\in R^{d_{t}} ERdt。作者强调语言和投影模型专门用于生成输入特征,并且它们的权重保持不变,并且在DTI训练期间不更新。


PLM:

  • Prose:Learning the protein language: Evolution, structure, and function
  • ESM:Biological structure and function emerge from scaling unsupervised learning to 250 million protein sequences
  • ProtBERT:ProtTrans: Towards cracking the language of life’s code through self-supervised deep learning and high performance computing

药物特征化

作者通过药物分子的摩根指纹(The generation of a unique machine description for chemical structures—A technique developed at chemical abstracts service)来表征药物分子,这是分子图的SMILES字符串的编码,通过考虑每个原子周围的局部邻域,将其作为固定维嵌入 M ∈ R d m M\in R^{d_{m}} MRdm,选择 d m = 2048 d_{m}=2048 dm=2048。摩根指纹对小分子表征的效用已在很多实验中得到证明(Extended-connectivity fingerprints)。

共享的隐空间

给定靶标embedding T ∈ R d t T\in R^{d_{t}} TRdt和小分子embedding M ∈ R d m M\in R^{d_{m}} MRdm,分别将他们对齐到 T ∗ , M ∗ ∈ R h T^{*},M^{*}\in R^{h} T,MRh T ∗ = R e L U ( W t T + b t ) M ∗ = R e L U ( W m M + b m ) T^{*}=ReLU(W_{t}T+b_{t})\\M^{*}=ReLU(W_{m}M+b_{m}) T=ReLU(WtT+bt)M=ReLU(WmM+bm)然后用cosine相似度表示DTI概率: p ^ ( T ∗ , M ∗ ) = σ ( T ∗ ⋅ M ∗ ∣ ∣ T ∗ ∣ ∣ 2 ⋅ ∣ ∣ M ∗ ∣ ∣ 2 ) \widehat{p}(T^{*},M^{*})=\sigma(\frac{T^{*}\cdot M^{*}}{||T^{*}||_{2}\cdot||M^{*}||_{2}}) p (T,M)=σ(∣∣T2∣∣M2TM)在预测结合亲和力时,用ReLU代替cosine相似度: y ^ ( T ∗ , M ∗ ) = R e L U ( T ∗ ⋅ M ∗ ) \widehat{y}(T^{*},M^{*})=ReLU(T^{*}\cdot M^{*}) y (T,M)=ReLU(TM)

训练

现在还需要对模型进行广义和特异性预测的训练,并根据训练数据集计算损失。低覆盖训练数据使用二元交叉熵损失 L B C E L_{BCE} LBCE,输入为真实标签 y y y和预测概率 p ^ \widehat{p} p 。当模型被训练来预测结合亲和力时,作者在监督过程中用均方误差损失 L M S E L_{MSE} LMSE代替二元交叉熵损失。

在高覆盖数据集(DUD-E)上训练时,使用对比学习。对比学习使用三元组而不是对,包含锚点、正点和负点,目的是最小化锚点与正点之间的距离,而最大化锚点与负点之间的距离。在DTI设置中,三元组的自然选择分别是蛋白质靶点作为锚点,真正的药物作为正点,诱饵作为负点。以下列方式导出一个三元组的训练集:对于每个已知的pair ( T , M + ) (T,M^{+}) (T,M+),随机采样decoy得到 ( T , M − ) (T,M^{-}) (T,M),从而得到三元组 ( T , M + , M − ) (T,M^+,M^-) (T,M+,M)。然后映射到统一的空间,然后计算边际损失: L T R M ( a , p , n ) = 1 N ∑ i = 1 N m a x ( D ( a , p ) − D ( a , n ) + m , 0 ) L_{TRM}(a,p,n)=\frac{1}{N}\sum_{i=1}^{N}max(D(a,p)-D(a,n)+m,0) LTRM(a,p,n)=N1i=1Nmax(D(a,p)D(a,n)+m,0)其中, D ( u , v ) = 1 − p ^ ( u , v ) D(u,v)=1-\widehat{p}(u,v) D(u,v)=1p (u,v) m m m表示边际增量,此处 m = 0 m=0 m=0

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JavaWeb+SSM+Vue实习记录微信小程序系统的设计和实现

基于JavaWebSSMVue实习记录微信小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 目 录 摘 要 III Abstract 1 1 系统概述 1 1.1 概述 2 1.2课题意义 3 1.3 主要内…

vue常用的修饰符

一、定义 修饰符是用于限定类型以及类型成员的声明的一种符号&#xff0c;vue中修饰符分为以下五种&#xff1a;表单修饰符、事件修饰符、鼠标按键修饰符、键值修饰符、v-bind修饰符 二、作用 1.表单修饰符 lazy&#xff1a;在我们填完信息&#xff0c;光标离开标签的时候&a…

cache教程 3.HTTP服务器

上一节我们实现了单机版的缓存服务&#xff0c;但是我们的目标是分布式缓存。那么&#xff0c;我们就需要把缓存服务部署到多态机器节点上&#xff0c;对外提供访问接口。客户端就可以通过这些接口去实现缓存的增删改查。 分布式缓存需要实现节点间通信&#xff0c;而通信方法…

m_map导入本地地形数据

m_map绘制地形图时&#xff0c;虽然自带有1的地形图以及从NOAA下载的1分的地形图&#xff08;详见&#xff1a;Matlab下地形图绘图包m_map安装与使用&#xff09;&#xff0c;但有时需要对地形图分辨率的要求更高&#xff0c;便无法满足。 此时&#xff0c;需要导入本地地形数…

LeetCode题:11. 盛最多水的容器

目录 一、题目要求 二、解题思路 三、代码 一、题目要求 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

《师兄啊师兄》第二季来了!它凭什么成为修仙流里第一档?

沉寂大半年&#xff0c;修仙喜剧动画《师兄啊师兄》第二季终于“千呼万唤始出来”&#xff0c;即将在12月14日上线。作为优酷动漫本年度的当家之作&#xff0c;这部可谓是热度口碑双丰收&#xff0c;截至第一季收官&#xff0c;相关话题在短视频平台的累计播放量更是高达43亿&a…

软件设计师——法律法规(二)

&#x1f4d1;前言 本文主要是【法律法规】——软件设计师——法律法规的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304…

延时消息+递归导致重复消费爆炸问题

背景 公司所用消息队列为RoucketMQ&#xff0c;版本为4.x。最近公司有业务需要&#xff0c;将某个处理延迟到第二天的白天再进行。由于4.x版本队列&#xff0c;默认延时时间是按等级来延时的&#xff0c;默认有18个等级&#xff0c;如下图&#xff1a; 默认的延时等级&#xff…

eve-ng山石网科HillStone镜像部署

HillStone 部署 author&#xff1a;leadlife data&#xff1a;2023/12/4 mains&#xff1a;EVE-ng HillStone 镜像部署 - use hillstone-sg6000 default&#xff1a;hillstone/hillstone 传输 scp hillstone-sg6000.zip root192.168.3.130:/opt/unetlab/addons/qemu/部署 cd …

12.4每日一题(备战蓝桥杯顺序结构程序设计)

12.4每日一题&#xff08;备战蓝桥杯顺序结构程序设计&#xff09; 题目1000: 【入门】AB Problem题目描述输入输出样例输入样例输出来源/分类 题解 1000: 【入门】AB Problem题目 2124: 计算(ab)c的值题目描述输入输出样例输入样例输出来源/分类 题解 2124: 计算(ab)c的值题目…

C语言-字符串操作函数-附加使用方式

文章目录 前言字符串复制-strcpy字符串复制&#xff08;按照位数&#xff09;-strncpy字符串比较-strcmp字符串比较(按照位数)-strncmp不区分大小写的字符串比较-strcasecmp不区分大小写的比较(前n位)-strncasecmp字符串按照格式写入-sprintf字符串按照格式和个数写入-snprintf…

使用贝叶斯网络检测因果关系,提升模型效果更科学(附Python代码)

虽然机器学习技术可以实现良好的性能&#xff0c;但提取与目标变量的因果关系并不直观。换句话说&#xff0c;就是&#xff1a;哪些变量对目标变量有直接的因果影响&#xff1f; 机器学习的一个分支是贝叶斯概率图模型(Bayesian probabilistic graphical models)&#xff0c;也…

SpringCloud网关介绍

一、Gateway简介 1、官网 上一代zuul 1.X&#xff1a;https://github.com/Netflix/zuul/wiki 当前gateway&#xff1a;https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 2、是什么 SpringCloud Gateway是SpringCloud的一个全…

2023 CCF中国软件大会(CCF ChinaSoft)“软件工程教育”论坛 成功召开

2023年12月1日&#xff0c;2023年度CCF中国软件大会“软件工程教育”论坛成功召开。 ✦ 自去年来大模型技术的出现以及在各个领域的应用&#xff0c;对相关的学科和行业产生了深刻的影响。软件工程首当其冲&#xff0c;以ChatGpt和CopilotX等为代表的智能化开发工具可以帮助软…

Spring Boot 3 集成 Druid 连接池详解

在现代的Java应用中&#xff0c;使用一个高效可靠的数据源是至关重要的。Druid连接池作为一款强大的数据库连接池&#xff0c;提供了丰富的监控和管理功能&#xff0c;成为很多Java项目的首选。本文将详细介绍如何在Spring Boot 3项目中配置数据源&#xff0c;集成Druid连接池&…

我对迁移学习的一点理解(系列2)

文章目录 我对迁移学习的一点理解 我对迁移学习的一点理解 源域和目标域是相对的概念&#xff0c;指的是在迁移学习任务中涉及到的两个不同的数据集或领域。 源域&#xff08;Source Domain&#xff09;通常指的是已经进行过训练和学习的数据集&#xff0c;它被用来提取特征、…

2023-12-09 LeetCode每日一题(下一个更大的数值平衡数)

2023-12-09每日一题 一、题目编号 2048. 下一个更大的数值平衡数二、题目链接 点击跳转到题目位置 三、题目描述 如果整数 x 满足&#xff1a;对于每个数位 d &#xff0c;这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。 给你一个整数 n &#xff0…

Temu卖家如何获取流量?Temu新手卖家流量来源哪里?——站斧浏览器

流量对于每个平台来说都是很重要的&#xff0c;那么Temu卖家如何获取流量&#xff1f;流量来源哪里&#xff1f; Temu卖家如何获取流量&#xff1f; 1、优化产品标题和描述&#xff1a;在Temu平台上&#xff0c;买家通常通过搜索关键词来寻找他们感兴趣的产品。因此&#xff…

Axios 拦截器实战教程:简单易懂

Axios 提供了一种称为 “拦截器&#xff08;interceptors&#xff09;” 的功能&#xff0c;使我们能够在请求或响应被发送或处理之前对它们进行全局处理。拦截器为我们提供了一种简洁而强大的方式来转换请求和响应、进行错误处理、添加认证信息等操作。在本文中&#xff0c;我…

P10 Linux进程编程 fork创建子进程

目录 前言 01 fork()创建子进程 示例 1使用 fork()创建子进程。 02 fork创建新进程时发生了什么事&#xff1f; 2.1 父、子进程中对应的文件描述符指向了相同的文件表 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《Linux C应用编程&#xf…
最新文章