超级超级详细的实体关系抽取数据预处理代码详解

超级超级详细的实体关系抽取数据预处理代码详解

由于本人是代码小白,在学习代码过程中会出现很多的问题,所以需要一直记录自己出现的问题以及解决办法.
废话不多说,直接上代码!!!

一.data_process
1.由于数据集太大,然鹅本人的电脑…所以,我先添加了一段代码切分了一下数据集,因为数据集中都是三元组形式,所以可以直接笨拙的切分为几个文件
数据集切分
2.读取初始数据.读取切分之后的任意一个就OK了,存放为数组形式
读取初始数据
3.保留元素全为中文的三元组
保留元素全为中文的三元组
4.构建实体字典,为字典增加key-value对

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个简单的BERT实体关系联合抽取的Python代码示例: ```python import torch import transformers import numpy as np # 加载预训练的BERT模型和分词器 tokenizer = transformers.BertTokenizer.from_pretrained('bert-base-uncased') model = transformers.BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) # 定义实体关系类别 labels = ['NO_RELATIONSHIP', 'RELATIONSHIP'] # 定义样本句子和实体位置 text = "The company Apple was founded by Steve Jobs and Steve Wozniak." entity1 = (4, 9, 'Apple') entity2 = (32, 42, 'Steve Jobs') # 对样本进行分词和编码 encoded_dict = tokenizer.encode_plus( text, text_pair=None, add_special_tokens=True, truncation_strategy='longest_first', max_length=128, padding='max_length', return_attention_mask=True, return_tensors='pt' ) # 获取实体位置的相对编码位置 entity1_start = np.where(encoded_dict['input_ids'] == tokenizer.encode(entity1[2], add_special_tokens=False)[0])[0][0] entity1_end = entity1_start + len(tokenizer.encode(entity1[2], add_special_tokens=False)) - 1 entity2_start = np.where(encoded_dict['input_ids'] == tokenizer.encode(entity2[2], add_special_tokens=False)[0])[0][0] entity2_end = entity2_start + len(tokenizer.encode(entity2[2], add_special_tokens=False)) - 1 # 构造输入张量 input_ids = encoded_dict['input_ids'] attention_mask = encoded_dict['attention_mask'] token_type_ids = encoded_dict['token_type_ids'] entity1_mask = [0] * len(input_ids) for i in range(entity1_start, entity1_end + 1): entity1_mask[i] = 1 entity2_mask = [0] * len(input_ids) for i in range(entity2_start, entity2_end + 1): entity2_mask[i] = 1 # 转换为PyTorch张量 input_ids = torch.tensor(input_ids).unsqueeze(0) attention_mask = torch.tensor(attention_mask).unsqueeze(0) token_type_ids = torch.tensor(token_type_ids).unsqueeze(0) entity1_mask = torch.tensor(entity1_mask).unsqueeze(0) entity2_mask = torch.tensor(entity2_mask).unsqueeze(0) # 前向传播 outputs = model( input_ids=input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids, labels=None, entity1_mask=entity1_mask, entity2_mask=entity2_mask ) # 预测实体关系类别 logits = outputs[0] _, predicted = torch.max(logits, 1) relationship = labels[predicted.item()] print("实体1:", entity1[2]) print("实体2:", entity2[2]) print("实体关系:", relationship) ``` 需要注意的是,上述代码仅供参考,具体实现可能因数据集、模型和任务不同而有所变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值