简单搜搜索了一下,发现有openconnect这个开源的解决方案。但是使用后发现,学校的VPN使用了sso + 2fa的登录方式,openconnect并不支持。
进一步搜索之后,发现了openconnect-sso这个项目,其在openconnect基础上封装了一层,调用网页浏览器,支持sso + 2fa登录。因此我打算将其封装到docker中,并通过X11访问网页浏览器,完成认证。
最终项目地址:https://github.com/RManLuo/docker-openconnect-sso
- 在 Windows 上下载 VcXsrv 并安装
- 第一步的设置窗口状态怎么选关系不大,我一般是用 One large window ,默认的 Multiple windows 在多屏情况下显示会有一些问题。然后 Display number 可以用默认的 -1 ,或者设置成 0
- 下一步,选择 Start no client 。
- 下一步,选项全部勾上 (特别是“Disable access control”),Additional parameters 不用管。
- 安装XQuartz:
brew install xquartz --cask
- 安装后通过 应用-实用工具-XQuartz 可启动 XQuartz 程序
- 在命令行中设置 DISPLAY 环境变量:
export DISPLAY=:0
,关闭access control:xhost +
1 | docker run -itd --privileged --name=anyconnect-sso-x11 -v /dev/shm:/dev/shm -v /tmp/.X11-unix:/tmp/.X11-unix -e SERVER_NAME=${SERVER_NAME} -e USER_NAME=${USER_NAME} -e DISPLAY=host.docker.internal:0.0 -p 127.0.0.1:10081:1080 --restart=unless-stopped rmanluo/openconnect-sso-x11:latest |
请将 SERVER_NAME 和 USER_NAME 替换为您自己的。
样例:
docker run -itd —privileged —name=anyconnect-sso-x11 -v /dev/shm:/dev/shm -v /tmp/.X11-unix:/tmp/.X11-unix -e SERVER_NAME=vpn.xx.edu -e USER_NAME=xxx@xx.edu -e DISPLAY=host.docker.internal:0.0 -p 127.0.0.1:10081:1080 —restart=unless-stopped rmanluo/openconnect-sso-x11:latest
理论会弹出浏览器窗口,输入密码即可登录。
Note 如果未弹出浏览器窗口,请检查X11是否配置正确。
完成2FA验证
docker会在本地10081端口启动socks5代理,可以通过代理访问内网资源。
]]>KGs store facts in their graph structure. KGs embedding represents KGs in a low-dimension vector space which preserves the inherent structure of KGs.
Recent studies apply PLMs to encode text information and generate representations for long-tail and emerging entities.
KG embeddings with PLMs are usually deployed as static, which is challenging to modify without re-training.
Editing language model-based KG embeddings, which aims to enable data-efficient and fast updates to KG embeddings for a small region of parametric space without influencing the performance of the rest.
KG embeddings editing= learning-to-update problems.
KG: $G=(\mathcal{E},\mathcal{R},\mathcal{T})$
EDIT task: $(h,r,y,a)$ or $(y,r,h,a)$, $y$ denote the wrong or outdated entity, $a$ denote the target entity we want to replace.
Example:1
<Barack Obama, president of, U.S.A.> => <Barack Obama, president of, U.S.A., Joe Biden>
ADD task: Implement new knowledge into the model
Knowledge reliability: edited or newly added knowledge should be correctly inferred=> Knowledge graph completion metrics: Success\@1
Knowledge locality: editing KG embeddings will not affect the rest of other facts=> Retain Knowledge (RK\@k).
The entities predicted by the original model are still correctly inferred by the edited model.
Edited Knowledge Rate of Change and Retaining Knowledge Rate of Change
Knowledge efficiency: modify a model with low training resources=>number of tuning parameters
Pre-process: Remove simple facts can be easily predicted by PLMs.
Edit task:
ADD task:
Finetuning KGE
Prompt tuning KGE
External model-based editor
Edit wrong knowledge in language models by utilizing a hyper network to predict the weight update during inference.
Cons: Need to fine tune a large number of parameters.
Additional parameter-based editor
Modify the output by another small model.
Cons:Poor in performance.
TLogic utilizes temporal random walks to get temporal logical rules in symbolic form. When TLogic applies the found rules to answer questions, it must precisely match each relation and timestamp in the rules, including relation types, relation order and time order. If there are no matching body groundings in the graph, then no answers will be predicted for the given questions.
Previous PLMs are treated as a simple text encoder to incorporate text information, which ignores the structure information.
They convert symbolic edges into natural language sentences and capture the semantic logic hidden behind the relation paths.
Limitations: need to define a prompt template for each relation type.
They argue that the old facts in the perspective of time offer vital background information for the target quadruples
They randomly select one edge which is not included in the relation paths as an old fact and regard it as a historical description to reflect the evolution of facts.
Usually, these historical descriptions are semantically relevant to target quadruples and act as rich historical knowledge related to target entities. Furthermore, in the fully-inductive setting, the degrees of most entities are small, which means the ideal paths connecting target entities are limited and result in little information
PLMs are pre-trained in noisy and generally purposed opendomain corpora, so PLMs are not effective for applications on timespecific downstream tasks
Construct pre-training corpus using structured sentences extracted from all training quadruples.
Because each edge in the training TKGs is considered positive, all the generated sentences for it can be regarded as logically supporting the establishment of the edge to some extent.
They focus on the time tokens, and 25% of the temporal expressions in $T$ are randomly sampled.
Use embedding at [CLS] generated by PLMs as entity/relation representations.
Time-encoding
Score functions
For each quadruple, we can have $N$ sentences, which denotes $N$ predictions. Weight them by timestamps.
Transductive
Inductive
Explainability
Information leakage in the pretrained PLMs?
]]>TL;DR: The major motivation behind this method is: they use Jackknife to estimate the distribution of error, then it use a threshold to find the upper- and lower-bound of the error in the distribution, which is used for quantifying the uncertainty.
Quantifying the uncertainty over the predictions of existing deep learning models remains a challenging problem.
Deep learning models are increasingly popular in various application domains. A key question often asked of such model is “Can we trust this particular model prediction?” This is highly relevant applications wherein predictions are used to inform critical decision-making.
Existing methods for uncertainty estimation are based on Bayesian neural network. They do not guarantee (1) cover the true prediction targets with high probability (2) discriminate between high- and low-confidence prediction.
Frequentist coverage: denotes whether the estimated confidence interval cover the data points.
Discrimination: denotes whether the model is able to discriminate
high-confidence predictions (regions with dense training data) and low-confidence ones (regions with scarce training data).
Existing methods for uncertainty estimation are based predominantly on Bayesian neural networks.
Propose the discriminative jackknife (DJ) to estimate the uncertainty over samples inspired by the jackknife leave-one-out (LOO) re-sampling procedure
To avoid exhaustively re-training the model for each sample, they adopt the high-order influence function to approximate the impact of each sample.
DJ is post-hoc to the model training. It is capable of improving coverage and discrimination without any modifications to the underlying predictive model.
Considering a standard supervised learning setup, we try to minimize the prediction loss on the training data $\mathcal{D}n = {(x_i, y_i)}{i=1}^n$.
We aim to estimate the uncertainty in the model’s prediction though the pointwise confidence interval $\mathcal{C}(x;\hat{\theta})$.
The degree of uncertainty in the model’s prediction is quantified by the interval width
This is satisfied if the confidence interval $\mathcal{C}(x;\hat{\theta})$ covers the true target $y$ with a prespecified coverage probability of $(1-\alpha), \alpha \in (0,1)$.
The confidence interval is wider for test points with less accurate predictions.
The jackknife quantifies predictive uncertainty in terms of the average prediction error, which is estimated via leave-one-out (LOO) construction found by systematically leaving out each sample in $\mathcal{D}_n$, and evaluating the error of the restrained model on the left-out samples.
For a target coverage of $(1-\alpha)$, the native jackknife is
$\mathcal{\hat Q}_\alpha^+(\mathcal{R})$: $(1-\alpha)(n+1)$-th smallest element of $\mathcal{R}$.
The interval width is constant, which renders discrimination impossible.
The $\mathcal{G}_{\alpha,\gamma}$ is a quantile function applied on the elements of the sets of marginal prediction errors $\mathcal{R}$ and local prediction variability $\mathcal{V}$.
The prediction error is constant, i.e., does not depend on $x$, hence it only contributes to coverage but does not contribute to discrimination.
The local variability term depends on $x$, hence it fully determines the discrimination performance.
The confidence interval is bounded by
Approximate the $\hat\theta_i$ using the high-order influence function.
Influence functions enable efficient computation of the effect of a training data point $(x_i,y_i)$ on $\hat\theta$. This is achieved by evaluating the change in $\hat\theta$, if $(x_i,y_i)$ was up-weighted by a small factor $\epsilon$.
Removing a training point is equivalent to upweighting it by $\frac{-1}{n}$.
现实世界中有这么个问题:有这么一系列历史事件,每个事件都有其对应的发生时间,也有其所属的事件类型,基于这一系列历史事件,预测下一个要发生的是什么类型的事件,以及其发生的时间。
点过程可以对一系列历史事件建模,来解决此预测问题。
给定一系列历史事件:
点过程的核心是强度函数$\lambda(t)$,其定义方式如下
定义方式是由极短时间内的平均发生事件次数除以时间段长度。其表示的含义是在给定一段历史事件的序列时,在之后的极小的一段时间中事件发生的概率。
又由于随着时间的推移,事件可能在之后任意一个时间点发生,对于在这个极小的时间段中事件发生的概率我们又可以定义为:
其表示的是事件在时间t当下发生的的概率除以时间t到未来中发生的概率。
又由于
所以
因此生存函数$S^*(t)$的定义如下:
因此事件发生的概率密度可以写成:
就此,我们只需要定义强度函数$\lambda(t)$就可以得到事件在每一个时刻的发生概率,然后用优化似然函数的方式得到具体的参数。
期刊论文通常篇幅较长,审稿时候可以做的决断从好到坏有3个:minor revision, major revision (有些期刊为reject & resubmit), reject.
看完文章之后可以大概心里做个if-else的判断,是否直接reject 或者给作者修改机会。如果一个文章在idea, 实验,写作方面较差,则可以直接拒绝。或者一个文章虽然写得还行,但是期刊level 很高,文章不达到要求(比如理论不充足,没有足够多contribution),也可以拒绝。当觉得文章还可以,值得给一个修改机会时候。
审稿意见通常包括两部分:一段summary, 总结文章研究内容+总体评价。第二部分是actionable comments。写期刊审稿意见时,应该侧重于给actionable comments, 即作者看完应该能知道怎么修改的comments。不要给模凌两可的意见或者一味批评而读者不知道如何改的意见。
actionable item 分几类:
一类是clarification, 这些只需要做简单修改;
一类是添加内容,比如加motivation,加某个东西的介绍,加时间复杂度分析,指出和xx 工作的区别;
一类是对比,比如数据集太小,试验不充分,需要加更大数据集;比如baseline 太旧,需要加新的。
还有一类其实更难的,是novelty 不足,idea 不新,这个基本就差不多可以拒了。
和会议审稿不同,审期刊没必要列3点positive comments 和3点negative comments. 为什么呢,因为这些不是actionable comments.
由于期刊通常需要多次修改才能被接收。所以一般第一审给major revision。然后第二次可以是minor, 第三次是accept. 当然如果质量很好,可以在R1时候给accept.
]]>移动竟然没有对IPV6限速,我挂种子可以轻易跑出G口的网速。
之前家里的NAS是用SMB协议进行串流的,在局域网的时候SMB速度还行,但是变成公网之后SMB速度就太感人了。通过调研了FTP,SMB,WebDAV之后发现,WebDAV是在HTTP协议之上研发的,相比SMB有很好的文件传输效率,同时又有比FTP更高的安全性。因此研究如何在Ubuntu上部署WebDAV网盘,方便串流视频。
自己测试表明WebDAV基本可以跑满带宽(50M),SMB协议则只有8M左右。
WebDAV
SMB
在Ubuntu上使用的WebDAV的方法有多种:Apache2,Nginx,Caddy。Nginx和Caddy都需要额外安装模块才能实现最完整的WebDAV功能(下载、上传、修改),因此我推荐使用Apache部署WebDAV。
使用apt安装 apache2
sudo apt install apache2
激活 WebDAV 相关组件
1 | a2enmod dav_fs |
sudo nano /etc/apache2/sites-enable/webdav.conf
请注意,和nginx不一样,如果要改端口要在/etc/apache2/ports.conf修改
1 | <VirtualHost *:8888> |
htpasswd -c /etc/apache2/webdav.password rman
最后为用户名,然后输入密码。
最后重启Apache2即可,并设为开机启动。
sudo systemctl enable apache2
sudo systemctl restart apache2
至此WebDAV就配置好了,可以直接通过浏览器或者其他客户端访问
http://ip:port/
。
一开始直接想通过国内服务器搭建一个代理,但是国内VPS带宽实在捉急,听个无损都要缓冲,体验太差了。在网上搜索,发现有这样一个项目可以帮助我们解决问题:https://github.com/nondanee/UnblockNeteaseMusic
该项目的主要功能如下:
使用 QQ / 虾米 / 百度 / 酷狗 / 酷我 / 咪咕 / JOOX 音源替换变灰歌曲链接
完整的流量代理功能 (HTTP / HTTPS),可直接作为系统代理 (同时支持 PAC)
功能1是我研究这个项目的初衷,我希望能在不用翻回国的情况下解锁网易云的海外限制。通过这个项目看来,网易云是通过X-Real-IP这个请求头来判断IP的。稍微熟悉网络安全的同学都知道,取IP应该用 REMOTE_ADDR,这个是不可伪造的,而X-Real-IP和X-Forward都是可以伪造的,因此此项目通过代理,修改了网易云音乐的包头,从而使得网易云无法正确判断我们的位置。
该项目如何修改我们的发包头呢?因为此项目是一个代理的形式提供服务,对HTTP流量可以直接修改,但是对于HTTPS流量就无能为力了。为此该项目采用了两种方法:1.流量降级。2.中间人攻击。第一种方法是,当检测到流量是https的时候就返回一个空,这时候网易云音乐客户端会重新以http的形式连接,从而可以修改包头。第二种方法,是用自定义证书替换网易云音乐的证书,因此可以通过中间人解密修改流量。
这个bug的修正其实非常简单,不懂为啥网易云一直没有修复,其实只需要将IP的取值来源换成REMOTE_ADDR即可。
对于功能2,其实就是对网易云音乐没有版权的歌曲,自动通过其他音乐源获取同名歌曲替换即可。此时网易云就只是一个没有感情的UI界面+收藏+推荐的软件了,正好也符合我的需求,本来我就只需要它的私人FM功能。
功能3是实现1,2的根源,通过一个代理的形式对流量进行修改,从而达到解锁的效果。同时既可以在本地搭建也可在云服务器搭建,给多个设备使用。后文我将介绍如何在云服务器搭建,从而给多个设备使用。
由于源项目太久没有更新,我采用此项目所提供的的一个docker方式快捷部署。
服务端执行:
1 | docker run -d -p 8080:8080 -m 300M --memory-swap -1 -e ENABLE_LOCAL_VIP=true -e NO_CACHE=true -e ENABLE_FLAC=true -e NODE_ENV=production --restart=always --log-opt max-size=10m --name=win_music pan93412/unblock-netease-music-enhanced -e https://music.163.com |
此时会在VPS上开启8080端口的http服务。由于该项目有内存溢出情况,所以设置了内存限制。此指令已经亲自测试在所有客户端都可用。
windows客户端非常好使用,直接在设置-工具-http代理
处填写你的服务器ip和端口号(默认是8080)即可。
IOS由于无法直接通过流量降级发送http流量,因此采用安装证书,用中间人攻击方式修改流量。
在Safari上打开如此地址安装并信任证书。在设置 > 通用 > 关于本机 > 证书信任设置,手动信任证书。
IOS推荐采用Shadowrockt方式添加http代理。如果不想麻烦可以直接开全局代理,或者用如下规则:
MacOS和IOS类似,需要安装证书,同时可以用Clash等软件分流。
安卓推荐用Clash设置代理并进行分流,可用规则如下
https://github.com/DesperadoJ/Rules-for-UnblockNeteaseMusic/tree/master/Clash
Linux 客户端食用指南:https://github.com/nondanee/UnblockNeteaseMusic/issues/208
iOS配置经验分享: https://github.com/nondanee/UnblockNeteaseMusic/issues/368
iOS 食用指南#65:https://github.com/nondanee/UnblockNeteaseMusic/issues/65
一个可以使用的教程#444: https://github.com/nondanee/UnblockNeteaseMusic/issues/444
教學:如何修正 UnblockNeteaseMusic 的「播放失敗」問題(酷我、QQ、周杰倫)#746: https://github.com/nondanee/UnblockNeteaseMusic/issues/746
UnblockNeteaseMusic - 解锁网易云音乐客户端变灰歌曲:https://redn3ck.github.io/2020/06/23/UnblockNeteaseMusic-解锁网易云音乐客户端变灰歌曲
]]>The size of the K-hop neighbors grows exponentially to the number of GNN layers (High Memory Cost).
GNN has to read great amount of data of neighboring nodes to compute the single target node representation, leading to high communication cost in a distributed environment (High Communication Cost).
GNN的每一次特征传播都需要拉取邻居特征,对于k层的GNN来说,每个节点需要拉取的k跳以内邻居节点特征随着层数增加以指数增加,会占用大量内存。对于稠密的连通图,每个节点在每次训练的时候几乎需要拉取全图的节点信息,造成海量的通信开销。
A commonly used approach to tackle the issues is sampling.
Sampling的方法虽然可以减少邻居数量,减轻内存压力,但是仍要消息传递。
Some method (e.g., SGC) decouples the feature propagation and the non-linear transformation process.
The feature propagation is executed during pre-processing.
Only the nodes of training set get involved in the model training.
The decoupling methods are more suitable for distributed training.
现有方法分离消息传递和非线性变化,提取收集好特征,后期直接用全连接变化即可。
我们通过一个简单的示例来说明这个问题。图4中有1个被标蓝的节点并位于图中相对稠密的区域,而绿色节点位于图中相对稀疏的区域。同样进行2次特征传播操作,可以看到位于稠密区域的蓝色节点的感受野已经相对较大了,而位于稀疏区域的绿色节点的感受野却只包含了3个节点。这个实例形象地说明了不同节点的感受野的扩张速度存在较大的差异。在GNN中,一个节点感受野的大小表示它能捕获邻域信息的多少,感受野太大,则该节点可能会捕获许多不相关节点的信息,感受野太小,则该节点无法捕获足够的邻域信息得到高质量的节点表示。因此,对于不同特征传播步数的节点特征,GNN模型需要对不同的节点自适应地分配权重。否则,便会出现无法兼顾位于稠密区域和稀疏区域节点的情况,导致最后无法得到高质量的节点表示。
Graph-wise propagation和之前我们介绍的node-wise propagation 的先传播再非线性变化不一样,是直接得到一个K跳内的邻接的邻接矩阵和$\hat{A}^K$,然后一次性计算传播结果,提前收集好K-hop特征$X^K$,然后直接用全连接之类的变化即可。
显然在训练过程中不需要消息传递,结点K-hop特征直接被当成特征输入网络即可。
Following SGC, some recent methods adopt layer-wise propagation combining the features with different propagation layers.
GAMLP decomposes the end-to-end GNN training into three parts: feature propagation, feature combination with RF attention, and the MLP training.
As the feature propagation is pre-processed only once, and MLP training is efficient and salable, we can easily scale GAMLP to large graphs. Besides, with the RF attention, each node in GAMLP can adaptively get the suitable
Parameter-free K-step feature propagation as:
After K-step feature propagation, we correspondingly get a list of propagated features under different propagation steps:
Average these propagated features in a weighted manner
Get the attention weight $W_l$ for different layers.
Suppose we execute feature propagation for infinite times. In that case, the node embedding within the same connected component will reach a stationary state (Over smoothing).
平滑注意力机制(Smoothing):把经无穷次传播的节点特征作为参考向量。在实际计算的时候有公式可以直接带入数值求解,并不需要真的进行无穷次特征传播。该注意力机制希望能够学习到不同传播步数的节点特征相对于的距离,并用这个距离来指导权重的选择。
递归注意力机制(Recursive):使用递归计算的方式,在计算赋予经L步传播的节点特征 的权重时,把前 L-1步的融合节点特征作为参考向量。该注意力机制希望能够学习到 $X^L$相比前L-1步的融合节点特征的信息增益,并用这个信息增益来指导权重的选择。
知识跳跃注意力机制(JK):如图7所示,把预处理阶段得到的所有经特征传播的节点特征全都按列拼接起来,并让这个向量过一个MLP,以MLP的输出结果作为参考向量。该注意力机制中的参考向量包含了所有K个经特征传播的节点特征矩阵中的信息,该注意力机制希望能够学习到不同传播步数的节点特征相对于大向量 的重要性,并用这个重要性来指导权重的选择。(可以理解为是一个局部的over smoothing attention).
To better utilize the predicted soft label (i.e., softmax outputs), we split the whole training process into multiple stages, each containing a full training procedure of the GAMLP model.
Here, we denote the prediction results of m-th stage as:
we adopt the predicted results for the nodes in the validation set and the test set at the last stage to enhance the label propagation.
增加label propagation的初始数量,把上次训练得到的高可信度的结点标签也作为真实标签加入,T controls the softness of the softmax distribution
To fully take advantage of the helpful information of the last stage, we also included a knowledge distillation module in our model. we only include the nodes in the reliable node set $𝑉_r$ at (m-1)-th
stage (m > 1) and then define the weighted KL divergence as:
单机单卡跑10亿级别结点,在Ogb拿到了全球第一。
The weights of propagated features with larger steps drop faster as the degree grows, which indicates that our attention mechanism could prevent high-degree nodes from including excessive irrelevant nodes which lead to over-smoothing.
度数越高越dense,因此自然用的是局部的信息。
先介绍GNN以及GNN对应的理论研究,从而过渡到现有GNN模型不能解决异构图问题。(对应背景和现在的工作进度)
接下来介绍现有异构图的问题
引出本文的核心:Graph Kernel(为什么这里不放在开头呢?因为这个东西是用来解决问题的方法,而不是问题核心。问题还是GNN,所以第一段讲的是GNN)
本文的工作
Kernels 把数据映射到一个高纬度空间中,从而可以在高维空间对数据进行相似度计算。
Graph Kernels通过把图分解成不同的子结构,从而进行相似度计算。
当不考虑子结构的时候,Graph Kernel可以只考虑节点的情况
比较两个图中,长度为l的randomwalk序列的相似度。
计算两个节点u,v的相似度,定义Kernel如下:
通过考虑不同节点类型和边类型,把不同节点类型节点通过映射函数映射到各自的空间。
对于l层的邻居来说,其graph kernal可以定义成l-1层的邻居相似度乘以l层的邻居+边的相似度。
从Heterogeneous Graph Kernel到神经网络的表示形式
作者证明得到,在第l层的图神经网络得到的向量表示正好都是对应l层的马氏空间中的向量。
作者接下来了理论分析了HGK-GNN和metapath-GNN的关系
传统的MP-GNN可以表示成用metapath进行聚合的图神经网络
假设当前MPGNN的形式如下
作者证明,在参数如下形式时,HGK-GNN和MPGNN等价
]]>intro的核心目的:讲好一个故事,让reviewer知道,你要做的是什么?为什么要这么做?难点在哪?
A类文章的关键:
因此在进行Intro写作时,可以遵循如下思路
第一段主要是问题描述(problem setting)。本段主要是针对要研究的问题进行简要介绍,方便读者直接了解你要做的问题是什么,给不熟悉这个领域的人一个大致的介绍
进行问题的描述,可以分为以下几个方向描述:
你的这个问题是你自己提出来的吗?
如果不是,可以遵循以下的思路进行写作?
如果这个问题是你全新提出来的,可以遵循以下思路
这段是你的核心,如何能准确的抨击现有方法的不足,让读者认可的你的贡献点。
寻找问题的思路:
现有方法哪里没考虑到?(体现你问题的新)
现有问题的challenge(体现你问题的难,所以你的方法才有贡献)
此处为介绍你提出方法的细节所在,这段其实是最简单的,就是结合上面的问题和挑战,一点点针对这些问题,你的方法是如何解决的。
最后通过实验证明即可。
]]>传统的深度学习协同过滤,ID的嵌入是直接输入交互层,但是在NGCF中,其能捕获用户和物品之间的高阶关系。
Intuitively, the interacted items provide direct evidence on a user’s preference [16, 38]; analogously, the users that consume an item can be treated as the item’s features and used to measure the collaborative similarity of two items.
$e_i$,$e_u$ 做哈达玛积,然后通过$W_2$ 转换,然后和$e_1$ 通过$W_1$ 做转换之后相加。然后除以度数乘积进行归一化。
邻居信息相加聚合在加到用户自身上和用户相加通过激活函数。
很典型的图卷积矩阵定义
每一层都会得到用户u的表示,将其拼接得到用户最后的表示。
同理得到物品的表示,然后点积预测结果。
Loss采用BPR loss
Pairwise。对于implicit feedback(如是否购买),BPR对每一个user建立一个偏序关系
。如图所示,user-item矩阵中,+表示用户购买了该商品,?表示没有购买。比如,对user 1来说,他购买了
,没有购买
,则对于他来说,2和3比1和4好,但2、3之间,1、4之间无法比较
来自 [*https://zhuanlan.zhihu.com/p/31841042*](https://zhuanlan.zhihu.com/p/31841042)
]]>Existing beyond 1-WL test GNNs is computational heavily $O(n^3)$ and memory hungry $O(n^2)$.
Some methods introduce some handcrafted features that cannot be extracted by GNN into the node attributes to increase the GNN’s expressive power: Distance encoding, identity GNN, and some Jure’s works.
Existing GNN focuses on the low pass frequency component.
Give the explanation of what make GNN has certain expressive power.
Propose a graph convolution method (GNNML) that is more powerful than 1-WL test and reaches the 3-WL test.
GNNML has linear memory and computational complexities.
Enough spectral ability and local update process.
GNN->WL test->Matrix Language-> GNNML
Consider the 1-vertex.
Consider k-vertex tuple.
Examples of non-isomorphic graphs that cannot be distinguished by 1-WL but can be distinguished by 3-WL due to its capability of counting triangles.
Matrix Language (MATLANG) includes different operations on matrices and makes some explicit connections between specific dictionaries of operations and the 1-WL and 3-WL tests
Definition 1: $ML(\mathcal{L})$ is a matrix language with operations set $\mathcal{L}={op_1,⋯,op_n }, op_i\in{⋅,+,⊤,diag, tr,1,⊙,×,f}$
Definition 2: $e(X)∈\mathbb{R}$ is a sentence in $ML(\mathcal{L})$ if it consists of any possible consecutive operations in $\mathcal{L}$, operating on a given matrix $X$ and resulting in a scalar value.
Example: $e(X)=\mathbf{1}^\top X^2\mathbf{1}$ is a sentence of $ML(\mathcal{L})$ with $\mathcal{L}={⋅,⊤,\mathbf{1}}$
Matrix operation can extract different features from the graph that can be used to differentiate the graph.
Remark 1: Two adjacency matrices are indistinguishable by the 1-WL test if and only if $e(A_G )=e(A_H)$ for all $e∈L_1$ with $L_1={⋅,⊤,1, diag}$.
Remark 2: $ML(L_2 )$ with $L_2={⋅,⊤,1,diag,tr}$ is more powerful than 1-WL test but less powerful than 3-WL test.
Remark 3: $ML(L_3 )$ with $L_3={⋅,⊤,1,diag,tr,⊙}$ is as powerful as 3-WL test.
Remark 4: Enriching operation set to $L^+=L∪{+,×,f}$, $L∈(L_1,L_2,L_3) $ cannot improve the expressive power.
Theorem 1: Spatial GNNs such as GCN, GAT cannot go further than 1-WL test ($ML(L_1^+)$)
Theorem 2: Chebnet (Spectral GNN) is more powerful than the 1-WL test if the Laplacian maximum eigenvalues of the non-regular graphs to be compared are not the same.
Theorem 3: 3-star graphlets can be counted by sentences $L_1^+$
Theorem 4: Triangle and 4-cycle graphlets can be counted by sentences $L_2^+$
Theorem 5: Tailed triangle graphlets can be counted by sentences $L_3^+$
where $C^((s))∈\mathbb{R}^{(n×n)}$ is the $s$-th convolution support that defines how the node features are propagated to the neighboring nodes (different aggregation methods)
As aforementioned, the K-WL test can be represented by some matrix operations. Thus, the GNN contains the certain operations can also have the express power of k-WL test.
The paper proposes two methods. The first one, called GNNML1 is shown to be as powerful as the 1-WL test. The second one, called GNNML3 exploits the theoretical results of to break the limits of 1-WL and reach 3-WL equivalence experimentally.
Proof: The GNNML1 can produce all possible vectors in $L_1={⋅,⊤,1,𝑑𝑖𝑎𝑔}$
To reach more powerful models than 1-WL, the graph convolution must support trace ($tr$) and multiplication ($⊙$) operation in $L_3$.
The trace (tr) and multiplication (⊙) operation often take effect in high power of adjacent matrix.
However, we cannot initially know which power of adjacency matrix is necessary for a given problem.
Thus paper designs a spectral convolution support that can be expressed as a linear combination of all powers of adjacency matrix.
With the any power of the adjacency matrix, the trace ($tr$) and multiplication ($⊙$) operation can be approximated by MLP (A trick ! MLP can approximate every function~)
Where M can be seen as a mask (attention matrix) to select certain powers of the adjacency matrix.
The forward calculation of GNNML3 is :
Where $C^s$ can be seen as a multi-heads attention of different graph structure components to provide different operations’ result vector that can be used to approximate 3-WL test.
Q1: How many pairs of non-isomorphic simple graphs that are either 1-WL or 3-WL equivalent are not distinguished by the models?
Q2: Can the models generalize the counting of some substructures in a given graph?
Q3: Can the models learn low-pass, high-pass and bandpass filtering effects?
Q4: Can the models generalize downstream graph classification and regression tasks?
Theoretically give the explanation that to reach different express power (k-WL test) what operations GNN should have. It will help the successors find way to further improve the express power of GNN.
The multiple convolution supports used in GNNML3 is actually a multi-heads attention of different graph structure components to provide different operations’ result vector that can be used to approximate 3-WL test.
It cannot theoretically prove the GNNML3 is equal to 3-WL test, because its use the MLP to approximate the trace and multiplication operations.
现有的异构图学习中一些图的结构是不好的,不利于下游任务,比如在user-item的异构图中,用户可能会点击一些无用的item,从而给异构图表示学习带来一些噪声。
现有有的一些图结构表示学习的方法,通过把邻接矩阵参数化,学习更好的邻接矩阵用于下游任务。但是他们都是用于同构图的方法。
本文提出了GSL框架,通过考虑三种不同的图结构:特征相似图,特征传播图,和语义图来学习更好的图结构用于下游任务。
通过在节点之间的特征上用度量学习的方法,学习节点之间的相似度,构成相似度矩阵。
特征转播图通过特征与拓扑之间的交互来生成图结构,特征之间的相似度是可以传播的。我们通过一个例子来更好的理解。例如,考虑生成用户和电影之间的潜在图结构,存在这样一种图结构生成方式:如果用户U1 看过电影M1,且M1和M2相似,那么用户U1可能对M2感兴趣即和节点存在潜在边。上述潜在的图结构可以分两步构建:得到特征相似的节点对(找到相似的电影M1和M2),随后用拓扑结构传播(通过U1的观影历史得到可能感兴趣的电影M2)。HGSL 也通过上述两步过程来得到特征传播图。
对于每个关系r,首先根据关系的头尾节点集合,根据特征相似矩阵的计算方法,生成相似度矩阵。
然后再和原始的关系r邻接矩阵相乘,进行相似度传播,得到头相似度矩阵和尾相似度矩阵。
然后对矩阵进行attention聚合,得到特征邻接矩阵。
传统的metapath构成邻接矩阵忽视了中间节点,导致了信息丢失。于是本文先通过Metapath2vec学习不同metapath下节点的特征表示,然后根据不同的特征表示来生成不同metapath下的语义邻接矩阵。
对于多个metapath,进行一个加权聚合得到语义邻接矩阵。
把特征邻接矩阵和语义邻接矩阵还有原始的不同关系的邻居矩阵进行attention聚合。
把学习到的不同关系的邻接矩阵,进行合并,忽视节点的类型,转换成一个大的邻接矩阵。然后进行两层的信息传播并进行预测。
在 DBLP、ACM 及 Yelp 数据集上行了丰富的实验来验证HGSL 的有效性。
Soga 后端破解思路小分享。
仅以此文记录和分享一些关于go应用破解的过程。由于本人也是第一次进行go程序的逆向,本文的分析会比较简单和基础。
soga 后端是一个同时支持 v2ray、Trojan、Shadowsocks 的后端,社区版最高支持88用户,优化了长时间运行的内存占用。
本文以破解2.0.6为例,在release处可以下载指定版本的soga后端。
Go二进制文件由于由于其自身恶心的机制导致对其直接在IDA中逆向十分困难。
Go 语言的编译工具链会全静态链接构建二进制文件,把标准库函数和第三方 package 全部做了静态编译,再加上 Go 二进制文件中还打包进去了 runtime 和 GC(Garbage Collection,垃圾回收) 模块代码,所以即使做了 strip 处理(
go build -ldflags "-s -w"
),生成的二进制文件体积仍然很大。在反汇编工具中打开 Go 语言二进制文件,可以看到里面包含动辄几千个函数。再加上 Go 语言的独特的函数调用约定、栈结构和多返回值机制,使得对 Go 二进制文件的分析,无论是静态逆向还是动态调式分析,都比分析普通的二进制程序要困难很多。不过,好消息是安全社区还是找到了针对性的方法,让安全分析人员对 Go 语言二进制文件的逆向变得更加轻松。最开始有人尝试过针对函数库做符号 Signature 来导入反汇编工具中,还原一部分二进制文件中的函数符号。后来有人研究出 Go 语言二进制文件内包含大量的运行时所需的符号和类型信息,以及字符串在 Go 二进制文件中独特的用法,然后开发出了针对性的符号甚至类型信息恢复工具。至此,对 Go 语言二进制文件的逆向分析工作,就变得轻松异常了。
因此为了方便我们进行分析,我在此处采用go_parser来对二进制文件进行信息还原。
1 | file-->script file-->go_parser.py |
此脚本能还原出go可执行文件的函数信息以及一些字符串,由于电脑崩溃此处没有保存还原之后的截图。
在还原字符串以及函数信息之后,破解将十分容易。
我们首先搜索字符串,寻找验证有关的关键词。一把梭,直接查字符串,找到check。
右键x-refer-to定位到check-soga函数。
查看上层的startsogatask函数,分析函数,我们可得如下结果。
简单的将check soga nop掉,直接jmp到 loc_A770F7,这个函数就patch完成了。
然后外部main_main还要处理一下update问题。同样的nop掉即可。
至此,一个简单的破解就完成了。很显然对软件的继续分析之后可以看出,此破解方法只是绕过了一开始的key验证,在之后的运行中,仍然会有隔一段时进行验证的行为。本文只是抛砖引玉,分享一些自己逆向分析go的二进制文件的心得,读者可以自行进行尝试,进行更加完善的破解。
]]>Session recommendation:
Aiming to predict the next item to be interacted with a user under a specific type of behavior, and modeling user dynamic interest.
Target behavior session recommendation:
Considers target behavior and auxiliary behavior sequences and explores for accurate prediction.
• Session set: $S$
• Target behavior sequence: $P^s=[p1^s,⋯,p|P^s |^s]$
• Auxiliary behavior sequence: $Q^s=[q1^s,⋯,q(|Q^s |)^s]$
• Multi-Relational Item Graph: $G=(V,E)$, $V$ is the set of nodes in the
• graph containing all available items and $E$ is the edge sets involving
• Multiple types of directed edges. Each edge is a triple consisting of the head item, the tail item, and the type of this edge. Edge $(a, b, click) ∈ E$ means that a user clicked item $b$ after clicking item $a$.
The algorithm browses all behavior sequences, collects all items in the sequences as the nodes of the graph, and constructs edges between two consequent items in the same sequence with their behavior types as the edge types.
For each node $v∈V$, first convert them to a space $E∈\mathbb{R}^{|V|×d}$, and feed them with MRIG into GNN.
Each node in the graph has four types of neighboring node sets. According to the type and direction, we name the four sets as “target-forward”, “target-backward”, “auxiliary-forward”, and “auxiliary-backward”.
Same for the auxiliary set.
First aggregate each group of neighbors by mean-pooling to obtain the representation of this group, defined as below:
Then, we combine these four representations of different neighbor groups by sum-pooling:
Finally, we update the representation of the center node 𝑣 by:
Mean pooling the target behavior sequence $𝑃$ and auxiliary behavior sequence $𝑄$ as $p$ and $q$, respectively, which are given as:
where $g_v=h_v^K$, and $K$ is the total iterations of the GNN.
A gate mechanism to calculate the relative importance weight $𝛼$
$o$ for the current session by the weighted summation of $p$ and $q$:
We further calculate the recommendation score $𝑠_𝑣$ of each item $v ∈V$ using the item embedding $e_v$ . A bi-linear matching scheme is employed by:
Over all items to get the probability distribution $\hat{y}$:
Loss function:
Retrieve graphs from the database similar enough to a query.
The computation of Graph Edit Distance (GED) is NP-hard.
Existing methods cannot handle the large databases due to their exact pruning strategy.
•Graph Edit Distance (GED): $ged(g_1,g_2)$ is defined as the minimum number of edit operations to make $g_1$ isomorphic to $g_2$. The operation can be one of the following:
Graph Similarity Search under GED: Given a graph database $D$ with $N$ graphs, and a query graph $q$ and a threshold $τ$, the graph similarity search under GED measure aims to find ${g│g∈D∧ged(g,q)≤τ}$
Hamming distance to Euclidean space
Binary regularization
Search the keys whose hamming distance to $H(q)$ is less than $τ+t$, $t$ is set to 1.
Second-stage pruning by computing$||F(g)-F(q)||_2^2>τ+0.5$
Verify every graph remained with exact verification algorithm
为什么$\tau$越大recall反而下降了呢?
在问了老师之后,可能的解释是随着$\tau$上升,正例的样本也变多了,所以recall下降了。
The results in Figure 3 show that the hamming distance is usually smaller than the real GED
在线查询快,recall高,offline训练时间少,存储空间少。好就完事了!yizhou Sun 牛!
]]>对于全图的预测来说
对每个节点都进行标记,然后就能区分
Inspired by the emerging mutual information-based learning algorithm, This paper propose an unsupervised graph neural network Heterogeneous Deep Graph Infomax (HDGI) for heterogeneous graph representation learning.
Author utilized the meta-path to model the structure information involving semantics in Heterogeneous graph and apply the graph convolution module and semantic-attention module to capture the individual node local representation.
By maximizing the local-global mutual information, HDGI effectively learns highlevel node representations based on the diverse information in heterogeneous graphs
Mutual information is a quantity that measures a relationship between two random variables that are sampled simultaneously.
In order to maximize the MI, we need maximize the $\frac{p(y|x)}{p(y)}$, which means $p(y|x)$ is bigger than $p(y)$. For each input $x$, the encoder can find a feature $y$ that can well represent $x$.
Heterogenous graph: $\mathcal{G}=(\mathcal{V},\mathcal{E})$
Node type mapping function: $\phi:\mathcal{V}\to\mathcal{T},\phi(v)\in \mathcal{T}$
Edge type mapping function:$\psi:\mathcal{E}\to\mathcal{R},\psi(e)\in \mathcal{R}$
$\mathcal{T}+\mathcal{R}>2$
Metapath: $\Phi=v1 \mathop{\to}\limits^{R_1}\cdots \mathop{\to}\limits^{R{n-1}}v_n$
Given a metapath $\Phii$, if there exists a metapath instance between $v_i,j_j$, then $A{ij}^{\Phi_i}=1$ where $A^{\phi_i}$ is the adjacent matrix of metapath $\Phi_i$.
Problem definition: Given a $\mathcal{G}$ and the initial feature matrix $X$, the representation $H\in\mathbb{R}^{|V|\times d}$ which contains both structure and node attributes information.
The first step is meta-path specific node representation learning which encodes nodes in terms of each meta-path based adjacency matrix respectively.
Two kinds of encoder are considered in this work.
GCN:
Where $A^{\widetilde{\Phi_i}}=A^{\Phi_i}+I$
GAT:
After the meta-path representation, We need to aggregate the more general representations of the nodes.
The importance of each meta-path is calculated as:
The final representation $H$ is obtained by:
Averaging encoder function.
Pooling encoder function
Each node’s vector is independently fed through a fully connected layer. An elementwise max-pooling operator is applied to summary the information from the nodes set
Set2vec encoder function
Author randomly permutate of the node’s neighbors on an unordered set and feed to the LSTM
Mutual information based discriminator
Belghazi et al. proved that the KL-divergence admits the Donsker-Varadhan representation and the f-divergence representation as dual representations:
$\mathbb{P}_{xy}$ is the joint distribution and $\mathbb{P}_x\otimes \mathbb{P}_Y$ is the product of margins, $T_w$ is a deep neural network based discriminator.
Author estimate and maximize the mutual information by training an discriminator $D$ to distinguish positive sample set $Pos={[\vec{hn},\vec{s}]}^N{n=1}$ with negative sample set $Neg={[\vec{ \widetilde{hm}},\vec{s}]}^M{m=1}$.
The sample $(\vec{h_i},\vec{s})$ is the positive node belongs to graph, and $(\vec{ \widetilde{h_m}},\vec{s})$ is the generated fake node.
The discriminator $D$ is a bilinear layer:
Loss function:
Negative samples generator:
Keep the graph structure unchanged and shuffle the feature of each node in the graph.
The HDGI is highly depend on the initial feature $X$, when the $X$ is random initiated the performance of HDGI decreased dramatically.
Method | Classification (feat) | Classification (no feat) | Cluster (feat) | Cluster (no feat) | ||||
---|---|---|---|---|---|---|---|---|
Micro F1 | Macro F1 | Micro F1 | Macro F1 | NMI | ARI | NMI | ARI | |
HAN | 0.9329 | 0.9336 | 0.8547 | 0.8506 | 0.2691 | 0.2193 | 0.6305 | 0.6956 |
HGT | 0.8224 | 0.8175 | 0.8298 | 0.8265 | 0.4944 | 0.4782 | 0.4548 | 0.4104 |
HDGI-C | 0.8273 | 0.8156 | 0.4969 | 0.2246 | 0.0056 | 0.0038 | 0.0202 | 0.0530 |
To avoid redundant computations:减少冗余计算
HAGs are functionally equivalent to standard GNN-graphs:性能不变
An agnostic method:对所有模型都适用
对邻居上重合的的vector进行聚合,然后再传递。
把聚合的点和原来的点聚合,生成一张新图
如果是原图的属性,就用节点的隐藏向量
如果是聚合节点,就用聚合向量。
Existing GCNs mostly work on homogeneous graphs and consider a single embedding for each node, which do not sufficiently model the multi-facet nature and complex interaction of nodes in real world
networks. Here, author present a contextualized GCN engine by modeling the multipartite networks of target nodes and their intermediate context nodes that specify the contexts of their interactions.
Traditional GCN: The output of the $l+1$ th convolutional layer $\textbf{H}^{l+1}$ of GCN is computed as follows
GraphSage: Sample a fixed number of neighbors in each convolution layer and aggregate the neighborhood embedding.
Triplet-wise optimization objective based on max-margin ranking as follows
where $\delta$ is a margin parameter, $v_q$ and $v_p$ are the query and positive nodes, $v_n$ is the negative node sampled from $P_n(v_q)$
$\mathcal{T}$:The number of the nodes type in graph
$\mathcal{C}$:Context nodes set
Each $u\in\mathcal{N}_v\subset\mathcal{T}$ of the ego $v\in \mathcal{T}$ is associated with a dominant context node $o \sim(v,u)\in \mathcal{C}$
In this work, Author leverage the heterogeneity of real-world networks by separating nodes into two main types: target nodes and context nodes. Our main focus is to learn embeddings of the target nodes, while using the context nodes to describe the relationship between the target nodes.
Assumptions:
In (a), when three neighbor pins are aggregated through mean pooling, the resulting neighborhood embedding simply lies in the center of the three pins, reflecting the same influence of all neighbors on the ego. In contrast in (b), two neighbor pins are connected via the fashion board while the other one via the crafts board, thus drawing the neighborhood embedding more into the fashion direction. Such contextualization over the target interaction is desirable, since each neighbor is similar to the ego from a particular perspective, and thus should influence the ego embedding more in the corresponding subspace.
learns to project and transform raw node features via stacked dense neural networks as follows
$z_t$ and $z_c$ represent the embeddings of the target and the context nodes, respectively.
Contextual masking allows us to project different ego-neighbor pairs into various embedding subspaces,
so as to emphasize contextualized interaction among target node pairs regarding particular embedding dimensions at the feature level.
Element-wise multiplying the embedding of the context node $z_c (o)$ onto the embeddings of both ego and neighbor target nodes $z_t (v)$ and $z_t (u)$ as follows
Note that, since the last embedding layer of $z_c$ is ReLU, certain dimensions can be learned to be zero, which effectively “masks out” irrelevant dimensions, so as to project the target embeddings into particular subspaces directly controlled by the context embeddings
Autho also introduce:
where $\odot$ means the concatenation.
Author design a novel contextual attention mechanism to consider the overall impact of different neighbors of ego at the node level, by jointly computing an attention weight for each ego-context-neighbor triplet $\alpha (v,o,u)=$
where ${a,W{at},W{ac}}$ are the learnable attention parameters. $\tau$ is the LeakyReLU activation function.
To further improve the capacity and stability, we exploit multi-head attention to compute the aggregated contextualized embedding as follows:
Author directly add the contextualized ego embedding $z{N_v} (v)$ and neighbor embedding $z{N_v} (u) $as
the final MultiSage embedding $h(v)$.
Training loss:
sampling positive neighbor and negative neighbor $v_p,v_n$
这个加法是合理的,如果u,v是邻居,则$h_u$=$h_v$,那么乘积就会很大,如果不是邻居,则$h_u$ 不等于$h_v$乘积会小,则loss是会变大的。
由于每个游走序列会有多个中间节点,但是其实只是有一些中间节点是不重要的,于是对每个ego-target node pair只保留最重要的中间节点。
vis[v]:记录节点访问次数
ctx[v]:记录中间节点和target节点
dom[v]:记录不同中间节点的重要性
line 7: 对所有的访问过的context node 记录增加
line8-15:运行多次random walk,记录出现target node情况下,出现最多的contex node。
可以使用mask去获取不同的候选商品,因为mask会剔除一些不同的特征,可以让目标映射到不同的子
]]>Most existing HIN-based methods rely on explicit path reachability to leverage path-based semantic relatedness between users and items, e.g., metapath-based similarities. These methods are hard to use and integrate since path connections are sparse or noisy, and are often of different lengths.
现有的方法,依赖于物品和用户之间的语义构成的路径,比如metapath的相似度。这些方法在遇到路径很稀少、充满噪音或长度不一致时会导致表示能力的下降。
Other graph-based methods aim to learn effective heterogeneous network representations by compressing node together with its neighborhood information into single embedding before prediction. This weakly coupled manner in modeling overlooks the rich interactions
among nodes, which introduces an early summarization issue.
对于图卷积的方法来说,他们只学习了临近邻居的信息,并把他们聚合到一个向量中进行表示,这样很可能导致忽视了一些节点之间复杂的联系。
In this paper, author propose an end-to-end Neighborhood-based Interaction Model for Recommendation to address above problems.
Author first analyze the significance of learning interactions in HINs and then propose a novel formulation to capture the interactive patterns between each pair of nodes through their metapath-guided neighborhoods.
Then, to explore complex interactions between metapaths and deal with the learning complexity on large-scale networks, we formulate interaction in a convolutional way and learn efficiently with fast Fourier transform.
Recommendation:
HIN Graph:$\mathcal{G}=(\mathcal{V},\mathcal{E})$, which consists of more than one node type or link type.
Metapath-guided Neighborhood:Given an object $o$ and a metapath $ρ$ (start from $o$) in an HIN, the metapath guided neighborhood is defined as the set of all visited objects when the object $o$ walks along the given metapath $ρ$.
$\mathcal{N}_p^i(o)$ is the neighbors of object $o$ after $i$-th steps sampling.
$\mathcal{N}_p^0(o)=o$
$\mathcal{N}_p^{I-1}(o)=\mathcal{N}_p(o)$, $I$ is the length of metapath.
$H[\mathcal{N}p(o)]_l=[e^p_0\oplus e^p_1\oplus\cdots\oplus e^p{I-1}]$: The embedding matrix of metapath $\rho$
INPUT:
OUTPUT: Final prediction
Due to the heterogeneity of nodes, different types of nodes have different feature spaces. Hence, for each type of nodes with type $\phii$. Author design the type-specific transformation matrix $M{\phi_i}$ to project the features of different types of nodes into a unified feature space.
where $e_i$ and $e’_i$ are the original and projected features of node $i$.
Considering that neighbors in different distances to the source/target node usually contribute differently to the final prediction, author divide the sampled metapath-guided neighborhood into several innerdistance and outer-distance neighbor groups.
In order to compute the interactions in each neighbor group, author adopt the convolution method:
e.g. calculate the interaction between $u_A,m_B,d_B,m_D$ and $m_B,d_C,m_C,u_C$
Therefore, the above procedure can be written in convolution form:
By using the fast Fourier transformation (FFT) and $\mathcal{F}^{-1}$
After the interaction module, the author adopt the self-attention to learn the weight among various kinds of nodes in metapath $\rho$
where $h^{\rho}i,h^{\rho}_j$ are elements of interaction matrix $ H[\mathcal{N}{\rho}] $ and $W_T,W_S$ are trainable weights.
The attention value is calculated as bellow
The final result is calculated as:
Given a set of metapath $\rho0,\rho_1,\cdots,\rho{P-1}$, we get $Z[\mathcal{N{\rho_0)}}],Z[\mathcal{N{\rho1)}},\cdots,Z[\mathcal{N{\rho_{p-1})}}]$
For each metapath aggregate the information with soft attention.
Movielens: https://grouplens.org/datasets/movielens/
LastFM: https://grouplens.org/datasets/hetrec-2011/
HIRecCNN:Use CNN instead of the interaction module to fuse information around the neighbors.
HIRecGCN:Use GCN instead of the aggregation module to aggregate information from the graph.
说明增加metapath的对性能的影响
说明邻居长度对性能的影响。
]]>现有的STOA的GCN算法不能很好的将节点特征融合进拓扑结构当中。GCN在一些节点分类的任务中不能很好的融合深层的拓扑结构和节点特征。作者希望提出一种新的GCN结构,在能保持现有的GCN优点的情况下,同样能很好的融合拓扑结构和节点的特征。
把图拆成两部分,生成Topology Graph和Feature Graph。
Feature Graph是根据节点的特征采用KNN构成的新的图。
然后分为三个部分,上下两个部分用独立的参数训练,中间用共享参数训练
然后$Z{CT},Z{CF}$做个两个平均值生成$Z_C$
然后对$Z_T,Z_C,Z_F$做个一个attention生成最后的表示$Z$
$\mathcal{L}_c$相似约束
同时对Common Convolution 的两个输出,分别生成节点内部的相似度矩阵,然后希望两个Graph的相似度矩阵足够接近。
$\mathcal{L}_d$差异约束
虽然对于两个模型的$S$是相似的,但是对于两个模型的输出向量$Z$是不相似的,不然就没有学习的必要了。
$\mathcal{L}_t$分类loss
]]>对一个拥有多种节点重要性的图谱来说,如何去正确的估计他们每个节点重要性是一个很巨大的挑战。其中一个重要的问题就是如何从多种的不同的输入中有效的提取信息。针对这个问题,作者提出了一种隐向量模型,他可以从不同的信号中捕获节点的重要性。
以上图为例,针对一个电影的知识图谱来说,存在不同的种类的的节点,同时每个节点的信息可能拥有不同的属性。以不同的属性作为评价指标,其每个节点的重要性也是不一样的,并且不是每个节点都有全部的属性。这就导致了两个问题:
作者希望对所有节点学习到一个通用的属性重要性$z$,这样作者就可以对图中所有的节点进行一个统一的重要性表达。
$X\in \mathbb{R}^{|V|\times F}$
$z\in \mathbb{R}_{\geq 0}$,是一个非负的实数,代表图中每个节点的重要性。
$V’ \to \mathbb{R}_{\geq 0}(V’ \subseteq V)$,同样也是一个重要性,但是一个部分的映射,把一些具有相同属性节点映射到一个重要性空间。对一个数据源,可能有多种不同的signals,比如一本书可以有销售的数量,销售的金额,投票的数量等,所以对一本书的受欢迎的评价可能来自多个不同的方面。同样一些signal只对一些种类的节点有效,所以是一个部分映射。
在本文中,作者设定了$M$个不同的输入signals,${Si: V’_i\to \mathbb{R}{\geq 0}|V’_i \subseteq V,i=1,\dots, M}$
输入的signals有如下的性质:
我认为本文的目标方程的构建过程是本文最大的贡献点,理论推导严密,合理合规。
给定一个图和一个初始化的参数,目标是学习到一个表达:
为了优化方程$f$,其实就是最大化后验概率
根据贝叶斯理论就是,后验概率等于
证明如下:
$p(\theta)$,是先验参数分布,作者用了中值为0的高斯分布,
$p(\mathcal{G}|\theta)$是用来给定参数$\theta$来表达图的概率。给定一个节点,将其用函数$g(\cdot)$嵌入到低纬空间,然后用KG的triplet来表达图。公式如下:
这个公式得到的是每个triplet出现的概率。
$p(S|\mathcal{G},\theta)$是给定一个图和参数,每一个信号出现的概率,其假设学习出的参数,能拟合节点在所有signal里的重要性概率,用极大似然概率,得到如下公式:
其中$p(s^{(i)}_j)$是,节点在第$i$种signal里的重要性概率,其公式如下:
$p(z_j^{(i)})$则是我们学习到的重要性,其表示如下:
则我们最后得到的目标方程如下:
节点一开始用函数$g(x)$进行节点嵌入,然后通过$g’(g(x))$(全连接)转换到一维,然后另$h^0=g’(g(x))$
模型在message passing采用的是注意力的加权求和,类似GAT
最后对每个节点的表达作者是使用GENI的的中心平均化
最后得到每个重要性的表达向量$z$,注意$z_i$也只是一个值,因为一开始进行了转换。:
]]>现有的基于半监督的图神经网络算法,不能很好的学习到不同跳的邻居特征。本文提出了一种可以重复的表达不同距离的邻居用户特征的算法。
原始GCN不同层卷积都用相同的权重,不能捕获不同层的信息差异性,本文证明了对不同层采用不同的信息传递权重能捕获不同层之间的信息差异性。
这是一个在不同距离的节点特征之间收集特征的操作。一个模型能够学习到两跳的信息的前提是其存在一组参数和一个injective mapping $f$,可以使得网络的输出可以给定任何邻接矩阵$A$和特征$X$。
和传统GCN重复乘以A不同,本文在一次操作里乘多次A,一次性获得多跳的信息。并且和传统GCN的每层权重矩阵W相同不一样,这里每一跳都有各自的权重矩阵W。最后将其拼接起来。
通过构造$C{1,2}$来证明$W^$是任意两行都是相等的,从而证明$AW^$的rank为1,又证明$AW^*=f$,从而$f$不可能是injective(单射)的,因为任意两行相等,所以对多个不同的两行的$C{xy}$都产生相同的输出。
通过拼接操作,再加上合理构造的$W$,可以产生two-hop形式的函数。因此可以证明构造的方式是合理的,能捕获two-hop性质。
作者针对不同层的$W$,认为不同层的信息重要程度是不一样的,于是作者先用统一的特征维度n进行预训练。然后再训练完之后通过L2正则化,和阈值筛选出新的维度大小,然后再重新训练。通过这个操作,作者认为能表现出不同hop特征的重要程度(这难道不是一个attention就能解决的吗??)
]]>本文是本人基于哈尔滨工业大学生物信息学整个课程的复习提纲
生物学中对某些生物分子的整个集合进行的系统性研究
获取大样本-高通量侧学-数据分析-结果注释:生物验证
手机全世界的基因组原始测序数据
1983年起,收集全世界公开发表的DNA序列
收集基因表达谱数据,收集超过9.1w数据集
是研究生物数据管理、存储、检索、分析、挖掘、可视化的算法与系统,实现对生物数据的理解和利用的一个多学科交叉领域。
…
有生命和无生命
蛋白质:
核酸:
碱基:
serve as an indication to cellular mechanism that a gene is ahead
the strands of the gene but substituting U for T
spliced out from mRNA —>shortened mRNA leaves nucleus with
exons ( 外显子
NLM )发起成立。
局存储的专利序列并入 GenBank 管理,并与 EMBL 、 DDBJ(与 GenBank 并称世界三大生物序列信息数据库)实现数据资源的交换和共享。
DNA 序列;
三个子库
数量预判等的各种短读长序列;
脊椎动物( vert e brate )、 3 种后口动物( deuterostome )、 20 种昆虫(insect )、线虫 nematode )等众多动物,及病毒 virus )、酵母等微生物全基因组数据。
从物种的一些分子特性出发,从而了解物种之间的生物系统发生的关系。
DNA突变的模式:替代,插入,缺失,倒位;
核苷酸替代:转换(Transition) & 颠换(Transversion)
基因复制:多基因家族的产生以及伪基因的产生
的表达;
真核基因:编码区分为外显子和内含子,只有外显子能编码蛋白质;
同组合并,距离相加/2
19=(18+20)/2
类群)来检验两个物种A和B是否以相同的速率进
化。这一检验称为相对速率检验(relative-rate
test),其实几乎所有的分子钟检验比较的都是相
对速率而不是绝对速率。
按照中性理论,我们今天观察到的遗传变异——无论是种内多态性还是中间分歧,均不取决于自然选择所驱动的有利突变的固定,而是取决于那些事实上没有适合效应(即中性的)突变的随机固定。
这个理论认为在分子遗传学的层次上,基因的变化大多数是中性突变,也就是对生物个体的生殖与生存既没有好处也没有坏处的突变。由于中性突变并不受自然选择影响,而是由中性的突变基因的遗传漂变产生的,因此中性理论也曾被认为是与查尔斯·达尔文的自然选择论处于竞争状态。另外木村资生提出突然变异产生的蛋白质和原本的蛋白质之间没有适应性的差异时的突然变异则称为中立突然变异的理论
经典演化以形态特征为主:如被子植物的花:花瓣离生-花瓣合生
分子演化的特征:
不同位点上的氨基酸替代率相同,或即使不相同,平均替代速率也很小
一个特定的大分子(蛋白质或DNA)在所有演化谱系中具有恒定的演化速率
得到速率的关键:大分子(物种)的分歧时间
而使基因的表达产物增加。这类基因称为可诱导基因。
乳糖→利用乳糖的三种酶表达
阻遏表达(repression)是指在特定环境因素刺激下,基因被抑制,从而使基因的
表达产物减少。这类基因称为可阻遏基因。
在一定机制控制下,功能上相关的一组基因,无论其为何种表达方式,均需要协调一致,共同表达。
水平的变化,来判断它的功能,采用的分析方法有统计学中的假
设检验等。
以及协同调控等。多采用聚类分析等方法。
达数据。多采用反向工程的方法。
①内容: RNA-seq技术就是把mRNA切成许多长度介于
100bp~200bp的短片段,然后反转录合成cDNA,进行PCR扩增,利用高通量测序技术获得相关的基因表达信息。
②优势:有助于探索真核转录的复杂性,此外还提供了比其他方法更精确的转录水平及其亚型的测量方法。
1.RNA-Seq技术对没有已知参考基因组信息的非模式生物,也可测定转录信息;
2.RNA-Seq技术可以测定转录边界的精度达到一个碱基,RNA-Seq可以用来研究复杂的转录关系;
3.RNA-Seq可以同时测定序列的变异;
4.RNA-Seq背景信号很小,测定的动态范围很大。
Ø RNA-Seq在基因表达的定量上准确性很高;
Ø RNA-Seq在测定技术上和生物上重复性很高;
Ø RNA-Seq的测定需要很少的RNA样本。
Ø 在应用上RNA-Seq技术对ISOFORM的测定和等位基因的区分比芯片技术有很好的优势。
功能基因组学的主要任务之一是进行基因组功能注释(genome annotation),了解基因的功能,认识基因与疾病的关系,掌握基因的产物及其在生命活动中的作用等。
快速有效的基因注释对进一步识别基因,研究基因的表达调控机制,研究基因在生物体代谢途径中的地位,分析基因、基因产物之间的相互作用关系,预测和发现蛋白质功能,揭示生命的起源和进化等具有重要的意义。
基因本体数据库是GO组织(Gene Ontology Consortium)在2000年构建的一个结构化的标准生物学模型,旨在建立基因及其产物知识的标准词汇体系,涵盖了基因的细胞组分(cellular component)、分子功能(molecular function)、生物学过程(biological process)。
京都基因与基因组百科全书(Kyoto encyclopedia of genes and genomes, KEGG) 是系统分析基因功能、基因组信息的数据库,它整合了基因组学、生物化学以及系统功能组学的信息,有助于研究者把基因及表达信息作为一个整体网络进行研究。
根据基因在通路中的位置及表达水平的变化算出受影响显著的通路,从而预测未知的基因功能等。
通路分析是现在经常被使用的芯片数据基因功能分析法。与GO分类法(应用单个基因的GO分类信息)不同,通路分析法利用的资源是许多已经研究清楚的基因之间的相互作用,即生物学通路。研究者可以把表达发生变化的基因集导入通路分析软件中,进而得到变化的基因都存在于哪些已知通路中,并通过统计学方法计算哪些通路与基因表达的变化最为相关。
上调控多于30%的编码基因的表达。
最终激活细胞反应的过程。
由此得到了信号传导通路。
边介数:网络中所有最短路径中经过该边的路径的数目占最短路径总数的比例。
网络的直径是指网络中任意两个连通节点间距离的最大值。
C(k)连通度为k的节点聚类系数的平均值。
表观遗传学是研究不涉及DNA序列改变的情况下,DNA甲基化谱、染色质结构状态和基因表达谱在细胞代间传递的遗传现象的一门科学。
连锁分析
关联分析
本文是本人基于哈尔滨工业大学数据库系统整个课程的总结和复习提纲
绪论
2020年6月4日
9:15
· 相互关联关系的数据的集合
· Table中描述了一批互有关联关系的数据。
· 数据库(DB):Database:一组关联关系数据集合
· 数据库管理系统(DBMS):Database management system:管理数据的软件
· 数据库应用(DBAP):Data base Application:完成某一功能的应用
· 数据库管理员(DBA):Database Administrator:管理数据库的人
· 计算机基本系统
把数据库的构成实例化成各个具体的应用。
· 数据库定义:定义数据库中Table的名称、标题、标题内属性和属性值的要求
o DBMS提供DDL语言给用户定义数据库
o 用户使用DDL创建表格式
o DBMS解析DDL并执行
· 数据库执行:对表中数据库进行增删查改等操作
· 数据库控制:控制数据库数据的访问
o DBMS提供DCL语言给用户
o 用户使用DCL进行控制
o DBMS解析DCL
· 数据库维护:数据库转存,恢复,重组,性能监控
· DDL:用于定义数据格式
· DML:数据库内容操作
· DCL:数据库控制语言
· 数据库各种操作执行。
· 语言编译器
· 查询优化
· 数据存储与索引
· 通讯控制
· 事物控制
· 故障恢复
· 安全性控制
· 完整性控制
数据库系统的标准结构
2020年6月4日
10:46
· 外部层次(用户层次):某一个用户能看到和处理的数据,全局数据的某一个部分
· 概念层次(逻辑层次):从全局角度管理和理解数据
· 内部层次(物理层次):存储在介质上的数据,存储路径、方式、索引等。
· 对数据库中的数据进行一种结构性描述
· 所观察到的结构信息
· 某一种表现形式下的数据
外模式、外视图:用户所看到数据库的局部描述
概念模式、概念视图:从全局理解结构描述、关联约束
内模式、内视图:数据在介质上的结构描述,含有存储路径,存储方式,索引方式等。
· E-C Mapping**:**将外模式映射为概念模式,支持数据视图向外部视图转换,便于用户观察
· C-I Mapping**:**将概念模式映射成内模式,方便计算机的存储
逻辑数据独立性:当概念模式变化时,可以不改外部模式,只改EC mapping
物理数据独立性:当内部模式电话,可以不改概念模式,只改CI mapping
· 规定模式统一方式的模型
· 数据模型是对模式本身的抽象,模式是对数据本身结构形式的抽象
关系模型:所有的模式都可为抽象表的形式,而每一个具体的模式都拥有不同的列名的具体的表,这种表形式的数据有哪些操作和约束
模式:对数据的抽象
数据模型:对模式的抽象
· 关系模型:表的形式组织
· 层次模型:树的形式组织数据
· 网状模型:图的形式组织数据
第一代数据库:基于网状模型或者层次模型的数据库系
第二代数据库:基于关系模型的数据库系统
关系模型的简述
2020年6月4日
11:13
· 描述DB各种数据的节本结构形式
· 描述Table与Table之间可能发生的操作(关系运算)
· 秒后苏这些操作所应该遵循的约束条件(完整性约束)
· 基本结构
· 基本操作:并、差、乘积、选择、投影、交、连接、除
· 完整性约束:实体完整性、参照完整性、用户自定义的完整性
· 基于集合的运算,一次一个集合
域:定义列的取值范围。
· 一组值的集合,拥有相同数据类型
· 集合中元素的个数成为基数
笛卡尔积:
· 一组域可能构成的全部的元素组合
· 笛卡尔积的每一个元素称为一个元组
·
关系:
· 一组域的笛卡尔积的子集
· 笛卡尔积中具有某一方面意义的那些元组被称为一个关系
· 由于关系的不同列可能来自同一个域,为了区分需要为每一个列起一个名字,该名字则为属性名
关系模式:
n:关系的度
基数:关系中元组的数目
· 同一关系模式下可以由多种关系
· 关系模式是关系的结构,关系是关系模式某一个时刻的数据
· 关系模式是稳定的,而关系是某一个时刻的值,是随时间变化的
· 列是同质的:每一列的分量来自统一域,是同一类型的数据
· 不同的列可以来自同一个域,所以需要为每一个属性赋予不同的属性名
· 关系是以内容来区分的,而不是属性在关系的位置来区分:行列互换无关性
· 关系中不能有两个相同的元素,但是在现实应用中,Table可能不能完全遵守此特性。
· 属性不可再分特性
· 关系中的一个属性组,其值能唯一标识一个元组,若工该属性组中去掉任何一个属性,它就不具有这个性质了,这样的属性组成为候选码(候选键)
· 关系中可能有多组候选码:(name, address)
· 当有多个候选码时,可以选定一个作为主码
· DBMS以主码为主要线索管理关系总的各个元组
· 包含在任一候选码中的属性,被称为主属性,其他属性称为非主属性。
· 简单:候选码只包含一个属性
· 极端:所有属性构成主属性
· 关系R中的一个属性组,他不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键
· 主码完整性:关系主码中的属性值不能为空值
o DBMS的结构保证
· 参照完整性:如果关系R1的外码与关系R2的主码相对应,则R1中的每一个元组的Fk值都等于R2中某一个元组的Pk值或者空
o DBMS的结构保证
· 用户自定义完整性:用户根据具体环境定义的完整性约束
o DBMS的支持用户自定义约束
关系代数
2020年6月4日
14:48
基于集合,提供了一系列的关系代数操作:并、差、笛卡尔积(广义积)
集合操作:并、交、差、笛卡尔积
纯关系操作:投影、选择、连接、除
五种基本操作:并、差、广义积、选择、投影
· 关系R和关系S存在相容性,当且仅当两个关系的对应属性域相同
·
·
·
·
· 给定一个关系R,同时给定一个选择的条件condition,选择运算结果也是一个关系,他从关系R中选择出满足给定条件的元组构成。
·
·
· 如果投影之后出现重复的元组,要去掉
投影操作选的是列,选择操作选定是行
·
·
·
· t是关系R中的元组,s是关系S中的元组
· 属性A和属性B有可比性。
·
· 更名操作:自己和自己连接,用于需要在一个表上进行多个条件过滤操作的时候
·
· 关系R和关系S的笛卡尔积中选取相同属性B上值相等的元组构成
·
· 两个关系肯定有相同的属性组B,所以是一种特殊的等值连接。所有的相同属性都必须相等。
· 在结果中去掉重复的属性列。**(会消除冗余)**
· 检查是否涉及多个表,如果不涉及,则可以直接采用并、交、差、选择和投影
· 如果涉及多个表:
o 是否能使用自然连接
o 如果不能,则使用等值或者theta连接
o 如果还不能则使用广义笛卡尔积
· 连接完成之后,可以继续使用选择、投影等运算,即数据库的选投联操作
· 用于求解:查询。。。。全部的/所有的
· 给定关系R和关系S,如果可以进行关系R与关系S的除运算,当且仅当:属性集S是属性R的真子集。
·
·
·
·
· 两个关系R和S进行连接如果关系R或者S中的元组在另一个关系中找不到相匹配的元组,为了避免该元组信息丢失,从而将该元组与S或R中的假定存在的全为空值的元组进行连接,并放入关系结果中。
·
· 左外连接:自然连接+左侧失配
· 右外连接:自然连接+右侧失配
· 全外连接:自然连接+两侧表中失配的元组
关系模型演算
2020年6月5日
10:39
关系元组演算:以元组变量作为谓词变量的基本对象
关系域演算:是以域变量作为谓词变量的基本对象
上式表示:所有使谓词P为真的元组t的集合
· t是元组变量
·
· t[A]表示元组t的分量,即t在属性A上的值
· P是与谓词逻辑相等的公式,P(t)表示以元组t为变量的公式
·
·
·
·
·
·
·
· 公式只限于以上形式
·
·
·
·
·
·
·
域是某一列的取值范围,元组则是一个具体的关系行
元组是一行行的扫描,域是以列为单位,对每一个列进行扫描
元组演算是以元组为变量,以元组为基本单位,先找到元组,然后再找到元组分量,进行谓词判断。
示例元素P,表示输出的集合标志,可以用.X,.Y来进行其子集的过滤
\1. 关系代数是一种集合运算,是安全的
\2. 关系演算不一定是安全的
·
· DOM只是一个约束谓词的范围,不是最小集合。
·
·
·
· 关系代数—以集合为对象的操作,集合到集合
· 元组演算—以元组为对象的操作,取出关系的每一个元组进行验证
· 域演算—以域变量为对象的操作思维,取出域的每一个变量进行验证看是否满足条件
· 三种运算是等价的
· 三种运算都是非过程性的:域>元组>关系
· 三种运算都是抽象的,但都是衡量数据库语言的完备性的基础
SQL语言概述
2020年6月5日
16:11
· Create
· Alter
· Drop
· Insert
· Delete
· Update
· Select
· Grant
· Revoke
交互式SQL->嵌入式SQL->动态SQL
理解查询需求->用SQL精确表示
Create database database name
Create table 表名(列名 数据类型 [Primary key|Unique] [Not null] [, 列名 数据类型 [Not null]])
· Primary Key:主键约束,一个表稚嫩给一个
· Unique:候选键约束,可以有多个
· Not null:非空约束,不允许为空
数据类型:
Insert into 表名[(列名 [, 列名]…]
Values (值, [, 值],…)
Select 列名 [[, 列名]..]
from 表名
[where 条件
唯一性:
通过关键词DISTINCT保证结果的唯一性
排序问题:
使用order by 列名 [asc|desc]
模糊查询:
列名 [not] like “字符串”
· % 匹配零个或者多个字符
· _ 匹配单个字符
· \ 转义符
多表笛卡尔积
Select 列名 [[,列名]..]
From 表名1,表名2
Where 检索条件;
重名处理:
select 列名 as 列别名 [[, 列名 as 列别名]…]
from 表名 as 表别名1, 表名2 as 表别名2
Where 检索条件。
Insert into 表名[(列名 [, 列名]…]
子查询
Delete from 表名 [where 条件]
Update 表名
Set 列名=表达式| (子查询)
[[, 列名=表达式|子查询]]
[where 条件表达式]
Alter table tablename
[add {column datatype}]
[drop {约束}]
[modify {column datatype, ….]
Drop table 表名
Drop database 数据库名
SQL复杂查询
2020年6月8日
11:30
表达式 [not] in (子查询)
非相关子查询:内层查询和外层查询独立
相关子查询:内层查询需要外层查询的变量
表示与“某一个”比较还是“所有”比较
与Not in等价的是<> all
[not] Exists (子查询)
子查询结果中有无元组存在
Select from where语句中,select子句后面不仅可以是列名,也可以是一些计算表达式或者聚集函数。
使用计算表达式作为一列
聚集函数:
SQL提供了五个作用在简单列值集合上的内置聚集函数,分别是:
COUNT、SUM、AVG、MAX、MIN
SQL可以将检索到的元组按照某一条件进行分类,具有相同条件值的元组划分到一个组合
或一个集合中。
Group by (…)
分组过滤:
若要对集合进行分组条件过滤,即满足条件的集合、分组留下,不满足的去掉。
Having 子句,又称为分组过滤子句,需要group by子句的支持。
对分组检查用Having子句,对每一行检查用where子句
(子查询) {union [ALL]| intersect [ALL] | exccept [ALL] 子查询}
默认自动删除重复元组,若要保留重复元组,则要带ALL
空值的检测: is [not] null
测试指定的列是否是空值。
· 空值不满足除了 is [not] null 之外任何查找条件
· 如果null 参与算数运算,则该算数表达式的值为null
· 如果null 参与比较运算,则结果可以视false
· 如果null参与聚集运算,那么除了count(*)之外的其他聚集函数都忽略null
连接类型:
· Inner join:
· Left outer join
· Right outer join
· Full outer join
连接条件:
· Natural:自然连接
· On <连接条件>:theta连接,满足on的的条件
· Using (col_1,col_2,… col_n):col1-coln是两个连接关系的公共属性的子集,元组在col1-coln上的取值相等,且col1-coln只出现一次。
对应概念模式的数据在SQL中被称为基本表(Table),而对应外模式的数据被称为视图(view),视图不仅包含外模式,而且包含其E-C映像。
Create view view_name [(列名 [, 列名]…)]
as 子查询 [with check option]
使用视图:
定义好视图,可以像table一样,在SQL各种语句中使用
视图的更新:
视图不保存数据,所以对视图的更新最终都要反映到对基本表的更新上,而有时视图的定义是不可逆的,比如使用聚集函数
· 包含聚集函数,不能更新
· 使用unique,distinct不能更新
· 使用group by 不能更新
· 使用计算表达式,不能更新
· 视图由单个表构成,但没有主键,不能更新
数据库完整性的概念及分类
2020年6月8日
16:37
是指DBMS应保证DB在任何情况下的正确性、有效性和一致性
· 广义完整性:语义完整性、并发控制、安全控制、DB故障恢复
· 狭义完整性:语义完整性、DBMS通常有专门的完整性管理机制与程序来处理语义完整性问题。
· 实体完整性
· 参照完整性
· 用户自定义完整性
O: 数据集合,约束的对象
P: 谓词条件,什么样的约束
A: 触发条件,什么时候检查
R: 响应动作,不满足的情况怎么办。
· 域完整性约束条件
o 施加在某一列上,对给定列上所有要更新的某一后选值是否可以接受进行约束条件判断
· 关系完整性约束条件
o 施加在Table上,对给定的table上所有要更新的某一候选元组是否可以接受进行约束条件判断,或者是对一个关系中的若干元组和另一个关系中的若干元组之间的联系进行约束条件判断。
· 结构约束:
o 来自于模型的约束,比如函数依赖约束,主键约束,外键约束
· 内容约束:
o 来自于用户的约束,如用户自定义完整性,关心元组或属性的取值范围。
· 静态约束:
o 要求DB在任一时刻都应该满足约束
· 动态约束
o 要求DB从一个状态到另一状态时满足的约束
· 静态约束:
o 列完整性:域完整性
o 表完整性:关系完整性约束
· 动态约束:
o 触发器
check**中的条件可以是select-From-Where内任何的Where 后的语句,包含子查询**
列约束只涉及到一列,表约束涉及到多个列
· 断言是一个谓词表达式,它表达了希望数据库总能满足的条件
· 表约束和列约束就是一些特殊的断言
Create assertion
· 当一个断言创建后,系统将检查其有效性,并且在每一个更新中测试更新是否违反该断言。
· 当某一事件发生的时候,对该事件产生的结果,检查条件,如果满足条件,则执行后面的程序段,条件或程序段中引用的变量可用coor_name_def
事件:Before| After {Insert|UPdate|Delete}
· 当一个事件发生之前或之后,after触发
· 操作发生,执行触发器操作需要处理的组值,更新之前或更新之后的值,这两个值由corr_name_def的使用来区分
Corr_name_def的定义:
· 私人信息保护
· 信息公开和非公开
· 最小数据访问策略
· 数据安全级别
· 数据库系统的安全级别
· 自主安全性控制:存取控制
o 权限在用户之间传递,使用户自主管理数据库安全性
· 强制安全性:
o 对用户进行强制分类,使得不同类别用户能够访问不同类别的数据
· 推断控制机制
o 防止通过历史信息,推断出不该被知道的信息
o 防止通过公开信息推断出私密信息
· 数据加密存储机制
· 自主安全性是通过授权机制来实现的
· DBMS允许用户自定义一些安全性控制规则
· 当有DB访问操作时,DBMS自动按照安全性控制规则进行检查,检查通过则允许访问,不通过则不允许。
AccessRule ::= (S, O, t, P)
· S: 请求主体
· O:访问对象
· t:访问权利
· P:谓词,
理解:S这个用户,对O这个访问对象,在P这个条件下,拥有t这个权利。
1. 存储矩阵:
2. 视图:
· 通过视图,可以限制用户对于关系中某些数据项的存取
· 通过视图,可以将数据访问对象与谓词结合起来,限制用户对关系中某些元组的存取。
· 在视图定义之后便成为了一个新的数据对象
· 视图可以定义条件P。
\1. select:读
\2. Modify:更新
\3. Create:创建
Grant {all PRIVILEGES| privilege, {privilege…}}
On [TABLE] tablename | viewname
To {public |user-id {, user-id…}}
[with GRANT Option]
· User-id: 用户账号,由DBA创建的合法账户
· Public:允许所有有效用户使用授权的权利
· Privilege:
· SELECT| INSERT| UPDATE| DELETE| ALL PRIVILEDGES
· Revoke {all privileges | priv {, priv}} on tablename |viewname FROM {public |user {, user…}}
· 水平传播:授权者再授权
· 垂直传播:授权者传播给被授权者,再传播给另一个被授权用户
如果用户从多个用户处获得授权,则当其中某一个用户被收回权利时,该用户可能还存在其他用户授予的权利。
· 强制安全性通过对数据对象进行安全性分级
· 从而实现不同级别用户访问不同级别数据的一种机制
· 用户s不能读取数据对象O,除非Level(S) >= Level(O)
· 用户s不能写数据对象,除非Level(S) <= Level(O) :高级别用户不允许改低级别数据,如果高级别用户进行修改了,低级别用户就无法读取了。
关系中的每一个元组都带有安全性的分级
嵌入式SQL语言
2020年6月16日
8:51
以下嵌入式SQL以C语言为例
Exec sql select Sname, Sage into :vSname, :vSage from Student where Sname=:specName
Exec sql connect to target-server as connect-name user user-name
Exec sql disconnect connect-name
Exec sql commit work
Exec sql rollback work
是一个存取或者改变数据库内容的程序的一次执行,或者说一条或多条SQL语句的一次执行被看作是一个事务。
Begin Transaction
Exec sql
….
Exec sql commit work | exec sql rollback work
End Transaction
一个事务的结束是需要程序员通过commit或rollback确认。
· 原子特性Atomicity:DBMS能够保证事务的一组更新操作是原子不可分的,对DB而言,要么全做,要么全不做
· 一致性Consistency:DBMS保证事务的操作状态是正确的,符合一致性操作规则
· 隔离性Isolation:DBMS保证并发执行的多个事务之间互相不受影响,例如事务T1和T2即使并发执行,也相当于或者先执行了T1再执行了T2,或者反之
· 持久性Durability:DBMS保证已经提交事务的影响是持久的,被撤销事务的影响是可恢复的。
具有ACID特性的若干数据库基本操作的组合被称为事务。
单行结果可以直接将结果传送到宿主变量中
多行结果,则需要使用游标Cursor
· 游标是指向某检索记录集的指针
· 通过移动指针,每次读一行,处理一行,再读一行,直至处理完毕。
游标需要先定义再使用,接着一条条处理,最后再关闭
Exec sql declare cur_student cursor for
Select Sno, Sname, Sclass from Student where Sclass=’035101’
Exec sql open cur_sutdent
Exec sql fetch cur_student into :vSno, :vSname, :vSclass
游标可以定义一次,多次打开,多次关闭。
在fetch的时候可以自定义移动的行。
Exec SQL DELETE FROM tablename [corr_name] where search_condition | Where current of cursor_name
· 设置SQL通信区
· 设置状态捕获语句
· 状态处理语句
· SQLCA是被声明的C语言结果形式的内存区,用于和SQL进行数据交互
状态捕获语句:
Exec sql whenever condition action
Whenever 是一个条件陷阱,该条语句会对后面所有由Exec SQL语句所引起的对数据库系统调用自动检查他是否满足条件condition
· SQLERROR:检查是否有SQL语句出错
· NOTFOUND:执行某一SQL语句后,没有相应的结果记录出现
· SQLWARNING:不是错误,但是要引起注意
如果满足condition,则要进行一些动作:
· CONTINUE:忽略条件或错误,继续执行
· GOTO标号:转移到标号所指示的语句,去进行相应的处理
· STOP:终止程序运行,撤销当前的工作、断开数据库的连接
· DO函数、CALL函数:调用宿主程序的函数进行处理,函数返回后从引发该condition exec SQL语句之后的语句继续执行。
状态捕获的Whenever的作用范围是其后的所有Exec SQL语句,一直到程序中出现另一条相同条件的Whenever语句为止,后面的将覆盖前面的
动态SQL
2020年6月16日
11:03
动态SQL特点:SQL语句可以在程序中动态构造,形成一个字符串,如上例的sqltext,然后再交给DBMS执行,交给DBMS执行时仍旧可以传递变量。
· 立即执行语句:
o Exec sql execute immediate :host-variable;
· Prepare-Execute-Using语句:
o Prepare语句先编译,编译后的SQL语句运行动态参数,EXECUTE语句,用USING语句将动态参数值传递给编译好的SQL语句
o EXEC SQL PREPARE sql_temp FROM :host-variable
o EXEC SQL EXECUTE sql_temp USING :cond-variable
·
· 是系统的一些表或者视图的集合,这些表或视图存储了数据库中各类对象的定义信息,这些对象包括用Create定义的表、列、索引、视图、权限、约束等,这些信息又称为数据库的元数据—关于数据的数据
数据字典的内容构成:information_schema?
· 数据字典常存储的是数据库和表的元数据,即模式本身的信息
o 与关系相关的信息
· 关系名字
· 每一个关系的属性名及其类型
· 视图的名字及其定义
· 完整性约束
o 账户信息
o 统计与描述的信息
o 物理文件组织信息
· 关系如何存储
· 关系的物理位置
数据字典的结构:
模式的含义:
· 模式指的是某一用户所设计和使用的表、索引和其他与数据库有关对象的集合,因此完整的表名应该是:模式名:表名,这样可以做到允许不同用户使用相同的表名而不会混淆。
SQLDA**:**
· 是一个描述符区域,是一个内存数据结构,内科装载关系模式的定义信息,如列的数目,每一列的名字和类型等等。
· 通过读取SQLDA信息可以进行更为复杂的动态SQL的处理。
· 不同的DBMS提供的SQLDA格式并不是一致的。
ODBC**:**
· 是一种标准的,不同的应用程序与不同数据库服务器之间通讯的标准。
· 应用程序调用ODBCAPI时,ODBC API会调用具体的DBMS Driver库函数,交由DBMS Driver库函数则与数据库服务器通讯,执行相应的请求动作,并返回检索结果。
JDBC**:**
· Java版本的ODBC
数据建模与数据库设计
2020年6月16日
16:33
· 数据模型:数据的存储模型,存储于计算机中
· 概念模型:抽象模型,独立与计算机系统,E-R模型,O-O模型
数据建模就是抽象:理解-区分-命名-表达
· 世界是由一组对象实体和这些对象之间关系构成。
· 实体:客观存在并可相互区分的事物
· 实体有类和个体的概念(实体的型,实例)
实体用属性来刻画:
· 属性:实体具有的某一方面特性
实例用值来刻画:
· 每一个实例都有具体的值
· 实体能够用其值唯一区分开每个实例的属性或属性组合。
· 指的是一个实体实例和其他实体实例之间所可能发生的联系。
· 参与发生联系的实体数目
一元联系:联系在同一个实体中产生
· 实体在联系中的作用称为实体的角色
· 当同一实体的不同实例参与一个联系时,为区分各个实例参与联系的方式
· 一对一:实体A只能和实体B一个实例产生关系。
· 一对多:实体A能和实体B多个实例发生关系。
· 多对多:实体A能和实体B的多个实例发生联系。
· 实体实例之间的联系数量,即一个实体的实例通过一个联系能与另一个实体中相关联的实例的数目。
· (1:1),(1:m),(m:n)几种情况
· 实体之间的联系常采用最小基数和最大基数来表示(MinCard…MaxCard)
·
· 完全参与联系:最小基数为1
· 部分参与联系:最小基数为0,可能不产生联系。
· 实体:矩形框
· 属性:椭圆
o 多值属性:双线椭圆
o 导出属性:虚线椭圆
· 关键字:下划线
· 连接实体和属性:直线
· 联系:菱形框
· 连接实体与联系:直线
· 连接联系和属性:直线
· 复合关键字:标有相同数字
· 多组关键字:标有不同数字
· 1:1联系:箭头直线,由联系指向实体
· 1:m联系:指向1端为箭头直线,指向多端为无箭头直线
· m:n联系:无箭头直线
· 完全参与联系:双直线
· 部分参与联系:单直线
· 也可用直线边上标记数字来表示
\1. 理解需求,寻找实体:
a. 能用一个个、一件件、一串串等叠词形容的,而不是一个、一件
\2. 用属性刻画每一个实体
a. 至少给出重要的属性
\3. 确定每一个实体的关键字/码
\4. 数据建模的重点是分析实体之间的联系
\5. 检查是否覆盖了需求
· 实体:矩形框
· 属性:实体框的横线下面
· 关键字:属性下加下划线
· 联系:菱形框,也可以省略只用关系名表示
· 基数表示:
· 现实世界-信息世界-计算机世界
· 现实-观念-实现
· 型:对一系列值的抽象
· 型与型的型:将可无限拓展的内容,或内容暂无法枚举的情况,抽象为可有限描述的概念
· 类似的概念:
o 模式:数据
o 数据模型:模式
o 模式:实例
o 类:对象
o 实体:实例
· 不同范围的人对现实事物的描述和抽象可能是不同的
· 数据模型是一组相互关联且严格定义的概念集合
· 表达计算机世界的模型成为数据模型,表达信息世界的模型称概念数据模型,简称概念模型。
· 模型与元模型,模型(型)与实例(值)
IDEF1x数据建模方法
2020年6月17日
9:22
IDEF又可以被看成是一个特殊的E-R图表示方法。
· 实体:
o 独立实体-强实体
o 从属实体-若实体
· 联系:
o 可标定连接联系
o 非标定连接联系
o 分类联系
o 非确定联系
· 属性:
o 属性
o 主码
o 候选码
o 外来码
· 一个实体的实例都被唯一的标识而不决定于它与其他实体的联系
· 一个实体的实例的唯一标识需要依赖于该实体与其他实体的联系
· 从属实体需要从其他实体继承属性作为关键字的一部分。
· 主关键字包含了外来属性的实体为从属实体。
· 独立实体:直角方形框,从属实体:圆角方形框。
· 独立实体没有外键,从属实体有外键。
· 表示一类现实或抽象是服务的一种特征或性质
关键字:能够唯一确定实体的每一个实例的关键字。
外来关键字:是其他实体的关键字
· 存在一个联系,只能有一个外来关键字
· 被继承属性只能是主关键字所包含的属性
· 标定联系:子实体的实例都是由它与父实体的联系而确定的,父实体的主关键字是子实体主关键字的一部分。(1对多)
· 非标定联系:子实体的实例能够被唯一标识而无需依赖与其实体的联系,父实体的主关键字不是子实体的主关键字。(一对多)
· 非确定联系:实体之间的多对多联系
o 非确定联系是通过引入相交实体来进行
· 分类联系:一个实体实例是由一个一般实体和多个分类实体实例构成的(有点类似对象继承的感觉)
· 具体化:
o 实体的实例集中,某些实例子集具有区别于该实例集内其他实例的特性,可以根据这些差异特性对该实例集进行分组、分类。
· 泛化:
o 若干个实体,具有共有的性质,可以合成一个较高层次的实体。
· 具体化和泛化的表示:
o 具体化和泛化在E-R图中用标记为ISA的三角形来表示
· 完全分类:一个父类只能是子类的一种
· 非完全分类联系:子类分类不一定是全部的父类可能性
需求分析
2020年6月17日
14:32
· E-R图的实体转换为关系
· E-R图的属性转为关系的属性
· E-R图的关键字转换为关系的关键字
· 将分量属性作为符合属性所在实体的属性
· 将符合属性本身作为所在实体的属性
· 将多值属性与所在实体的关键字一起组成一个新的关系
· 一对一联系:
o 若联系的双方均部分参与(0…1),则将联系定义为一个新的属性,属性为参与双方的关键字属性
o 若联系一方全部参与(1…1),则将联系另一方的关键字作为全部参与另一方的属性
· 一对多联系:
o 将单方参与实体的关键字作为多方参与实体对应关系的属性
· 多对多联系:
o 将联系定义为新的关系,属性作为参与双方实体的关键字
· 所对应关系的关键字由弱实体本身的区分属性再加上所依赖的强实体的关键字构成
· 弱实体(从属实体)与强实体(独立实体)之间的联系已经在弱实体集所对应的关系中表现出来了
· 高层实体和底层实体分辨转为不同的关系。
· 底层实体所对应的关系包含高层实体的关键字。
· 如果泛化实例是具体化的实体实例的全部,即对每一个高层实体实例至少属于一个低层实体,则可以不为高层实体建立关系,但低层实体所对应的关系应包含上层实体的所有属性。
· 多元联系可以通过继承参与联系的各个实体的关键字而形成新的关系
· 也可新增一个区分属性作为关键字
· 多元联系需要分析参与联系的实体的最小基数和最大基数
· 是否允许参与联系的多实体中有一个或多个实体不参与
· IDEF1X图只需要将实体转换成关系模式即可,而其联系的信息已经融入相关实体的关系描述中了
· 对IDEF1x图的分类联系,可以如E-R图的泛化和具体化一样进行相关的处理
· 对IDEF1X图的复合属性和多值属性,则如前面一样相关处理
需要分析数据库设计中的属性依存关系
数据库设计理论:
· 函数依赖理论
· 关系范式理论
· 模式分解理论
函数依赖
2020年6月17日
16:33
·
·
·
否则称为部分函数依赖于x,记为
(如果有不需要的关键字,那就是部分函数依赖)
设K为R(U)的属性或属性组合,若
则称K为R(U)上的候选键。
· 唯一性:
· 最小性:
· 任一候选键都可以作为R的主键
· 包含任意候选键中的属性称为主属性,其他属性称为非主属性。
·
若R(U)中的属性或属性组合X并非R的候选键,但是X却是另一关系的候选键,则称X为R的外来键
· 小集合,大闭包
· 包含了平凡的函数依赖
设R(U)是属性集U={A1, A2,…,An}上的一个关系模式,F为R(U)的一组函数依赖,记为R(U,F)
·
·
·
·
·
·
证明两个函数依赖集相等,其实等价于求这两者的属性闭包相等
每个函数依赖集F可被一个其右端至多有一个属性的函数依赖集G覆盖
若F满足以下条件,则称F为最小覆盖或者最小依赖集
\1. F中每一个函数依赖的右部是单个属性
\2.
\3.
最小函数依赖集的求解
一、定义
最小函数依赖集也称为极小函数依赖集、最小覆盖;如果函数依赖集 F\ 满足下列条件,则称 F\ 为一个最小依赖集。
1.\ F\ 中任意函数依赖的右部仅含有一个属性
2.\ F\ 中不存在这样的函数依赖X**→**A,使得 F\ 与 F\ - {X**→**A}等价,即 F\ 中的函数依赖均不能由 F 中其他函数依赖导出
3.\ F\ 中不存在这样的函数依赖X**→A,**X有真子集 Z 使得 F\ - {X**→**A} ∪ {Z**→**A}与 F\ 等价,即 F\ 中各函数依赖左部均为最小属性集(不存在冗余属性)
二、算法步骤:
· 将 F\ 中的所有函数依赖的右边化为单一属性
· 去掉 F\ 中的所有函数依赖左边的冗余属性(只针对F\中左部不是单一属性的函数依赖)
· 去掉 F\ 中的所有冗余的函数依赖
三、例子说明
假设R ,**U = ABCD**,函数依赖集F**={A→BD,AB→C,C→D},求:*F*** 最小函数依赖集
第一步:将F\中的所有函数依赖的右边化为单一属性:
因为F\ = {A**→BD,AB→C,C→**D},函数依赖右边化为单一属性得:F\ = {A**→B,A→D,AB→C,C→**D};
第二步:去掉F\中的所有函数依赖左边的冗余属性(只针对F中左部不是单一属性的函数依赖)
F={A**→B,A→D,AB→C,C→**D}中只有函数依赖AB**→**C左部不是单一属性,所以要对其进行去掉左边冗余属性的处理:
\1. 先看A是不是冗余属性:因为BF+ ={ B }不包含A**,所以A属性不冗余 //这里应该注意的是,要看哪一个属性是否是冗余属性,则求该函数依赖左部除要查看的属性外的其他属性的集关于 *F*** 的闭包是否包含要查看属性
\2. 再看B是不是冗余属性:因为AF+ ={A**,B,C,**D} 包含的B,所以B属性冗余
因此只将函数依赖AB**→**C左部B属性去掉,所以F={A**→B,A→D,A→C,C→**D}。
第三步:去掉 F\ 中的所有冗余的函数依赖
依据引理:设F\为属性集U上的一组函数依赖,X,Y ⊆ U**,X→**Y 能由 F\ 根据Armstrong公理导出的充分必要条件是Y**⊆ XF+ 。即判断 *F* 中一个函数依赖X→Y是否冗余,则只需要判定 Y 是否为的XF+** 子集。
因为有F**={A→B,A→D,A→C,C→D}**:
\1. 先看判断函数依赖A**→**D是否冗余,则把函数依赖A**→**D从F**={A→B,A→D,A→C,C→D}中去掉后得*F*={A→B,A→C,C→**D},求得AF+ = { A**,B,C,**D} 包含了D,所以为函数依赖A**→**D冗余,所以应该从F**={A→B,A→D,A→C,C→D}中去掉函数依赖A→D,得*F*={A→B,A→C,C→**D}
\2. 再从F**={A→B,A→C,C→D}依次判断每一个函数依赖是否冗余,直至所有冗余的函数依赖都被消除。本例子中经过第1步后已消除 *F* 中的所有冗余函数依赖了,因此原*F*={A→BD,AB→C,C→**D}的最小函数依赖集为 F\ ={A**→B,A→C,C→**D}。
注意点:
1.\ F**的最小依赖集*F* m 不一定是唯一的,它与对个函数依赖**FDi 及**X→A中个属性的处置的顺序有关。在本例子中在去掉F中的冗余的函数依赖时(绿色字体那一步)若不是首先判断A→D**是否冗余,而是首先判断其它函数依赖是否冗余,那么所得的最小函数依赖就可能不同了
2. 要搞清楚在判断一个函数依赖**X→A是否为冗余时,是求X**关于上一步所求得的新的函数依赖集 F\ 的闭包**XF+ ,然后在判断A是否包含在该**XF+
求最小函数依赖集分三步**:**
1.将F中的所有依赖右边化为单一元素
此题fd={abd->e,ab->g,b->f,c->j,cj->i,g->h};已经满足
2.去掉F中的所有依赖左边的冗余属性.
作法是属性中去掉其中的一个,看看是否依然可以推导
此题:abd->e,去掉a,则(bd)+不含e,故不能去掉,同理b,d都不是冗余属性
ab->g,也没有
cj->i,因为c+={c,j,i}其中包含i所以j是冗余的.cj->i将成为c->i
F={abd->e,ab->g,b->f,c->j,c->i,g->h};
3.去掉F中所有冗余依赖关系.
做法为从F中去掉某关系,如去掉(X->Y),然后在F中求X+,如果Y在X+中,则表明x->是多余的.需要去掉.
此题如果F去掉abd->e,F将等于{ab->g,b->f,c->j,c->i,g->h},而(abd)+={a,d,b,f,g,h},其中不包含e.所有不是多余的.
同理(ab)+={a,b,f}也不包含g,故不是多余的.
b+={b}不多余,c+={c,i}不多余
c->i,g->h多不能去掉.
所以所求最小函数依赖集为 F={abd->e,ab->g,b->f,c->j,c->i,g->h};
来自 [*https://www.cnblogs.com/wangyige/p/6786047.html*](https://www.cnblogs.com/wangyige/p/6786047.html)
关系范数
2020年6月19日
15:19
不符合1NF的处理:
· 将1NF转换为1NF
· 引入新的数据模型处理:面向对象的数据模型
第二范式消除了非主属性对候选键的部分依赖
判断模式是否属于第二范式:
\1. 找出候选键和非主属性
\2. 判断是否存在部分依赖
第三范式没有传递函数依赖
第三范式消除了非主属性的传递依赖
判断模式是否属于第三范式:
\1. 找到候选键
\2. 有无传递依赖
\3. 有无部分依赖
关系模式满足第三范式则一定能满足第二范式。
将关系模式分解成3NF:
分解规则:
将每一个函数依赖单独组成一个关系。
模式上的所有函数依赖都含有候选键,没有不依赖于候选键的函数依赖
满足BCNF的一定满足第三范式,不满足第三范式的一定不满足BCNF
关系模式分解成BCNF:
对于元组t,s,交换属性Y之后,仍然会出现在关系中
多值依赖的特性:
当一个表中的非主属性互相独立时(3NF),这些非主属性不应该有多值。若有多值就违反了第四范式。定义比较抽象,可以参照下面的例子理解。
第四范式消除了非主属性对候选键以外属性的多值依赖,如果有多值依赖则一定依赖于候选键。
模式分解
2020年6月19日
20:02
· R与p在数据内容方面是否等价:分解的无损连接性
· R与p在数据依赖方面是否等价:分解的保持依赖性
有损连接
大的关系模式分解成小的关系分解,在小的关系模式进行连接的情况下查询是相等的。
简单判定定理:
· 无损连接分解的无损分解仍然是无损分解
· 无损连接分解加上一个分解仍然是无损连接分解
· 保持依赖的分解可能不是无损连接的。
· 无损连接的分解可能不是保持依赖的。
如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这是一个充分条件)。
如果上述判断失败,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进一步判断。
该方法的表述如下:
算法二:
对F上的每一个α→β使用下面的过程:
result:=α;
while(result发生变化)do
for each 分解后的Ri
t=(result∩Ri)+ ∩Ri
result=result∪t
这里的属性闭包是在函数依赖集F下计算出来的。如果result中包含了β的所有属性,则函数依赖α→β。分解是保持依赖的当且仅当上述过程中F的所有依赖都被保持。
下面给出一个例题,2006年5月系分上午43题:
●设关系模式R,其中U={A, B, C, D, E},F={A→BC,C→D,BC→E,E→A},则分解ρ={R1(ABCE),R2(CD)}满足 (43) 。
(43) A.具有无损连接性、保持函数依赖
B.不具有无损连接性、保持函数依赖
C.具有无损连接性、不保持函数依赖
D.不具有无损连接性、不保持函数依赖
先做无损链接的判断。R1∩R2={C},计算C+。
Result=C
由于C→D,C∈result,所以result=result∪D=CD
可见C是R2的超码,该分解是一个无损分解。
再做保持依赖的判断。
A→BC,BC→E, E→A都在R1上成立(也就是说每一个函数依赖左右两边的属性都在R1中),C→D在R2上成立,因此给分解是保持依赖的。
选A。
再看一个复杂点的例题。2007年5月数工40-41题。
●给定关系模式R,U={A, B, C, D, E},F={B→A,D→A,A→E,AC→B},其候选关键字为
(40) ,则分解ρ={R1(ABCE),R2(CD)}满足 (41) 。
(40) A.ABD
B.ABE
C.ACD
D.CD
(41) A.具有无损连接性、保持函数依赖
B.不具有无损连接性、保持函数依赖
C.具有无损连接性、不保持函数依赖
D.不具有无损连接性、不保持函数依赖
看见了吧,和前面一题多么的相像!
对于第一问,分别计算ABCD四个选项的闭包,
(ABD)+ = { ABDE }
(ABE)+ = { ABE }
(ACD)+ = { ABCDE }
(CD)+ = { ABCDE }
选D。
再看第二问。
先做无损链接的判断。R1∩R2={C},计算C+。
result=C
因此C既不是R1也不是R2的超码,该分解不具有无损分解性。
再做保持依赖的判断。
B→A,A→E,AC→B在R1上成立,D→A在R1和R2上都不成立,因此需做进一步判断。
由于B→A,A→E,AC→B都是被保持的(因为它们的元素都在R1中),因此我们要判断的是D→A是不是也被保持。
对于D→A应用算法二:
result=D
对R1,result∩R1=ф(空集,找不到空集的符号,就用这个表示吧),t=ф,result=D
再对R2,result∩R2=D,D+ =ADE ,t=D+ ∩R2=D,result=D
一个循环后result未发生变化,因此最后result=D,并未包含A,所以D→A未被保持,该分解不是保持依赖的。
选D。
· 左端属性必须是某一个关系模式的属性。
· 求关于G的属性闭包结果属性也必须是此关系模式的属性。
分解规则:
· 将左侧不含候选键的函数依赖单独组成一个关系,将包含候选键的组成一关系
分解规则:
· 将每一个函数依赖单独组成一个关系
· 多值依赖是连接依赖的特例, 2-JD多值依赖
第五范式消除了不按候选键连接的连接依赖,(R的无损连接分解中各个模式必有一个候选键),但其语义背景抽象。
数据库的存储体系
2020年6月20日
15:35
· 将不同性价比的存储器组织在一起,满足高速度、大容量、低价格的需求
· CPU与内存直接交换信息,按存储单元进行访问
· 外存按存储块进行访问,其信息需先装入内存,才能被CPU处理
· FAT-目录-磁盘块
· FAT(文件分配表)
· 一条记录的地址=存储单元地址=内存地址=页面:页面偏移量
· 页面(page)=块(Block)
· 内存页面的分配
· 内存页面的置换
磁盘读写单位:簇Cluster/块Block连续的若干个扇区
算的时候不能算圆盘,只能算盘面
盘面:磁道:扇区
物理存取算法考虑的关键:
· 降低I/O次数
· 降低排队等待时间
· 降低寻道、旋转延迟时间:
o 同一磁道连续块存储
o 同一柱面不同磁道并行块存储
o 多个磁盘并行块存储
· 并行处理:并行读取多个磁盘
o 比特级拆分:以字节拆分
o 块集拆分:以块为单位并行
· 可靠性:奇偶校验
o 扇区、块读写校验:对扇区、块进行校验
o 磁盘间读写校验:对多个磁盘间共同构成的信息读写做校验
· 逻辑中表的每一条记录都有一个映射表,用来记录存储的磁盘号。
· 数据库通过操作系统先占用磁盘块,然后通过自己的映射表来保存记录和对应的磁盘块。
· 通过内存缓存磁盘块。
查询操作-文件管理-缓存区交互-磁盘管理
· 定长记录:按长度区分
· 变长记录:按照标志区分
· 记录的跨块存储:靠着指针连接
· 数据库所占磁盘块的分配方法:
o 连续分配:数据块被分配到连续的磁盘块上
o 链接分配:数据块中包含指向下一个数据块的指针
o 按簇分配:簇是若干连续的磁盘块,簇之间靠指针进行连接。
· 数据组织:指的是数据组织成记录、块和访问结构的方式,包括把记录和块存储在磁盘上的方式,以及记录和块之间相互联系的方法。
· 存取方法:指的是对文件所采取的存取防范。
· 无序记录文件:(堆文件)
o 特点:可以存储于任意空间位置,磁盘存储的记录是无序
o 新记录总插入到尾部,在删除记录所在位置标记为删除
o 新增记录可以利用那些被删除的记录。
o 数据库需要定时进行数据库重组,移走被删除的记录。
o 按照输入顺序进行排序存储
· 有序存储:
o 记录按照属性或者属性组值顺序插入,磁盘上存储的记录是有序的,检索效率很高。
o 但是更新效率很低,需要移动其他记录,为插入记录留出空间。
o 改进措施是可以将未来插入的元组预留空间,或者使用一个临时的无序文件,保留新增记录。但是当溢出文件较大时性能会受到影响。
o 数据库重组:将溢出文件重组排序到主文件中。
· 散列文件:
o 特点:按照记录的某些属性或者属性组的值,根据散列函数来计算其存放的位置:桶号
o 用于散列函数计算的属性通常被称为散列字段,散列字段通常采用关系中的主码,所以又称为散列码。
· 不同的记录可能被放到同一个桶,桶内需要顺序查找。
· 聚簇文件:
· 将相同或者属性值相似的记录存放于连续的磁盘块簇中
· 多表聚簇:将若干个相互关联的Table存储于一个文件中,这可以提高多表查询下的查询速度。
·
增删改需求:无序记录文件、散列记录文件。
检索需求:有序记录文件。
在性能下降之后使用数据库重组。
· 每个数据库分成一个或多个表空间
· 分为SYSTEM表空间和用户表空间,SYSTEM表空间用于存储数据字典的管理,用户表空间可以由用户创建
· 每个表空间由一个或者多个操作系统文件构成。
· 一个表可以存在一个文件中也可以存储在多个文件中,在进入DBMS后由DBMS进行组织
数据库索引
2020年6月23日
14:20
· 所以是定义在存储表基础之上,有助于无需检查所有记录而快速定位所需记录的一种辅助存储结构,由一系列存储在磁盘上的索引项组成,每一索引项又由两部分组成:
o 索引字段:由Table中的某些列的值组成,索引中通常存储了索引字段的每一个值。
o 行指针:指向Table中包含索引字段值的记录在磁盘上的存储位置。
· 存储索引项为索引文件,相对应存储表又称为主文件。
· 索引文件是一种辅助存储结构,其存在与否不改变存储表的物理存储结构,然而其存在可以显著提高存储表的访问速度。索引文件也有多种组织方式:
o 排序索引文件:按照索引字段的某一种顺序组织存储
o 散列索引文件:按照索引字段值使用散列函数分配散列桶的方式索引
· 在一个表上可以针对不同的属性或者属性组合建立不同的索引文件,可以建立多个索引文件。索引字段的值可以是Table中任何一个属性的值或者多个属性值的组合值
· 索引文件比主文件小很多,通过检索一个小的索引文件,可以快速定位,然后再针对性读取非常大的主文件,
· 有索引的时候,必须同步更新索引文件和主文件。
· 索引技术可以使得检索效率大幅度提高,但也增加了存储空间
· 衡量索引性能的好坏:
o 访问时间
o 插入时间
o 删除时间
o 空间负载
o 支持存储的有效性:是否支持多属性,属性索引的范围…
· 索引字段:
o 字段、排序字段、索引字段
o 码,主码,表键:具有唯一性和最小性
o 排序码:对主文件进行排序的那些属性或者属性组
o 索引码:索引字段,不一定具有唯一性
o 搜索码:在主文件中查找记录的属性或属性集
Create [unique] INDEX indexname
ON tablename ( colname [asc|desc] {, colname [asc|desc]…})
删除索引:
Drop INDEX indexname
· 对主文件中每一个记录,都有一个索引项和它对于,指明该记录所在位置
· 候选键属性索引:
o 每一条索引对应一条记录
· 非候选键索引:
o 索引文件中的索引字段值是不重复的,主文件按照索引字段排序,且索引字段不是候选键。
o
o 索引字段可以有重复:
o 引入中间层:
· 对于主文件中的部分记录,都有索引项和它对应
· 索引中不存在搜索码的值,不代表主文件中没有对应搜索码的记录
· 定位索引字段为K记录的值:
o 首先找相邻的小于K的最大索引字段值所对应的索引项
o 从该项所对应的记录开始顺序对Table进行检索,一旦找到比他大的值就结束查找
· 稀疏索引要求主文件必须按照索引字段属性排序
· 索引项可以不指向记录指针,而是指向记录所在存储块的指针
· 对每一个存储块有一个索引项,索引项的综述和存储表所占的存储块数目相同,存储表的每一个存储块的低一些记录,又称为锚记录或者成为块锚
· 主索引的索引字段值为块锚的索引字段值,而指针指向所在的存储块
·
· 是定义在主文件的任一个或者多个非排序字段上的辅助存储结构。
· 辅助对一个非排序字段上的每一个不同值有一个索引项:索引字段即是该字段的不同值,而指针则包含该记录的块活该记录本身
· 当非排序字段为索引字段时,如该字段值不唯一,则需要采用一个链表结构来保存字段值记录的所有位置。
· 辅助索引是一个稠密索引
· 一个主文件仅可以有一个主索引,但可以有多个辅助索引
· 主索引通常建立在主码/排序码上,辅助索引建立与其他属性上
· 可以利用主索引重新组织文件数据,但辅助索引不能改变主文件数据
· 主索引指向块地址,辅助索引不能仅指向块地址。
· 索引中临近的记录在主文件中也是临近存储的
· 索引中临近的记录在主文件中不一定是临近存储的
· 如果主文件的某一排序字段不是主码,则该字段上每一个记录取值便不唯一,此时该字段被称为聚簇字段,聚簇索引通常是定义在聚簇字段上的。
· 聚簇索引通常是对聚簇字段上的每一个不同值有一个索引项
· 主文件只有一个聚簇索引文件,但可以有多个非聚簇索引文件
· 主索引通常是是聚簇索引,辅助索引通常是非聚簇索引
是一种以树型数据结构来组织索引项的多级索引
叶子节点指向索引块,或者是数据块中记录的指针
· 能够自动保持与主文件大小相适应的树的层次。
· 每个索引块的指针利用率都在50%-100%之间。
一个块中存放n个索引项
· 非叶节点的指针指向索引块,叶子节点指针指向主文件的数据块或数据记录。
· 叶节点的最后一个指针可能不同于其他指针—始终指向其下一个数据块。
非叶节点:
叶子节点:
一个索引块实际使用的索引指针个数d,满足:
根节点至少两个指针被使用。
索引字段值:有可能重复出现于叶子节点和非叶子节点
· 指向主文件的指针仅可能出现于叶节点
· 所有叶结点即可覆盖所有键值索引
· 索引字段中在叶节点中按顺序排列。
B+树仅有叶结点块的集合就是主文件的完整索引,其他每一层都是索引的索引
· 索引字段是主文件的主键,索引是稠密的,主文件可以按照主键排序,也可也不按照主键排序,指针指向的是记录。
· 索引字段是指向的数据块。
· 索引字段是主文件的非键属性,索引是稠密的,主文件按照非键属性排序
· 索引文件的索引字段是无重复的,指针指向的是记录
· 然后再磁盘块上顺序访问,直到访问到不同属性的记录
· 索引字段是非键属性,主文件不按照此非键属性排序
· 索引文件的索引字段是有重复的,指针指向的是记录。
· B+树中就会有多个重复索引
· 当节点全满的时候就需要分裂
· 由叶子节点像根节点逐层处理
o 自动保持与主文件大小相适应的树的层次
o 每个索引块的指针利用率都在50%-100%
· 指针要指向正确的块。
无需合并
· 当指针数目少于规定数目
· 由叶节点向根节点逐层处理
· 指针的调整:调整指针指向正确的位置
· 索引字段值仅出现一次或者在叶节点或者非叶节点
· 指向主文件的指针出现于叶节点或非叶节点(中间查询到了就直接退出)
· 所有节点才能覆盖所有键值的索引
B树索引块和属性块的个数求法:
已知存储块大小为4096字节,在整型属性(一个整型数值占有4个字节)上建立B树索引,一个指针占有8个字节,则该非叶结点存储块最多能有__个索引项和__个指针。
设属性格式为n
4n+8(2n+2)<=4096
n=204, 410;
散列:
· 有M个桶,每个桶都是有相同容量的存储地(可以是内存页,也可以是磁盘块)。
· 散列函数h(k),可以将键值k映射到{0,1,…., M-1}中的某一个值。
· 将具有键值k的记录,存储在编号k的桶中。
目标:
· 选择一个合适的散列函数,将record集合中的每一个关键字k均匀映射到M个桶中。
散列索引:
· 内存数据可以采用散列确定存储页,主文件可以采用散列确定存储块,索引也可以采用散列确定索引项的存储块。
· M个桶,一个桶可以是一个存储块,也可以是若干个连续的存储块。
散列索引的目标:
· 最好没有溢出桶,每个散列值仅有一个桶,读写每一个键值都只读写一个存储块。
均匀分布:
· 设置合理的散列函数,使得每个桶的数据成为具有某种特征值h(k)的数据的集合
桶的数目M的确定:
· 当键值多余数倍的桶的数目时,每个散列值都可能多于一个桶,形成一个主桶和多个溢出桶的列表,此时需要二次检索,先散列找到主桶号,然后根据链表逐一找到每一个溢出桶。
一趟扫描算法
2020年6月26日
14:49
· 一次单一元组的操作:Select,Project
· 整个关系的一元操作:Distince, Group By, Sorting
· 整个关系的二元操作:
o 集合上的操作:交、并、差
o 包上的操作:交、并、差
o 积、连接:Project,Join
· 关系是存储在磁盘上的,磁盘是以磁盘块为操作单位的,首先要先被装载进内存中,然后再进行操作。
基本算法:
拆分成4层循环,外层是磁盘块的读写。
全主存实现算法:
半主存实现算法:
大关系实现算法:
· 迭代的读取集合中的每一个元素,而封装其读取细节。
定义了一个迭代器:
· 包括Open,GetNext,Close三个函数
R**的迭代器**
Union**(R,S)**
Selection(R)
Projection(Selection (R))
Join**(R,S):**
· 聚簇关系:关系的元组集中存放
o TableScan(R):表空间扫描算法
· 扫描结果未排序:B( R )
o SortTableScan( R ):
· 扫描结果排序:3B( R )
· 非聚簇关系:关系的元组不一定集中存放
o 扫描结果未排序:T(R)
o 扫描结果排序:T(R)+2B (R)
· 需要内存中保存已处理的元组。
· 当新元组到达时,需与之前处理过的元组进行比较。
· 建立不同的内存数据结构,来保存之前处理过的数据,以便快速处理整个关系上的操作。
· 复杂性:B( R )
· 应用复杂性:B(&( R )) <=M
· 需要在内存中保存所有的分组
· 保存每个分组上的聚集信息
· 复杂性:B( R )
· 应用复杂性:所有的分组数量应该能在内存中完整保存。
· 扫描一个关系,然后再扫描另一个关系
· 集合上的操作还需要去重复,包上的操作需要计数每个元组出现的次数。
· 复杂性:B(R )+ B(S )
· 应用复杂性:min(B(R ), B(S ))<=M
· 选择条件中有涉及到索引属性时,可以使用索引,辅助快速检索
· 在某些属性上存在索引,可能在多个属性上都存在索引
两趟扫描算法
2020年6月27日
7:24
当内存远远小于元组的块数时,则需要两趟排序算法。
第一趟:
· 划分子集,并使得子集具有某种特性,如有序或相同散列值等。
第二趟:
· 处理全局性内容的操作,形成结果关系。如多子集间的归并排序,相同散列值子集的操作等。
大数据集上的操作可否等于(子集上操作)的并集 ?
例如:元组在某一子集上无重复即可 相当于在全集上无重复。
· 内排序问题:待排序数据可以一次性装入内存
· 外排序问题:待排序数据不能一次性装入内存
·
·
·
算法的条件:
·
·
·
当更大规模的数据集排序时,可采用多趟排序
大数据集上的操作 可以转换为某个子集上的操作
第一趟散列的目的是使数据子集具有某一种特性(如具有相同的散列值),而第二趟散列的目的是提高数据处理的速度。
查询优化
2020年6月27日
10:39
· 语义优化:利用模型的语义以及完整性,优化查询
· 语法优化:逻辑层优化,利用语法结构,优化操作执行顺序
· 执行优化:物理层优化,存取路径和执行算法的选择与执行次序优化
基本思想:
· 改变关系代数的操作次序,尽可能早做选择和投影
· 关系代数的基本操作中哪些能交换次序
· 次序改变前后两个表达式等价
· 关系代数表达式等价变化定理
· 尽可能早做选择和投影:减少中间结果
· 把选择与投影串联起来:只用做一次扫描
· 把投影与前或后的二元运算结合起来:在用关系时去掉一些无关属性
· 把某些选择与其前的笛卡尔积合并成一个连接:当RxS前有选择运算且其中有条件是R、S属性间相比较运算时,可将其转换为连接运算,可以节省时间。
为每个关系代数操作选取优化的执行层程序,形成物理查询计划
基本思想:
· 获取数据库的相关信息(定期统计)。
· 选取相应的执行层例行程序。
· 依据相关信息进行代价估算,并选择代价最少的例行程序以及确定相应的参数。
基本关系代数:并、差、积、选择、投影。
(同名属性,顺序不同)
定理L1:连接与连接,积与积的交换律
考虑把哪个关系装入内存
定理L2:连接与连接,积与积的结合律
考虑把哪个关系先计算
定理L3:投影串接律
· 投影运算可以向下或向上移动
· 先做更多属性的投影,然后再做更少属性的投影,这时候更少属性的投影就没有意义了。
定理L4:选择串接律
定理L5:选择和投影交换律
条件F需要只涉及投影的属性,如果不满足则需要扩展属性达到F中的全部属性
定理L6:选择和积的交换律
尽可能的早做选择
定理L7:投影和积的交换律
定理L8:选择和并的交换律
定理L9:选择和差的交换律
定理L9:投影和并的交换律
例子:
这一步的构造思路是把\Pi TITLE 和F3一起根据L3构造
乘积操作和其后选择操作构成连接
七、非SPJ优化
1.GROUP BY优化
1) 分组转换技术:对分组操作、聚集操作与连接操作的位置进行交换
a) 分组操作下移:GROUP BY操作可能较大幅度减少关系元组的个数,如果能够对某个关系先进行分组操作,然后再进行表之间的连接,很可能提高连接效率。这种优化方式是把分组操作提前执行。下移的含义,是在查询树上,让分组操作尽量靠近叶子节点,使得分组操作的节点低于一些选择操作。
b) 分组操作上移:如果连接操作能够过滤掉大部分元组,则先进行连接操作,后进行GROUP BY操作,可能提高分组操作的效率。这种优化方式是把分组操作置后执行。上移的含义和下移相反。
2) MySQL的GROUP BY优化:MySQL对于GROUP BY的处理,通常采用的方式是扫描整个表、创建一个临时表以执行分组操作。MySQL不支持分组转换技术。对于GROUP BY的优化,尽量利用索引。
利用索引的条件:分组子句中的列对象源自同一个BTREE索引(不支持利用HASH索引进行优化)的全部或前缀部分的部分有序的键(分组使用的索引列与索引建立的顺序不匹配则不能使用索引)。
2.ORDER BY优化
ORDER BY 如果操作的列不是主键或索引等,会创建一个临时表(Using temporary、Using flesort)
1) 排序消除:优化器在生成执行计划前,将语句中没有必要的排序操作消除(如利用索引),避免在执行计划中出现排序操作或由排序导致的操作(如在索引列上排序,可以利用索引消除排序操作)
2) 排序下推:把排序操作尽量下推到基表中,有序的基表进行连接后的结果符合排序的语义,这样能避免在最终的大的连接结果集上执行排序操作。
3.DISTINCT优化
DISTINCT操作的列,如果该列有索引(唯一性约束)或者为主键,则直接使用索引排序;否则会使用一张临时表(Using temporary),先去重,再排序(可以看到输出结果是根据该列排好序的)。
1) DISTINCT消除:如果表中存在主键、唯一约束、索引等,则可以消除查询语句中的DISTINCT
2) DISTINCT推入:生成含DISTINCT的反半连接查询执行计划时,先进行反半连接再进行DISTINCT操作;也许先执行DISTINCT操作再执行反半连接,可能更优。
3) DISTINCT迁移:对连接操作的结果执行DISTINCT,可能把DISTINCT移到一个子查询中优先进行
总结:GROUP BY / ORDER BY / DISTINCT 优化尽量利用索引、主键、唯一性约束,这样可以不创建临时表。
4.LIMIT优化
1) LIMIT对单表扫描的影响:如果索引扫描可用且花费低于全表扫描,则用索引扫描实现LIMIT(LIMIT取出很少量的行,否则优化器更倾向于使用全表扫描)
2) LIMIT对排序的影响:如果LIMIT和ORDER BY子句协同使用,当取到LIMIT设定个数的有序元组数后,后续的排序操作将不再进行。
3) LIMIT对去重的影响:如果LIMIT和DISTINCT子句协同使用,当取到LIMIT设定个数的唯一元组数后,后续的去重操作将不再进行。
4) LIMIT受分组的影响:如果LIMIT和GROUP BY子句协同使用,GROUP BY按索引有序计算每个组的总数的过程中,LIMIT操作不必计数直到下一个分组开始。
5) LIMIT 0:直接返回空结果集。
6) MYSQL支持对不带HAVING的子句进行优化。
5.常见的一些优化规则
1) 在索引键上执行排序操作,通常利用索引的有序性按序读取数据而不进行排序。
2) 选择率低于10%时,利用索引的效果通常比读取表数据的效果好。
3) 当表的数据量较少时,全表扫描可能优于其它方式(如索引)。
物理查询运算符
· 获取关系元组的操作
· 关系操作的各种实现算法
· 迭代器构造—流水化、物化
DBMS提供了一些命令用于收集这些信息,但是这些信息需要DBA进行手动的统计。
投影运算的估计
选择运算的估计
连接运算:
总结:
并发控制
2020年6月27日
17:22
· 事物是数据库管理系统提供的控制数据操作的一组手段,通过这一手段,应用程序员将一系列的数据库操作组合在一起作为一个整体进行操作和控制以便数据库管理系统能够提供一致性状态转换的保证
· 一个存取或改变数据库内容的程序的一次执行,或者说一条或多条SQL语句的一次执行被看作是一个事物
· 事物一般由程序员提出,因此有开始和结束,结束前需要提交或者撤销
· 对数据库的一系列基本操作的整体执行
· 原子性:DBMS保证事务的一组更新操作是原子不可分的
· 一致性:DBMS保证事务的操作状态是正确的,符合一致性的操作规则,不能出现三种典型的不一致性
· 隔离性:BDMS保证并发执行的多个事务之间互相不受到影响
· 持久性:DBMS保证已提交的事务的影响是持久的,而可撤销的事务影响是可恢复的
具有ACID的一组操作被称为事务。
· 一组事务的基本步骤(读、写、其他控制操作如加锁、解锁)的一种执行顺序称为这组事务的一个调度,并发(或并行)调度:多个事务从宏观上看是并行的,但其微观上基本操作则是交叉执行的。
· 当且仅当一个并发调度下 得到的新数据库结果与分别串行运行这些事务得到的结果一致
· 如果不管数据库的初始状态如何,一个调度对数据库的状态影响都和某个串行调度相同,则我们说这个调度是可串行化的。
· 可串行化调度一定是正确的并行调度,但是正确的并行调度不一定都是可串行化的调度。
· 并行调度的正确性是结果上的,不考虑过程如何。而可串行性是指形式上的正确性。
· 调度中一对连续的工作,如果他们满足:顺讯交换,那么涉及的事务至少有一个事务的行为会改变。
o 同一个事务的任何两个操作都是冲突的。
o 不同事物对同一个元素的两个写操作是冲突的。
o 不同事物对同一个元素的一读一写是冲突的。
· 如果一个调度,通过交换相邻两个无冲突的操作哦能够转换到某一个串行调度,则称此调度为冲突可串行化调度。
· 冲突可串行新是比可串行性更严格的概念
· 满足冲突可串行性一定满足可串行性,反之不然
· 构造一个前驱图
·
· 测试检查:如果此有向图没有环,则冲突是可串行化的
锁 是一种控制并发的手段:
· 每一个数据元素都有唯一的锁
· 每一事务读写数据元素前,要获得所
· 如果被其他事务持有元素的锁,则要等待
· 事务处理完之后要释放锁。
锁 本身不能保证冲突可串行性
锁 为调度提供了控制的手段,但如何用锁仍需要说明
· 排他锁:
o 只有一个事务可以读、写,其他任何事务都能不能对该事务进行读、写
· 共享锁:
o 所有事务可以读,但任何事务都不能写。
· 更新锁:
o 初始读,以后升级为可写
· 增量锁I
o 增量更新,例如A=A+x
o 区分增量更新和其他类型的更新
· 读未提交:0级协议
· 读已提交:1级协议
· 可重复读:2级协议
· 可串行化:3级协议
幻读:
· 封锁粒度:是指封锁数据对象的大小
· 粒度单位:属性值-元组-元组集合-整个关系-整个DB-某个索引项-整个索引
· 由前往后:并发度小,封锁开销小
· 读写数据之前都要获得锁,每个事物中所有的封锁请求都要先于任何一个解锁请求
· 两阶段:加锁段,解锁段,加锁段中不能有解锁操作,解锁段中不能有加锁操作。
时间戳:
· 一种基于时间的标志,将某一时刻转换成的一个数值。
· 时间戳具有唯一性和传递性。
事务的时间戳:
· 事务T启动时,系统将该时时刻赋予为T
· 时间戳可以表征一系列事物执行的先后次序,时间戳小的事务先执行,时间戳大的事务后执行
· 利用时间戳,可以不用锁,来实现并发控制。
· 借助时间戳,强制使得一组并发事务交叉执行,等价于一个特定顺序的串行执行
· 特定顺序:时间戳由小到大
· 如何强制:执行时判断冲突
o 如果没有冲突,允许执行
o 如有冲突,则撤销事务,并重启该事务,此时该事务获得了一个更大时间戳,表明是后执行的事务。
· 冲突类型:
o 读-读:无冲突
o 读-写或者写-读冲突
o 写-写冲突
核心规则:先执行的先操作
对DB中的每个数据元素x,系统个保留其上最大时间戳
· RT(X):读过该数据事务中的最大时间戳,即最后读x的事务时间戳
· WT(X):写过该数据事务中的最大时间戳,即最后写x的事务时间戳
· TS(T):事务的时间线
以上规则不能解决:
· 脏读:读的数据被撤销
· 托马斯写:先写的事务被后写的覆盖
· 事务在启动时刻被赋予唯一的时间戳,以示其启动顺序
· 为每一个活跃事务保存其读写数据的集合,RS(T):事务T读数据集合,WS(T):事务T写数据集合
· 通过对多个事务的读写集合,判断是否有冲突,即有效性确认,来完成事务的提交和回滚,强制事务以可串行化的方式执行。
· 事务在启动时刻被赋予唯一的时间戳,以示其启动顺序
· 为每一个活跃事务保存其读写数据的集合,RS(T):事务T读数据集合,WS(T):事务T写数据集合
· 事务分为三个阶段:
o 读阶段:事务从数据库中读取集合中所有的元素,事务还在局部地址空间计算它要写的所有值
o 有效性确认:调度器通过比价该事务与其他事务的读写集合来确认该事务的有效性
o 写阶段:事务往数据库中写入其集合中的元素的值
· 调度器维护三个集合:
o START:已经开始但尚未完成有效性确认的事务集合。对此中的事务,调度器维护START(T),即事务的开始时间
o VAL:已经确认有效性但尚未完成第三阶段的写事务,对此中的事务,调度器维护START(T)和VAL(T),即T的确认时间
o FIN:已经完成第三阶段写任务的事务,对这样的事务T,调度器记录START(T),VAL(T),FIN(T),即T的完成时间。
冲突一:T启动之前,U没有完成,则需要检查U和T是否有读写交集
冲突二:T有效确认之前,U没有完成,则需要检查是否有两个写的交集
数据库故障类型及其影响
2020年6月29日
13:53
· 事务故障
o 某一个程序自身故障
o 影响该程序事务本身
· 系统故障
o 由于掉电、非正常关机所引起的故障
o 影响正在运行的事务以及数据库缓存区
· 介质故障
o 由于介质损坏所引起的故障
o 影响是全面的,即影响内存中的数据,又影响介质中存储的数据
· 把数据库由当前不正确状态恢复到正确状态
· 需要保证事务的:
o 原子性
o 持久性
· 事务故障可通过重做事务,撤销事务来恢复
· 运行日志是DBMS维护的一个文件,该文件以流水的方式记录了每一个事务对数据库的每一层操作及其操作顺序
· 运行日志直接写入介质存储
· 当事务对数据进行操作时:先写运行日志,写成功之后再与数据库缓冲区进行数据交换。
· 系统故障可以通过运行日志来恢复:
o 按照运行日志记录的事务操作顺序来重做事务
· 在检查点时刻,DBMS强制使用内存DBBuffer中的内容与介质DB中的内容保持一致,即将DB Buffer更新的所有内容写回DB中
· 检查点表征了:在检查点之前内存数据与介质中数据是保持一致的。
· 检查点之前结束的事务不需要恢复
· 检查点之后结束或发生的事务需要依据运行日志进行恢复(不能确定是否写回DB):故障点前结束的重做,故障点时刻未结束的撤销。
· 副本:
o 在某一时刻,对数据库在其他介质存储上产生另一份等同的记录,在问题发生时,用副本数据替换。
· 构建转储点:
o 用副本替换被破话的数据库
o 由于介质故障影响全面,在用副本恢复之后还需要依据运行认知进行恢复。
· 如何确认转储点:
o 过频:影响系统工作效率,过疏,会造成运行日志过大 ,也影响系统运行性能
o 备份转储周期与运行日志的大小密切相关,应注意防止衔接不畅而引起的漏洞。
· 每个事务都会写或者读一些元素
·
· 一个包含日志记录的只能追加的顺序文件,不同事务的日志记录交错存储,按发生时间存储
· 发生系统故障,使用日志进行恢复
o 故障时已提交的事务,重做
o 故障时未提交的事务,撤销
· 日志记录的信息:
o
· DBMS需要保证事务的持久性、原子性:
o 持久性:已提交的事务—在缓冲区里的内容要写回磁盘,未提交的事务—缓存区内容不能影响磁盘
· 三种日志:Undo日志、Redo日志、Undo/Redo日志
· Force:内存中的数据最晚在commit时候写入磁盘
· No steal:不允许事务在commit之前把内存中的数据写入磁盘
· No Force:内存中的数据可以一直保留,在commit之后过一段时间再写入磁盘
· Steal:允许事务在commit之前把内存的数据写入磁盘。
从后往前
· 静止检查点:周期性对日志设置检查点
o 停止接受新的事务,等待所有当前活跃事务提交或终止,并在日志中写入了COMMIT或ABORT记录后
o 将日志刷新到磁盘,写入日志记录
o
· 非静止检查点:
o 在设置时不需要关闭系统个,运行新事务进入
o 写入一条
o 继续正常的操作,知道T1,….Tk都完成时候,写入
o
先提交在输出,还是先输出再提交,就是Redo和Undo日志的区别**1**,Redo记录的更新后的新值,Undo记录的是更新前的值
从前往后
· 通过End CKPT找到找到START CKPT然后进行Redo
先撤销再重做
]]>在传统的GNN中,所有的节点和边都属于一个种类,导致一些传统的GNN手段没有办法适应异构图的结构。在这篇文章中作者提出了一种基于异构图的transformer结构,用来生成不同种类的节点、边的attention值。为了解决任意时间的动态图,作者提出了一个 relative temporal encoding technique。同时为了解决大量的 图数据库,作者提出了一种基于mini-batch的图采样算法,来在图上进行高效的训练。
Heterogeneous Graph:
$G=(\mathcal{V,E,A,R})$
$\mathcal{V}$:节点
$\mathcal{E}$:边
$\mathcal{A}$:邻接矩阵
$\mathcal{R}$:边的种类
Meta Relation:
$<\tau(s),\phi(e),\tau(t)>$
Dynamic Heterogeneous Graph
$e=(s, t)$ with timestamp $T$, denote $s,t$ connected in $T$
HGT希望能从源节点和目标节点直接获取上下文的表示,整个过程可以分为:
Heterogeneous Mutual Attention,Heterogeneous Message Passing,Target-Specific Aggregation
三个部分
calculate the mutual attention between source node $s$ and target node $t$ .
Attention: estimates the importance of each source node
Message: extracts the message by using only the source node $s$;
Aggregate: leverages the information from its neighbors
Map target node $t$ into a Query vector, and source node $s$ into a Key vector and calculate their dot product as attention.
整体结构和传统的transformer类似,只不过对不同的边有一个$W_{\phi(e)}^{ATT}$进行了线性变化。然后把所有的pair结果合并起来得到对不同meta的attention值。
For a pari of nodes $e=(s, t)$, we calculate its multi-head Message by:
为了获得$i-th$个message head $MSG-head^i(s,e,t)$,作者首先先把$\tau(s)$-type的source node映射到$i$-th message的空间,使用一个$W^{MSG}$矩阵。
在得到了节点attention和节点message的表达之后,我们可以简单的把attention值和message相乘,然后相加。
然后通过一个线性变换矩阵,来把target node变换到其目标的空间。
作者提出了一个 Relative Temporal Encoding 机制,受到Transformer的 position encoding影响,可以对节点和图在不同时刻进行建模。
给定一个源节点$s$和一个目标节点$t$,在一个时间$T$内,相对的time gap$\bigtriangleup T(t,s)=T(t)-T(s)$作为其在时间上的encoding $RTE(\bigtriangleup(t,s))$. 但是由于这种方法不一定能cover所有的时间,所以作者还是借助了传统transformer的正弦函数,配合$\bigtriangleup$来构建时序的encoding。这样做融合了离散和连续两个时间戳表示方法。
为了解决传统的图算法不能支持大量的图计算的问题,作者提出了一种基于图采样的算法。整体思想为:为每一个节点类型构造一个budget $B[\tau]$,然后采样相同的数量的节点。给定一个已经采样的节点$t$,我们把他的所有直接邻居加入对应的budget,然后更新其被采样的概率,并通过度数进行归一化,防止采样过多度数较高的节点。然重复L次,直到采样了所有节点的L阶邻居。
在异构图中,一个节点往往可能会有多个timestamp,作者要解决选择给节点加入什么时刻的timestamp,解决方法也很直接:
1. 对于有着固定时间的node,比如论文,有一个唯一的发表时间,则就把该时间作为论文的timestamp 2. 对于没有固定时间的node,比如一个会议,则以与他相关的那个的节点的时间作为这个会议的timestamp
作者在开放学术图谱(OAG)上进行试验。该数据集包含 1.79 亿个节点和 20 亿个边组成,时间跨度从 1900 年到 2019 年。实验结果表明,与传统的 GNNs 和异构图模型相比,在下游任务中 HGT 可以显著提高 9-21%。
同时,利用提出的相对时间编码(RTE),我们可以动态地计算出任意一个年份的节点表示。例如,通过距离,我们可以观测出每个会议在不同时间其相似会议的变化。如下图所示,WWW 在 2020 年与一些网络、数据库的会议更接近,而在 2020 年却与一些数据挖掘的会议更接近。
同时,作者还验证了 HGT 可以隐性地抽取出对下游任务重要的元路径,而不需要人为定义。例如下图中的
作者提出了一种在异构图上进行GNN图卷积的方式,主要是利用了对不同类型的边设定一个独有的参数$W$转到一个相同的空间,同时还用了多头的和边有关的attention机制来进行邻居信息的聚合。
TAL层:
根据节点两个节点之间种类,用一个对应的线性变换矩阵$W$,把邻居的embedding转换到目标的空间。
邻居聚合:
然后通过一个attention,在对邻居进行聚合。
然后通过一个multi-head机制,同时使用多个attention参数,并把结果拼接起来,作为一个节点最后的表达。
并在多层卷积的过程中加入了残差层
针对边和回边的问题,作者希望attention的值应该是正好相反的。
环理论,一个j->j的转换应该等于j->i, i->i, i->j这两个应该是相等的。所以变换矩阵应该有如下的性质。
i->i的矩阵是有方向的,所以需要求一个逆矩阵,这个工作很耗时,所以作者用train的方法来实现求得该逆矩阵。
]]>异常检测常见的领域就是在电商。比如异常的用户会通过对目标商品以及流行商品做大量的相同操作,比如同时点击目标商品和流行商品,从而增加了目标商品和流行商品的相似性。从而在推荐系统里增加了评分。这篇文章是针对动态图的异常检测,异常检测 对于下流任务很重要。 和传统的图方法相比,GCN能够自动的传播从邻居节点的信息,从而扩散节点的异常概率。GCN在异常检测方面主要的问题在于没有考虑时间特征(不能在动态图上忽略的)目前的一些工作 CAD [Sricharan and Das, 2014] and Netwalk [Yu et al., 2018] 把 graph embedding方法应用到动态图,但是不能 捕捉节点的 “长期模式”和“短期模式”。 主要贡献:
$T$是最大的时间步长,图的集合${G^t}^T_{t=1}$,每个$G^t$代表着一个时间点子图,$A^t\in\mathbb{R}^{m\times n}$,代表每个时间点的邻接矩阵。$e = (i,j,w)\in E^t$意味着在时刻t,i和j之间存在一个权重为w的边吗,本文的目的是训练一个函数$f$,使得能对$e\in E, f(e)$能输出一个异常边的概率。
在每个时间 $t$, 我们都可对$G^t$借助$A^t$来使用GCN进行卷积,获得每个节点的隐藏层信息$H^{t-1}\in \mathbb{R}^{n \times d}$ ,同时对每层卷积层$GCN_L$计算方式如下,其实就是一个普通的卷积加了一个非线性变化。:
$h_i^t$是$i$-th节点的t时间段的隐藏状态,$w$是窗口的大小,沿着w的纬度做了一个attention,得到每一个时间$t$的权重表达,简单记为
$Current^t$是当前节点在图中的表达,$Short_t$是每个节点历史信息的表达。为了平衡这两个信息,采用了如下的门机制来融合这两个信息。
注:这个CAB等于是在传统的门机制基础上,加入了历史一段时间的记忆,然后和当前状态一起进入GRU更新。
预测方程:
$h_i,h_j$是两个节点在$t$的hidden特征。
Loss 采用的Margin loss,希望正例的得分小于负例的得分。
]]>在现在的图卷积中,由于图的大小可能非常大,传统的在全图上进行图卷积的操作往往是不现实的。因此往往采用了图采样的方法。图采样大致会分为:Layer Sampling 和 Graph Sampling两种。但是这两种方法都存在着一些问题。
Layer Sampling:
1. 邻居爆炸:在矩阵采样多层时,假设每层采样n个邻居,则会导致$n^2$级别的节点扩充速度。 2. 领接矩阵稀疏:在矩阵采样的过程中,会导致邻接矩阵稀疏化,丢失一些本来存在的边。 3. 时间耗费高:每一层卷积都要采样,这就导致计算的时间耗费。
Graph Sampling:
Graph Sampling是一种相对好的采样方法,可以在preprocess阶段提前采样图,并且可以进行mini batch的加速。但是这样的采样往往会丢失一些信息。
本文为了解决以上问题,提出了一种在图上进行Graph Sampling的相对较好的方法。
在普通的Layer采样过程中,我们希望采样之后产生的偏差最小。这个偏差可以由如下的公式得出。
我们希望如下的偏差最小,经过一系列复制的推导,在$P_e$等于如下值的时候,偏差达到最小。
但是此种方法计算需要所有子图中边两端的聚合信息来求得计算量十分大,于是作者采用了如下的简化公式
边的采样概率等于两个节点的倒数之和,来进行Graph的采样
在许多的大图中进行证明,不仅训练速度得到了优化,其准确率也有了提高。
同时对比了Layer Sampling和Graph Sampling,证明了Graph Sampling在多层的时效果有一定的提高
]]>假设总共有$m$个field,每个field的embedding是一个$D$维向量。
压缩交互网络(Compressed Interaction Network, 简称CIN)隐向量是一个单元对象,因此我们将输入的原特征和神经网络中的隐层都分别组织成一个矩阵,记为$X_0$和$Xk$,CIN中每一层的神经元都是根据前一层的隐层以及原特征向量推算而来,其计算公式如下:
其中,第k层隐层含有$H_k$条神经元向量。$\circ$是Hadamard product,即element-wise product,即,$ \left \langle a_1,a_2,a_3\right \rangle\circ \left \langle b_1,b_2,b_3\right \rangle=\left \langle a_1b_1,a_2b_2,a_3b_3 \right \rangle $.
根据前一层隐层的状态$X^k$和原特征矩阵$X^0$,计算出一个中间结果$Z^{k+1}$,它是一个三维的张量。注意图中的$\bigotimes$是outer product,其实就是矩阵乘法咯,也就是一个mx1和一个nx1的向量的外积是一个mxn的矩阵:
而图中的$D$维,其实就是左边的一行和右边的一行对应相乘。
https://daiwk.github.io/posts/dl-dl-ctr-models.html#cin
在pytorch的实现过程中主要使用的是torch.einsum
操作
https://pytorch.org/docs/stable/torch.html?highlight=einsum#torch.einsum
torch.``einsum
(equation, *operands) → Tensor[SOURCE]This function provides a way of computing multilinear expressions (i.e. sums of products) using the Einstein summation convention.
Parameters
equation (string) – The equation is given in terms of lower case letters (indices) to be associated with each dimension of the operands and result. The left hand side lists the operands dimensions, separated by commas. There should be one index letter per tensor dimension. The right hand side follows after -> and gives the indices for the output. If the -> and right hand side are omitted, it implicitly defined as the alphabetically sorted list of all indices appearing exactly once in the left hand side. The indices not apprearing in the output are summed over after multiplying the operands entries. If an index appears several times for the same operand, a diagonal is taken. Ellipses … represent a fixed number of dimensions. If the right hand side is inferred, the ellipsis dimensions are at the beginning of the output.operands (Tensor) – The operands to compute the Einstein sum of.
1 | print(a_tensor) |
简而言之,可以用ik, kj
来指代输入矩阵的各个维度,然后用->
来定义行列的操作。
1 | a=torch.randn(2,30,8) # (Batch size, feature number, feature dim) |
最近在玩neo4j,用来存储实验的图数据库,以前都是只用做一个数据库就好了。但是由于一个数据集的paper被review怼的惨不忍睹,只能多搞几个数据集来实验,于是就开始倒腾建立多个数据集的方法。
使用Neio4j-admin import导入csv
neo4j-admin --database=xxx.db --nodes=users.csv --relationships=relations.csv
—database:数据库名字,由于创建了多个数据库所以必须改名,如果出现数据库名字重复或者不为空可以执行sudo rm -rf /var/lib/neo4j/data/databases/xx.db
清空
—nodes:节点csv,[name:ID]
,ID字段是必须的,是唯一索引,name是feature的名字,:LABEL
是节点的标签,貌似可以用[name:ID(label)]替代:LABEL ,但是此时在import 的时候要在--nodes:User=users.csv
明确label
1 | movies.csv. |
—relations:关系csv,必须包含START_ID
, END_ID
和 :TYPE
,分别是开始节点,结束节点,和边的种类
1 | roles.csv. |
neo4j默认是导入graph.db
,在有多个数据库的时候,可以通过创建符号链接的方式切换数据库
1 | mv graph.db graph1.db |
NeighborSampler!
1 | NeighborSampler(data, size, num_hops, batch_size=1, shuffle=False, drop_last=False, bipartite=True, add_self_loops=False, flow='source_to_target') |
该方法返回一个生成器,主要需要的参数有data数据、采样邻居数(或比例)、采样跳数、bs等。其中bipartite参数指定返回的数据形式:
在 https://github.com/rusty1s/pytorch_geometric/blob/a8f32aaff8608e497f112f700d1fd8ca0cb9ae18/test/data/test_sampler.py 中我们可以看到两种方法的使用例子。
1 | Neighborloader = NeighborSampler(Cora[0], size=[25, 10], num_hops=2, batch_size=1, |
即 layer 0有9个点,layer 1有4个点,layer 2有1个点(目标)
hoop设置两跳,ner里于是有了两个Block数据:、
ner[0], ner[1]
# 输出: Block(n_id=[9], res_n_id=[4], e_id=None, edge_index=[2, 18], size=[2]),
# Block(n_id=[4], res_n_id=[1], e_id=None, edge_index=[2, 4], size=[2]))
具体来看:
1 | ner[0].n_id, ner[0].res_n_id |
也就是说这一层ner[0] 26个节点编号:[ 109, 2481, 234, 826, 2287, 114, 2506, 610, 2288]
其中第[5, 8, 7, 6](即[ 114, 2288, 610, 2506])是和下一层ner[1] 相连接的:
1 | ner[1].n_id, ner[1].res_n_id |
batch>1时也就是采样一个包含batch个目标点的二分图。
因此我们在训练时要先输入layer 0进行训练,然后再此基础上对layer 1进行训练,最终得到layer 1的res_n_id的输出。1
2
3
4
5
6
7
8
9
10def forward_data_flow(self, x, edge_weight, data_flow):
block = data_flow[0]
weight = None if block.e_id is None else edge_weight[block.e_id]
x = relu(
self.conv1((x, None), block.edge_index, weight, block.size))
block = data_flow[1]
weight = None if block.e_id is None else edge_weight[block.e_id]
x = relu(
self.conv2((x, None), block.edge_index, weight, block.size))
return x
subgraph模型上与不使用NeighborSampler的无异,唯一区别是Data中的变量:1
2
3
4
5
6
7ner[1].n_id, ner[1].res_n_id
\# 输出:Data(b_id=[1], e_id=[20], edge_index=[2, 20], n_id=[19], sub_b_id=[1])
ner.b_id, ner.sub_b_id, ner.n_id
\# 输出:(tensor([100]),
tensor([18]),
tensor([ 95, 2073, 2054, 6, 2074, 2072, 315, 2576, 1416, 734, 2311, 1628,
1841, 1680, 408, 2056, 1602, 1204, 100]))
batch>1时也就是采样一个包含batch个目标点的子图。
我们在训练时放入采样的子图,只取目标点sub_b_id作为模型输出即可,其他不变。1
2out = model(data.x[subdata.n_id], subdata.edge_index, weight)
out = out[subdata.sub_b_id]
来自 https://zhuanlan.zhihu.com/p/113862170
在传统图像领域,encoder-decoder结构,比如U-nets已经在许多图像像素领域有着许多成功的应用。然而在图像领域,由于池化和反池化操作在图领域的实现并没有自然的实现,导致这样的结构并没有在图网络中应用。本文提出了一种在图结构上池化和反池化的操作,池化层可以根据节点在可训练投影向量上的标量投影值,自适应地选择节点,形成较小的图。反池化层可以把池化层生成的数据恢复成带位置信息的原始结构。
图池化,首先有节点特征X,邻接矩阵A,通过一个P向量来训练节点之间的位置关系,然后通过SIGMOD(y)+TOP-K来提取top-K特征,提取完之后,保存idex,从X,A提取特征和邻接矩阵。
学习distribution,把pool过之后的KC矩阵,和选定的节点idx,恢复成原始的NC矩阵。
只把选定位置的点设为kC的特征,NC的其他位置设为0
]]>现有的方法主要专注于具有单一类型节点/边缘的网络,并且不能灵活处理大型网络。许多真实世界的网络包括数十亿个节点和多种类型的边,每个节点与不同的属性相关联。本文提出了一种带属性多通道异构图网络,本网路结构可以支持transductive和indective的学习。
此处,模型通过边的种类,学习节点在不同边聚类下的表达。采用的是graph sage的聚集方法。
然后把节点的所有边种类信息拼接起来,然后用self-attention进行聚合。
为了解决一些节点之间边不存在的问题,通过节点的属性和节点的种类来对节点进行嵌入。
对不同种类的边进行不同的游走,然后用负采样进行训练,最后用于节点预测。
]]>