《云原生开发实践》记录

《云原生开发实践》记录 本书会包含大量的实践内容,现阶段应着重看理论内容、实践内容暂且忽略,实践内容在理论补充完毕后用到哪块补哪块。 容器化 DOCKERFILE 的多阶段构建在部署阶段很有用,可以大幅减少镜像的体积。 Docker 可以自建网络,这样就可以把很多容器纳入到同一个网络下,实现容器间按容器名访问对方。 容器编排 对于一个中大型的应用,会有很多的容器组件。而有些容器如Redis、RabbitMQ、Kafka等需要紧密的配合,这时候就需要用到容器编排。 Docker Compose 组件用于实现本地单个节点上的容器编排,它会从 docker-compose.yaml 文件中读取所需的全部容器的定义,然后运行 docker-compose up 命令启动容器编排。Docker Swarm 可以管理多个节点上的容器,即管理 Docker 集群。 云原生软件生产流程 云计算的能力: 弱化了传统 IT 硬件概念,革命性地降低了企业在基础设施上的建设成本。 实现了弹性获取计算资源,用户可以按需使用。 云计算的成熟时云原生发展的基石,使云原生的许多概念得以落地。云原生应用一般有以下特点: 在应用的设计和开发阶段就为部署到云上做适配。 应用由多个松耦合的小模块构成而不是一个庞大的单体项目,即微服务架构。 通过容器来交付和发布应用,应用代码中会加入容器化需要的文件。 和传统的软件生产方式相比,云原生的优势主要在塔提高了应用发布和运维时的效率,显著降低了运维的复杂性。 云原生基础设施 Kubernetes Kubernetes 是开源的容器编排平台,支持集群环境下部署和管理容器化应用。目前已经是容器编排领域的事实标准,成为云原生的操作系统。Kubernetes 也叫 K8s ,8指中间的8个字母。K8s 2013年由 Google 开源,相比于 Docker Swarm K8s 提供更加复杂强大的功能。 K8s 集群中包含两种节点,一种是 Control Plane 节点(master 节点),另一种是 worker 节点。K8s 中的容器运行在 Pod 中,Pod 运行在 Node 中。每个集群默认至少有一个 Pod ,否则 Pod 无法调度和运行。Control Plane 是 K8s 的容器编排层,通过它提供的 API ,可以定义和部署容器及管理容器的整个生命周期。Control Plane 有以下组件:...

January 22, 2025 · 107 words · Kurong

《Go微服务实战》记录

