背景:在训练自己数据集进行kie之前,想跑一下md里面的例程,但md教程内容混乱,而且同一个内容有多个手册,毕竟是多人合作的项目,可能是为了工程解耦,方便更新考虑……需要运行的模型和运行步骤散落在不用文件夹下的不同md里面……很无语,对于新手小白真的很不友好,因此在这里,按照一个正常工程的使用顺序,进行一个总结。

本篇内容:使用PP-Structure 文档分析中关键信息抽取,运行VI-LayoutXLM模型在XFUND_zh数据集上的推理模型,跑通推理

2023.4.24更新:PaddleNLP中的新模型:UIE,在信息提取上的表现远好于VI-LayoutXLM,于是,VI-LayoutXLM方法已经被打入冷宫!
最新更好表现的UIE模型,见这篇:https://blog.csdn.net/z5z5z5z56/article/details/130346646

文章目录

  • 工程中关键信息提取相关内容
  • 本文参考
  • 理论部分
  • step0、环境准备
  • step1、下载解压VI-LayoutXLM推理模型
  • step2、下载XFUND数据集
  • step3、使用模型进行预测(基于PaddleInference)
    • 单SER: 语义实体识别 (Semantic Entity Recognition)
    • SER+RE: 关系抽取 (Relation Extraction)
  • 另一种方法(基于动态图的预测)
  • 仅预测SER模型
  • SER + RE模型串联

工程中关键信息提取相关内容

这里首先列出ppocr项目中与kie相关内容路径,方便查找,步骤从这些md中整合而来:

  • (本文主要参考这个)关键信息抽取-快速开始手册:.\ppstructure\kie\README_ch.md
  • 关键信息抽取全流程指南:.\ppstructure\kie\how_to_do_kie.md
  • (自己模型训练评估与推理)关键信息抽取手册md.\doc\doc_ch\kie.md
  • 关键信息抽取算法-VI-LayoutXLM.\doc\doc_ch\algorithm_kie_vi_layoutxlm.md
  • 配置文件位于.\configs\kie\vi_layoutxlm\
  • 关键信息抽取数据集说明文档(介绍了FUNSD、XFUND、wildreceipt数据集三种).\doc\doc_ch\dataset\kie_datasets.md
  • 自己标注关键信息:PPOCRLabel使用文档./PPOCRLabel/README_ch.md

本文参考

-(本文主要参考这个)PP-Structure 文档分析-关键信息抽取-快速开始手册:.\ppstructure\kie\README_ch.md
主要使用这个文件夹里面的内容

其他参考:https://blog.csdn.net/m0_63642362/article/details/128894464

理论部分

基于多模态模型的关键信息抽取任务有2种主要的解决方案。

(1)文本检测 + 文本识别 + 语义实体识别(SER)
(2)文本检测 + 文本识别 + 语义实体识别(SER) + 关系抽取(RE)

关于上述解决方案的详细介绍,请参考关键信息抽取全流程指南:.\ppstructure\kie\how_to_do_kie.md
我们下面首先执行单SER

step0、环境准备

除了前期基础环境安装

git clone https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
pip install -r requirements.txt

以外,还有一句

pip install -r ppstructure/kie/requirements.txt

step1、下载解压VI-LayoutXLM推理模型

环境配置这里不赘述,可以参考博主之前的文章,下面默认已经下载好ppocr项目文件夹了:
下表来自《关键信息抽取算法-VI-LayoutXLM》.\doc\doc_ch\algorithm_kie_vi_layoutxlm.md
下载保存推理模型到项目根目录名为model的文件夹里面

模型 骨干网络 任务 配置文件 hmean 下载链接
VI-LayoutXLM VI-LayoutXLM-base SER ser_vi_layoutxlm_xfund_zh_udml.yml 93.19% 训练模型/推理模型
VI-LayoutXLM VI-LayoutXLM-base RE re_vi_layoutxlm_xfund_zh_udml.yml 83.92% 训练模型/推理模型

