2
네임 엔티티 인식을위한 2 개의 새로운 클래스를 인식 할 수 있도록 Spacy NER를 교육해야합니다. 새 클래스에 있어야하는 항목 목록이있는 파일 만 있습니다.Spacy의 새로운 명명 된 엔티티 클래스
예 : Rolling Stones, Muse, Arctic Monkeys - 아티스트 어떻게 할 수 있습니까?
네임 엔티티 인식을위한 2 개의 새로운 클래스를 인식 할 수 있도록 Spacy NER를 교육해야합니다. 새 클래스에 있어야하는 항목 목록이있는 파일 만 있습니다.Spacy의 새로운 명명 된 엔티티 클래스
예 : Rolling Stones, Muse, Arctic Monkeys - 아티스트 어떻게 할 수 있습니까?
Matcher 또는 PhraseMatcher (성능에 신경 쓰는 경우)의 완벽한 사용 예처럼 보입니다.
import spacy
nlp = spacy.load('en')
def merge_phrases(matcher, doc, i, matches):
'''
Merge a phrase. We have to be careful here because we'll change the token indices.
To avoid problems, merge all the phrases once we're called on the last match.
'''
if i != len(matches)-1:
return None
spans = [(ent_id, label, doc[start : end]) for ent_id, label, start, end in matches]
for ent_id, label, span in spans:
span.merge('NNP' if label else span.root.tag_, span.text, nlp.vocab.strings[label])
matcher = spacy.matcher.Matcher(nlp.vocab)
matcher.add(entity_key='1', label='ARTIST', attrs={}, specs=[[{spacy.attrs.ORTH: 'Rolling'}, {spacy.attrs.ORTH: 'Stones'}]], on_match=merge_phrases)
matcher.add(entity_key='2', label='ARTIST', attrs={}, specs=[[{spacy.attrs.ORTH: 'Muse'}]], on_match=merge_phrases)
matcher.add(entity_key='3', label='ARTIST', attrs={}, specs=[[{spacy.attrs.ORTH: 'Arctic'}, {spacy.attrs.ORTH: 'Monkeys'}]], on_match=merge_phrases)
doc = nlp(u'The Rolling Stones are an English rock band formed in London in 1962. The first settled line-up consisted of Brian Jones, Ian Stewart, Mick Jagger, Keith Richards, Bill Wyman and Charlie Watts')
matcher(doc)
for ent in doc.ents:
print(ent)
자세한 내용은 설명서를 참조하십시오. 필자의 경험에 따르면, Matcher의 400k 엔티티를 사용하면 각 문서와 일치시키는 데 거의 1 초가 걸릴 것입니다. PhraseMatcher는 훨씬 빠르지 만 사용하기가 약간 까다 롭습니다. 이것은 "엄격한"매처이며 이전에는 보지 못했던 엔티티와 일치하지 않습니다.
고마워, 내가 그걸 시도 할게 –
하지만 수동으로 내 새 엔티티의 모든 요소를 추가해야 할 것 같아? –
내가 말했듯이. 이전에 보지 못했던 엔티티와 일치 시키려면 먼저 교육해야하며, 더 복잡하고 많은 양의 데이터가 필요합니다. –