【USENIX论文阅读】Day2

Birds of a Feather Flock Together: How Set Bias Helps to Deanonymize You via Revealed Intersection Sizes("物以类聚:集合偏差如何帮助去匿名化——通过揭示交集大小)

Xiaojie Guo, Ye Han, Zheli Liu, Ding Wang, Yan Jia, Jin Li

摘要

安全的两方协议,用于计算与交集相关的统计信息,受到了工业界的广泛关注。这些协议使得两个组织能够共同计算一个函数(例如计数和求和),而无需明确揭示交集。然而,大多数这类协议最终会揭示两个集合的交集大小。在这项工作中,我们关注的是攻击者能够利用揭示的交集大小,推断一个组织集合中一些元素的成员资格的程度。甚至将一个元素的成员资格向另一个组织披露,也可能违反隐私法规(例如GDPR),因为这样的元素通常用于在两个组织之间识别一个人。我们是第一个研究在揭示交集大小的协议中集合成员泄漏的团队。我们提出了两种攻击,即基线攻击特征感知攻击,以在现实场景中评估这种泄漏。特别是,我们的特征感知攻击利用了现实中的集合偏差,即具有特定特征的元素更有可能是一个组织集合的成员。结果显示,我们的两种攻击可以在三种现实场景中平均推断出2.0∼72.7个集合成员。如果集合偏差不弱,特征感知攻击将优于基线攻击。例如,在COVID-19接触追踪中,特征感知攻击在135个协议调用中可以找到25.9个感染患者的标记,比基线攻击多出1.5倍。我们讨论了这类结果可能造成的负面实际影响,并提出了可能的对抗我们攻击的防御措施。

1 引言

涉及两个组织集合交集的安全双方计算引起了行业的广泛关注。一个知名的协议是私有集合交集基数(PSI-CA),该协议向一个组织返回交集的大小,而不向任何一方透露其他信息。该协议在追踪社交网络和关联规则挖掘等领域得到了广泛应用。另一个流行的协议是带基数的私有交集求和(PSI-SUM),该协议汇总了一个组织持有的与交集中索引相关联的值。PSI-SUM最初是在Google的工作中提出的,用于衡量由于广告转化而产生的收入。最近,Facebook提出了Private-ID,这是一种用于在线广告中隐私保护测量转化提升[13]的协议。

尽管这些安全计算协议永远不会向任何一方透露两个组织集合的交集,但它们会揭示两个集合的交集大小。只要在两个组织之间反复调用这种揭示交集大小的协议,攻击就可以利用揭示的交集大小测试某些元素是否在交集中。在这种攻击中,一个组织(充当攻击者)可以在每次与另一个组织(充当受害者)的协议调用中输入一个单元素集,并观察结果的交集大小。如果这个大小等于一,那么涉及的元素就在交集中;否则,不在。我们强调攻击者可以在协议调用中使用其目标元素,而这些元素的成员资格基本上会透露它们属于受害者集合的成员资格。换句话说,这种攻击允许攻击者推断目标元素属于受害者集合的成员资格。如果受害者集合是静态的,N次协议调用可以泄露N个元素的集合成员资格

我们的研究超越了这种攻击,并启动了有关由揭示的交集大小导致的集合成员泄漏的首次研究。这种泄漏对于所有在不透露关于交集的任何信息的情况下计算与交集相关的统计量的协议都是一个普遍问题,许多现实世界的系统使用这些协议来尽可能隐藏有关受害者集的信息免受攻击者的侵害。在这些系统中,不允许透露受害者集中的任何元素。然而,本研究表明,对于具有这种安全要求的系统来说,使用揭示交集大小的协议可能存在风险。

本研究始于设计两种集合成员推断攻击,以测试目标元素是否在受害者集中。首先,我们展示,即使攻击者什么都不知道,只知道交集的大小,也存在一种基线攻击,导致比玩具攻击更严重的集合成员泄漏。其次,我们考虑了一个现实情况,即受害者集在特定特征方面存在偏差。粗略地说,这种集合偏差意味着具有这些特征的元素更有可能包含在受害者集中。例如,在卫生局的COVID-19患者集中存在这种集合偏差。该集合被认为在人的发热特征方面存在偏差,因为发热是COVID-19的常见症状。我们提出了针对这种有偏集合的特征感知攻击。其直觉是,如果攻击者知道目标元素的与偏差相关的特征,它可以利用这些特征来提高推断效率

本研究进一步评估了在三种情景下,由我们的两种攻击及玩具攻击导致的集合成员泄露问题:(i) 基于PSI-CA的COVID-19接触追踪,(ii) 从PSI-SUM测量广告转化收入,(iii) 通过PrivateID测量广告转化提升。我们的测量显示,情景(i)中的集合偏差是不可忽视的,而其他两个情景中的偏差较弱。每个情景都允许多次调用其揭示交集大小的协议,其中受害者的集合是动态的。

在情景(i)中,我们的基线(特征感知)攻击能够识别出3.7 ∼ 7.2倍(5.2 ∼ 9.0倍)比玩具攻击更多的集合成员。特别是,我们的攻击需要远少于玩具攻击的协议调用次数来找到同样多的集合成员。平均而言,当最初有14/28/56个集合成员在512/1024/2048个目标元素中时,我们的基线(特征感知)攻击大约通过70/135/135次协议调用就能找到12.0/18.1/17.6(13.4/22.4/25.9)个集合成员。在情景(ii)和(iii)中,玩具攻击可能无法找到任何集合成员,但我们的攻击仍然有效。例如,在情景(ii)中,当最初有2/4/7个集合成员在512/1024/2048个目标元素中时,我们的基线(特征感知)攻击大约通过15/33/60次协议调用能找到2.0/4.0/7.5(2.0/4.2/7.5)个集合成员。由于受害者的集合随时间变化,我们的攻击在这一情景中可以找到与最初不同的一些集合成员。上述结果表明,我们的攻击可以帮助攻击者在三种情景中猜测受害者集合中的元素。

本工作最后讨论了我们的结果在现实世界中的含义以及一些可能的防御措施。值得注意的是,在考虑的情景中,攻击者可以将其选择的元素与现实世界中的人联系起来。因此,这些元素的集合成员泄露表明了与受害者交互的联系人,进而他们的相关元素被记录在受害者的集合中。这种个人信息应仅为交互组织所知,而这些信息被泄露给另一个未经授权的组织违反了隐私法规(例如,GDPR和HIPPA)。我们还讨论了这种交互泄露在三种情景中可能产生的负面后果。例如,结果表明,结合我们的攻击和链接攻击,可以推断出由卫生局记录的COVID-19患者。这种推断可能影响这些患者的日常生活。

2 背景

2.1 交集大小揭示协议

存在许多安全的双方协议,可以计算两方集合的交集函数,而不透露关于交集的任何信息,除了其大小

  • PSI-CA:该协议是一个黑盒,从一方接收集合 X X X,从另一方接收集合 Y Y Y。它在内部计算交集大小 ∣ X ∩ Y ∣ |X ∩Y| XY 并将此值发送给两方中的一方。

  • PSI-SUM :该协议是一个黑盒,从一方接收集合 X X X,从另一方接收索引-值对的表 ( y i , v i ) {(y_i, v_i)} (yi,vi),它在内部聚合与交集 X ∩ Y X ∩ Y XY中的索引相关联的值,并得到总和 ∑ y i ∈ X ∩ Y v i \sum_{y_i∈X∩Y} v_i yiXYvi。然后,该协议将此总和和交集大小 ∣ X ∩ Y ∣ |X ∩ Y| XY发送给输入表的一方。

  • Private-ID:该协议是一个黑盒,从一方接收集合 X X X,从另一方接收集合 Y Y Y。它内部为联合 X ∪ Y X ∪ Y XY 中的所有元素分配随机标签,以便两方对于交集 X ∩ Y X ∩Y XY 中的每个元素都将获得相同的标签。然后,该协议将这些标签和交集大小 ∣ X ∩ Y ∣ |X ∩Y| XY 发送给双方。这些标签可用于后续安全计算交集 X ∩ Y X ∩Y XY 的许多统计信息。

  • Circuit-based PSI:该协议是一个黑盒,从一方接收表 ( x i , u i ) {(x_i, u_i)} (xi,ui),从另一方接收表 ( y i , v i ) {(y_i, v_i)} (yi,vi)。基于电路的PSI 可以计算由交集 X ∩ Y X ∩ Y XY 中的元素索引的两方值的任何函数。可以认为基于电路的PSI 是计算与交集相关的统计信息的最终解决方案。实现了基于电路的PSI 协议,并向两方透露交集大小 ∣ X ∩ Y ∣ |X ∩Y| XY 以提高协议效率。

集合成员推断问题:对于接收来自揭示交集大小的协议的一方,这个大小衡量了其集合与另一方集合之间的相似性。由于该方可以选择发送到协议的集合,它可以以其希望的方式测量另一方的集合。一个有趣的问题是,当一方拥有许多目标元素时,是否可以利用这种测量能力确定这些元素是否属于另一方的集合。

2.2 威胁模型

攻击者的能力:攻击者具有以下能力:

  • 攻击者是交集大小显露协议的一方。在每次协议调用中,攻击者可以选择其输入并了解由该输入和另一方集合导致的交集大小。在此,另一方是受害者,其集合可以是动态的。
  • 攻击者被允许重复使用相同的受害者调用协议。

攻击者的背景知识:我们考虑以下两种背景知识的攻击者:

  • 基线攻击者:该攻击者对受害者的集合没有任何背景知识。我们使用该攻击者的性能来衡量由交集大小显露协议导致的最小集合成员泄露
  • 特征感知攻击者:该攻击者知道某些特征与受害者集合中的偏差相关。换句话说,攻击者知道受害者的集合倾向于包含具有特定特征的元素。这是关于受害者集合中偏差的背景知识。

攻击者的目标

攻击者有许多目标元素,并对这些元素是否属于受害者的集合感兴趣。如果这个集合随时间变化,攻击者将考虑目标元素的历史集合成员资格,这表示目标元素是否出现在受害者集合的任何快照中,从攻击开始到结束。

3 集合成员推断攻击

3.1 基线攻击

基线攻击者采用一种类似二分搜索的策略。首先构建这样一棵二叉树,其中(i)每个节点存储一个非空集合,(ii)根节点存储目标元素的集合,(iii)非叶节点中存储的集合将被分为两个非空且不相交的子集,这两个子集将分别存储在非叶节点的两个子节点中。

对于二叉树T的节点v,令 T v ∈ X T_v \in X TvX 表示节点v中存储的集合,leftChild(v)(rightChild(v))表示v的左(右)子节点。我们的基线攻击按照Algorithm 1中的蓝图进行,并使用Algorithm 2作为子例程来构建二叉树。

Algorithm 2: 基线攻击者的buildTree算法输入:一个集合X。忽略参数BK。
输出:一棵二叉树T。1. 初始化T,包含一个单独的节点root,该节点存储集合X。
2. 通过递归将存储的集合分割成两个非空且不相交的子集,构建一棵平衡的二叉树T。
3. 返回T。。

Algorithm 2 举例
假设广告公司想要在某一城市的特定区域中进行广告投放,并希望了解哪些年龄段对他们的广告产生了转化。为简化问题,我们将用户按照年龄进行分类,每个用户由其年龄代表。我们的目标是使用集合成员推断攻击构建一棵平衡的二叉树,从而推断出对广告产生转化的年龄段。

  1. 初始化: 初始时,我们有一个包含该城市所有年龄段的用户集合X。算法初始化一棵二叉树,根节点表示整个年龄段集合。
  2. 递归划分: 通过递归地将年龄段集合划分为两个非空且不相交的子集,构建平衡的二叉树。例如,我们可以选择按照年龄中位数来划分。假设初始年龄段为20到60岁,我们选择将其划分为两个子集:20到40岁和40到60岁。这两个子集分别成为根节点的左右子节点。
  3. 继续划分: 针对每个非叶子节点,我们重复递归地划分其存储的年龄段集合(按照年龄中位数来划分),直到达到某个终止条件。每一步的划分都确保子集的平衡性,以保持二叉树的平衡性。
  4. 构建平衡的二叉树: 通过反复划分和构建,我们最终得到一棵平衡的二叉树,其中每个节点存储一个年龄段集合。叶子节点表示最小的年龄段,即单个年龄

为了推断目标元素的集合成员资格,攻击者对排队的子树运行深度优先搜索(DFS)(队列最初包含构建的二叉树)。在每次DFS中,攻击者(i)遍历从队列弹出的子树,(ii)与受害者调用协议以接收有关访问过的每个节点中存储的集合的交集大小,(iii)在存储集合大小等于接收到的交集大小的节点处终止。在此搜索期间未访问的子树被推入队列以供将来的DFS(第16和19行)。最后,攻击者清空队列并找到包含受害者也持有的目标元素的所有子集。同时,攻击者可以看到其他目标元素是非成员。

Algorithm 1: Blueprint of set membership inferenceInput: A set X of target elements, background knowledge
BK, an algorithm buildTree.Output: A set membership predicate σ such that, for each
xi ∈ X, σ(xi) = 1 if xi is in the victim’s set; otherwise σ(xi) = 0.1 Initialize Z ← ∅.
2 Input X to the protocol and get an intersection size m.
3 T ← buildTree(X,BK). // Build a binary tree based on the
attacker’s background knowledge
4 forest ← {(m/|X|,(m,T.root))}. // A priority queue of
(priority, subtree-info) tuples
5 while forest is not empty do
6 		(mnode,node) ← forest.pop().
7 		while 0 < mnode < |Tnode| do
8 			L ← leftChild(node), R ← rightChild(node).
9 			if TR contains more elements than TL then
10 				Input TL to the protocol and get an intersection size mL.
11 				mR ← mnode −mL.
12 			else
13 				Input TR to the protocol and get an intersection size mR.
14 				mL ← mnode −mR.
15 			if mR/|TR| > mL/|TL| then
16 				forest.push((mL/|TL|,(mL,L))).
17 				node ← R, mnode ← mR. // Goto right child
18 			else
19 				forest.push((mR/|TR|,(mR,R))).
20 				node ← L, mnode ← mL. // Goto left child
21 		if mnode > 0 then Z ← Z ∪Tnode.
22 	Let σ be such a predicate that σ(xi) = 1 iff xi ∈ X ∩Z.
23 return σ.

该算法的目标是通过构建一个二叉树,利用协议和交集大小的信息来推断目标元素是否属于受害者的集合。算法维护一个优先级队列,其中包含了以交集大小为优先级的子树信息。通过迭代地从队列中弹出子树并进行协议调用,算法构建了一颗二叉树,最终得到一个集合成员谓词σ,用于确定每个目标元素是否属于受害者的集合。

剩下的问题是基线攻击者如何划分存储在非叶节点中的集合。回想一下,对于基线攻击者,每个目标元素成为集合成员的概率相同。对于这个攻击者来说,最好是随机均匀地划分集合并最终构建一棵平衡的二叉树。这种做法确保DFS路径的期望长度最小,或者说期望的协议调用次数最小。

我们的基线攻击比玩具攻击更高效,这归功于类似二分搜索的策略。假设受害者的集合Y是静态的,并且攻击者已构建了一个二进制树T。我们的第一个观察是对于树T的任何非叶节点v,以下等式成立:
∣ T v ∩ Y ∣ = ∣ T leftChild ( v ) ∩ Y ∣ + ∣ T rightChild ( v ) ∩ Y ∣ . |T_v \cap Y| = |T_{\text{leftChild}(v)} \cap Y| + |T_{\text{rightChild}(v)} \cap Y|. TvY=TleftChild(v)Y+TrightChild(v)Y∣.
通过这个等式,如果攻击者已经学到了父节点的大小(例如, ∣ T v ∩ Y ∣ |T_v \cap Y| TvY)和另一个子节点的大小(例如, ∣ T leftChild ( v ) ∩ Y ∣ |T_{\text{leftChild}(v)} \cap Y| TleftChild(v)Y),则攻击者可以局部确定一个子节点的交集大小(例如, ∣ T rightChild ( v ) ∩ Y ∣ |T_{\text{rightChild}(v)} \cap Y| TrightChild(v)Y)。因此,攻击者可以避免对那些可以在本地确定的交集大小进行徒劳的调用。在我们的实现中,攻击者利用这一性质来维护子树队列,其中每个推送的子树的根的交集大小(除了初始情况)已经在本地确定(见第16和19行)。这使得攻击者可以至少减少二叉树每个非根层的协议调用次数的一半。

回顾一下,在具有 N : = ∣ X ∣ N := |X| N:=X 个叶节点的平衡二叉树中,有 2 N − 2 2N − 2 2N2个叶节点,深度为 ⌈ log ⁡ 2 N ⌉ \lceil \log_2 N \rceil log2N 。对于确定二叉树上所有交集大小所需的总调用次数,有一个上限:
1 + 1 2 ⋅ ∑ d = 1 ⌈ log ⁡ 2 N ⌉ − 1 2 d + 1 2 ⋅ ( 2 N − 2 ) ⌈ log ⁡ 2 N ⌉ = N . 1 + \frac{1}{2} \cdot \sum_{d=1}^{\lceil \log_2 N \rceil - 1} 2^d + \frac{1}{2} \cdot \left(2N − 2\right)^{\lceil \log_2 N \rceil} = N. 1+21d=1log2N12d+21(2N2)log2N=N.
这等于玩具攻击所需的总调用次数。这个上限保证我们的基线攻击的效率不会比玩具攻击差。

我们的第二个观察是,这个上限是宽松的,因为每个深度优先搜索(DFS)可能会在深度小于 ⌈ log ⁡ 2 N ⌉ \lceil \log_2 N \rceil log2N 的非叶节点处提前终止。这种提前终止是因为一些目标元素的各个单例集合被合并成受害者集合的较大子集。当DFS遇到这个子集时,攻击者将了解一批目标元素的集合成员资格并终止此DFS。在这种情况下,由于DFS路径的缩短,调用次数减少。此外,剩余目标元素的数量也减少,并且需要更少的DFS通行来进行进一步的推断。因此,我们的基线攻击应比玩具攻击更为高效。

效率优化:贪心深度优先搜索(DFS)。由于合并集合成员可以提高攻击效率,攻击者应首先搜索具有最大合并概率的子树。这个概率与子树根的交集大小与该子树中目标元素数量的比率正相关。攻击者了解这个比率,并且可以将这个比率作为优先级分数,用于对推送到(优先级)队列中的子树进行排序。这样,攻击者将首先在具有最大合并概率的弹出子树上运行DFS。在每次DFS中,攻击者递归访问具有最大优先级分数的子节点。图1中呈现了一个示例。

图1

Algorithm 3: buildTree for the feature-aware attackerInput: A set X, background knowledge BK.
Output: A binary tree T.1 Parse BK as a table DX such that DX [xi
] denotes the features
associated with a target element xi ∈ X.
2 Initialize T to contain a single node root.
3 Troot ← X, queue ← {root}.
4 while queue is not empty do
5 	node ← queue.pop().
6 	Use features {xi ∈ Tnode : DX [xi
]} to run k-means to divide Tnode into two subsets SL and SR.
7 	Append two child nodes L and R to node.
8 	TL ← SL, TR ← SR.
9 if |SL| > 1 then queue.push(L).
10 if |SR| > 1 then queue.push(R).
11 return T.

该算法的目的是根据给定的集合X和背景知识BK,构建一个二叉树,其中每个节点代表一个子集,通过k均值算法不断划分子集,直到子集中的元素数量满足某个条件。这样的二叉树结构可以用于特征感知的攻击,从而更有效地获取目标元素的信息。

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

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

相关文章

thinkphp6定时任务

这里主要是教没有用过定时任务没有头绪的朋友, 定时任务可以处理一些定时备份数据库等一系列操作, 具体根据自己的业务逻辑进行更改 直接上代码 首先, 是先在 tp 中的 command 方法中声明, 如果没有就自己新建一个, 代码如下 然后就是写你的业务逻辑 执行定时任务 方法写好了…

ConvNeXt V2:用MAE训练CNN

论文名称&#xff1a;ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders 发表时间&#xff1a;CVPR2023 code链接&#xff1a;代码 作者及组织: Sanghyun Woo&#xff0c;Shoubhik Debnath来自KAIST和Meta AI。 前言 ConvNextV2是借助MAE的思想来训练…

【PyTorch][chapter 18][李宏毅深度学习]【无监督学习][ VAE]

