加载和保存模型
保存模型
保存类别: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)
加载模型的流程:
- 加载模型提供的meta.json中包含的关于lang和pipeline的信息;
- 初始化语言类,创造并且添加pipeline的组件;
- 加载二进制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")