使用小型Spacy模型创建测试环境

时间:2017-02-22 18:28:29

标签: testing spacy

这更像是一个最佳/常见的练习题。

我们在生产系统中使用Spacy。在测试时,很多时候我们必须下载完整的spacy模型(解析器+单词向量),这可能非常慢(约30分钟)并且令人沮丧。也许更好的策略可以是创建用于测试的自定义轻量级spacy模型,例如,仅具有1000个词汇词汇和更小的解析模型。

在使用可应用于此方案的大型数据模型进行测试时是否有建议的策略/最佳实践?

2 个答案:

答案 0 :(得分:1)

尽管@aniav的建议似乎已经解决了@Rajhans问题,并且在大多数情况下模拟和缓存可能是一个好主意,但我还是想添加一些有助于缩短单元测试持续时间的内容:

我意识到我正在加载甚至没有使用过的几个spaCy组件,即spaCy可能会加载NER组件,而您甚至不使用它。您可以使用

停用单个组件
nlp = spacy.load("en_core_web_lg", disable=["tagger", "ner"])

这将禁用标记器和神经识别。有关更多详细信息,请参见spaCy documentation

这不仅减少了单元测试的时间,而且还具有使生产代码更快启动的良好副作用。

答案 1 :(得分:0)

这主要取决于您需要测试的内容和方式。 您可能并不真正需要或想要测试spacy本身,您希望依靠spacy的结果来测试您的函数,并且在这个问题上的一个好习惯是模拟spacy的响应并测试您的代码信任spacy工作正常(它确实有测试;))。在我们的环境中,我们在导入spacy时加载模型,因此我们必须模拟导入的模块,以便不加载这些数据。

当然可以选择创建模型的轻量级版本,但这不是一个简单的案例,它可能需要处理每个spacy版本更改,你必须记住其他开发人员应该能够更新模型之后,当测试/要求发生变化时。

如果您实际上需要模型并且最大的问题是等待它们下载,请考虑使用缓存来存储数据。许多CI环境可以为您缓存模型,并且在引入较新版本的spacy之前它们将一直有效。