前言: VAE——Variational Auto-Encoder&#xff0c;变分自编码器&#xff0c;是由 Kingma 等人于 2014 年提出的基于变分贝叶斯&#xff08;Variational Bayes&#xff0c;VB&#xff09;推断的生成式网络结构。与传统的自编码器通过数值的方式描述潜在空间不同&#xff0c;它…

排序(9.17)

1.排序的概念及其运用 1.1排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性 &#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记…

实战 vue3 使用百度编辑器ueditor

前言 在开发项目由于需求vue自带对编辑器不能满足使用&#xff0c;所以改为百度编辑器&#xff0c;但是在网上搜索发现都讲得非常乱&#xff0c;所以写一篇使用流程的文章 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、下载ueditor编辑器 一个“…

三数之和(哈希,双指针)

15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 方法1&#xff1a;哈希算法&#xff08;不推荐&#xff09; 缺点&#xff1a;时间复杂度O&#xff08;N^2&#xff09;&#xff0c;去重情况复杂 class Solution { public:vector<vector<int>> threeSum(ve…

【Java EE初阶二十五】简单的表白墙(一)

1. 前端部分 1.1 前端代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…

2步破解官方sublime4

sublime简要破解流程 1.下载sublime官方最新版2. 破解流程 1.下载sublime官方最新版 打开 官方网站下载 portable version 版&#xff0c;省的安装。。解压到任意位置&#xff0c;备份 sublime_text.exe 文件 2. 破解流程 打开网址把文件 sublime_text.exe 拖入网页搜索替换…

