J'utilise SpaCy pour des tâches PNL sur du texte anglais à partir d'un domaine unique. Je voudrais apporter des améliorations progressives au modèle anglais existant de SpaCy (spécifiquement je commence à partir de 'en_core_web_md'
), et les emballer pour une réutilisation facile par mes collègues.Comment étendre le modèle anglais de SpaCy avec des règles spécifiques au domaine?
Mon premier changement est une simple modification du jeton; J'ai commencé par définir une classe personnalisée:
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)
Pour l'instant, je continuerais à utiliser Vocab de en_core_web_md
et des vecteurs de mots (plus tard, je vais re-former ceux-ci aussi). , mais SpaCy regarde ces fichiers modèles via la chaîne lang
, qui n'est plus "en"
.
Comment puis-je créer une sous-classe "language" spécifique au domaine qui repose sur des modèles déjà construits? Dois-je copier explicitement les fichiers en_core_web_md
dans un nouveau dossier sur le disque nommé en_mydomain
? Une fois que cela fonctionne, j'espère emballer ce petit projet (la classe) comme un oeuf Python que mes collègues peuvent installer. Idéalement, je ne devrais pas les obliger à exécuter des commandes de post-installation supplémentaires pour déplacer les fichiers sur le disque.
Cela ne charge le modèle avec succès, mais il arrive aussi à rompre 'spacy.load'. Je l'ai signalé à https://github.com/explosion/spaCy/issues/1366 Votre réponse est probablement la bonne, mais je peux attendre un suivi sur cette question de GH pour m'assurer qu'ils ne recommandent pas de le faire différemment. –
Il est préférable de créer le langage personnalisé avec 'spacy package' et de surcharger explicitement' meta.json' pour référencer votre nouveau nom de langue. –