是否可以用自定义命名的实体来改进spaCy的相似性结果?

问题描述 投票:1回答:1

我发现spaCy的相似性在使用 "en_core_web_lg "比较我的文档时做得很好。

我想收紧某些领域的关系,并认为在模型中添加自定义NER标签会有所帮助,但我前后的结果没有显示出任何改进,尽管我已经能够创建一组自定义实体的测试。

现在我想知道,是我的理论完全错了,还是我的流水线中根本就缺少了什么?

如果我错了,那么改善结果的最佳方法是什么? 似乎某种自定义标签应该有帮助。

下面是我目前测试的一个例子。

import spacy
from spacy.pipeline import EntityRuler
from spacy.tokens import Doc
from spacy.gold import GoldParse

nlp = spacy.load("en_core_web_lg")

docA = nlp("Add fractions with like denominators.")
docB = nlp("What does one-third plus one-third equal?")

sim_before = docA.similarity(docB)
print(sim_before)

0.5949629181460099

^^还算不错,但我希望在这个例子中看到接近0.85的结果。所以,我使用EntityRuler并添加一些模式来尝试收紧关系。

ruler = EntityRuler(nlp)
patterns = [
    {"label": "ADDITION", "pattern": "Add"},
    {"label": "ADDITION", "pattern": "plus"},
    {"label": "FRACTION", "pattern": "one-third"},
    {"label": "FRACTION", "pattern": "fractions"},
    {"label": "FRACTION", "pattern": "denominators"},

]
ruler.add_patterns(patterns)
nlp.add_pipe(ruler, before='ner')
print(nlp.pipe_names)

['tagger', 'parser', 'entity_ruler', 'ner']

添加GoldParse似乎很重要,所以我添加了以下内容并更新了NER。

doc1 = Doc(nlp.vocab, [u'What', u'does', u'one-third', u'plus', u'one-third', u'equal'])
gold1 = GoldParse(doc1, [u'0', u'0', u'U-FRACTION', u'U-ADDITION', u'U-FRACTION', u'O'])

doc2 = Doc(nlp.vocab, [u'Add', u'fractions', u'with', u'like', u'denominators'])
gold2 = GoldParse(doc2, [u'U-ADDITION', u'U-FRACTION', u'O', u'O', u'U-FRACTION'])

ner = nlp.get_pipe("ner")
losses = {}
optimizer = nlp.begin_training()
ner.update([doc1, doc2], [gold1, gold2], losses=losses, sgd=optimizer)

{'ner': 0.0}

你可以看到我的自定义实体在工作,但测试结果显示零改进。

test1 = nlp("Add fractions with like denominators.")
test2 = nlp("What does one-third plus one-third equal?")

print([(ent.text, ent.label_) for ent in test1.ents])
print([(ent.text, ent.label_) for ent in test2.ents])

sim = test1.similarity(test2)
print(sim)

[('Add', 'ADDITION'), ('fractions', 'FRACTION'), ('denominators', 'FRACTION')]。[('三分之一','FRACTION'),('plus','ADDITION'),('三分之一','FRACTION')] 0.5949629181460099

任何提示都将是非常感激的

spacy similarity named-entity-recognition
1个回答
0
投票

Doc.similarity 只使用单词向量,而不是任何其他注释。从 文件API:

默认的估计是使用词向量的平均值的余弦相似度。

© www.soinside.com 2019 - 2024. All rights reserved.