【非递归版】归并排序算法(2)

目录 MergeSortNonR归并排序 非递归&归并排序VS快速排序 整体思想 图解分析​ 代码实现 时间复杂度 归并排序在硬盘上的应用&#xff08;外排序&#xff09; MergeSortNonR归并排序 前面的快速排序的非递归实现&#xff0c;我们借助栈实现。这里我们能否也借助栈去…

国产服务器操作系统

为何记录 最近的开发工作经常接触到国产服务器操作系统的业务&#xff0c;经常被x86、arm、龙芯、鲲鹏、欧拉...搞得一脸懵逼&#xff0c;遂记之&#xff01; 操作系统 这里按照应用场景分&#xff1a; 桌面操作系统&#xff1a;主要用于pc&#xff0c;如Windows、macOS、Li…

MATLAB练习题:电子管的更换策略问题

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 在一台设备上&#xff0c;安装有四只型号和规格完全相同的电子…

腾讯design vue项目 上传桶 腾讯云的桶 对象存储 打包web端项目上传dist

1.说明 将腾讯design 项目上传到 腾讯云的对象存储中 &#xff0c;但是发现 再这个腾讯design项目中 直接npm run build 打包以后 上传 发现 不能用 需要配置东西 2.解决 使用腾讯云的cos-nodejs-sdk-v5 插件 代码上传 cos-nodejs-sdk-v5 - npm npm i cos-nodejs-sdk-v5 …

