如何使用特定于域的规则来扩展SpaCy英语模型?

问题描述:

我正在使用SpaCy处理来自独特主题域的英文文本上的NLP任务。我想逐步改进SpaCy现有的英文模式(具体来说我从'en_core_web_md'开始),并将它们打包以便同事轻松重复使用。如何使用特定于域的规则来扩展SpaCy英语模型?

我的第一个改变是对标记器的简单改变;我已经通过定义一个自定义类开始:

class DomainSpecificEnglish(English.Defaults): 
    lang = 'en_mydomain' 

    class Defaults(English.Defaults): 
     # my custom changes the tokenizer here 


spacy.util.set_lang_class(DomainSpecificEnglish.lang, DomainSpecificEnglish) 

现在,我将继续使用en_core_web_md的单词和单词矢量(以后我会重新训练这些太)。 ,但SpaCy通过lang字符串查找这些模型文件,该字符串不再是"en"

如何构建依赖于已建模型的特定于域的“语言”子类?我是否必须明确地将en_core_web_md文件复制到名为en_mydomain的磁盘上的新文件夹?

一旦工作,我希望将这个小项目(一个类)打包为一个Python的鸡蛋,我的同事可以安装。理想情况下,我不应该要求他们运行额外的安装后命令来将文件移动到磁盘上。

docs,您可以创建一个链接,像这样:

python -m spacy link en_core_web_md en_mydomain 

这只是创建一个符号,所以没有文件被复制,并立即完成。

+1

这确实会成功加载模型,但它也恰好打破'spacy.load'。我已经在https://github.com/explosion/spaCy/issues/1366 报告了这个问题,你可能是正确的答案,但我可能会等待生长激素问题的后续行动,以确保他们不会推荐做这件事不同。 –

+0

最好使用'spacy package'创建自定义语言,并显式重写'meta.json'来引用您的新语言名称。 –