文章目录
- 1. 导包
- 2. 数据处理
- 3. 辅助函数
- 3.1 评估函数
- 3.2 预测函数
- 3.3 预测结果解码
- 4. 训练
填写快递单据可以直接把所有信息直接粘贴进客户端,客户端自动识别 省市、人名、电话等信息,分类填入,然后打印出来粘贴。无须人工填写,加快了作业效率。
learn from : https://aistudio.baidu.com/aistudio/projectdetail/1329361
通过使用预训练模型 finetune,训练一个快递信息抽取模型。
1. 导包
代码语言:javascript复制# 快递单信息抽取
from functools import partial # 打包函数,并给定默认参数
import paddle
from paddlenlp.datasets import MapDataset # 自定义数据集
from paddlenlp.data import Stack, Tuple, Pad # batch化工具函数
from paddlenlp.transformers import ErnieTokenizer, ErnieForTokenClassification
from paddlenlp.metrics import ChunkEvaluator # 指标计算
from paddle.utils.download import get_path_from_url
2. 数据处理
代码语言:javascript复制URL = "https://paddlenlp.bj.bcebos.com/paddlenlp/datasets/waybill.tar.gz"
get_path_from_url(URL, "./")
epochs = 10
batch_size = 16
def load_dict(dict_path): # 读取字典
vocab = {}
i = 0
for line in open(dict_path, 'r', encoding='utf-8'):
key = line.strip('n')
vocab[key] = i
i = 1
return vocab
# 展示下数据格式
with open("./data/test.txt", 'r', encoding='utf-8') as f:
i = 0
for line in f:
print(line)
i = 1
if i > 5:
break
# text_a label
#
# 黑龙江省双鸭山市尖山区八马路与东平行路交叉口北40米韦业涛18600009172
# A1-BA1-IA1-IA1-IA2-BA2-IA2-IA2-IA3-BA3-IA3-IA4-BA4-IA4-IA4-IA4-IA4-IA4-IA4-IA4-IA4-IA4-IA4-IA4-IA4-IA4-IP-BP-IP-IT-BT-IT-IT-IT-IT-IT-IT-IT-IT-IT-I
# A1 表示省,-B 开始, -I 内部, P 人名, T 电话
- 数据转换函数,把文字转成数字 ids 类型
def convert_example(example, tokenizer, label_vocab):
tokens, labels = example
tokenized_input = tokenizer(
tokens, return_length=True, is_split_into_words=True)
# Token '[CLS]' and '[SEP]' will get label 'O'
labels = ['O'] labels ['O'] # 大写的字母 O(欧)
tokenized_input['labels'] = [label_vocab[x] for x in labels]
return tokenized_input['input_ids'], tokenized_input['token_type_ids'],
tokenized_input['seq_len'], tokenized_input['labels']
# 转成数字list
- 加载数据集
def load_dataset(datafiles):
def read(data_path):
with open(data_path, 'r', encoding='utf-8') as fp:
next(fp) # Skip header
for line in fp.readlines():
words, labels = line.strip('n').split('t')
words = words.split('