训练 Spacy NER 模型时出现异常:“[E022] 在 NER 模型中找不到名称为 'B-COMPANY' 的转换。”

Traing a Spacy NER model I get an exception: "[E022] Could not find a transition with the name 'B-COMPANY' in the NER model."

对于可重现的例子,我将提供玩具数据和代码:

训练数据如下(19条记录):

to_train_ents  = [('  δηµοσίευσης  στο  διαδικτυακό  τόπο του Γ.Ε.ΜΗ. στοιχείων της ανώνυµης εταιρείας µε την επωνυµία «ΑΛΟΥΜΥΛ, ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ ΑΝΩΝΥΜΗ ΕΤΑΙΡΙΑ».    Την 25/07/2019 καταχωρίσθηκε στο Γενικό Εµπορικό Μητρώο (Γ.Ε.ΜΗ.) µε Κωδικό Αριθµό Καταχώρισης',
  {'entities': [(100, 146, 'B-COMPANY')]}),
 ('ΑΚΟΙΝΩΣΗ   Καταχώρισης στο Γενικό Εμπορικό Μητρώο στοιχείων της ανώνυμης εταιρείας με την επωνυμία «ΑΝΕΚ ΤΟΥΡΙΣΤΙΚΗ - ΞΕΝΟΔΟΧΕΙΑΚΗ - ΣΥΜΜΕΤΟΧΩΝ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ».  Την 18/12/2017 καταχωρίσθηκαν στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.), τα κατωτέρω στοιχεία της Ανώ',
  {'entities': [(100, 160, 'B-COMPANY')]}),
 ('ς στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.) στοιχείων της ανώνυμης τραπεζικής εταιρείας με την επωνυμία «ATTICA BANK ΑΝΩΝΥΜΗ ΤΡΑΠΕΖΙΚΗ ΕΤΑΙΡΕΙΑ»     Ανακοινώνεται ότι την 91-2020 καταχωρίσθηκε στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.) με Κωδικό Αρι',
  {'entities': [(100, 138, 'B-COMPANY')]}),
 ('Καταχώρισης στο Γενικό Εμπορικό Μητρώο στοιχείων της ανώνυμης τραπεζικής εταιρείας με την επωνυμία «ATTICA BANK ΑΝΩΝΥΜΗ ΤΡΑΠΕΖΙΚΗ ΕΤΑΙΡΕΙΑ». Ανακοινώνεται ότι την 18112019 καταχωρίστηκε στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.)  με Κωδικό Αριθ',
  {'entities': [(100, 138, 'B-COMPANY')]}),
 ('ΝΑΚΟΙΝΩΣΗ  Καταχώρισης στο Γενικό Εμπορικό Μητρώο στοιχείων της ανώνυμης εταιρείας με την επωνυμία «ΔΕΗ SOLAR SOLUTIONS ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ», το διακριτικό τίτλο «ΔΕΗ SOLAR SOLUTIONS AE» και Αριθμό Γ.Ε.ΜΗ  129809601000.   Ο ΠΡΟΕΔΡΟΣ  ΤΟΥ Ε',
  {'entities': [(100, 136, 'B-COMPANY')]}),
 (' και δημοσίευσης στο διαδικτυακό τόπο του Γ.Ε.ΜΗ. στοιχείων της ανώνυμης εταιρείας με την επωνυμία «Ελληνικά Πετρέλαια Ανώνυμη Εταιρεία».  Την 111-2019 καταχωρίσθηκε στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.) με Κωδικό Αριθμό Καταχώρησης 162',
  {'entities': [(100, 135, 'B-COMPANY')]}),
 ('6806                                                     ΚΑΤΑΣΤΑΤΙΚΟ ΤΗΣ ΕΤΑΙΡΕΙΑΣ ΜΕ ΤΗΝ ΕΠΩΝΥΜΙΑ «ΕΛΛΗΝΙΚΑ ΠΕΤΡΕΛΑΙΑ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ»                                                   ΚΕΦΑΛΑΙΟ Α΄ Επωνυμία – Έδρα – Διάρκεια – Σκοπός ',
  {'entities': [(100, 135, 'B-COMPANY')]}),
 ('ΑΝΑΚΟΙΝΩΣΗ  Καταχώρισης στο Γενικό Εμπορικό Μητρώο στοιχείων της ανώνυμης εταιρείας με την επωνυμία FORTHNET ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ ΣΥΝΔΡΟΜΗΤΙΚΗΣ ΤΗΛΕΟΡΑΣΗΣ, ΠΑΡΟΧΗΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΥΠΗΡΕΣΙΩΝ ΚΑΙ ΣΥΜΜΕΤΟΧΩΝ και το διακριτικό τίτλο FORTHNET MEDIA Α.Ε.  Την 13/11/2018 καταχωρίσθηκε στο Γενικό Εμπορικό Μητρώ',
  {'entities': [(99, 201, 'B-COMPANY')]}),
 ('ΝΑΚΟΙΝΩΣΗ  Καταχώρισης στο Γενικό Εμπορικό Μητρώο, στοιχείων της Ανώνυμης Εταιρείας με την επωνυμία FORTHNET ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ ΣΥΝΔΡΟΜΗΤΙΚΗΣ ΤΗΛΕΟΡΑΣΗΣ, ΠΑΡΟΧΗΣ ΤΗΛΕΠΙΚΟΙΝΩΝΙΑΚΩΝ ΥΠΗΡΕΣΙΩΝ ΚΑΙ ΣΥΜΜΕΤΟΧΩΝ, το διακριτικό τίτλο FORTHNET MEDIA Α.Ε και αριθμό ΓΕΜΗ 124012301000.  Ο ΠΡΟΕΔΡΟΣ  ΤΟΥ ΕΜΠΟΡΙΚΟΥ & ',
  {'entities': [(99, 201, 'B-COMPANY')]}),
 ('και δημοσίευσης στο διαδικτυακό τόπο του Γ.Ε.ΜΗ., στοιχείων της ανώνυμης εταιρείας με την επωνυμία «JUMBO ΑΝΩΝΥΜΗ ΕΜΠΟΡΙΚΗ ΕΤΑΙΡΕΙΑ».  Ανακοινώνεται ότι την 11.12.2019 καταχωρίσθηκαν στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.), τα κατωτέρ',
  {'entities': [(100, 131, 'B-COMPANY')]}),
 ('ΝΑΚΟΙΝΩΣΗ  Καταχώρισης στο Γενικό Εμπορικό Μητρώο στοιχείων της Ανώνυμης Εταιρείας με την επωνυμία «JUMBO ΑΝΩΝΥΜΗ ΕΜΠΟΡΙΚΗ ΕΤΑΙΡΕΙΑ».      Ανακοινώνεται ότι την 11.12.2019 καταχωρίσθηκε στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.) με Κωδικ',
  {'entities': [(100, 131, 'B-COMPANY')]}),
 ('και δημοσίευσης στον διαδικτυακό τόπο του Γ.Ε.ΜΗ. στοιχείων της Ανώνυμης Εταιρείας με την επωνυμία «ΣΥΣΤΗΜΑΤΑ ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΩΝ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ». Την 16.02.2016 καταχωρίστηκε στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.) με Κωδικό Αριθμό Καταχώρησης 56',
  {'entities': [(100, 143, 'B-COMPANY')]}),
 ('αι δημοσίευσης στον διαδικτυακό τόπο του Γ.Ε.ΜΗ., στοιχείων της Ανώνυμης Εταιρείας με την επωνυμία «ΠΛΑΙΣΙΟ COMPUTERS ΑΝΩΝΥΜΗ ΕΜΠΟΡΙΚΗ ΚΑΙ ΒΙΟΜΗΧΑΝΙΚΗ ΕΤΑΙΡΕΙΑ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΕΙΔΩΝ ΒΙΒΛΙΟΧΑΡΤΟΠΩΛΕΙΟΥ».      Ανακοινώνεται ότι την 07.08.2019 καταχωρίσθηκε, εκ νέου, στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ)',
  {'entities': [(100, 213, 'B-COMPANY')]}),
 ('  δημοσίευσης  στο  διαδικτυακό  τόπο του Γ.Ε.ΜΗ. στοιχείων της ανώνυμης εταιρείας με την επωνυμία «ΠΛΑΙΣΙΟ COMPUTERS ΑΝΩΝΥΜΗ ΕΜΠΟΡΙΚΗ ΚΑΙ ΒΙΟΜΗΧΑΝΙΚΗ ΕΤΑΙΡΕΙΑ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΕΙΔΩΝ ΒΙΒΛΙΟΧΑΡΤΟΠΩΛΕΙΟΥ». Την 18/06/2018 καταχωρίσθηκε στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.) µε Κωδικό Αριθµό Καταχώρισης 14',
  {'entities': [(100, 213, 'B-COMPANY')]}),
 ('µ. Πρωτ. :    1826463                           ΚΩΔΙΚΟΠΟΙΗΜΕΝΟ ΚΑΤΑΣΤΑΤΙΚΟ  ΤΗΣ ΑΝΩΝΥΜΗΣ ΕΤΑΙΡΕΙΑΣ «Quest Συμμετοχών Ανώνυμη Εταιρεία» Αρ. Γ.Ε.ΜΗ. 121763701000  ΚΕΦΑΛΑΙΟ  Α Σύσταση – Επωνυμία – ΄Εδρα – Διάρκεια Σκοπός  ΄Αρθρο 1 Η επω',
  {'entities': [(100, 133, 'B-COMPANY')]}),
 ('ΝΑΚΟΙΝΩΣΗ  Καταχώρισης στο Γενικό Εμπορικό Μητρώο στοιχείων της ανώνυμης εταιρείας με την επωνυμία «TITAN ΔΙΕΘΝΗΣ ΕΜΠΟΡΙΚΗ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ ΤΣΙΜΕΝΤΩΝ».  Ο ΠΡΟΕΔΡΟΣ ΤΟΥ ΕΜΠΟΡΙΚΟΥ & ΒΙΟΜΗΧΑΝΙΚΟΥ ΕΠΙΜΕΛΗΤΗΡΙΟΥ ΑΘΗΝΩΝ Ανακοινώνει ότι:  Την 10/06/2019 κα',
  {'entities': [(100, 149, 'B-COMPANY')]}),
 ('Καταχώρισης στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.), στοιχείων της Ανώνυμης Εταιρείας με την επωνυμία «TITAN ΔΙΕΘΝΗΣ ΕΜΠΟΡΙΚΗ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ ΤΣΙΜΕΝΤΩΝ» και αριθμό Γ.Ε.ΜΗ. 1604901000, (που είχε Αρ.ΜΑΕ. 29226/001/Β/93/0346).  Ο ΠΡΟΕΔΡΟΣ  ΤΟΥ ΕΜΠΟΡΙΚΟΥ ',
  {'entities': [(100, 149, 'B-COMPANY')]}),
 (' ΑΝΑΚΟΙΝΩΣΗ Καταχώρισης στο Γενικό Εμπορικό Μητρώο στοιχείων της ανώνυμης εταιρείας με την επωνυμία ΒΙΑΝΕΞ Α.Ε. ΑΝΩΝΥΜΟΣ ΕΜΠΟΡΟΒΙΟΜΗΧΑΝΙΚΗ ΤΟΥΡΙΣΤΙΚΗ ΞΕΝΟΔΟΧΕΙΑΚΗ ΚΑΙ ΝΑΥΤΙΛΙΑΚΗ ΑΝΩΝΥΜΟΣ ΕΤΑΙΡΕΙΑ και το διακριτικό τίτλο ΒΙΑΝΕΞ ΑΕ. Την 03/04/2019 καταχωρίσθηκε στο Γενικό Εμπορικό Μητρώο (Γ.Ε.ΜΗ.',
  {'entities': [(99, 194, 'B-COMPANY')]})]

