Day03『NLP打卡营』实践课3:使用预训练模型实现快递单信息抽取

Day03 词法分析作业辅导

本教程旨在辅导同学如何完成 AI Studio课程——『NLP打卡营』实践课3:使用预训练模型实现快递单信息抽取
课后作业。

1. 更换预训练模型

在PaddleNLP Transformer API查询PaddleNLP所支持的Transformer预训练模型。选择其中一个模型,如bert-base-chinese,只需将代码中的

from paddlenlp.transformers import ErnieTokenizer, ErnieForTokenClassificationmodel = ErnieForTokenClassification.from_pretrained("ernie-1.0", num_classes=len(label_vocab))
tokenizer = ErnieTokenizer.from_pretrained('ernie-1.0')

修改为

from paddlenlp.transformers import BertTokenizer, BertForTokenClassificationmodel = BertForTokenClassification.from_pretrained("bert-base-chinese", num_classes=len(label_vocab))
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')

即可将预训练模型从ernie-1.0切换至bert-base-chinese

2. 更换数据集

PaddleNLP集成了一系列序列标注数据集,用户可以一键调用相应API快速下载调用相关数据集,我们在这里选择其中MSRA_NER数据集,将

def load_dataset(datafiles):def read(data_path):with open(data_path, 'r', encoding='utf-8') as fp:next(fp)  # Skip headerfor line in fp.readlines():words, labels = line.strip('\n').split('\t')words = words.split('\002')labels = labels.split('\002')yield words, labelsif isinstance(datafiles, str):return MapDataset(list(read(datafiles)))elif isinstance(datafiles, list) or isinstance(datafiles, tuple):return [MapDataset(list(read(datafile))) for datafile in datafiles]# Create dataset, tokenizer and dataloader.
train_ds, dev_ds, test_ds = load_dataset(datafiles=('./data/train.txt', './data/dev.txt', './data/test.txt'))

修改为

from paddlenlp.datasets import load_dataset# 由于MSRA_NER数据集没有dev dataset,我们这里重复加载test dataset作为dev_ds
train_ds, dev_ds, test_ds = load_dataset('msra_ner', splits=('train', 'test', 'test'), lazy=False)# 注意删除 label_vocab = load_dict('./data/tag.dic')
label_vocab = {label:label_id for label_id, label in enumerate(train_ds.label_list)}

2.1 适配数据集预处理

为了适配该数据集,我们还需要修改数据预处理代码,修改utils.py中的convert_example函数为:

def convert_example(example, tokenizer, label_vocab, max_seq_len=128):labels = example['labels']example = example['tokens']no_entity_id = label_vocab['O']tokenized_input = tokenizer(example,return_length=True,is_split_into_words=True,max_seq_len=max_seq_len)# -2 for [CLS] and [SEP]if len(tokenized_input['input_ids']) - 2 < len(labels):labels = labels[:len(tokenized_input['input_ids']) - 2]tokenized_input['labels'] = [no_entity_id] + labels + [no_entity_id]tokenized_input['labels'] += [no_entity_id] * (len(tokenized_input['input_ids']) - len(tokenized_input['labels']))return tokenized_input['input_ids'], tokenized_input['token_type_ids'], tokenized_input['seq_len'], tokenized_input['labels']

2.2 适配数据集后处理

不同于快递单数据集,MSRA_NER数据集的标注采用的是’BIO’在前的标注方式,因此还需要修改utils.py中的parse_decodes函数为:

def parse_decodes(ds, decodes, lens, label_vocab):decodes = [x for batch in decodes for x in batch]lens = [x for batch in lens for x in batch]id_label = dict(zip(label_vocab.values(), label_vocab.keys()))outputs = []for idx, end in enumerate(lens):sent = ds.data[idx]['tokens'][:end]tags = [id_label[x] for x in decodes[idx][1:end]]sent_out = []tags_out = []words = ""for s, t in zip(sent, tags):if t.endswith('B-') or t == 'O':if len(words):sent_out.append(words)if t.startswith('B-'):tags_out.append(t.split('-')[1])else:tags_out.append(t)words = selse:words += sif len(sent_out) < len(tags_out):sent_out.append(words)outputs.append(''.join([str((s, t)) for s, t in zip(sent_out, tags_out)]))return outputs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

