2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

Phi-3-Vision-128K大模型,AI助力OCR,文档处理更上一层楼

发布日期:2024-10-11 18:32:09 浏览次数: 2735
作者:AI科技论谈

微信搜一搜,关注“AI科技论谈”

Phi-3-Vision-128K-Instruct 模型,高效助力多模态数据处理与OCR识别。

长按关注《AI科技论谈》


1 Phi-3-Vision-128K-Instruct 简介

Phi-3-Vision-128K-Instruct 属于 Phi-3 模型家族,专为多模态数据处理而构建,支持长达 128,000 个令牌的上下文长度。该模型融合了文本和视觉数据,非常适合需要同时解释文本和图像的任务。其开发涉及 5000 亿个训练令牌,包括高质量的合成数据和经过严格筛选的公开可用资源。此外,通过监督微调和偏好优化等精细训练手段,Phi-3-Vision-128K-Instruct 被打造成能够提供精确、可靠且安全的人工智能解决方案。

Phi-3-Vision-128K-Instruct 拥有42亿个参数,其架构精巧,集成了图像编码器、连接器、投影器以及 Phi-3 Mini 语言模型,使其成为轻量级但功能强大的选择,适用于广泛的应用。

2 应用场景

Phi-3-Vision-128K-Instruct 模型的应用范围广泛,主要聚焦在以下几个核心领域:

1). 文档提取和OCR技术:能够高效地将图像中的文字或扫描的文档转换成可编辑的格式,尤其擅长处理包含表格、图表等复杂布局的文档。这使其成为数字化纸质文档或自动化数据提取工作流程的有价值工具。

2). 图像内容理解:该模型能够解析图像内容,识别出图像中的对象,理解场景,并从中提取出有用的信息。

3). 资源受限环境:即使在计算能力或内存受限的环境下,Phi-3-Vision-128K-Instruct 也能够运行AI任务,确保性能不打折。

4). 实时应用场景:能够减少实时应用程序中的处理延迟,适用于实时数据流、聊天助手或流媒体内容分析等场景,以提高响应速度。

3 部署 Phi-3-Vision-128K-Instruct

要使用 Phi-3-Vision-128K-Instruct,需要设置所需的库和工具的开发环境。该模型集成在 Hugging Face transformers 库的开发版本(4.40.2)中。在深入代码示例之前,先确保你的 Python 环境配置了这些包:

# 所需包
flash_attn==2.5.8
numpy==1.24.4
Pillow==10.3.0
Requests==2.31.0
torch==2.3.0
torchvision==0.18.0
transformers==4.40.2

要加载模型,可以更新本地 transformers 库。

模型加载示例

以下是一个 Python 示例,展示了如何初始化模型并进行推理。使用类和函数来保持代码的清晰性和结构性:

from PIL import Image
import requests
from transformers import AutoModelForCausalLM, AutoProcessor