或直接在终端下载+解压

#下载解压ser_vi_layoutxlm_xfund_infer.tar
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_infer.tar
tar -xvf ser_vi_layoutxlm_xfund_infer.tar#下载解压re_vi_layoutxlm_xfund_infer.tar
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_infer.tar
tar -xvf re_vi_layoutxlm_xfund_infer.tar


step2、下载XFUND数据集

下载XFUND数据集,放在根目录train_data文件夹里面,
下载解压:

# 准备XFUND数据集,对于推理,这里主要是为了获得字典文件class_list_xfun.txt
mkdir ./PaddleOCR/train_data
wget https://paddleocr.bj.bcebos.com/ppstructure/dataset/XFUND.tar
tar -xf XFUND.tar

之所以叫train_data,是因为和配置文件里面的路径保持一致,方便不修改yaml文件而直接用

step3、使用模型进行预测(基于PaddleInference)

PaddleOCR/ppstructure/kie

单SER: 语义实体识别 (Semantic Entity Recognition)

使用前面下载好的SER推理模型

cd ppstructure
python3 kie/predict_kie_token_ser.py \--kie_algorithm=LayoutXLM \--ser_model_dir=../model/ser_vi_layoutxlm_xfund_infer \--image_dir=./docs/kie/input/zh_val_42.jpg \--ser_dict_path=../train_data/XFUND/class_list_xfun.txt \--vis_font_path=../doc/fonts/simfang.ttf \--ocr_order_method="tb-yx"

复制版

python3 kie/predict_kie_token_ser.py  --kie_algorithm=LayoutXLM  --ser_model_dir=../model/ser_vi_layoutxlm_xfund_infer  --image_dir=./docs/kie/input/zh_val_42.jpg  --ser_dict_path=../train_data/XFUND/class_list_xfun.txt  --vis_font_path=../doc/fonts/simfang.ttf  --ocr_order_method="tb-yx"
  • ser_model_dir:我放在model文件夹内,
  • image_dir:要预测的图片
  • ser_dict_path:指向数据集的list文件位置
  • vis_font_path:是字体文件夹

第一次运行会下载一些模型

可视化结果保存在ppstructure/output目录下

对应infer.txt

SER+RE: 关系抽取 (Relation Extraction)

cd ppstructurepython3 kie/predict_kie_token_ser_re.py \--kie_algorithm=LayoutXLM \--ser_model_dir=../model/ser_vi_layoutxlm_xfund_infer \--re_model_dir=../model/re_vi_layoutxlm_xfund_infer\--use_visual_backbone=False \--image_dir=./docs/kie/input/zh_val_42.jpg \--ser_dict_path=../train_data/XFUND/class_list_xfun.txt \--vis_font_path=../doc/fonts/simfang.ttf \--ocr_order_method="tb-yx"

复制版

python3 kie/predict_kie_token_ser_re.py --kie_algorithm=LayoutXLM  --ser_model_dir=../model/ser_vi_layoutxlm_xfund_infer --re_model_dir=../model/re_vi_layoutxlm_xfund_infer --use_visual_backbone=False --image_dir=./docs/kie/input/zh_val_42.jpg --ser_dict_path=../train_data/XFUND/class_list_xfun.txt --vis_font_path=../doc/fonts/simfang.ttf --ocr_order_method="tb-yx"

我在NX盒子上推理会比较慢


RE在有些内容上还是比较弱的

另一种方法(基于动态图的预测)

手册里面还有一个使用tools/infer_kie_token_ser.py代码,PaddleOCR引擎的,使用预训练模型的,基于动态图的预测
不过经过实测,这里直接使用预训练模型和上面使用微调模型效果一样,毕竟没微调