《Go微服务实战》记录 本书包含很多的 Go 基础和部分进阶内容,这里只选取对现阶段有帮助的内容,毕竟 Go 已经入门过一遍了。 Go 基础 关于指针,如果涉及到修改变量本身就使用指针作为函数输入变量等,典型的如单例模式下的变量都是指针。反之如果不修改变量本身,就直接使用复制变量作为函数输入变量等,函数返回值自然也是某个新的变量。 关于 Go 中的循环,请看 code: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package main func main() { for i := 0; i < 10; i++ { ... } // 最标准的循环 for { ... } // 就是没有显式跳出条件的 while arr := []int{1, 2, 3, 4, 5} for i, v := range arr { ... } // 这里的 range 是关键字,用法有些类似于 Python 中的 enumerate 函数 } Go 的垃圾回收策略使用的三色标记法,具体内容会单独进行学习。...

January 18, 2025 · 2955 words · Kurong

《PostgreSQL指南》记录

《PostgreSQL指南》记录 Why choose PostgreSQL, or not MySQL ? SQL 标准支持更好:PostgreSQL 对 SQL 标准的支持更加全面,而 MySQL 在某些情况下依赖非标准实现(如分组函数的行为)。 高级功能更强: JOSNB 的性能更优:PostgreSQL 的 JSONB 数据类型支持更高效的索引和操作,而 MySQL 的 JSON 功能较为有限。 复杂查询:支持递归查询、窗口函数等复杂功能,而 MySQL 在这些方面功能较弱或支持有限。 并行查询:PostgreSQL 提供原生的并行查询能力,能够充分利用多核 CPU,而 MySQL 直到 8.0 版本才有一定程度的改进。 扩展性更好: PostgreSQL 支持自定义数据类型、函数和插件,更适合需要扩展或复杂业务逻辑的项目。 PostGIS 插件使其在地理信息领域表现出色,而 MySQL 的 GIS 功能相对简单。 更高的性能和灵活性: 支持多种索引类型(如 GIN、GiST、BRIN 等),适合高性能全文搜索、地理查询等场景。 支持更复杂的查询优化器策略,适合复杂查询和数据分析。 更可靠的数据一致性: PostgreSQL 的 MVCC 机制更成熟,避免了常见的锁争用问题。 MySQL 的 MVCC 在某些情况下(如高并发)性能欠佳,容易导致死锁。 PostgreSQL 适用于有复杂数据分析需求、地理信息系统、高并发和大数据量等应用场景,相比于 MySQL 的应用场景更复杂。 数据库集簇、数据库和数据表 数据库集簇的逻辑结构 数据库集簇是一组数据库的集合,由一个 PostgreSQL 服务器管理。而数据库是数据对象的集合,数据库对象用于存储或引用数据的数据结构。 在 PosgreSQL 中,所有的数据库对象都通过相应的对象标识符(oid)进行管理,这些标识都是无符号 4 字节整型。...

December 22, 2024 · 768 words · Kurong

《高效使用Redis》记录

《高效使用Redis》记录 基础数据结构解析 对象 Redis中的 RedisObject 的 c 定义: 1 2 3 4 5 6 7 8 #define LRU_BITS 24 typedef struct redisObject { unsigned type:4; // 数据类型 unsigned encoding:4; // 底层数据结构 unsigned lru:LRU_BITS; // 缓存淘汰时使用 int refcount; // 引用计数 void *ptr; // 指向实际存储位置 } robj; RedisObject 是 Redis 中数据结构的一个抽象,用它来存储所有的 key-value 数据。 下面是结构体中各个属性的。说明: type:用来表示对象类型; encoding:表示当前对象底层存储所采用的数据结构,如int、字典、压缩列表、跳跃表等等; lru:用于在配置文件中通过 maxmemory-policy 配置已用内存到最大内存限制时的缓存淘汰策略。 以 GET 命令为例,简单看看 Redis 中的 LRU 实现。使用 GET 后,会执行这段代码更新对象的 lru 属性: 1 2 3 4 5 if (server....

December 5, 2024 · 1410 words · Kurong

《gRPC与云原生应用开发》记录

《gRPC与云原生应用开发》记录 gRPC 入门 gRPC 的定义 gRPC 是一项进程间通信技术,可以用来连接、调用、操作和调试分布式异构应用程序。 开发 gRPC 应用程序时,要先定义服务接口:消费者消费信息的方式、消费者能够远程调用的方法以及调用方法所使用的参数和消息格式等。在服务定义中使用的语言叫作接口定义语言(IDL)。 下面是使用 protocol buffers 作为 IDL 来定义服务接口: 服务定义 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // ProductInfo.proto syntax = "proto3"; package ecommerce; // 防止协议消息类型之间发生命名冲突 // 定义服务接口 service ProductInfo { rpc addProduct(Product) returns (ProductID); rpc getProduct(ProductID) returns (Product); } // 定义消息格式 message Product { string id = 1; string name = 2; string description = 3; } message ProductID { string value = 1; } 上面定义完成之后,就使用 protocol buffers 编译器 protoc 生成服务器端和客户端代码。...

November 30, 2024 · 963 words · Kurong

《深入RabbitMQ》记录

《深入RabbitMQ》记录 RabbitMQ 基础 AMQP 协议 AMQP,即高级消息队列协议(Advanced Meesage Queuing Protocal)。它定义了一个 AMQ 应该有以下三部分: 交换器:一个接收器接收发送到 MQ 中的消息并决定把它们投递到何处; 队列:存储接收到的消息; 绑定:定义队列和交换器之间的关系。在 RabbitMQ 中,绑定或者叫绑定键即告知一个叫交换器应该将消息投递到哪些队列中。 使用 AMQ 协议与 Rabbit 进行交互 AMQP 帧类型 AMQP 规定了五种类型的帧: 协议头帧:用于连接到 RabbitMQ,仅使用一次; 方法帧:携带发送到 RabbitMQ 或从 RabbitMQ 接收到的 RPC 请求或响应; 内容头帧:包含一条消息的大小和属性; 消息体帧:包含消息的内容; 心跳帧:确保连接,一种校验机制。 将消息编组成帧 首先是方法帧、内容头帧,这两种帧比较好理解。 而消息体帧会根据消息体的大小切分成一到多个消息体帧。 要发送消息,首先发送的是方法帧,之后是内容帧,最后是若干个消息体帧。 帧结构 方法帧携带构建 RPC 请求所需的类、方法和参数。 内容头帧包含了消息的大小和其他对消息起描述作用的属性。 消息体帧可以传输很多类型的数据,可以是二进制、文本,也可以是二进制化的图片和序列化后的json、xml。 使用协议 包含下面一个基本流程: 声明交换器 声明队列 绑定队列到交换器 发布消息到 RabbitMQ 从 RabbitMQ 消费消息 消息属性详解 使用 content-type 创建显式的消息契约 在不同的语言的消费者框架中,框架可以自动的根据 content-type 类型将其反序列化为该语言中的数据结构。 使用 gzip 和 content-encoding 压缩消息大小 通过指定 content-encoding 属性可以在消息体上应用特殊的编码。...

November 28, 2024 · 192 words · Kurong

华为云部署踩坑

华为云部署踩坑 Docker 国内镜像源(截止到2024.11.1) DockerHub 镜像仓库 是否正常 hub.xdark.top 正常 hub.littlediary.cn 正常 dockerpull.org 新增 hub.crdz.gq 正常 docker.1panel.live 正常 docker.unsee.tech 新增 docker.m.daocloud.io 正常 docker.kejilion.pro 正常 registry.dockermirror.com 正常 hub.rat.dev 正常 dhub.kubesre.xyz 正常 docker.nastool.de 正常 docker.hpcloud.cloud 失效 docker.hlyun.org 失效 doublezonline.cloud 失效 docker.chenby.cn 失效 ginger20240704.asia 失效 lynn520.xyz 失效 hub.docker-ttc.xyz 失效 noohub.ru 失效 docker.nat.tf 失效 dockerproxy.cn 失效 freeno.xyz 失效 docker.registry.cyou 失效 hub.yuzuha.cc 失效 docker-cf.registry.cyou 失效 docker.mrxn.net 失效 dockerproxy.github.io 失效 docker.wget.at 失效 atomhub.openatom.cn 失效 ccr.ccs.tencentyun.com 失效 dockerproxy.com 失效 dislabaiot....

November 5, 2024 · 327 words · Kurong

《计组KG》课题开发过程(三)

牢骚 时隔一个多月才完成了基本的可视化系统的搭建,中间有着各种各样的原因:Vue3第一次用、Django-Ninja不熟悉等等再加上一些闲杂原因就一直拖到了现在,效率多少有点堪忧。 总之不算怎么说,也算是曲折的完成了原定计划,下面将从后端、前端的技术选择、功能介绍、成品展示等几个章节大致的讲述下。 后端 项目地址 KurongTohsaka/PCCKGVisualization 技术栈 Web 框架自然是选相对擅长且好用的 Django ,但是 Django 本身使用起来又过于繁重,不太适合开发Restful类型的接口,所以一般会搭配着 Django REST Framework (DRF) 使用。但是这一次我打算尝试一个新的 Django 扩展,它是 FastAPI 的 Django 版:Django-Ninja 。 Web 框架订好了以后,就该选数据库了。既然是存储图数据,那肯定是 Neo4j 。而网站数据就使用简单的 Sqlite 吧,主要就是省事。 功能与接口 下面的所有接口的最上级请求路径:pcc_kg_vs 功能主要分为两部分:认证和可视化。 首先是认证,包含以下基本功能: 用户认证:用户登陆、注册、登出 API 鉴权:token 验证 CSRF 验证:CSRF token 验证 下面是简易的接口标准: 登陆 先检查该用户是否已注册,若注册则从数据库中根据信息查询到用户,然后登陆该用户。若未注册则登陆失败 1 2 3 4 5 6 7 8 9 10 11 12 13 14 { "method": "POST", "path": "/login", "params": { "username": "", "password": "" }, "return": { "successful": bool, "code": int, "token": str, //登陆令牌 'info': str } } 登出 HTTPBearer...

November 4, 2024 · 247 words · Kurong

MAC上用docker配置neo4j以及apoc扩展的过程

拉取 neo4j Docker image 在 MAC 上用的 Docker Desktop,确实很方便操作。 直接在 Image Tab 页搜 Neo4j 就有一个官方 image,我选的 5.24.1版本,pull 下来。 这里之所以要选择一个特定的版本,原因是之后要启用的 apoc 扩展需要用对应 neo4j 版本的 jar 包。 配置容器 因为用的 Docker Desktop,很多没必要的步骤都可以直接忽略。配置好转发端口、挂载位置后,就启动容器。 Neo4j 容器启动后默认直接运行,登陆 Web 管理界面配置后用户名密码后就完成了基本配置。 Docker 真 tm 好用( 配置 apoc 这里需要注意一点,neo4j 5.x 之后的版本中,apoc 本身的相关配置需要写在 neo4j/conf/apoc.conf 里,而不是 neo4j/conf/neo4j.conf 中,不然在启动服务时会报错!!! 首先是 apoc 的下载地址:Index of /doc/neo4j-apoc/ 。 下载好后,把它放进 neo4j/plugins,并改名为 apoc.jar (啥名都行,这里是方面后面改配置)。 接下来修改 neo4j/conf/neo4j.conf ,修改以下两行并取消该行注释: 1 2 dbms.security.procedures.unrestricted=apoc.* dbms.security.procedures.allowlist=apoc.coll.*,apoc.load.* 最后修改 neo4j/conf/apoc.conf : 1 2 apoc.import.file.enabled=true apoc....

October 22, 2024 · 72 words · Kurong

《Distantly-Supervised Joint Extraction with Noise-Robust Learning》笔记

Link https://arxiv.org/abs/2310.04994#:~:text=We%20propose%20DENRL,%20a%20generalizable%20framework%20that%201) Accepted by ACL 2024. Intro 联合抽取旨在使用单一模型检测实体及其关系,这是自动知识库构建中的关键步骤。为了廉价地获取大量标注的联合训练数据,提出了远程监督(Distantly Supervise,DS),通过将知识库(Knowledge Base,KB)与未标注的语料库对齐,自动生成训练数据。假设如果一个实体对在 KB 中有关系,则包含该对的所有句子都表达相应的关系。 然而,DS 带来了大量的噪声标签,显著降低了联合抽取模型的性能。此外,由于开放域 KB 中实体的模糊性和覆盖范围有限,DS 还会生成噪声和不完整的实体标签。在某些情况下,DS 可能导致 KB 中包含超过30%的噪声实例,使得学习有用特征变得不可能。 处理这些噪声标签的先前研究要么考虑弱标注的实体,即远程监督的命名实体识别(NER),要么考虑噪声关系标签,即远程监督的关系抽取(RE),它们专注于设计新颖的手工制作关系特征、神经架构和标注方案以提高关系抽取性能。此外,使用大型语言模型(LLMs)的上下文学习(ICL)也很流行。然而,它们资源需求高,对提示设计敏感,可能在处理复杂任务时表现不佳。 为了廉价地减轻两种噪声源,我们提出了 DENRL (Distantly-supervised joint Extraction with Noise-Robust Learning)。DENRL 假设 可靠的关系标签,其关系模式显著表明实体对之间的关系,应该由模型解释; 可靠的关系标签也隐含地表明相应实体对的可靠实体标签。 具体来说,DENRL应用词袋正则化(BR)引导模型关注解释正确关系标签的显著关系模式,并使用基于本体的逻辑融合(OLF)通过概率软逻辑(PSL)教授底层实体关系依赖性。这两种信息源被整合形成噪声鲁棒损失,正则化标注模型从具有正确实体和关系标签的实例中学习。接下来,如果学习到的模型能够清晰地定位关系模式并理解候选实例的实体关系逻辑,它们将被选择用于后续的自适应学习。我们进一步采样包含已识别模式中对应头实体或尾实体的负实例以减少实体噪声。我们迭代学习一个可解释的模型并选择高质量实例。这两个步骤相互强化——更可解释的模型有助于选择更高质量的子集,反之亦然。 Joint Extraction Architecture Tagging Scheme 为了同时抽取实体(提及和类型)和关系,我们为每个起始位置 $p$ 标注四元组 ${e_1, tag_1, e_2, r_e}$,并定义 “BIO” 标记来编码位置。对于一个 $T$ 个 token 的句子,我们根据不同的起始位置标注 $T$ 个不同的标记序列。 对于每个标记序列,如果 $p$ 是一个实体的起始位置(该序列是一个实例),则在 $p$ 处标注实体类型,并用关系类型标注与 $p$ 处实体有关系的其他实体。其余的令牌标注为 “O”(Outside),表示它们不对应头实体。这样,每个标记序列将生成一个关系四元组。 我们将包含至少一个关系的实例定义为正实例,没有关系的实例定义为负实例。“BIO”(Begin, Inside, Outside)标记用于指示每个实体中令牌的位置信息,以便同时提取多词实体和关系类型。注意,我们不需要尾实体类型,因为每个实体都会被查询,我们可以从 T 标记序列中获得所有实体类型及其关系。 Tagging Model Self-Match BERT...

October 5, 2024 · 119 words · Kurong

《Summarization as Indirect Supervision for Relation Extraction》笔记

Link [2205.09837v2] Summarization as Indirect Supervision for Relation Extraction (arxiv.org) Accepted EMNLP 2022. Intro 关系抽取(RE)旨在从文本中提取实体之间的关系。例如,给定句子“Steve Jobs 是 Apple 的创始人”,RE 模型会识别出“创立”这一关系。RE 是自然语言理解的重要任务,也是构建知识库的关键步骤。先进的 RE 模型对于对话系统、叙事预测和问答等知识驱动的下游任务至关重要。 现有的 RE 模型通常依赖于带有昂贵注释的训练数据,这限制了它们的应用。为了应对这一问题,本文提出了一种新的方法——SURE(Summarization as Relation Extraction),将 RE 转化为摘要任务,通过间接监督来提高 RE 的精度和资源效率。 图1展示了 SURE 的结构。具体来说,SURE 通过关系和句子转换技术将 RE 转化为摘要任务,并应用约束推理进行关系预测。我们采用实体信息口语化技术,突出包含实体信息的句子上下文,并将关系口语化为模板式的简短摘要。这样,转换后的RE输入和输出自然适合摘要模型。然后,我们通过在转换后的RE数据上进行微调,将摘要模型适配于RE任务。在推理过程中,设计了一种 Trie 评分技术来推断关系。通过这种方式,SURE 充分利用了摘要的间接监督,即使在资源匮乏的情况下也能获得精确的RE模型。 这项工作的贡献有两个方面。首先,据我们所知,这是首次研究利用摘要的间接监督进行RE。由于摘要的目标与 RE 自然对齐,它允许在不完全依赖直接任务注释的情况下训练出精确的 RE 模型,并在资源匮乏的情况下表现出色。其次,我们研究了有效桥接摘要和 RE 任务形式的输入转换技术,以及进一步增强基于摘要的RE推理的约束技术。我们的贡献通过在三个广泛使用的句子级 RE 数据集 TACRED、TACREV 和 SemEval 以及 TACRED 的三个低资源设置上的实验得到验证。我们观察到,SURE 在低资源设置下(使用10%的 TACRED 训练数据)优于各种基线。SURE 还在 TACRED 和 TACREV上 分别以75.1%和83.5%的 micro-F1 得分达到了SOTA 性能。我们还进行了全面的消融研究,展示了摘要的间接监督的有效性以及 SURE 输入转换的最佳选项。...

September 29, 2024 · 129 words · Kurong

《Modular Self-Supervision for Document-Level Relation Extraction》笔记

Link [2109.05362] Modular Self-Supervision for Document-Level Relation Extraction (arxiv.org) Accepted at EMNLP 2021 Intro 信息抽取的先前工作通常集中在句子内的二元关系。然而,实际应用往往需要跨大段文本提取复杂关系。这在生物医学等高价值领域尤为重要,因为获取最新发现的高召回率至关重要。例如,图1显示了一个三元(药物、基因、突变)关系,表明具有 MAP2K1 突变 K57T 的肿瘤对 cobimetinib 敏感,但这些实体从未在同一段落中同时出现。 先前的工作都将文档级关系抽取视为一个单一的整体问题,这在推理和学习上都带来了重大挑战。尽管最近取得了一些进展,但在使用最先进的神经架构(如LSTM 和 transformer)建模长文本范围时仍存在显著挑战。此外,直接监督稀缺,任务特定的自监督(如距离监督)在应用于短文本范围之外时变得极其嘈杂。 在本文中,我们通过将文档级关系抽取分解为局部关系检测和全局推理来探索一种替代范式。具体来说,我们使用 Davidsonian 语义表示 $n$ 元关系,并结合段落级关系分类和使用全局推理规则(例如,参数解析的传递性)的篇章级参数解析。每个组件问题都存在于短文本范围内,其相应的自监督错误率要低得多。我们的方法借鉴了模块化神经网络和神经逻辑编程的灵感,将复杂任务分解为局部神经学习和全局结构化集成。然而,我们不是从端到端的直接监督中学习,而是承认组件问题的模块化自监督(Modular Self-Supervision),这更容易获得。 这种模块化方法不仅使我们能够处理长文本,还能扩展到所有先前方法无法覆盖的跨段落关系。我们在精准肿瘤学的生物医学机器阅读中进行了全面评估,其中跨段落关系尤为普遍。我们的方法在最具挑战性的关系中表现尤为突出,这些关系的参数从未在段落中同时出现,其F1分数比之前的最先进方法(如多尺度学习(和图神经网络高出20多个百分点。 Document-Level Relation Extraction 设 $E,R,D$ 分别代表实体、关系、文档,那在图2中的 $R$ 为精准癌症药物反应,实体 $E_1,E_2,E_3$​ 分别药物 cobimetinib、基因 MAP2K1 和突变 K57T。这个关系跨越多个段落和几十个句子。 用新戴维森语义表示 n 元关系抽取: $$ R_D(E_1, \cdots, E_n) \equiv \exists T \in D \exists r. [R_T(r) \land A_1(r, E_1) \land \cdots \land A_n(r, E_n)] $$ 其中,$T$ 为文档 $D$ 中的片段,$r$ 为引入的事件变量以表示 $R$​ 。...

September 28, 2024 · 100 words · Kurong

《Separating Retention from Extraction in the Evaluation of End-to-end Relation Extraction》笔记

Link [2109.12008v1] Separating Retention from Extraction in the Evaluation of End-to-end Relation Extraction (arxiv.org) Accepted at EMNLP 2021 Intro 信息抽取(Information Extraction, IE)旨在将文本中表达的信息转换为预定义的结构化知识格式。这个总体目标被分解为更容易自动执行和评估的子任务。因此,命名实体识别(Named Entity Recognition, NER)和关系抽取(Relation Extraction, RE)是两个关键的 IE 任务。传统上,这些任务是通过流水线方式执行的。也可以采用联合方式处理,以建模它们的相互依赖性,减少错误传播并获得更现实的评估设置。 随着 NLP 领域的总体趋势,最近在实体和关系抽取基准测试中报告的定量改进至少部分归因于使用了越来越大的预训练语言模型(Language Models, LMs),如 BERT 来获得上下文词表示。同时,人们意识到需要新的评估协议,以更好地理解所获得的神经网络模型的优缺点,而不仅仅是对一个保留测试集上的单一整体指标。 特别是,对未见数据的泛化是评估深度神经网络的关键因素。在涉及提取提及的IE任务中,这一点尤为重要:小范围的词语可能会同时出现在评估和训练数据集中。已证明这种词汇重叠与NER中神经网络的性能相关。对于流水线 RE,神经模型过度依赖候选参数的类型或其上下文中存在的特定触发词。 在端到端关系抽取中,我们可以预期这些 NER 和 RE 会结合在一起。在这项工作中,我们认为当前的评估基准不仅衡量了从文本中提取信息的能力,还衡量了模型在训练期间简单保留标记的(头、谓词、尾)三元组的能力。当模型在训练期间看到的句子上进行评估时,很难区分这两种行为中的哪一种占主导地位。 然而,我们可以假设模型可以简单地检索先前看到的信息,像一个被压缩的知识库一样,通过相关查询进行探测。因此,在包含过多已见三元组的示例上进行测试可能会高估模型的泛化能力。 即使没有标记数据,LMs也能够学习一些单词之间的关系,可以通过填空句子进行探测,其中一个参数被掩盖。 Datasets and Models 数据集选用了 CoNLL04、ACE05、SciERC。 模型选用了三个模型: PURE:Pipeline 模型 SpERT:Joint 模型 Two are better than one(TABTO):Joint 模型 Partitioning by Lexical Overlap(基于词汇重叠的划分) 我们根据与训练集的词汇重叠情况对测试集中的实体提及进行划分。我们区分了已见和未见的提及,并将这种划分扩展到关系上。 我们实现了一个简单的保留启发式方法(Retention Heuristic,启发式方法),将训练集中确切存在的实体提及或关系标记为其多数标签。我们在表1中报告了 NER 和 RE 的 Micro-avg....

September 27, 2024 · 149 words · Kurong

《Better Few-Shot Relation Extraction with Label Prompt Dropout》笔记

Link [2210.13733] Better Few-Shot Relation Extraction with Label Prompt Dropout (arxiv.org) Accepted EMNLP 2022. Intro 在这项工作中,我们提出了一种称为标签提示丢弃(Label Prompt Dropout, LPD)的新方法。我们直接将文本标签和上下文句子连接在一起,并将它们一起输入到 Transformer Encoder 中。文本标签作为标签提示,通过自注意力机制引导和规范 Transformer Encoder 输出标签感知的关系表示。在训练过程中,我们随机丢弃提示标记,使模型必须学会在有和没有关系描述的情况下工作。实验表明,我们的方法在两个标准的FSRE数据集上取得了显著的改进。我们进行了广泛的消融研究,以证明我们方法的有效性。此外,我们强调了先前研究工作评估设置中的一个潜在问题,即预训练数据中包含的关系类型实际上与测试集中的关系类型重叠。我们认为这对于少样本学习来说可能不是一个理想的设置,并表明现有工作的性能提升可能部分归因于这种“知识泄漏”问题。我们建议过滤掉预训练数据中所有重叠的关系类型,并进行更严格的少样本评估。总之,我们做出了以下贡献: 我们提出了 LPD,一种新的标签提示丢弃方法,使 FSRE 中的文本标签得到了更好的利用。这种简单的设计显著优于以前使用复杂网络结构将文本标签和上下文句子融合的方法。 我们识别了文献中先前实验设置的局限性,并提出了一个更严格的FSRE评估设置。对于这两种设置,我们都显示出比以前的最先进方法更强的改进。 Related Work Few-Shot Relation Extraction Prompt-Based Fine-Tuning 基于提示的模型在小样本和零样本学习中表现出色。这一研究方向的模型尝试将下游微调任务与预训练的掩码语言建模目标对齐,以更好地利用预训练语言模型的潜在知识。 然而,与许多其他自然语言处理任务(如二元情感分析中的“正面/负面”)的标签语义直观不同,关系抽取中的关系类型可能非常复杂,通常需要较长的句子来描述。例如,FewRel 中的关系 P2094 被描述为“由监管机构进行的官方分类,主体(事件、团队、参与者或设备)符合纳入标准”。基于提示的模型在这种情况下会遇到困难,因为它们需要固定的模板(例如,提示模板中的 [MASK] 令牌数量必须固定)。以前的方法不得不依赖手动设计的提示模板,并使用关系名称而不是关系描述。 为了解决这个问题,我们提出直接使用整个关系描述作为提示,而不使用任何掩码令牌。在传统的基于提示的模型中,提示用于创建自然描述,以便模型可以在 [MASK] 位置进行更好的预测,而本研究中使用的标签提示通过自然描述来帮助规范模型输出更好的类别表示。 Approach Training with Label Prompt Dropout 对于每个支持实例,我们直接将关系描述和上下文句子用“:”连接起来。例如,句子“北京举办了2022年冬季奥运会”将变成“事件地点: 北京举办了2022年冬季奥运会。” 这个想法是创建一个自然的实例,其中定义首先给出,然后是例子。关系描述和冒号作为标签提示,引导 Transformer Encoder 输出一个标签感知的关系表示。为了防止模型完全依赖标签提示而忽略上下文句子,标签提示会以 $α_{train}$ 的概率随机丢弃。例如,上图中的支持实例“十进制数最早在印度发展起来”保持其初始形式,因为其标签提示被丢弃了。对于查询实例,我们直接输入句子而不带任何标签提示。这是因为查询集本质上与测试集相同,我们不应假设可以访问真实知识。随后,使用特殊实体标记来标记头部和尾部,并在句子的前后添加特殊的分类和分隔标记,例如“[CLS] 事件地点: [E1] 北京 [/E1] 举办了 [E2] 2022年冬季奥运会 [/E2]。” 解析后的句子然后被送入Transformer Encoder。...

September 22, 2024 · 136 words · Kurong

《Making Pre-trained Language Models Better Continual Few-Shot Relation Extractors》笔记

Link [2402.15713] Making Pre-trained Language Models Better Continual Few-Shot Relation Extractors (arxiv.org) Accepted COLING 2024 COLING: CCF B Intro 关系抽取是自然语言处理领域中的一个基本且重要的任务,旨在从句子或文档中提取实体之间的潜在关系。传统的 RE 方法在大量标注样本上训练模型,然后在具有相同标签空间的数据上进行测试。然而,在现实生活中,新关系不断涌现,这些模型在适应新关系时可能会出现显著的性能下降。此外,这些模型严重依赖于大量标注数据,这需要大量时间和精力来收集。 因此,提出了持续少样本关系抽取(Continual Few-shot Relation Extraction, CFRE),其目标是在有限的标注数据约束下,持续学习新关系的同时保留先前学习的关系知识。这一实际任务带来了两个重大挑战: 灾难性遗忘:模型在学习新任务时突然忘记从前任务中获得的知识。最新研究指出,即使在大型语言模型中也存在灾难性遗忘问题,这使得这一问题值得研究。 过拟合:模型在训练数据上表现异常好,但由于拟合噪声或无关模式,无法有效泛化到未见数据,这在训练数据稀少的低资源场景中更为明显。 总结一下,我们的主要贡献包括: 我们利用提示学习来探索预训练语言模型(PLM)的隐含能力,并提出了 Contrastive Prompt Learning framework (CPL) 框架,将其与一种新的基于边际的对比学习目标(CFRL)结合起来,同时缓解灾难性遗忘和过拟合问题。 我们通过利用大型语言模型(LLM)的力量引入了一种记忆增强策略,以提升较小的 PLM。这种策略使用精心设计的提示来指导 ChatGPT 生成样本,从而更好地对抗过拟合。 在两个 RE 基准上的大量实验表明,我们的方法优于最先进的模型,证明了缓解灾难性遗忘和过拟合的有效性。 Related Work Continual Learning 持续学习(Continual Learning, CL)旨在从一系列任务中不断学习新知识,同时避免遗忘旧知识。CL的主要挑战是灾难性遗忘。 现有的CL方法分为三类: 正则化方法:使用额外的约束来限制参数更新,使模型能够记住更多旧知识。 动态架构方法:动态扩展模型架构,以在任务序列不断出现时存储新知识。 基于记忆的方法:存储当前任务的一些典型样本,并在学习任务序列后重放记忆以复习旧知识。 在这些方法中,基于记忆的方法在自然语言处理(NLP)任务中最为有效。然而,新任务的数据并不总是充足的,而且获取高质量数据往往既昂贵又耗时。我们也采用基于记忆的策略,但我们更注重如何更好地利用预训练语言模型(PLMs)来解决 CFRE。 Prompt Learning 提示学习随着GPT-3系列的诞生而出现,并在自然语言处理任务中取得了显著的性能,尤其是在小样本场景中。它通过添加提示词将下游任务重新表述为预训练任务,并引导预训练语言模型(PLMs)理解各种任务。之前的提示学习方法可以分为三类: 硬提示:在句子中添加手工制作的提示词,并将其转换为掩码语言建模问题。尽管有效,但它需要针对不同任务的复杂专家知识,这既繁琐又耗时。 软提示:在句子中添加可连续训练的向量,这些向量可以被模型自动学习。然而,在没有任何先验专家知识的情况下,模型并不总能学到合适的提示,尤其是在低资源场景中。 混合提示:结合不可调的硬提示和可调的软提示,使模型能够在少量人工干预下轻松学习合适的模板。它被验证为最有效的方法。 我们专注于少样本设置,并采用混合提示来帮助预训练语言模型(PLMs)缓解灾难性遗忘和过拟合问题。 Method Framework Overview 整个 CPL 框架有三个模块:...

September 20, 2024 · 141 words · Kurong

《Efficient Information Extraction in Few-Shot Relation Classification through Contrastive Representation Learning》笔记

Link [2403.16543] Efficient Information Extraction in Few-Shot Relation Classification through Contrastive Representation Learning (arxiv.org) Accepted NAACL 2024. Intro 关系分类(Relation Classification, RC)是关系抽取中的一个重要子任务,主要关注在给定文本上下文中识别实体对之间的关系类型。为了实现这一目标,RC 模型必须从句子中提取丰富的信息,包括上下文线索、实体属性和关系特征。虽然语言模型在提取文本表示方面重要,但它们在句子表示中的向量空间使用并不理想。为了改进这一点,最近的研究通过各种技术增强了句子表示。 关系抽取在许多关系类型上面临数据有限的挑战,并且数据获取成本不成比例。为了解决这一挑战,通过小样本 RC 训练模型以快速适应新关系类型,仅使用少量标记示例。 由于区分各种关系类型的内在复杂性,RC 应用通常将实体标记令牌的表示作为句子表示。最近的工作在少样本 RC 中使用对比学习以获得更具辨别力的表示。此外,研究表明,通过提示使用 [MASK] 令牌表示句子可以改善句子表示。 本文贡献如下: 新方法:我们引入了一种使用对比学习对齐多重表示的方法,用于小样本关系分类。 适应性:我们的方法能够适应各种资源限制,并扩展到包括关系描述在内的额外信息源。 资源效率:我们强调了该方法的资源效率,提升了在低资源环境下的性能。 实体标记: 实体标记技术通过在输入句子中添加标记来指示文本中的实体。例如,句子“他在2006年世界杯上为墨西哥效力”可以被标记为“他在[E1S]2006年世界杯[E1E]上为[E2S]墨西哥[E2E]效力”。 在 BERT 编码器中,句子的表示是通过连接实体开始标记的表示来构建的。这种方法增强了模型对实体及其关系的理解。 这种技术有助于模型更好地捕捉句子中的上下文线索、实体属性和关系特征,从而提高关系分类的准确性。 对比学习: 对比学习是一种用于增强模型表示能力的方法,特别是在少样本关系分类任务中。 对比学习的主要目标是使相似的样本在表示空间中更接近,而使不相似的样本更远离。 在训练过程中,对比学习会创建正样本对(相似样本)和负样本对(不相似样本),并通过优化模型使正样本对的表示更接近,负样本对的表示更远。而表现在损失函数中,对比学习的损失函数旨在最大化同一输入句子不同表示之间的相似性,同时最小化不同输入句子表示之间的相似性。 在少样本关系分类中,对比学习通过对齐多个句子表示(如[CLS]标记、[MASK]标记和实体标记)来提取补充的判别信息,从而提高模型在低资源环境中的表现。 Approach 方法一览: Sentence Representations 使用了平均池化从BERT编码器生成各种句子表示。 通过平均 token 表示来计算句子表示。同时,BERT-Base 编码器预训练期间使用 [CLS] 标记作为句子表示,捕捉整个输入序列的信息。实体标记技术通过在文本中标记实体来增强输入句子。这将输入增强为 $x = [x_0, …, [E1S], x_i, [E1E], …, x_n]$ 。句子表示通过连接实体开始标记表示 [E1S] 和 [E2S] 构建。 在 Prompt 方法中,RC 任务被重新表述为掩码语言建模问题。使用模板 T,每个输入被转换为包含至少一个 [MASK] 标记的 $x_{prompt} = T(x)$ 。这个掩码标记表示关系标签,并从上下文中预测,例如 $\hat x = [MASK]: x$​ 。 使用 dropout 掩码生成增强句子表示的方法。由于实体标记表示不适用于关系描述,我们使用提示和[CLS]表示,并使用不同的dropout掩码。 Prompt-Mask Method...

September 19, 2024 · 200 words · Kurong

《Entity Concept-enhanced Few-shot Relation Extraction》笔记

Link 2106.02401 (arxiv.org) Accepted ACL 2021。 Intro 小样本关系抽取(FSRE)大致可以分为两类: 仅使用纯文本数据,不包含外部信息。如:Siamese、Prototypical、BERT-PAIR 引入外部信息,以补偿 FSRE 的信息不足,如:TD-Proto 虽然引入文本描述的知识可以为 FSRE 提供外部信息并实现最先进的性能,但 TD-Proto 仅为每个实体引入一个 Wikidata 中的文本描述。然而,这可能会因为实体和文本描述之间的不匹配而导致性能下降。此外,由于每个实体的文本描述通常较长,提取长文本描述中最有用的信息并不容易。 与长文本描述相比,概念是对实体的直观和简洁的描述,可以从概念数据库(如 YAGO3、ConceptNet 和 Concept Graph 等)中轻松获得。此外,概念比每个实体的具体文本描述更抽象,这是对 FSRE 场景中有限信息的理想补充。 为了应对上述挑战,我们提出了一种新的实体概念增强的少样本关系抽取方案(CONCEPT-enhanced FEw-shot Relation Extraction,ConceptFERE),该方案引入实体概念以提供有效的关系预测线索。首先,如上表所示,一个实体可能有多个来自不同方面或层次的概念,只有一个概念可能对最终的关系分类有价值。因此,我们设计了一个概念-句子注意力模块,通过比较句子和每个概念的语义相似性来选择最合适的概念。其次,由于句子嵌入和预训练的概念嵌入不是在同一语义空间中学习的,我们采用自注意力机制对句子和选定概念进行词级语义融合,以进行最终的关系分类。 Model 下图为 ConceptFERE 的结构。 System Overview Sentence Representation Module 使用 BERT 作为 Encoder 来获取 Sentence Embedding,Concept Representation Module 使用 skip-grim 在 Wikipedia 文本和概念图上学习概念的表示,得到 Concept Embedding 。Relation Classifier 采用全连接层实现。 Concept-Sentence Attention Module 直观上,需要更多关注与句子语义相关度高的概念,这些概念可以为关系抽取提供更有效的线索。 首先,由于预训练的 Sentence Embedding $v_s$ 和 Concept Embedding $v_c$ 不是在同一语义空间中学习的,因此不能直接比较语义相似度。所以通过将 $v_c$ 和 $v_s$ 乘以投影矩阵 $P$ 来进行语义转换,以在同一语义空间中获得它们的表示 $v_cP$ 和 $v_sP$ ,其中 $P$ 可以通过全连接网络学习。其次,通过计算句子和每个实体概念之间的语义相似度,得到 $v_c$ 和 $v_s$ 的点积作为相似度 $sim_{cs}$ 。最后,为了从计算的相似度值中选择合适的概念,我们设计了 01-GATE 。相似度值通过 Softmax 函数归一化。如果 $sim_{cs}$ 小于设定的阈值 $α$,01-GATE 将为相应概念的注意力分数分配 0,该概念将在后续的关系分类中被排除。我们选择注意力分数为 1 的合适概念,作为参与关系预测的有效线索。...

September 18, 2024 · 124 words · Kurong

RAPL: A Relation-Aware Prototype Learning Approach for Few-Shot Document-Level Relation Extraction

Link [2310.15743] RAPL: A Relation-Aware Prototype Learning Approach for Few-Shot Document-Level Relation Extraction (arxiv.org) Accepted EMNLP 2023. EMNLP:CCF B Related Works 这一部分内容本来是在论文的最后面,但是考虑到这篇论文也算是打开了新世界的大门,所以把这个放在最前面。 关系抽取(Relation Extraction,RE)大致可以分为三种: 语句级 RE(Sentence-Level RE):早期的研究主要集中在预测单个句子内两个实体之间的关系。各种基于模式和神经网络的方法在句子级关系抽取上取得了令人满意的结果。然而,句子级关系抽取在抽取范围和规模上有显著的局限性。 可以说是早期的 RE 大多是这一类别。 文档级 RE (Document-Level RE,DocRE):现有的大多数文档级关系抽取研究都基于数据驱动的监督场景,通常分为基于图和基于序列的方法。基于图的方法通常通过图结构抽象文档,并使用图神经网络进行推理。基于序列的方法则使用仅包含变压器的架构来编码长距离的上下文依赖关系。这两类方法在文档级关系抽取中都取得了令人印象深刻的结果。然而,这些方法对大规模标注文档的依赖使得它们难以适应低资源场景。 小样本文档级 RE (Few-Shot Document-Level RE,FSDLRE):为了应对现实世界文档级关系抽取场景中普遍存在的数据稀缺问题,Popovic等将文档级关系抽取任务形式化为小样本学习任务。为了完成这一任务,他们提出了多种基于度量的模型,这些模型建立在最先进的监督文档级关系抽取方法和少样本句子级关系抽取方法的基础上,旨在解决不同任务设置的问题。有效的基于度量的少样本文档级关系抽取方法的每个类别的原型应该准确捕捉相应的关系语义。然而,由于现有方法的粗粒度关系原型学习策略和”一刀切”的 NOTA 原型学习策略,这对现有方法来说是一个挑战。 术语解释: 原型学习(Prototype-Based Learning)是一种通过存储一组代表性样本(原型)来进行分类、回归或聚类的学习方法。原型学习的主要步骤包括: 选择原型:从训练数据中选择一组代表性的样本作为原型。 计算距离:使用距离度量(如欧氏距离、曼哈顿距离等)来确定测试样本与原型之间的相似性。 分类或聚类:将测试样本分配给最接近的原型,从而确定其所属的类别或簇。 NOTA Prototype 在本文中指的是 “None-Of-The-Above” 原型,用于处理那些不属于任何目标关系类型的实体对。以下是其主要特点: 任务特定:每个任务生成特定的 NOTA 原型,以更好地捕捉该任务中的 NOTA 语义。 基础原型:引入一组可学习的基础 NOTA 原型,这些原型需要在每个任务中进一步修正。 支持实例选择:从支持文档中选择 NOTA 实例,并将其与基础NOTA原型融合,生成最终的任务特定NOTA 原型。 语义捕捉:通过这种方法,NOTA 原型不仅包含了元学习的通用知识,还能捕捉每个任务中的特定NOTA 语义。 Intro FSDLRE 任务的简单描述:...

September 17, 2024 · 248 words · Kurong

《计组KG》课题开发过程(二)

前言 自从上次记录已经过去了一个月,整个课题进展不大。原因一个是暑期有点摆,另一个是关系抽取确实比较繁琐。不管怎么说,来记录下吧。 NER 数据集下的模型训练 首先需要声明的是该阶段的模型不参与于最后 KG 的构建,目的仅仅是跑通模型训练、验证的过程,为后续阶段提供便利。 NER 数据集 该部分信息在完成 RE 部分后可能会发生些微变动,仅作参考,后续会做调整。 共标记5147条中文语句,实体共标注1472个。 下面是各个标签下的数量统计: Label Count TECH 388 COMP 382 STOR 170 DATA 133 INST 105 ARCH 71 IO 61 PERF 54 PROG 52 CORP 17 ALG 16 PROT 15 PER 4 GRP 4 模型选择 模型有两大类: 传统深度学习方法 CNN-CRF BiLSTM-CRF BERT 系预训练模型,输出层为 CRF 或 MLP+Softmax BERT:BERT 是一个双向 Transformer 模型,通过掩码语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)任务进行预训练 RoBERTa:RoBERTa 是对 BERT 的优化版本,移除了 NSP 任务,并采用了动态掩码策略 ALBERT:ALBERT 是 BERT 的轻量级版本,通过参数共享和嵌入参数因子化来减少模型大小 XLM-RoBERTa:XLM-RoBERTa 是针对多语言的预训练模型,基于 RoBERTa 和 XLM 的结合 这里选择的是 XLM-RoBERTa,预训练模型选择的是 FacebookAI/xlm-roberta-large-finetuned-conll03-english · Hugging Face...

September 14, 2024 · 423 words · Kurong

《计组KG》课题开发番外:关系抽取的思考过程

现状 目前课题进行到了关系抽取这一步。在看完之前的RE综述后,我决定整一个 Joint 的 NER+RE 模型。目前已经完成了 NER 的标注工作,下一步工作自然就是 RE 的标注。但是 RE 的标注要比 NER 要困难的多,一个是对于关系的定义依赖于实体类型、句子词性等多种复杂要素,二是手工标注势必工作量巨大。所以 RE 的标注有什么解决方法呢? 我决定把整个思考过程记录下来,方便复盘。 相关开源库 thunlp/OpenNRE:用于神经关系提取 (NRE) 的开源包 (github.com) SapienzaNLP/relik:检索、读取和 LinK:学术预算上的快速准确的实体链接和关系提取 (ACL 2024) (github.com) huggingface/setfit:使用句子转换器进行高效的少样本学习 (github.com) EleutherAI/lm-evaluation-harness:一种用于语言模型小样本评估的框架。 (github.com) 关系抽取的可能方案 首先能想到的两种常见方案: 使用 RE 预训练模型预标注:和 NER 的标注工作流程一致,但是中文 RE 预训练模型很难找 远程监督:使用已有的知识库或实体关系词典,对大规模文本进行远程监督标注。但是不适合当前课题的小规模数据集,而且没有现成的大量 RE 标注数据 以上两种方案中只有预训练模型的预标注还算可行,那有没有什么方法可以加速这一过程?可以看看下面的两种方法: 半监督学习:结合少量人工标注数据和大量未标注数据,通过半监督学习的方法训练模型 few-shot 小样本学习:使用少量人工标注的数据对few-shot模型进行训练,以提高模型在少样本情况下的泛化能力 这两种方案值得单独进行介绍。 半监督学习 半监督学习(Semi-Supervised Learning)是一种结合了监督学习和无监督学习的机器学习方法。它利用少量的标记数据和大量的未标记数据来训练模型,从而提高模型的泛化能力和性能。 半监督学习的样本标注依赖假设,以下是部分常见假设: 平滑性假设:如果两个数据点在高密度区域中且距离很近,那么它们的输出也应该相似 聚类假设:如果数据点形成簇,那么同一簇中的数据点应该属于同一类 流形假设:高维数据通常位于低维流形上,同一流形上的数据点具有相同的标签 常用的方法有: 一致性正则化:假设对未标记数据加入小扰动后,其分类结果不应改变 伪标签:使用已标记数据训练初始模型,然后用该模型对未标记数据进行预测,生成伪标签,再将这些伪标签数据加入训练集中进行再训练 生成式模型:利用生成模型(如GANs)从数据分布中生成样本,并将这些样本用于训练分类器 优势: 利用未标注数据,提高模型的泛化能力和性能 较低标注成本 适应性强,可以应用于多种任务 缺点: 依赖数据假设:半监督学习通常假设未标记数据和标记数据在特征空间中具有相似性,这在实际应用中并不总是成立。如果这些假设不成立,可能会导致模型性能下降 标签传播误差 数据不平衡问题 我曾经在 kaggle 比赛中使用过半监督学习中的伪标签方法,只从工程实现的角度看比较容易,但是模型性能不一定有提升。...

August 24, 2024 · 431 words · Kurong

BPE算法

基本概念 Byte-Pair Encoding (BPE) 是一种常用于自然语言处理(NLP)的分词算法。BPE最初是一种数据压缩算法,由Philip Gage在1994年提出。在NLP中,BPE被用来将文本分割成子词(subword)单元,这样可以在处理未见过的单词时更有效。 工作原理 BPE的核心思想是通过多次迭代,将最常见的字符对(或子词对)合并成一个新的符号,直到词汇表达到预定的大小。具体步骤如下: 初始化词汇表:将所有单个字符作为初始词汇表。 统计频率:统计所有相邻字符对的出现频率。 合并字符对:找到出现频率最高的字符对,并将其合并成一个新的符号。 更新词汇表:将新的符号加入词汇表,并更新文本中的所有相应字符对。 重复步骤2-4:直到词汇表达到预定大小。 例子 假设我们有一个简单的文本:“banana banana”. 初始词汇表为:{b, a, n, }. 具体步骤如下: 初始化:词汇表为 {b, a, n, }。 统计频率:统计相邻字符对的频率,如 “ba” 出现2次,“an” 出现2次,“na” 出现2次。 合并字符对:选择频率最高的字符对 “an”,将其合并成一个新符号 “an”。更新后的文本为 “b an an a b an an a”。 更新词汇表:词汇表更新为 {b, a, n, an}。 重复步骤2-4:继续统计频率并合并,直到词汇表达到预定大小。 Byte-Level BPE 在处理多语言文本时,BPE的一个问题是字符集可能会非常大。为了解决这个问题,可以使用Byte-Level BPE。Byte-Level BPE将每个字节视为一个字符,这样基础字符集的大小固定为256(即所有可能的字节值)。 优缺点 优点: 处理未见过的单词:通过将单词分割成子词,可以更好地处理未见过的单词 词汇表大小可控:可以通过设置预定大小来控制词汇表的大小 缺点: 语义信息丢失:在某些情况下,分割后的子词可能会丢失部分语义信息 计算复杂度:多次迭代合并字符对的过程可能会增加计算复杂度

August 17, 2024 · 60 words · Kurong

Lecture 10: Pretrained Model

Word structure and subword models We assume a fixed vocab of tens of thousands of words, built from the training set. All novel words seen at test time are mapped to a single UNK. Finite vocabulary assumptions make even less sense in many languages. Many languages exhibit complex morphology, or word structure. The byte-pair encoding algorithm (BPE) Subword modeling in NLP encompasses a wide range of methods for reasoning about structure below the word level....

August 16, 2024 · 302 words · Kurong

《实体关系抽取方法研究综述》笔记

关系抽取 Relation Extraction 定义: 通常将实体间的关系形式化地描述为关系三元组 $\{E_1,R,E_2\}$ ,其中 $E$ 为实体类型,$R$ 为关系描述类型。 关系抽取与命名实体识别、关系触发词识别构成一个端到端任务的框架: 命名实体识别 Name Entity Recognition:是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等; 关系触发词识别 Relation trigger word identification:是指对触发实体关系的词进行分类,识别出是触发词还是非触发词,判定抽取出的关系是正类还是负类。 关系抽取是一个文本分类问题,相比于情感分类等任物,其具有以下特点: 领域众多,关系模型构建复杂。由于限定了关系类别,可采用基于规则、词典以及本体的方法,也可采用传统机器学习的有监督、半监督以及无监督方法,深度学习的有监督、远程监督方法。这类方法的模型构建难度相对于开放领域难度较低,但是移植性和扩展性较差。而针对开放领域的关系抽取,由于关系类型多样且不确定,可以采用无监督和远程监督等方法 数据来源广泛,主要有结构化、半结构化、无结构3类。针对表格文档、数据库数据等结构化数据,方法众多,现通常采用深度学习相关的方法等;针对纯文本的无结构数据,由于无法预料全部关系类型,一般采用以聚类为核心的无监督方法等;而针对维基百科、百度百科等半结构化数据,通常采用半监督和远程监督方法等 关系种类繁多复杂,噪音数据无法避免。实体之间的关系多样,有一种或多种关系,早期方法主要针对一种关系(忽略重叠关系)进行抽取,这类方法忽略了实体间的多种关系,对实体间的潜在关系难以处理。近年来,图结构逐渐应用于关系抽取领域,为关系重叠和实体重叠提供了新思路。而针对噪音数据,有人发现少量对抗样本会避免模型过拟合,提出使用对抗训练提高模型的性能 评价指标用 Precision、Recall、F1. 基于深度学习的关系抽取方法 监督学习:Pipeline 常见的模型有CNN、RNN、LSTM/BiLSTM、GCN(图神经网络)、混合抽取(模型融合)。 监督学习:Joint 基于共享参数的方法:命名实体识别和关系抽取通过共享编码层在训练过程中产生的共享参数相互依赖,最终训练得到最佳的全局参数。因此,基于共享参数方法有效地改善了流水线方法中存在的错误累积传播问题和忽视2个子任务间关系依赖的问题,提高模型的鲁棒性 基于序列标注的方法:由于基于共性参数的方法容易产生信息冗余,因此可以将命名实体识别和实体关系抽取融合成一个序列标注问题,可以同时识别出实体和关系。该方法利用一个端到端的神经网络模型抽取出实体之间的关系三元组,减少了无效实体对模型的影响,提高了关系抽取的召回率和准确率 基于图结构的方法:针对前2种方法无法解决的实体重叠、关系重叠问题,基于图结构的方法能有效得解决 远程监督学习 远程监督学习(Distant Supervision)是一种基于外部知识的监督学习方法,主要用于自动标注大规模文本数据,以训练关系抽取模型。其核心思想是利用已知的关系图谱(如知识图谱)来标注文本数据。例如,如果两个实体在知识图谱中存在关系,那么包含这两个实体的句子就可以被认为是该关系的正例。 远程监督的实体关系抽取方法极大地减少了对人工的依赖,可以自动地抽取大量的实体对,从而扩大了知识库的规模。 然而这类方法在数据标注过程会带来2个问题:噪音数据和抽取特征的误差传播。 基于远程监督的基本假设,海量数据的实体对的关系会被错误标记,从而产生了噪音数据 由于利用自然语言处理工具抽取的特征也存在一定的误差,会引起特征的传播误差和错误积累 BERT 基于开放领域的关系抽取方法 由于传统关系抽取基于特定领域、特定关系进行抽取,导致关系抽取这一任务耗时耗力,成本极高,同时不利于扩展语料类型。近年来,针对开放领域的实体关系抽取方法逐渐受到人们的广泛关注。由于互联网不断发展,开放语料的规模不断扩大,并且包含的关系类型愈加复杂,研究者直接面向大多未经人工标注的开放语料进行关系抽取,有利于促进实体关系抽取的发展,而且具有更大的实际意义。 开放领域关系抽取的方法是信息抽取领域的新的研究方向。该关系抽取方法主要分为半监督和无监督2种,并结合语形特征和语义特征自动地在大规模非限定类型的语料库中进行关系抽取。开放领域关系抽取的方法无需事先人为制定关系类型,减轻了人工标注的负担,而由此设计的系统可移植性较强,极大地促进关系抽取的发展。 开放领域的关系抽取方法主要有3个流程: 深层解析小规模的语料集,自动抽取实体间关系三元组,利用朴素贝叶斯分类器训练已标注可信和不可信的关系三元组构建关系表示模型; 利用关系抽取模型并输入词性、序列等特征等数据,在训练好的分类器上进行大量网络文献的关系抽取,获取候选关系三元组; 合并候选三元组,通过统计的方法计算各个关系三元组的可信度,并建立索引。 本文链接 实体关系抽取方法研究综述 (ict.ac.cn)

August 14, 2024 · 51 words · Kurong

😺 Is All You Need——Transformer补充

关于本文动机 Transformer主要内容请见 Lecture 9: Transformer | KurongBlog (kurongtohsaka.github.io),对 Transformer 已经进行比较详细的介绍和讲解了,但还是有一些细节问题不好在该篇文章提及,所以单开一篇讨论。 Q,K,V 的理解 假设我们想让所有的词都与第一个词 $v_1$ 相似,我们可以让 $v_1$ 作为查询。 然后,将该查询与句子中所有词进行点积,这里的词就是键。 所以查询和键的组合给了我们权重,接着再将这些权重与作为值的所有单词相乘。 通过下面的公式可以理解这个过程,并理解查询、键、值分别代表什么意思: $$ softmax(QK)=W \\ WV=Y $$ 一种比较感性的理解:想要得到某个 $V$ 对应的某个可能的相似信息需要先 $Q$ 这个 $V$ 的 $K$ ,$QK$ 得到注意力分数,之后经过 softmax 平滑后得到概率 $W $,然后 $WV$ 后得到最终的相似信息 $Y$ 。 Attention 机制 在数据库中,如果我们想通过查询 $q$ 和键 $k_i$ 检索某个值 $v_i$ 。注意力与这种数据库取值技术类似,但是以概率的方式进行的。 $$ attention(q,k,v)=\sum_isimilarity(q,k_i)v_i $$ 注意力机制测量查询 $q$ 和每个键值 $k_i$ 之间的相似性。 返回每个键值的权重代表这种相似性。 最后,返回所有值的加权组合作为输出。 Mask 掩码 在机器翻译或文本生成任务中,我们经常需要预测下一个单词出现的概率,这类任务我们一次只能看到一个单词。此时注意力只能放在下一个词上,不能放在第二个词或后面的词上。简而言之,注意力不能有非平凡的超对角线分量。 我们可以通过添加掩码矩阵来修正注意力,以消除神经网络对未来的了解。 Multi-head Attention 多头注意力机制 “小美长得很漂亮而且人还很好” 。这里“人”这个词,在语法上与“小美”和“好”这些词存在某种意义或关联。这句话中“人”这个词需要理解为“人品”,说的是小美的人品很好。仅仅使用一个注意力机制可能无法正确识别这三个词之间的关联,这种情况下,使用多个注意力可以更好地表示与“人”相关的词。这减少了注意力寻找所有重要词的负担,增加找到更多相关词的机会。...

August 14, 2024 · 840 words · Kurong

Lecture 9: Transformer

Issues with recurrent models Linear interaction distance RNNs are unrolled “left-to-right” Problem: RNNs take O(sequence length) steps for distant word pairs to interact What does the O Problem means ? Hard to learn long-distance dependencies (because gradient problems! ) Linear order of words is “baked in”; we already know linear order isn’t the right way to think about sentences… Lack of parallelizability Forward and backward passes have O(sequence length) unparallelizable operations GPUs can perform a bunch of independent computations at once, but future RNN hidden states can’t be computed in full before past RNN hidden states have been computed Self-Attention Recall: Attention operates on queries, keys, and values....

August 13, 2024 · 553 words · Kurong

8.06-8.11:一周总结

本周工作 本周工作是从8月10号vpn重置之后才开始进行的,所以内容有点少 完成了第一版训练、验证代码 调试第一个模型,修复各种bug 学习 Transformer 相关内容 课题下周改进 先快速训练出几个模型出来,选出一个最好的模型 进行第二次及多次迭代训练,更新词典 关系抽取看相关文献 本周反思 本周算是玩爽了,课题下周尽快开展关系抽取的调研工作。

August 11, 2024 · 13 words · Kurong

Encoder-Decoder 架构

原理 Encoder-Decoder架构通常由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。 编码器(Encoder):编码器的任务是将输入序列(如一句话)转换为一个固定长度的上下文向量(context vector)。这个过程通常通过递归神经网络(RNN)、长短期记忆网络(LSTM)或门控循环单元(GRU)来实现。编码器逐步读取输入序列的每个元素,并将其信息压缩到上下文向量中。 解码器(Decoder):解码器接收编码器生成的上下文向量,并将其转换为输出序列。解码器同样可以使用RNN、LSTM或GRU。解码器在生成每个输出元素时,会考虑上下文向量以及之前生成的输出元素。 作用 Encoder-Decoder架构主要用于处理需要将一个序列转换为另一个序列的任务,例如: 机器翻译:将一种语言的句子翻译成另一种语言。 文本摘要:将长文本压缩成简短摘要。 对话系统:生成对用户输入的响应。 近年来,基于Transformer的Encoder-Decoder架构(如BERT、GPT、T5等)因其更好的性能和并行计算能力,逐渐取代了传统的RNN架构。 优缺点 优点: 灵活性:可以处理不同长度的输入和输出序列。 强大的表示能力:能够捕捉输入序列中的复杂模式和关系。 缺点: 长距离依赖问题:传统RNN在处理长序列时可能会遗忘早期的信息。 计算复杂度高:训练和推理过程需要大量计算资源。

August 11, 2024 · 18 words · Kurong

残差连接

原理 残差连接(Residual Connection)最早由何凯明等人在2015年提出的 ResNet 中引入。ResNet 通过引入残差块,使得网络可以扩展到更深的层数,并在 ImageNet 比赛中取得了显著的成功。 残差连接的核心思想是引入跳跃连接,将输入信号直接传递到网络的后续层,从而构建了一条捷径路径。这种结构允许网络学习输入和输出之间的残差,而不是直接学习输出。 残差连接可以表示为: $$ y=F(x)+x $$ 其中,$x$ 表示输入,$F(x)$ 表示经过非线性变换后的输出。 作用 解决梯度消失和梯度爆炸问题 提高训练效率 增强模型的泛化性能 例子 下图是 Transformer 论文中的模型结构图。 可以看到在每一个 Attention Layer 中都有一个 Add ,原输入和 Multi-head 变换后的输出做了一个简单的相加操作,而这就是所谓的残差连接。

August 11, 2024 · 32 words · Kurong

《基于MRC的设备故障命名实体识别方法》笔记

MRC 本论文关于设备故障领域的NER任务,将 NER 的序列标注问题重构为 MRC 问题。 MRC(Machine Reading Comprehension)机器阅读理解,与文生成和机器翻译任务类似。本论文使用该方法,根堆每个实体类型,设计了相应地自然语言形式的查询,通过上下文的查询来定位并提取实体。例如,针对故障代码 the machine suffers from error[#10482] 的命名实体识别,被形式化为 “文本中提到了哪种故障代码 ” 。 人话:先通过某个文生成/机器翻译模型将错误代码转化为中文,然后通过预定的错误代码进行映射 本文的主要工作如下: 将 NER 任务转化为 MRC 问题,采用自然语言查询来实现命名实体的识别。 通过在查询中集成预设的命名实体类别信息,克服传统方法中实体类别语义信息缺少的限制,提升命名实体识别的准确性。 结合设备故障数据集的构建,开展相关的实 验对比,并进行定量分析,证明了本文方法的有效性。 模型结构 编码层为 ALBERT 特征提取为 BiLSTM 分类器为两个sigmoid,分别预测实体的起始索引、结束索引 数据集 对比试验 模型为以下几类: 结果: 消融实验

August 6, 2024 · 39 words · Kurong

7.29-8.04:一周总结

本周任务 改进了数据集的标注格式,并更新了词典 完成 BERT 系、BiLSTM-CRF、CNN-CRF 等模型代码 第一版训练、验证代码进度50%,但是 vpn 流量过期,需要等到10号以后才能继续训练😅 课题下周改进 完成第一版训练、验证代码 改进现有模型结构,尽可能地从微调 BERT 的过时手段中走出 记录实验数据 继续 cs224n、Transformer 论文学习 本周反思 本周实在是有太多事,课题进展有限,预计下周会有一定进展。

August 6, 2024 · 20 words · Kurong