当前位置: 首页 > news >正文

【NLP 68、R-BERT】

为什么划掉你的名字,为什么不敢与你对视

                                                                —— 25.4.21

一、R-BERT:基于BERT的关系抽取模型 

        R-BERT(Relation BERT)是一种用于关系抽取(Relation Extraction)任务的模型,它结合了预训练语言模型 BERT(Bidirectional Encoder Representations from Transformers)的强大语言理解能力,在关系抽取领域取得了较好的效果。

        输入一段文本,在两个特殊的实体前后加上两对不同的token,用token强调不同的实体

1.模型结构与设计

Ⅰ、核心思想

        在BERT基础上显式标记实体位置,结合句子全局信息和实体局部信息进行关系分类。

Ⅱ、输入设计

① 实体标记

        在实体前后插入特殊符号(如 “实体1” 和 “#实体2#”),帮助BERT定位实体位置。

② 输出特征

        提取BERT输出的三部分向量——[CLS]句子向量、实体1的平均向量、实体2的平均向量。

Ⅲ、分类模块

① 特征融合

        将三个向量分别通过Dropout、Tanh激活和全连接层,拼接后输入分类器。

② 共享权重

        实体1和实体2的特征处理层共享参数,减少模型复杂度。


2.计算方式与训练策略

Ⅰ、实体向量计算

        对实体对应的隐藏状态进行平均池化,生成实体表征。

Ⅱ、损失函数

        多类交叉熵损失,适用于关系分类任务(如SemEval-2010 Task 8数据集中的9类关系)。

Ⅲ、关键实验结论

        移除实体标记符会使F1值下降1.27%,仅使用[CLS]向量则下降1.26%,证明显式标记实体的重要性


3.应用场景

Ⅰ、人物关系分类

        例如识别“亲戚”“上下级”等社会关系。

Ⅱ、医学文本分析

        提取疾病与症状之间的关联。

Ⅲ、事件抽取

        识别新闻中的实体间因果关系。


4.关键技术优势

Ⅰ、实体感知

        通过特殊符号和向量融合增强模型对实体的关注。

Ⅱ、高效微调

        基于预训练BERT快速适配关系分类任务,减少数据需求。

Ⅲ、高准确率

        在SemEval-2010 Task 8数据集上F1值达89.25%,接近当时SOTA水平。 


二、模型对比与总结

维度KG-BERTR-BERT
核心任务知识图谱补全(三元组分类、链接预测)关系抽取(实体间语义关系分类)
输入设计三元组序列化,融合实体描述文本显式标记实体位置,提取实体向量
关键技术BERT+知识图谱融合、负样本生成实体标记符、多特征融合
应用领域问答系统、推荐系统、语义搜索社交网络分析、医学文本挖掘、事件抽取
性能指标在WN11、FB15K等数据集达到SOTASemEval-2010 Task 8的F1值89.25%

三、代码示例

import torch
from transformers import BertTokenizer, BertModel# 加载预训练的BERT模型和分词器,修改为bert-base-chinese
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
bert_model = BertModel.from_pretrained('bert-base-chinese')# 示例输入
text = "苹果公司是一家科技公司,史蒂夫·乔布斯是其创始人。"
head_entity = "苹果公司"
tail_entity = "史蒂夫·乔布斯"# 添加实体标记
text_with_entities = text.replace(head_entity, f"<e1>{head_entity}</e1>").replace(tail_entity, f"<e2>{tail_entity}</e2>")# 分词
inputs = tokenizer(text_with_entities, return_tensors='pt')# 通过BERT模型进行编码
outputs = bert_model(**inputs)# 提取实体和上下文表示
e1_start = inputs['input_ids'][0].tolist().index(tokenizer.convert_tokens_to_ids('<e1>')) + 1
e1_end = inputs['input_ids'][0].tolist().index(tokenizer.convert_tokens_to_ids('</e1>'))
e2_start = inputs['input_ids'][0].tolist().index(tokenizer.convert_tokens_to_ids('<e2>')) + 1
e2_end = inputs['input_ids'][0].tolist().index(tokenizer.convert_tokens_to_ids('</e2>'))e1_representation = torch.mean(outputs.last_hidden_state[0, e1_start:e1_end, :], dim=0)
e2_representation = torch.mean(outputs.last_hidden_state[0, e2_start:e2_end, :], dim=0)
context_representation = outputs.last_hidden_state[0, 0, :]  # [CLS]标记的表示# 拼接表示
combined_representation = torch.cat([e1_representation, e2_representation, context_representation], dim=0)# 假设这里有一个全连接层进行关系分类
num_relations = 3  # 假设有3种关系
classification_layer = torch.nn.Linear(combined_representation.size(0), num_relations)
logits = classification_layer(combined_representation)
probs = torch.softmax(logits, dim=0)# 预测的关系类别
predicted_relation = torch.argmax(probs).item()print(f"预测的关系类别: {predicted_relation}")

相关文章:

  • C 语言开发问题:使用 <assert.h> 时,定义的 #define NDEBUG 不生效
  • Transformer框架解析:从“Attention is All You Need”到现代AI基石
  • 20.3 使用技巧9
  • 回车键监听
  • NLP与社区检测算法的结合:文本中的社区发现
  • OpenCV 图形API(49)颜色空间转换-----将 NV12 格式的图像数据转换为 BGR 颜色空间函数NV12toBGR()
  • Linux进程5-进程通信常见的几种方式、信号概述及分类、kill函数及命令、语法介绍
  • flutter 专题 六十三 Flutter入门与实战作者:xiangzhihong8Fluter 应用调试
  • WINDOWS下使用命令行读取本地摄像头FFMPEG+DirectShow,ffplay直接播放摄像头数据
  • 安装ntfs硬盘系统时,报错Error: Unable to find a match: epel-release的解决方法
  • Federated Feature Augmentation and Alignment
  • ECharts散点图-散点图13,附视频讲解与代码下载
  • 机器学习-08-推荐算法-案例
  • Cad c# 射线法判断点在多边形内外
  • 淘宝店铺详情API接口返回数据说明
  • 精益数据分析(10/126):深度剖析数据指标,驱动创业决策
  • EXCEL学习
  • 天元证券|AI驱动需求井喷 光模块上市公司业绩爆发
  • Oracle for Linux安装和配置(11)——Linux配置
  • 深入理解 DML 和 DQL:SQL 数据操作与查询全解析
  • GDP增长4.1%,一季度广东经济数据出炉
  • 大幅加仓美的、茅台,买入小米,银华基金李晓星:看好港股与A股消费股
  • 央行等:在上海试点通过再贴现窗口支持人民币跨境贸易融资
  • 商务部24日下午将举行发布会,介绍近期商务领域重点工作情况
  • 碎片化时代如何阅读?巴金图书馆推出世界读书日系列活动
  • 对话地铁读书人|来自法学副教授的科普:读书日也是版权日