spacy保存和加载模型

加载和保存模型

  • 保存模型
  • 序列化pipeline
  • 序列化Doc
  • 使用Pickle
  • 加载、保存、修改模型
    • 加载新训练
    • 生成模型包
    • 搭建模型包
    • 加载自定义的模型包

保存模型

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

Method Example
to_bytes data = nlp.to_bytes()
from_bytes nlp.from_bytes(data)
to_disk nlp.to_disk("/path")
from_disk nlp.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")

你可能感兴趣的:(自然语言处理)