[算法沉淀记录]排序算法 —— 快速排序

排序算法 —— 快速排序介绍 基本概念 快速排序&#xff08;Quicksort&#xff09;是一种排序算法&#xff0c;最早由东尼霍尔提出。在平均状况下&#xff0c;排序 n 个项目要 Ο(n log n) 次比较。在最坏状况下则需要 Ο(n2) 次比较&#xff0c;但这种状况并不常见。事实上&…

《论文阅读》一个基于情感原因的在线共情聊天机器人 SIGIR 2021

《论文阅读》一个基于情感原因的在线共情聊天机器人 前言简介数据集构建模型架构损失函数实验结果咨询策略总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《Towards an Online Empathetic Chatbot…

EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成

EMQX Enterprise 5.5.0 版本已正式发布&#xff01; 在这个版本中&#xff0c;我们引入了一系列新的功能和改进&#xff0c;包括对 Elasticsearch 的集成、Apache IoTDB 和 OpenTSDB 数据集成优化、授权缓存支持排除主题等功能。此外&#xff0c;新版本还进行了多项改进以及 B…

设计模式(二)单例模式的七种写法

相关文章设计模式系列 面试的时候&#xff0c;问到许多年轻的Android开发他所会的设计模式是什么&#xff0c;基本上都会提到单例模式&#xff0c;但是对单例模式也是一知半解&#xff0c;在Android开发中我们经常会运用单例模式&#xff0c;所以我们还是要更了解单例模式才对…

