Skip to content

BeryL8clock/LLM-based-graph-tool

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LLM-based-graph-tool

一个基于 InternVL 的 多模态大模型图表解析器项目,欢迎大家也来参加书生大模型实战营项目

介绍

现在的一些多模态大模型虽然已经具备了图表解析能力,但是并不能很完美的解析出图表中的位置以及关系等信息,强如GPT4o也经常出现无法解析出坐标的问题。

所以本项目计划训练一个能够精确解析出图表的全部信息,包括坐标,OCR结果,以及复杂关系等信息。

训练目标

  1. 使LLM能够识别流程图,并将流程图转换成dot,json,mermaid格式输出。
  2. 使LLM能够识别表格数据,并将表格转换成jsonn格式输出。
  3. 使LLM能够准确分析PDF的版面,按照人类阅读顺序去理解PDF内容。
  4. 使LLM能够准确识别出流程图中基础图形的边界框,输出bbox坐标。

V0版本

目前第一版模型以训练模型的Grounding能力为主,通过构造了7k输出边界框的数据集,全量微调了InternVL2-2B模型,目前已经能够识别出图片中的基础图形。

Todo

  1. 使LLM能够识别流程图,并将流程图转换成dot格式输出。(v1.0)版本
  2. 使LLM能够识别流程图,并将流程图转换成dot,json,mermaid格式输出。(v1.1~1.2)版本
  3. 使LLM能够识别表格数据,并将表格转换成jsonn格式输出。(v2)版本
  4. 使LLM能够准确分析PDF的版面,按照人类阅读顺序去理解PDF内容。(v3)版本

技术方案

项目架构

Alt text

1. 数据集构造

在本项目中使用的预训练数据,主要以自己构造的数据为主,因为网上已有的流程图识别数据集,表格识别数据集,PDF识别数据集较少,计划将这部分数据集作为测试集,而非训练集。还在流程图,表格等图表数据手动构造起来都很容易,可以快速生成大批量的数据。 计划构建的数据集类型有:

  1. 流程图的基本图形,矩形,圆,菱形,平行四边形行等。
  2. 流程图,包含节点数量从几个到几十个的流程图。
  3. 表格数据,多种类型表格,会出现合并单元格
  4. 医书的版面数据

开源数据集:

  1. 流程图识别数据集

  • 基于GPT4o生成大量流程图 首先是爬取了丁香医生网站中的全部疾病信息,使用GPT4o对每个疾病的每个部分的内容单独生成一张流程图,以dot格式生成,然后用graphvizdot代码保存成png图片,能够保存成功的,说明gpt-4o生成的流程图没问题。由此方法可以生成了大量的流程图,去除掉其中的图片长宽比大于2的部分,然后sample10k的数据作为数据集。同时将dot代码转换成jsonmermaid格式,这样就得到了由流程图转换成dot,json,mermaid格式的数据集。
  1. 表格数据集 表格数据集采用了开源的TableBank数据集,取其中的10k作为本项目的微调使用的数据集。
  1. 文档版面分析 表格数据集采用了开源的DocBank数据集,取其中的10k作为本项目的微调使用的数据集。

2. 模型选择

本项目目前采用的是InternVL2多模态大模型,该模型的视觉模型采用了InternViT,语言模块则采用了Qwen,Internlm等模型。可以见下表:

Model Name Vision Part Language Part HF Link MS Link Document
InternVL2‑1B InternViT‑300M‑448px Qwen2‑0.5B‑Instruct 🤗 link 🤖 link 📖 doc
InternVL2‑2B InternViT‑300M‑448px internlm2‑chat‑1‑8b 🤗 link 🤖 link 📖 doc
InternVL2‑4B InternViT‑300M‑448px Phi‑3‑mini‑128k‑instruct 🤗 link 🤖 link 📖 doc
InternVL2‑8B InternViT‑300M‑448px internlm2_5‑7b‑chat 🤗 link 🤖 link 📖 doc
InternVL2‑26B InternViT‑6B‑448px‑V1‑5 internlm2‑chat‑20b 🤗 link 🤖 link 📖 doc
InternVL2‑40B InternViT‑6B‑448px‑V1‑5 Nous‑Hermes‑2‑Yi‑34B 🤗 link 🤖 link 📖 doc
InternVL2-Llama3-76B InternViT‑6B‑448px‑V1‑5 Hermes‑2‑Theta‑
Llama‑3‑70B
🤗 link 🤖 link 📖 doc

InternVL的模型结构如下图所示,该模型的40B76B版本在Image benchmark取得了与GPT-4o差不多的效果,而1~8B模型在Grounding Benchmarks上均取得了还算不错的效果,可见VIT视觉模型的效果还算不错。 所以首先采用了该模型进行训练。