会议交流 | 2021年全国知识图谱与语义计算大会(CCKS 2021)征稿通知

2021年全国知识图谱与语义计算大会征稿通知&#xff08;第一轮&#xff09;First Call for Full Papers2021年8月18日-21日&#xff0c;广州征稿截止: 2021年5月10日第十五届全国知识图谱与语义计算大会&#xff08;CCKS: China Conference on Knowledge Graph and Semantic Co…

美团外卖自动化业务运维系统建设

美团外卖业务在互联网行业是非常独特的&#xff0c;不仅流程复杂——从用户下单、商家接单到配送员接单、交付&#xff0c;而且压力和流量在午、晚高峰时段非常集中。同时&#xff0c;外卖业务的增长非常迅猛&#xff0c;自2013年11月上线到最近峰值突破1600万&#xff0c;还不…

把数据集刷穿是什么体验?MetaQA已100%准确率

文 | 炼丹学徒编 | 小轶开始炼丹以来&#xff0c;估计很多小伙伴都和我一样幻想过直接把数据集做到 100% 准确率&#xff0c;然后大吼一声&#xff1a;这数据集&#xff0c;我做到头了&#xff01;然而愿望终究是愿望。大多时候&#xff0c;看着自己手头上用了浑身解数才提了零…

LeetCode 116. 填充每个节点的下一个右侧节点指针(递归循环)

文章目录1. 题目2. 解题2.1 递归2.2 循环2.3 O(1)空间复杂度1. 题目 给定一个完美二叉树&#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; }填充它的每个 n…

大圣魔方——美团点评酒旅BI报表工具平台开发实践

当前的互联网数据仓库系统里&#xff0c;数据中心往往存放了大量Cube化或者半Cube化的数据。如果需要将这些数据的内在关系体现出来&#xff0c;需要写大量的程序和SQL来发现数据之间的内在规律&#xff0c;往往会造成用户做非常多的重复性工作&#xff1b;而且由于没有数据校验…

基于知识图谱的智能问答方案

基于知识图谱的智能问答方案&#xff1a;https://cloud.tencent.com/developer/article/1661504 基于知识图谱的智能问答方案2020-07-142020-07-14 15:57:50阅读 9950三个角度理解知识图谱2012年谷歌首次提出“知识图谱”这个词&#xff0c;由此知识图谱在工业界也出现得越来越…

论文浅尝 - ACL2020 | 用于实体对齐的邻居匹配网络

笔记整理 | 谭亦鸣&#xff0c;东南大学博士来源&#xff1a;ACL 20链接&#xff1a;https://www.aclweb.org/anthology/2020.acl-main.578.pdf1.介绍图谱之间的异构差异是建立实体对齐的一个主要挑战&#xff0c;本文提出了Neighborhood Match Network (NMN)&#xff0c;用于处…

LeetCode 117. 填充每个节点的下一个右侧节点指针 II(递归循环)

文章目录1. 题目2. 解题2.1 递归2.2 queue循环2.3 利用next循环1. 题目 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 NULL。 初始状态下&#xff0c;所有 next 指针都被设置为 NULL。 类似…

美团点评境外度假团队前端项目开发实践总结

随着前端项目数量和规模越来越大&#xff0c;参与的人员也越来越多&#xff0c;如何在前端项目开发过程中保证优质的开发者体验和项目的可维护性&#xff0c;同时确保极致的用户体验将会是一个非常大的挑战。 为了应对这个挑战&#xff0c;美团点评境外度假前端研发团队自2016年…

线性代数不深入,机器学习两行泪!