vue3 使用qrcodejs2-fix生成二维码并可下载保存

直接上代码 <el-button click‘setEwm’>打开弹框二维码</el-button><el-dialog v-model"centerDialogVisible" align-center ><div class"code"><div class"content" id"qrCodeUrl" ref"qrCodeUrl&q…

【Vue】组件通信组件通信

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 组件通信 组件通信&#xff0c;就是指组件与组件之间的数据传递 组件的数据是独立的&#xff0c;无法直接访问其他组件的数据想用其他组件的数据--&…

Qt5转Qt6笔记

背景 现在的主程序和扩展的dll库都是qt5环境下编译发布的。但是想以后用qt6。所以考虑是否能够在qt5中兼容qt6的动态链接库进行加载。于是...就开始吧 开始 2024-02-23 安装好qt6后&#xff0c;在vs2019中需要新增qt6版本的安装路径。目录在&#xff1a;扩展->QT VS Tools…

Linux笔记--硬链接与软链接

一、硬链接 1.inode和block 文件包含两部分数据&#xff1a;文件属性和实际内容&#xff0c;属性放在inode中&#xff0c;实际内容放在data block中。还有个超级区块&#xff08;superblock&#xff09;记录整个文件系统的整体信息&#xff0c;包括inode和block的总量&#x…