spaCy v2.2 带来了重新训练的统计模型,修复了错误并提升了对小写文本的处理性能。为了解决训练数据与实际数据在大小写和格式上的差异问题,开发了新的数据增强系统。该系统在训练过程中支持词语替换和配对标点符号(如引号)的处理。
通过 --orth-variant-level 参数可启用数据增强策略,默认值为 0.3,表示 30% 的标记在训练期间会被替换。被选中的输入有 50% 的概率会被强制转换为小写。
新增了挪威语和立陶宛语的预训练模型。当前版本未使用预训练词向量和 spacy pretrain 命令,后续版本将进一步提升准确率。
基于 LaSSy 语料库和 OntoNotes 5 标注,训练了包含 20 个实体类别的全新命名实体识别模型,取代了之前的半自动维基百科模型。新版模型目录已更新,展示更详细的模型信息包括标签体系。
spacy train 命令现已集成文本分类器支持,示例命令如下:
python -m spacy train en /output /train /dev --pipeline textcat --textcat-arch simple_cnn --textcat-multilabel新增 debug-data 命令,用于验证训练和开发数据、获取统计信息、发现无效实体标注、循环依赖、低数据量标签等问题。
将基于查找的词形还原表从 Python 文件迁移为 gzip 压缩的 JSON,并移至独立包 spacy-lookups-data。spaCy 安装体积现在缩小了 5-10 倍。
大型语言资源现在由统一的 Lookups API 支持,自定义组件也可以利用该 API 将查找表存入共享的 Vocab 对象。
新的 DocBin 类可高效序列化/反序列化 Doc 对象集合,内部将每个 Doc 转换为 numpy 数组,并维护所有字符串集合。序列化格式为 gzip 压缩的 msgpack。
使用示例:
import spacy
from spacy.tokens import DocBin
doc_bin = DocBin(attrs=["LEMMA", "ENT_IOB", "ENT_TYPE"], store_user_data=True)
texts = ["Some text", "Lots of texts...", "..."]
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))v2.2 将 PhraseMatcher 替换为基于 Trie 树的算法,在标记级别进行搜索而非字符级别。基准测试(10,000 篇维基百科文章)结果如下:
查询数 | 匹配数 | v2.1.8(秒) | v2.2.0(秒) |
|---|---|---|---|
10 | 0 | 0.439 | 0.027 |
100 | 795 | 0.457 | 0.028 |
1,000 | 11,376 | 0.512 | 0.043 |
10,000 | 105,688 | 0.632 | 0.114 |
少量查询时速度提升近 20 倍,1 万条查询时仍快约 5 倍。FINISHED
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。