InternVL2 architecture 本项目计划在两个开源多模态模型的基础上进行训练,包括LLaVa和Qwen-VL,两个多模态模型都是具有grounding能力和OCR能力的模型。符合本项目要求。

3.微调方法

具体的训练方法可以看InternVL实践指南_官方教程InternVL实践指南_xtuner教程两个教程,官方教程就是按照InternVL官方网站提供的教程进行实操得到,而Xtuner教程则是书生大模型实战营提供的internvl微调教程进行实操得到。

InternVL实践指南_官方教程中详细介绍了数据集中每条数据的格式,如下所示。在第一版的

构建微调数据集

internVL2的微调数据集格式为:

[{
    "id": 2324,
    "image": "COCO_train2014_000000581857.jpg",
    "width": 427,
    "height": 640,
    "conversations": [
        {
            "from": "human",
            "value": "<image>\nPlease provide the bounding box coordinate of the region this sentence describes: <ref>the lady with the blue shirt</ref>"
        },
        {
            "from": "gpt",
            "value": "<ref>the lady with the blue shirt</ref><box>[[243, 469, 558, 746]]</box>"
        },
        {
            "from": "human",
            "value": "Please provide the bounding box coordinate of the region this sentence describes: <ref>woman in gray shirt facing camera on right</ref>"
        },
        {
            "from": "gpt",
            "value": "<ref>woman in gray shirt facing camera on right</ref><box>[[507, 409, 698, 740]]</box>"
        },
        {
            "from": "human",
            "value": "Please provide the bounding box coordinate of the region this sentence describes: <ref>a woman in glasses shops in an open air fruit market</ref>"
        },
        {
            "from": "gpt",
            "value": "<ref>a woman in glasses shops in an open air fruit market</ref><box>[[196, 422, 395, 708]]</box>"
        }
    ]
},
{
    "id": 78281,
    "image": "images/x00001541/000106464.jpg",
    "width": 800,
    "height": 800,
    "conversations": [
        {
            "from": "human",
            "value": "<image>\nPlease detect and label all objects in the following image and mark their positions."
        },
        {
            "from": "gpt",
            "value": "Sure, I will detect and label all objects in the image and mark their positions.\n\n```\n<ref>Bulletproof Helmet</ref><box>[[1, 2, 269, 235]]</box>\n<ref>Bulletproof Clothing</ref><box>[[650, 619, 990, 993]]</box>\n<ref>Gun Model</ref><box>[[32, 231, 977, 662]]</box>\n<ref>screw</ref><box>[[754, 376, 851, 429]]</box>\n<ref>handcuff</ref><box>[[698, 228, 931, 386]]</box>\n<ref>95 Type Assault Rifle</ref><box>[[39, 229, 983, 667]]</box>\n<ref>shield</ref><box>[[30, 597, 273, 993]]</box>\n<ref>telescope</ref><box>[[666, 38, 890, 217]]</box>\n<ref>Wireless Walkie-Talkie</ref><box>[[295, 2, 370, 226], [374, 0, 447, 226]]</box>\n<ref>bomb</ref><box>[[473, 61, 552, 181], [569, 61, 648, 183]]</box>\n<ref>weapon</ref><box>[[302, 617, 342, 993]]</box>\n<ref>vessel</ref><box>[[355, 653, 644, 991]]</box>\n<ref>artifact</ref><box>[[915, 0, 981, 294]]</box>\n```\n"
        }
    ]
}]

初步采用全量微调的方式,微调了InternVL2-2B模型,同时设置freeze_visual_encoder=False, quantization_llm=False, quantization_vit=False,在一张A100上进行训练。

笔记

  1. 书生大模型实战营闯关记录----第八关:书生大模型全链路开源开放体系
  2. 书生大模型实战营闯关记录----第七关:模型评估,使用OpenCompass评估大模型,OpenCompass入门
  3. 书生大模型实战营闯关记录----第六关:大语言模型微调实战,LoRA和QLoRA微调,理论+Xtuner微调实操
  4. 书生大模型实战营闯关记录----第五关:LlamaIndex+Internlm2 RAG实践Demo:效果对比,文档加载,向量库构建,检索器,模型推理
  5. 书生大模型实战营闯关记录----第四关:提示词工程实践,什么是Prompt,提示词设计框架CRISPE/CO-STAR,LangGPT结构化提示词
  6. 书生大模型实战营闯关记录----第三关:8G 显存玩转书生大模型 Demo
  7. 书生大模型实战营闯关记录----第二关:实现word_count统计文本中word频次
  8. 书生大模型实战营闯关记录----第一关:Linux基础知识,SSH连接远程服务器,Linux常用命令,创建Anaconda虚拟环境

About

一个基于多模态大模型的图表解析器

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 86.7%
  • Shell 12.7%
  • Other 0.6%