#安装PaddleOCR引擎用于预测
pip install paddleocr -Umkdir pretrained_model
cd pretrained_model
# 下载并解压SER预训练模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/ser_vi_layoutxlm_xfund_pretrained.tar && tar -xf ser_vi_layoutxlm_xfund_pretrained.tar# 下载并解压RE预训练模型
wget https://paddleocr.bj.bcebos.com/ppstructure/models/vi_layoutxlm/re_vi_layoutxlm_xfund_pretrained.tar && tar -xf re_vi_layoutxlm_xfund_pretrained.tar

如果希望使用OCR引擎,获取端到端的预测结果,可以使用下面的命令进行预测。

仅预测SER模型


python3 tools/infer_kie_token_ser.py \-c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \-o Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy \Global.infer_img=./ppstructure/docs/kie/input/zh_val_42.jpg

SER + RE模型串联

python3 ./tools/infer_kie_token_ser_re.py \-c configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh.yml \-o Architecture.Backbone.checkpoints=./pretrained_model/re_vi_layoutxlm_xfund_pretrained/best_accuracy \Global.infer_img=./train_data/XFUND/zh_val/image/zh_val_42.jpg \-c_ser configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \-o_ser Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy

(后续训练篇幅涉及)如果希望加载标注好的文本检测与识别结果,仅预测可以使用下面的命令进行预测。
仅预测SER模型
python3 tools/infer_kie_token_ser.py \ -c
configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o
Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy
\ Global.infer_img=./train_data/XFUND/zh_val/val.json \
Global.infer_mode=False

SER + RE模型串联 python3 ./tools/infer_kie_token_ser_re.py \ -c configs/kie/vi_layoutxlm/re_vi_layoutxlm_xfund_zh.yml \ -o
Architecture.Backbone.checkpoints=./pretrained_model/re_vi_layoutxlm_xfund_pretrained/best_accuracy
\ Global.infer_img=./train_data/XFUND/zh_val/val.json \
Global.infer_mode=False \ -c_ser
configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml \ -o_ser
Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy

end

ps:

在关键信息抽取手册md.\doc\doc_ch\kie.md也有提到使用预训练模型的预测(tools/infer_kie_token_ser.py)
我们在后面几篇再展开:具体内容摘抄:
如您通过 python3 tools/train.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml 完成了模型的训练过程。您可以使用如下命令进行中文模型预测。
python3 tools/infer_kie_token_ser.py -c configs/kie/vi_layoutxlm/ser_vi_layoutxlm_xfund_zh.yml -o Architecture.Backbone.checkpoints=./pretrained_model/ser_vi_layoutxlm_xfund_pretrained/best_accuracy Global.infer_img=./ppstructure/docs/kie/input/zh_val_42.jpg
使用tools/infer_kie_token_ser.py需要首先有训练产生的checkpoints : ./output/ser_vi_layoutxlm_xfund_zh/best_accuracy作为支持,所以只能在训练后使用,具体在本系列第三篇展开

