SpaCy कस्टम सेंटेन्सेज़र त्रुटि के साथ डिस्क को बचाने के लिए मॉडल

Nov 27 2020

मुझे पता है कि इसी तरह के सवाल पूछे गए थे:

स्पाइस कस्टम वाक्य विभाजन

SpaCy में कस्टम वाक्य सीमा का पता लगाना

फिर भी मेरी स्थिति थोड़ी अलग है। मैं स्पेंसर प्रहरी से विरासत में लेना चाहता हूं ():

from spacy.pipeline import Sentencizer

class MySentencizer(Sentencizer):
    def __init__(self):
        self.tok = create_mySentencizer() # returning the sentences

    def __call__(self, *args, **kwargs):
        doc = args[0]
        for tok in doc:
            # do set the boundaries with tok.is_sent_start 
        return doc

यहां तक ​​कि अगर मैं doc = nlp("Text and so on. Another sentence.")मॉडल को अपडेट करने के बाद कॉल करता हूं तो भी थूक विभाजन ठीक काम करता है :

  nlp = spacy.load("some_model")
  sentencizer = MySentencizer()
  nlp.add_pipe(sentencizer, before="parser")
  # update model 

जब मैं प्रशिक्षित मॉडल को सहेजना चाहता हूं:

nlp.to_disk("path/to/my/model")

मुझे निम्नलिखित त्रुटि मिलती है:

AttributeError: 'MySentencizer' object has no attribute 'punct_chars'

इसके विपरीत, यदि मैं nlp.add_pipe (nlp.create_pipe ('sentencizer') का उपयोग करता हूं) तो त्रुटि उत्पन्न नहीं होती है। मुझे आश्चर्य है कि मुझे किस बिंदु पर punct_chars विशेषता निर्धारित करनी चाहिए। यह सुपरक्लास से विरासत में मिला होगा?

अगर मैं सेंटेन्साइज़र को क्लास से रिप्लेस करता हूँ और पहली पोस्ट के अनुसार ऑब्जेक्ट करता हूँ, तो यह काम करता है, लेकिन मैं रास्ते में कुछ मूल्यवान जानकारी खो सकता हूँ जैसे कि punct_chars?

मदद के लिए अग्रिम में धन्यवाद।

क्रिस

जवाब

1 SergeyBushmanov Nov 29 2020 at 20:44

निम्नलिखित करना चाहिए (नोट super(MySentencizer, self).__init__()):

import spacy
from spacy.pipeline import Sentencizer

class MySentencizer(Sentencizer):
    def __init__(self):
        super(MySentencizer, self).__init__() 

    def __call__(self, *args, **kwargs):
        doc = args[0]
        for tok in doc:
            tok.is_sent_start = True if tok.orth == "." else False
        return doc

nlp = spacy.load("en_core_web_md")
sentencizer = MySentencizer()
nlp.add_pipe(sentencizer, before="parser")

nlp.to_disk("model")