ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

spacy保存和加载模型

2021-01-01 17:01:06  阅读:284  来源: 互联网

标签:nlp doc 模型 bytes spacy 加载


加载和保存模型

保存模型

保存类别:Language,Doc,Vocab和StringStore等
保存方法如下:

MethodExample
to_bytesdata = nlp.to_bytes()
from_bytesnlp.from_bytes(data)
to_disknlp.to_disk("/path")
from_disknlp.from_disk("/path")

序列化pipeline

可以分别处理不同的pipelines所对应的的不同的模型;

# serialize
byte_data = nlp.to_bytes()
lang = nlp.meta["lang"]
pipeline = nlp.meta["pipeline"]
#deserialize
nlp = spacy.blank(lang)
for pipe_name in pipeline:
	pipe = nlp.create_pipe(pipe_name)
	nlp.add_pipe(pipe)
nlp.from_bytes(bytes_data)

加载模型的流程:

  1. 加载模型提供的meta.json中包含的关于lang和pipeline的信息;
  2. 初始化语言类,创造并且添加pipeline的组件;
  3. 加载二进制data;

序列化Doc

处理大量的数据时,可能需要在机器之间来回传递分析结果,因此可以使用Doc.to_array或者使用DocBin类;

import spacy
from spacy.tokens import DocBin

doc_bin = DocBin(attrs=['LEMMA', 'ENT_IOB', 'ENT_TYPE'], store_user_data=True)
nlp = spacy.load("en_core_web_sm")
for doc in nlp.pipe(texts):
	doc_bin.add(doc)
bytes_data = doc_bin.to_bytes()

nlp = spacy.blank("en")
doc_bin = DocBin().from_bytes(bytes_data)
docs = list(doc_bin.get_docs(nlp.vocab))

使用Pickle

  • Pickle加载单个
import Pickle
doc = nlp(text)
doc_data = pickle.dumps(doc)
  • Pickle加载多个
import Pickle
doc1 = nlp(text1)
doc2 = nlp(text2)
doc_data = pickle.dumps([doc1,doc2])

加载、保存、修改模型

加载新训练

利用Language.to_disk()

nlp.to_disk('/path')

生成模型包

手动生成meta.json文件:

{
	"name": "example_model",
	"lang": ,
	"version": 
	....
}

利用命令行生成package:

$ python -m spacy package /path

这样就可以生成一个模型包

搭建模型包

搭建python包的方法:

$ python setup.py sdist

这样就可以创建一个.tar.gz在目标路径下/dist,然后再通过pipe install进行安装:

$ pip install /path/...tar.gz

加载自定义的模型包

利用spacy.load()来加载模型:

nlp = spacy.load("/path/model")

如果想加载二进制数据,需要创造Language类并且调用from_disk函数

nlp = spacy.blank("en").from_disk("/path/model")

标签:nlp,doc,模型,bytes,spacy,加载
来源: https://blog.csdn.net/xiaoxiaoqian0519/article/details/112060514

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有