【PaddleOCR-kie】关键信息抽取1:使用VI-LayoutXLM模型推理预测(SER+RE)相关推荐

  1. 【PaddleNLP-kie】关键信息抽取2:UIE模型做图片信息提取全流程

    文章目录 本文参考 UIE理论部分 step0.UIEX原始模型使用 网页体验 本机安装使用 环境安装 使用docker的环境安装 快速开始 step1.UIEX模型微调(小样本学习) 数据标注(la ...

  2. 文本关键信息抽取——实体抽取代码实现

    使用paddlenlp中与训练好的语言模型来进行实体抽取: # Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. # # Li ...

  3. 面向知识图谱的信息抽取

    面向知识图谱的信息抽取 人工智能技术与咨询 点击蓝字 · 关注我们 来源:< 数据挖掘,> ,作者赵海霞等 关键词: 知识图谱:信息抽取:实体抽取:关系抽取:开放域 摘要: 摘要: 随着大 ...

  4. 山石岩读丨国之重典:我国关键信息基础设施保护标准体系的现状与进展

    一.概述 信息技术广泛应用和网络空间兴起发展,极大促进了经济社会繁荣进步,但同时网络空间安全形势也日益严峻,国家政治.经济.文化.社会.国防安全及公民在网络空间的合法权益面临严峻风险与挑战.世界主要国 ...

  5. OCRNLP技术自动抽取合同/文档关键信息

    通过OCR识别与NLP算法,智能结构化抽取合同关键信息,支持图片.PDF.word多种格式,可通过API接口传输至企业业务系统,协助企业工作人员完成自动填单.内容一致性检查,让合同审阅更高效.     ...

  6. 关于NLP相关技术全部在这里:预训练模型、图神经网络、模型压缩、知识图谱、信息抽取、序列模型、深度学习、语法分析、文本处理...

    NLP近几年非常火,且发展特别快.像BERT.GPT-3.图神经网络.知识图谱等技术应运而生. 我们正处在信息爆炸的时代.面对每天铺天盖地的网络资源和论文.很多时候我们面临的问题并不是缺资源,而是找准 ...

  7. 第十七篇:信息抽取Information Extraction

    目录 信息抽取 应用 如何? IE 中的机器学习 大纲 命名实体识别 典型实体标签 NER作为序列标记 IO 标记 IOB 标签 NER作为序列标记,继续 NER:特征 NER 的深度学习 关系抽取 ...

  8. 关键短语抽取及使用BERT-CRF的技术实践

    BERT[23]是非常优质的预训练模型,包含了很多预训练语料中蕴含的外部知识和信息.我们以此为基础,训练BERT-CRF模型,作为candidate generation中重要的一路召回.另外的召回路 ...

  9. 一人之力,刷爆三路榜单!信息抽取竞赛夺冠经验分享

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达文 | JayLou娄杰 在现如今的NLP竞赛中,信息抽取(IE)任务已占据半壁江山.来 ...

最新文章

  1. 用VS2005打开方案出现“此安装不支持该项目类型”
  2. php 多个文件,PHP实现将多个文件中的内容合并为新文件的方法示例
  3. 最大似然估计学习总结
  4. Angular中ngModel的$render的详解
  5. Linux下生成动态链接库是否必须使用 -fPIC 的问题
  6. android按钮周围阴影,Android 上的按钮填充和阴影
  7. 【GPU+ubuntu】Ubuntu下的Tensorflow-gpu等各种环境和包的安装
  8. centos mysql 主从_CentOS 搭建 MySql 主从备份
  9. 数据结构vl怎么求_数据结构
  10. 【Android进阶学习】设置透明效果的三种方法
  11. 【面试虐菜】—— MongoDB知识整理
  12. 架构设计师(Architect)的专业与角色
  13. java编写个倒计时_怎么编写一个倒计时java程序?求具体步骤!
  14. 硕士计算机毕业论文开题报告,计算机硕士毕业论文开题报告.doc
  15. 创业前期怎么做个简单易行的计划?
  16. python 日志输出为json格式文件_Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)...
  17. 苹果电脑装双系统Parallels Desktop虚拟机你需要知道,是否适合装虚拟机?
  18. 自动填充被拆分的单元格
  19. 文艺范儿的程序猿和攻城狮们
  20. 温度传感器室温监控仪

热门文章

  1. 现象与本质--------开垦供应链金矿:策略、精益、优化
  2. Mabot机器人趣味视频教程-神奇的轮子
  3. Matlab | 滤波降采样操作
  4. 模糊数学(二):隶属函数的确定
  5. 分析函数-STDDEV,STDDEV_SAMP ,STDDEV_POP,VAR_POP,VAR_SAMP,VARIANCE
  6. [图文教程] 包车预约App - 用小白接口快速开发App
  7. 转载:2008年软件业四大亮点回顾
  8. RN开发系列<*>--问题集合
  9. 基于Python的在线办公系统的设计和实现
  10. 总结基于寄存器与基于固件库stm32编程的差异