class Phi3VisionModel:
    def __init__(self, model_id="microsoft/Phi-3-vision-128k-instruct", device="cuda"):
        """
        Initialize the Phi3VisionModel with the specified model ID and device.
        
        Args:
            model_id (str): The identifier of the pre-trained model from Hugging Face's model hub.
            device (str): The device to load the model on ("cuda" for GPU or "cpu").
        """

        self.model_id = model_id
        self.device = device
        self.model = self.load_model()  # 在初始化期间加载模型
        self.processor = self.load_processor()  # 在初始化期间加载处理器
    
    def load_model(self):
        """
        Load the pre-trained language model with causal language modeling capabilities.
        
        Returns:
            model (AutoModelForCausalLM): The loaded model.
        """

        print("Loading model...")
        # 使用自动设备映射和数据类型调整加载模型
        return AutoModelForCausalLM.from_pretrained(
            self.model_id, 
            device_map="auto",  # 自动将模型映射到适当的设备
            torch_dtype="auto",  # 根据设备使用适当的 torch 数据类型
            trust_remote_code=True,  # 允许执行自定义代码以加载模型
            _attn_implementation='flash_attention_2'  # 使用优化的注意力实现
        ).to(self.device)  # 将模型移动到指定的设备
    
    def load_processor(self):
        """
        Load the processor associated with the model for processing inputs and outputs.
        
        Returns:
            processor (AutoProcessor): The loaded processor for handling text and images.
        """

        print("Loading processor...")
        # 使用 trust_remote_code=True 加载处理器,以处理任何自定义处理逻辑
        return AutoProcessor.from_pretrained(self.model_id, trust_remote_code=True)
    
    def predict(self, image_url, prompt):
        """
        Perform a prediction using the model given an image and a prompt.
        
        Args:
            image_url (str): The URL of the image to be processed.
            prompt (str): The textual prompt that guides the model's generation.
        
        Returns:
            response (str): The generated response from the model.
        """

        # 从提供的 URL 加载图像
        image = Image.open(requests.get(image_url, stream=True).raw)
        
        # 为模型格式化输入提示模板
        prompt_template = f"<|user|>\n<|image_1|>\n{prompt}<|end|>\n<|assistant|>\n"
        
        # 处理输入,将提示和图像转换为张量格式
        inputs = self.processor(prompt_template, [image], return_tensors="pt").to(self.device)
        
        # 设置模型响应生成的生成参数
        generation_args = {
            "max_new_tokens"500,  # 生成的最大令牌数
            "temperature"0.7,     # 生成的采样温度,以增加多样性
            "do_sample"False      # 禁用采样以获得确定性输出
        }
        print("Generating response...")
        # 使用模型生成输出 ID,跳过输入令牌
        output_ids = self.model.generate(**inputs, **generation_args)
        output_ids = output_ids[:, inputs['input_ids'].shape[1]:]  # Ignore the input prompt in the output
        
        # 解码生成的输出令牌以获得响应文本
        response = self.processor.batch_decode(output_ids, skip_special_tokens=True)[0]
        return response

# 初始化模型
phi_model = Phi3VisionModel()

# 示例预测
image_url = "https://example.com/sample_image.png"  # 示例图像的 URL  
prompt = "Extract the data in json format."  # 指导模型的提示  
response = phi_model.predict(image_url, prompt)  # 获取模型的响应 

print("Response:", response)  # 打印生成的响应  

上述代码定义了 Phi3VisionModel 类,它抽象了模型的加载和使用,使其更容易集成到你的应用程序中。predict() 方法展示了如何使用自定义提示进行基于图像的推理。

4 OCR 功能测试

为了评估 Phi-3-Vision-128K-Instruct 模型的 OCR 性能,我们选取了一些真实扫描的身份证图像作为测试样本。这些图像质量参差不齐,清晰度也各不相同,给模型带来了不同程度的挑战。目标是展示模型如何能够从具有不同特征的文档中提取文本信息,例如模糊、复杂的背景和不同的文本字体。

图像 1:一本虚构的护照,上面详细记录了个人资料,包括姓名、国籍、出生地、签发日期和有效期。底部有一个可读区域。图像质量高,背景噪音不明显。

输出:

{
  "Type/Type""P",
  "Country code/Code du pays""UTO",
  "Passport Number/N° de passeport""L898902C3",
  "Surname/Nom""ERIKSSON",
  "Given names/Prénoms""ANNA MARIA",
  "Nationality/Nationalité""UTOPIAN",
  "Date of Birth/Date de naissance""12 AUGUST/AOUT 74",
  "Personal No./N° personnel""Z E 184226 B",
  "Sex/Sexe""F",
  "Place of birth/Lieu de naissance""ZENITH",
  "Date of issue/Date de délivrance""16 APR/AVR 07",
  "Authority/Autorité""PASSPORT OFFICE",
  "Date of expiry/Date d'expiration""15 APR/AVR 12",
  "Holder's signature/Signature du titulaire""anna maria eriksson",
  "Passport/Passeport""P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<<<<<L898902C36UT07408122F1204159ZE184226B<<<<10"
}

图像 2:一本荷兰护照,上面有清晰的持有人照片和整齐格式化的文本。字段包括护照号码、姓名、出生日期、国籍和有效期。文件以高对比度呈现,文本提取相对直接。底部的可读区域(MRZ)提供了结构化的数据格式,有助于验证提取信息的准确性。

输出:

以下是从护照中提取的完整数据,以 JSON 格式呈现:

{
  "passport": {
    "issuingCountry""Netherlands",
    "issuingAuthority""Koninkrijk der Nederlanden",
    "passportNumber""SPEC12014",
    "issuingDate""09 MAR 2014",
    "expiryDate""09 MAR 2024",
    "holder": {
      "gender""F",
      "nationality""Netherlands",
      "placeOfBirth""SPECIMEN",
      "sex""WF",
      "firstNames": [
        "Willem",
        "Lieselotte"
      ]
    },
    "physicalDescription": {
      "height""1.75 m",
      "hairColor""gray",
      "hairLength""short"
    },
    "issuingOffice""Burg. van Stad en Dorp",
    "issuingDateAsInt""14032014",
    "expiryDateAsInt""14032024",
    "fieldsExtracted": [
      {
        "code""NL",
        "dateOfBirth""10 MAR 1965",
        "dateOfIssue""09 MAR 2014",
        "dateOfExpiry""09 MAR 2024",
        "firstNames": [
          "Willem",
          "Lieselotte"
        ],
        "nationality""Netherlands",
        "passportNumber""SPEC12014",
        "placeOfBirth""SPECIMEN",
        "sex""WF"
      }
    ]
  }
}

5 在线体验 Phi-3-Vision-128K-Instruct

如果你想亲自尝试 Phi-3-Vision-128K-Instruct 模型,你可以通过以下链接来体验:https://ai.azure.com/explore/models/Phi-3-vision-128k-instruct/version/1/registry/azureml。这个链接可以体验模型的功能,尝试其 OCR 功能。

6 架构与训练

Phi-3-Vision-128K-Instruct 模型不单是一个语言模型,它是一个强大的多模态工具,能够同时处理视觉和文本数据。这个模型经历了包含5000亿个令牌的综合训练,涵盖了文本和图像数据。其架构巧妙地融合了语言模型和图像处理模块,构建了一个能够理解超过128K令牌上下文的连贯系统,使之能够应对长篇对话或处理大量内容的文档。

得益于在如512 H100 GPU这样的高性能硬件上的训练,以及采用flash attention技术提高内存效率,Phi-3-Vision-128K-Instruct 模型能够轻松驾驭大规模任务。它的训练数据集是合成数据和经过筛选的真实世界数据的混合体,特别强调了数学、编码、常识推理和一般知识,这使模型具有广泛的适用性,能够适应各种不同的应用场景。

7 性能基准

Phi-3-Vision-128K-Instruct 模型的性能已在多个基准测试中进行了测试,这些测试包括 ScienceQA、AI2D、MathVista 和 TextVQA。在涉及文本和视觉信息结合的任务上,该模型的得分普遍超越了众多现有模型,特别是在以下两个方面表现突出:

  1. 文档理解能力:Phi-3-Vision-128K-Instruct 能够从复杂的文档如 PDF 或图像中抽取关键信息。

  2. 表格和图表理解:该模型能够精确解读图形数据,并将这些数据转换成文字描述。

值得一提的是,在 ChartQA 数据集上,Phi-3-Vision-128K-Instruct 达到了 81.4% 的准确率;在 AI2D 数据集上,也取得了 76.7% 的高分。这些成绩充分证明了模型在理解数据密集型文档方面的强劲实力。

结语

Phi-3-Vision-128K-Instruct 代表的不仅仅是多模态人工智能领域的一次进步,它更是引领我们走向一个文档提取、OCR和AI驱动内容生成无缝衔接、易于操作的未来。得益于其全面的训练、强大的架构和深思熟虑的设计,这一模型赋予了开发者在各个领域革新数据处理方式的能力。

推荐书单

《LangChain编程:从入门到实践》

LangChain为开发者提供了一套强大而灵活的工具,使其能够轻松构建和优化大模型应用。本书以简洁而实用的方式引导读者入门大模型应用开发,涵盖LangChain的核心概念、原理和高级特性,并为读者提供了在实际项目中应用LangChain的指导。 本书从实际的例子出发,细致解读LangChain框架的核心模块和源码,使抽象的概念变得具体。无论你是初学者还是有经验的开发者,都能从中受益,能够将LangChain的独特之处融入自己的编程实践中。阅读本书,一起探索LangChain编程的奇妙世界吧!

购买链接:https://item.jd.com/14544326.html

精彩回顾

优化文本嵌入,大幅提升RAG检索速度

LangGraph Studio,使用LangChain高效可视化和测试AI智能体

全新大模型框架Haystack,搭建RAG pipeline

RAG文档解析器,核心技术剖析

搜索引擎+GraphRAG+智能体,打造AI智能搜索

一文彻底搞懂GraphRAG

长按关注《AI科技论谈》

长按访问【IT今日热榜】,发现每日技术热点

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