如何将训练好的Spacy NLP简历解析模型部署到Web或移动应用
简历解析模型集成到Web/移动应用的实操步骤
先解决重复训练的问题:保存训练好的模型
每次重新训练太浪费时间,先把Spacy训练好的model-best保存下来:
- 在Colab里执行以下代码,把模型导出到本地路径:
import spacy # 加载Colab里训练好的最优模型 nlp = spacy.load("/content/model-best") # 保存到本地文件夹 nlp.to_disk("/content/saved-resume-parser") - 把这个
saved-resume-parser文件夹下载到本地,或者上传到你的GitHub仓库(如果体积太大,用Git LFS管理大文件)。
模型集成的三种可行方案
方案1:搭建Python后端API(适配所有平台)
这是最通用的方式,不管Web还是移动应用都能通过HTTP请求调用:
- 用FastAPI或Flask封装模型成接口,示例FastAPI代码:
from fastapi import FastAPI, UploadFile, File import spacy import fitz # PyMupdf app = FastAPI() # 加载本地保存的模型 nlp = spacy.load("./saved-resume-parser") @app.post("/parse-resume") async def parse_resume(file: UploadFile = File(...)): # 提取PDF文本 doc = fitz.open(stream=await file.read(), filetype="pdf") text = "" for page in doc: text += page.get_text() # 用模型解析文本 parsed_doc = nlp(text) # 整理结构化结果 result = {} for ent in parsed_doc.ents: if ent.label_ in result: result[ent.label_].append(ent.text) else: result[ent.label_] = [ent.text] return {"parsed_data": result} - 把这个API部署到云平台(比如Render、Heroku、AWS EC2),部署后拿到API地址,你的Flutter/Java应用就能直接调用。
方案2:集成到Flutter移动端
两种思路,选适合你的:
- 简单版:调用后端API:用Flutter的
http或dio包发送POST请求,上传PDF文件,接收解析后的JSON结果,这种方式不用处理本地模型的兼容性,上手最快。 - 本地运行模型:如果想离线使用,把Spacy模型导出为ONNX格式:
然后用Flutter的spacy.to_onnx(nlp, "./resume-parser.onnx")onnxruntime_flutter插件加载ONNX模型,在本地完成解析。注意要测试模型在移动端的性能,必要时做模型量化减小体积。
方案3:集成到Java移动应用
同样分两种方式:
- 调用后端API:用
OkHttp或Retrofit发送HTTP请求,处理文件上传和结果解析,这是最省心的方式,不用接触模型的本地运行逻辑。 - 本地运行模型:用Deep Java Library(DJL)加载ONNX格式的模型,DJL专门做Java环境的深度学习部署,官方有详细的文档可以参考,适合需要离线功能的场景。
额外优化建议
- 把PDF文本提取和模型解析的逻辑都放在后端,前端只负责上传文件和展示结果,减少客户端的计算压力。
- 如果模型加载慢,用Spacy的模型量化工具减小模型体积:
spacy package --quantize ./saved-resume-parser ./quantized-model
内容的提问来源于stack exchange,提问作者Atharva Sankhe
相关产品推荐
相关产品推荐