我经常听到有人说&#xff0c;机器学习很难&#xff0c;到底怎么学更高效&#xff1f;其实&#xff0c;我想说&#xff0c;机器学习本身没有多大难度&#xff0c;因为经过多年的积累后&#xff0c;很多规则已经成型了。对于我们来说真正难的&#xff0c;是机器学习背后的算法所…

反爬虫机制和破解方法汇总

https://cloud.tencent.com/developer/article/1032918 什么是爬虫和反爬虫&#xff1f;爬虫&#xff1a;使用任何技术手段&#xff0c;批量获取网站信息的一种方式。反爬虫&#xff1a;使用任何技术手段&#xff0c;阻止别人批量获取自己网站信息的一种方式。常见的反爬虫机制…

论文小综 | 知识图谱表示学习中的零样本实体研究

转载公众号 | 浙大KG 本文作者| 耿玉霞&#xff0c;浙江大学在读博士&#xff0c;主要研究方向为知识图谱、零样本学习及可解释性前言随着知识图谱表示学习算法的蓬勃发展&#xff0c;在各个领域中都得到了广泛的应用&#xff0c;如推荐系统、知识问答等&#xff0c;以及知识图…

LeetCode 297. 二叉树的序列化与反序列化(前序遍历层序遍历)

文章目录1. 题目2. 解题2.1 前序遍历2.2 层序遍历1. 题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;采取相反方式重构得到原数据…

互联网企业安全之端口监控

外网端口监控系统是整个安全体系中非常重要的一环&#xff0c;它就像眼睛一样&#xff0c;时刻监控外网端口开放情况&#xff0c;并且在发现高危端口时能够及时提醒安全、运维人员做出相应处理。 对安全人员来说&#xff0c;互联网公司在快速发展壮大的过程中&#xff0c;外网边…

Text2SQL 语义解析数据集、解决方案、paper资源整合项目

https://github.com/yechens/NL2SQL Text2SQL 语义解析数据集、解决方案、paper资源整合项目

知乎热榜:程序员达到什么水平能拿到20k月薪

昨天在知乎上刷到一个热门问题:程序员需要达到什么水平才能顺利拿到 20k 无压力&#xff1f;其中一个最热门的回答是&#xff1a;“其实&#xff0c;无论你是前端还是后端、想进大厂还是拿高薪&#xff0c;算法都一定很重要。”为什么&#xff0c;算法会如此重要&#xff1f;不…

研究综述 | 知识图谱划分算法研究综述

作者 | 王鑫&#xff0c;天津大学智能与计算学部来源 | 计算机学报知识图谱划分是大规模知识图谱分布式处理的首要工作&#xff0c;是知识图谱的分布式存储、查询、推理和挖掘的基础支撑。从知识图谱和图划分的定义出发&#xff0c;系统性地介绍当前可用于知识图谱数据划分的各…

深度学习中不得不学的Graph Embedding方法

原文链接&#xff1a;https://zhuanlan.zhihu.com/p/64200072 深度学习中不得不学的Graph Embedding方法王喆​数据挖掘等 3 个话题下的优秀答主​关注他1,290 人赞同了该文章这里是「王喆的机器学习笔记」的第十四篇文章&#xff0c;之前已经有无数同学让我介绍一下Graph Embe…

写给新手炼丹师:2021版调参上分手册

文 | 山竹小果在日常调参的摸爬滚打中&#xff0c;参考了不少他人的调参经验&#xff0c;也积累了自己的一些有效调参方法&#xff0c;慢慢总结整理如下。希望对新晋算法工程师有所助力呀&#xff5e;寻找合适的学习率(learning rate)学习率是一个非常非常重要的超参数&#xf…

函数式编程在Redux/React中的应用

本文简述了软件复杂度问题及应对策略&#xff1a;抽象和组合&#xff1b;展示了抽象和组合在函数式编程中的应用&#xff1b;并展示了Redux/React在解决前端状态管理的复杂度方面对上述理论的实践。这其中包括了一段有趣的Redux推导。 软件复杂度 软件的首要技术使命是管理复杂…