论文阅读笔记33:结合BERT的知识图谱补全(KGC)
这一次论文阅读笔记主要内容包括几篇使用了预训练语言模型BERT做知识图谱补全任务(其实主要就是链接预测)的文章,包括《KG-BERT: BERT for Knowledge Graph Completion》,《Multi-Task Learning for Knowledge Graph Completion with Pre-trained Language Models》,《Structure-Augmented Text Representation Learning for Efficient Knowledge Graph Completion》以及《Inductive Entity Representations from Text via Link Prediction》
阅读本笔记需要有一定的知识图谱相关的基础。
KG-BERT: 将BERT用在KGC中
KG-BERT是一篇19年就挂在Arxiv上的文章,当时距离BERT的提出还没有过很久,作者认为预训练好的BERT模型包含了丰富的文本信息和知识,可以用来对知识图谱中的三元组进行编码,所以就 ...
MIT6.830数据库系统-lab2:SimpleDB Operators
MIT6.830 Database Systems课程Project的第二部分,我们需要实现一些数据库系统中基本的算子和对应的Buffer、Page的管理。我们主要需要实现的操作有Filter, Join, Aggregate, Insert和Delete
Project Overview
在6.830的Project2中,我们要实现常见的SQL语句所需要的数据库操作,在Project1中,我们已经实现了一种顺序扫描的操作SeqScan,它的实现方式是利用SimpleDB的Heap File类提供的迭代器来遍历整个数据表文件中的所有元组信息。而在Project2中,我们需要实现几种更复杂的算子,包括:
Filter,按条件筛选符合的元组
Join,将两个表中符合条件的元组进行join操作
Aggregate,按照一定的目标对表中的元组进行聚合运算
Insert和Delete,插入、删除元组
同时,对于需要修改文件内容的操作(这里只有Insert和Delete会修改已有文件中的内容,其他的都是另外生成新的内容),我们还需要在Buffer,File ...
随意的学习总结5:Hugging Face Transformers初探
Hugging Face🤗公司的开源库Transformers是深度学习领域非常热门的工具,这个库里面集成了各种各样的Transformer架构的模型,包括BERT等等,它提供了非常方便的API来搭建Transformer架构的模型或者使用预训练好的模型进行各种任务,这一次我们主要来尝试一下用库中提供的BERT模型进行句子分类任务的微调,并尝试使用SimCSE这样更好的Sentence Embedding来完成句子分类任务。
Transformers库的Pipeline
我们首先要了解一下Transformers这个库的使用方法,我们知道PyTorch使用的时候有这样几个东西需要定义:
数据集的Dataset类和数据加载器DataLoader
模型本身的代码,需要继承nn.Module类
模型的训练,测试等过程的代码
而Transformer库的使用过程中依然需要遵循这个基本的模式,但是在调用它提供的预训练模型的时候,需要另外考虑这样几个东西(我们以BERT模型为例):
分词器Tokenizer,将Raw Data处理成一个token序列 ...
MIT6.830数据库系统-lab1:SimpleDB Overview
这是MIT6.830Database Systems课程的Project实现记录,这门课的内容和常见的数据系统课程基本一致,而课程Project是用Java实现一个名为SimpleDB的简单数据库系统,一共有6个lab
Overview
和CMU15-445类似,MIT6.830也有一个课程Project需要自己实现一个数据库系统SimpleDB中的关键部分,和15-445的Bustub类似,SimpleDB也被分成了若干个模块,包括
通用的数据库管理模块,如Catalog和Database,复杂管理整个数据库中的信息
数据的存储模块,从底层开始实现了数据库的基本单位tuple的存储
查询的执行模块和优化模块
索引模块,主要实现了B+树索引来加速查询
事务处理模块,实现了数据库的事务的抽象
而我们要在6个lab中实现的东西有:
lab1,对整个SimpleDB有大致的了解,并且实现其中数据存储相关的类,然后还有一些其他东西比如Catalog和SeqScan
lab2,实现查询处理中的各种算子
lab3,实现查询的优化相关的功能
l ...
随意的学习总结5:从Transformer到TinyBERT
深度学习和神经网络的入门课程实际上有不少,几乎每个外国学校CS专业都会有一些类似的课程,而UCB的这门对应课程叫做CS182《Deep Learning : Designing, Visualizing and Understanding Deep Neural Networks》
这门课一共有四个homework,前两个和CS231N的基本一样而后面两个分别是NLP和强化学习,在NLP的这个homework中,我们首先要自己实现Transformer原模型中的关键组成部分,然后用它来训练一个文档摘要模型,然后我们要使用预训练好的BERT模型进行知识蒸馏,并训练出一个小规格的BERT模型TinyBERT
自己实现一个Transformer
Transformer最早在2017年NIPS的这篇经典论文《Attention Is All You Need》中被提出,这个时候的Transformer还是一个用于机器翻译的Encoder-Decoder架构的模型,它的特点在于抛弃了当时主流的CNN和RNN架构,不使用卷积和循环单元,直接使用自注意力机制+前馈网络进行特 ...
UCB-CS164编译原理1:词法分析
本科阶段一直没学过编译原理,因此找到一门UCB的课程CS164——Programming Language&Compilers来学习一下编译原理的基本内容。第一节主要讲的是整个课程的Introduction和词法分析。
Introduction
我们平时常用的高级编程语言可以分成两种,一种是编译型语言,另一种是解释型语言,它们的区别在于,编译型语言将源代码转换成机器语言并执行,而解释型语言则有一个语言虚拟机,源代码会先被转换成虚拟机中能执行的语言(比如Python代码会被转换成字节码)
这门课的研究对象是编译器,也就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序,而这个低级语言可以是机器语言,也可以是虚拟机的语言。
一个理想化的编译器一般分成前端和后端,并且会在中途生成一些中间代码(IR, Intermediate Representation)作为过渡。编译器前端的工作可以用下面的图来表示:
image-20220129205136594
源代码首先要经过词法分析生成token流,然后通过解析生成抽象语法 ...
论文阅读笔记32:提示学习Prompt
综述论文《Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing》的阅读笔记,来简单了解一下去年听说很热门的Prompt是个什么东西。
Introduction: NLP范式的变迁
NLP领域的范式(Paradigms)经过了多次的变迁,最早的时候,NLP主要依赖统计机器学习模型来解决一下完全监督的问题,这个过程主要依赖于各种各样的特征工程(Feature Engineer)来提取数据中的特征并用机器学习模型来解决问题。
第二个阶段,神经网络和深度学习被引入了NLP任务中,这种范式依然是全监督学习的形式,但是神经网络将设计模型所需做的特征工程工作改成了架构工程(Architecture Engineer),也就是设计更合适的模型架构。前两个阶段中,NLP的模型训练主要依靠的是有效的监督信息。
第三个阶段,BERT等大规模的预训练模型的引入让NLP的范式变成了预训练和微调,我们解决NLP问题的方式就变成了用预训 ...
Stanford-CS144-计算机网络Lab4:TCP连接
Stanford CS144 Introduction to Computer Network课程Project的lab4,这个lab主要任务是整合之前的Sender和Receiver,组合成TCP Connection,这个实验结束后,这门课就先暂告一段落了。
Overview
在CS144之前的lab中,我们实现了TCP的Sender和Receiver,分别用来收发TCP报文,而在这个lab中,我们需要实现的是CS144的整个用户态TCP协议Sponge的最后一个部分,即TCP的连接,连接(Connection)是网络通信协议中最重要的一个抽象,它需要整合TCP连接中位于一头的一对发送端和接收端,来实现在两个端点之间建立可靠有效的TCP连接的目的。
我们之前在lab中所说的,TCP的每个端点有一对处于流量控制下的字节流,分别就是Sender和Receiver,而这个lab要实现的TCP Connection,就相当于TCP连接中的一个端点,也叫做Peer,如下图所示:
image-20220124232734982
TCP Connection ...
CMU10-708概率图模型2:有向图模型和无向图模型
CMU10-708的Lecture2和3,主要内容是介绍概率图模型中的有向图模型Directed Graph Model和无向图模型Undirected Graph Model
有向概率图模型(DGM)
定义
有向概率图模型是一种概率图模型,也叫做贝叶斯网络(Bayesian Networks),在有向概率图模型(后面都用DGM来指代)中,图的结点代表随机变量,并使用有向的边进行连接,边表示结点之间的条件和因果关系(比如A会导致B的发生)
image-20211002201208801
上面这个图就是一个有向概率图模型,通过有向概率图,我们可以将8个事件X全部发生的概率表示成一系列条件概率的乘积
一些例子
专家系统(Expert System)就是一种比较经典的DGM,专家系统将领域内的专家知识表示成了一系列图中的结点和边,并且可以用这些专家知识进行推理。下图是一个ALARM药学知识专家系统
实际上知识图谱是一种现代化的专家系统,依然属于符号学派对于人工智能的尝试
image-20211002201531267
贝 ...
Stanford-CS144-计算机网络Lab3:TCP发送端
Stanford CS144 Introduction to Computer Network课程Project的lab3,这个lab主要任务是实现一个TCP的接收端TCPSender
Overview
书接上回,上一个lab中我们实现了TCP接收端的基本功能,而这一次我们需要实现的是TCP的发送端,发送端的核心类TCPsender的主要作用是将发送端存储的字节流分割成若干个TCPSegment并将其发送出去,同时在发送的过程中还要做到流量控制和丢失重传等功能,它的功能可以概括成以下几个点:
关注Receiver端的窗口大小,即处理接收端发送过来的ackno和window size
在发送数据的时候,根据窗口的大小尽可能的从存储数据流的ByteStream中读取对应数量的字节并生成对应的TCP Segment然后将它们发送出去
关注哪些segment发送出去之后没有收到回复,这些segment被称为outstanding的,并且如果一个segment发送出去之后超过一定的时间还没有收到回复,那么它就会被重新发送
这个操作被称为Automati ...
CMU10-708概率图模型1:Introduction
这是CMU的一门研究生课程,主要讲概率图模型及其相关的各种应用,由知名学者Eric Xing主讲,看起来课程内容非常不错,因此来学一学这门课。我一开始看的是2020Spring的Eric Xing的Lecture,发现不太能get到PPT里的点,所以后来改成了2021Spring由Matt Gormley主讲。
Introduction
这是一门讲概率图模型的入门课程,讲的内容包括:图模型的设计,图模型的推理和学习,近似推理,深度学习和深度生成模型,结构和因果推理,强化学习和图模型的内在联系,非参数化贝叶斯,图模型的应用系统设计等等,总的来看课程内容非常饱满,不知道具体学起来效果如何。 >注:第一部分是2020Spring Eric Xing的课程的第一节课,而后面的第二部分是Matt的第一节课的内容,两个老师的第一节课内容差别很大,所以分别记录一下。 ### 什么是图模型
图模型(Graphical Model)实际上就是用图结构来表示随机变量之间关系的模型,随机变量构成图中的一个个结点,而随机变量之间的关系构成图中的边。这些关系可以是相关,独立,不独 ...
Stanford-CS144-计算机网络Lab2:TCP接收端
Stanford CS144 Introduction to Computer Network课程Project的lab2,这个lab主要任务是实现一个TCP的接收端TCPReceiver
Overview
上一个lab中,我们实现了一个TCP接收端的流重组器,接下来的lab3就要我们实现整个TCP接收端的东西,相比于流重组器,TCP的接收端还要处理一些接收到的TCP报文段中的信息,并将数据交给流重组器进行处理,每个TCPReceiver实际上管理了一个流重组器。
同时接收端还需要告诉发送端一些重要的信息并以报文的形式返回,包括:
第一个没有进行整流的字节的索引,也被叫做ackno,这是接收端期望从发送端收到的第一个字节
第一个没有进行整流和第一个没有收到的索引之间的距离,这个距离也就是TCP的窗口大小,这是告诉发送端,发送出来的东西的大小不要超过窗口的大小。
上一次实验中给的一张图可以很好的表示这几个不同的索引之间的关系:
image-20211231000601186
同时,ackno和窗口大小共同描述了接收端的窗口信息,告诉了发 ...
高级数据库技术期末复习整理
秋冬学期上了一门研究生课程《高级数据库技术》,高云君老师上课还挺有意思的,虽然自己讲的时间比较少,平时也没啥作业,总的来说比较摸鱼。快要期末考试了所以来整理一下这门课讲了哪些东西。
空间数据库
空间数据库可以存储空间中的点,线,面的信息,其功能包括:最短路径搜索,最快路径搜索,区间查询,聚合查询,近邻查询,最优位置查询,skyline查询等等。下面这些内容都是空间数据库中的经典算法。
R-Tree
R树是一种用来解决空间数据库中高效查询问题的数据结构,在空间数据库中,数据往往不是单维度的,会有多个维度的数据共同参与到一次查询中,比如对考试成绩的查询,需要查同时满足数学成绩位于80-90以及化学成绩位于80-90的同学时,如果我们采用传统的数据库索引(比如B+树)可能就会碰到下面的问题:
比如我们先将数学成绩作为主键,查询到所有数学成绩位于80-90的同学,然后在此基础上继续查化学成绩位于80-90的同学,那么势必会造成,第一次查询的结果中包含一些化学成绩不在80-90的无效查询结果,这会造成性能上的浪费。而R树正是为了解决这个问题而被设计出来的,它可以 ...
我的2021年终总结
对2021年的一些回望和一些所思所想。
一不小心又到了一年的最后一天,按常理来说今天应该是朋友圈小作文集中爆发的时间点,那么我也不妨来写一篇,毕竟写小作文和写大论文一样,属于是生活在现代社会的必备技能了。大论文不会写可能只是毕不了业,小作文不会写,那可真是影响一个人在网络世界里的舆论影响力。
还记得年初的时候,我还处于大三上半学期,当时似乎忙着软工三连的答辩和验收,虽然每个组都没怎么实现老师给的需求,但是答辩的时候各种互联网营销话术大家依然都是信手拈来,这边刚结束“顶层设计”,那边就来了“底层逻辑”和产业闭环,颇有种少先队大队委开会讨论使命愿景的感觉。后来又花不少时间复习操作系统和计算机网络的期末考试,稀里糊涂考了几门试就放假了,这个时候的我的主要想法是,这个学期累完了,下个学期就可以躺平了吧。
后来过完寒假下学期开学了,发现大家都忙着找实习,到处招人内推,一有空就开始刷LeetCode背面经准备面试,本着重在参与的原则我也简单参与了一下,虽然我一直都想读个研但是觉得先去体验一下业界现状也不错,于是就报了蚂蚁和字节的教育部门,报蚂蚁是觉得蚂蚁离玉泉近,上下班方 ...
Stanford-CS144-计算机网络Lab1:流重组器
Stanford CS144 Introduction to Computer Network课程Project的lab1,这个lab需要我们实现一个流重组器(Stream Assembler)对分段的字符串进行重组,这个结构在后续的lab中非常重要
Overview
在lab0中,我们实现了一个可信的顺序字节流数据结构,然而,网络通信可能是best-effort的,发送的数据段也会出现丢失,重复,被改写,被打乱等情况,这个时候,我们就需要在收发两端对收到的数据段进行整理和重组,从一系列杂乱的数据段中恢复出完整的数据报,并存储在lab0实现的ByteStream中,实现这个功能的数据结构被称为流重组器,因此lab1就需要我们实现这个流重组器StreamReassembler
Sponge的架构
image-20211228233450236
实验里提供了一个Sponge的架构图帮助我们更清晰的认识我们要实现的TCP/IP协议栈的基本架构,实验里IP相关的协议都是建立在TCP的基础上的,通过IPv4的格式从应用层传递到TCP对应的传输层,并以Segm ...
论文阅读笔记31:大规模知识图谱对齐LargeEA
研究生课程《高级数据库技术》课程指定的阅读论文其中一篇《LargeEA: Aligning Entities for Large-scale Knowledge Graphs》,发表于PVLDB 2022,因为期末考试要考所以仔细读一读。
Introduction
实体对齐Entity Alignment是指在不同的知识图谱中找到对齐的实体,已有的方法都缺乏可扩展性,因为他们很多都依赖复杂的模型和参数设置,并且只在benchmark中进行实验,并不能很好的用在现实世界实际场景下的数据中。同时,已有的一系列EA方法往往只是基于知识图谱三元组的结构信息,而忽略了很多side information,比如每个实体的名字,这些东西中也包含了重要的实体信息,可以用来辅助实体对齐,比如两个名字很相似的实体很有可能指代的就是同一个东西。这些都是已有的EA方法存在的不足。
为了让EA方法能够适应大规模的真实数据集,一种办法是采用大规模的分布式训练,但是这种方法训练代价高昂。论文提出的一种办法是,将大规模的数据集分割成独立的若干个mini-batch,然后分别进行训练和对齐,这 ...
Stanford-CS144-计算机网络Lab0:可信字节流
开了新坑CS144计算机网络课程,这门课的授课内容是根据《计算机网络自顶向下方法》来的,但是听说授课质量比较一般,我也没具体看过Lecture,这门课价值最大的地方在于它的Project, 一共包含8个lab, 可以实现一套自己的简易TCP/IP协议栈,使用C++完成。因为我本科期间计网这门课学的不是很好,所以打算再做一做CS144的lab补一补,希望能坚持做完这些lab
前言
CS144 Introduction to Computer Networking的Project 共分为8个lab,每个lab都需要实现简单的TCP/IP协议栈(课程称之为Sponge) 的一个关键部分。首先是lab0 Warm Up,在lab0中我们需要尝试运行一些计算机网络相关指令(这一部分略去),尝试Linux环境下的网络编程,以及动手实现一个基本的数据结构:ByteStream作为TCP通信过程中的可信字节流对象。
项目提供了初始代码,但是需要自己配置开发环境,我选择了按照课程网站中的指示,下载了VirtualBox并安装了课程指定的虚拟机镜像,然后通过VSCode便捷的SS ...
论文阅读笔记30:异构分布式机器学习Partial Reduce
研究生课程《高级数据库技术》课程指定的阅读论文其中一篇《Heterogeneity-Aware Distributed Machine Learning Training via Partial Reduce》,发表于SIGMOD2021,因为期末考试要考所以仔细读一读。
Introduction
数据的并行化训练是分布式机器学习的关键,在同构环境下,All-Reduce是最常用的分布式机器学习训练时的通信算法,但是这种算法对straggler(即一直没有完成训练的节点,在All-Reduce算法中,其他节点需要等待这个节点训练完成)和通信延迟非常敏感,但是随着现在的深度学习任务往往被部署在异构的环境上进行(比如云端服务器),straggler和通信延迟的现象会越来越多,因为不同的节点处于不同的环境中,节点上模型训练的速度也会有很大的差别,这就导致每个节点完成训练的时间点可能有较大差距,这种异构的训练环境下并不适合使用All-Reduce算法,这也正是这篇论文的motivation
已有的分布式训练算法包括Parameter-Server,All-Reduce ...