spaCy v2.1 技术特性详解
语言模型预训练
2018年自然语言处理研究最重要的进展是语言模型预训练技术的成功。虽然利用原始文本导入知识的需求早已明确,但直到2018年多项研究证明简单的语言建模目标对LSTM模型效果显著。某中心团队进一步扩展了双向模型预训练方法。
由于spaCy的性能目标设定为每CPU核心每秒处理10,000个单词,直接使用BERT或GPT-2等大型模型并不现实。为此开发了近似输出语言建模(LMAO)技术,通过预测词向量而非词汇ID来解决输出层过大的问题。
规则匹配系统增强
v2.1版本完全重写了基于规则的匹配器引擎,解决了操作符和量词使用的多个问题。新API引入了集合成员和丰富比较谓词,支持通过扩展属性进行模式匹配:
|
|
基于规则的实体识别
新增EntityRuler组件可以基于术语列表和令牌规则进行实体识别。该组件可以放置在实体识别器之前或之后,支持直接设置实体跨度或补充模型遗漏的实体。
|
|
重新分词优化
新的Doc.retokenize上下文管理器专门为批量处理优化,支持合并和拆分操作:
|
|
分词性能提升
通过消除可变宽度后视表达式,分词器效率提高了2-3倍。这些改进使得可以回归使用Python内置的re库,不再依赖regex模块。
矩阵乘法实现
v2.1版本使用cython-blis包确保矩阵乘法在不同环境和安装方式下的一致性性能。这一改进解决了多线程和性能不一致问题,显著提升了库的稳定性。
依赖项精简
通过移除ujson、dill、regex等多个第三方依赖,改用自主开发的srsly序列化库,大幅减少了安装时间和系统要求。当前主要依赖仅包括:
|
|
安装优化
通过提供完整的wheel安装文件,实现了无需编译器的安装体验,显著简化了安装过程并提高了跨平台兼容性。
这些技术改进使spaCy v2.1在保持高性能的同时,显著提升了稳定性和易用性,为自然语言处理任务提供了更强大的工具集。