2017-09-26 4 views
1

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.

Répondre

0

De l'docs, vous pouvez créer un lien comme ceci:

python -m spacy link en_core_web_md en_mydomain 

Ce juste crée un lien symbolique, donc pas de fichiers sont copiés et il reprend immédiatement.

+1

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. –

+0

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. –