代码如下:

def train_model(to_train_ents, nlp):

    optimizer = nlp.begin_training()

    other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']

    with nlp.disable_pipes(*other_pipes):

        for itn in range(20):

            losses = {}

            random.shuffle(to_train_ents)

            for item in to_train_ents:

                nlp.update([item[0]], 

                          [item[1]],

                          sgd = optimizer,

                        drop = 0.35,

                          losses = losses)


    return(nlp, losses)

我使用 Greek Spacy 模型 (md),它使用以下代码安装和加载:

!python -m spacy download el_core_news_md
nlp_el = spacy.load('el_core_news_md')

然后我调用之前定义的函数 train_model() 并得到以下错误:

nlp_el , losses = train_model(to_train_ents, nlp_el)
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-484-a059cf596651> in <module>
----> 1 nlp_el , losses = train_model(to_train_ents, nlp_el)

<ipython-input-471-56fdae8ff98f> in train_model(to_train_ents, nlp)
     23                         drop = 0.35,
     24 
---> 25                           losses = losses)
     26 
     27 

~\AppData\Roaming\Python\Python36\site-packages\spacy\language.py in update(self, docs, golds, drop, sgd, losses, component_cfg)
    450             kwargs = component_cfg.get(name, {})
    451             kwargs.setdefault("drop", drop)
--> 452             proc.update(docs, golds, sgd=get_grads, losses=losses, **kwargs)
    453             for key, (W, dW) in grads.items():
    454                 sgd(W, dW, key=key)

nn_parser.pyx in spacy.syntax.nn_parser.Parser.update()

nn_parser.pyx in spacy.syntax.nn_parser.Parser._init_gold_batch()

ner.pyx in spacy.syntax.ner.BiluoPushDown.preprocess_gold()

ner.pyx in spacy.syntax.ner.BiluoPushDown.lookup_transition()

KeyError: "[E022] Could not find a transition with the name 'B-COMPANY' in the NER model."

您如何解释错误,我该如何补救?

COMPANY需要添加到NER模型中:

ner = nlp.get_pipe("ner")
ner.add_label("COMPANY")

您需要为数据中尚未包含在 pretrained Greek model 标签集中的每个实体类型执行此操作(对于 2.2.5,这是:EVENT、GPE、LOC、ORG、PERSON、产品)

此外,您每次迭代都重新定义 losses。相反,您可能希望在每个循环中打印/存储它,以便检查损失曲线。