- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要获得 NER 'de_core_news_lg' 模型预测的标签的置信度分数。在 Spacy 2 中有一个众所周知的解决方案:
nlp = spacy.load('de_core_news_lg')
doc = nlp('ich möchte mit frau Mustermann in der Musterbank sprechen')
text = content
doc = nlp.make_doc(text)
beams = nlp.entity.beam_parse([doc], beam_width=16, beam_density=0.0001)
for score, ents in nlp.entity.moves.get_beam_parses(beams[0]):
print (score, ents)
entity_scores = defaultdict(float)
for start, end, label in ents:
# print ("here")
entity_scores[(start, end, label)] += score
print ('entity_scores', entity_scores)
但是,在 Spacy 3 中,我收到以下错误:
AttributeError: 'German' object has no attribute 'entity'
显然
language
对象没有
entity
属性了。
最佳答案
答案的核心是'使用管道组件“beam_ner”,并查看EntityRecognizer.pyx代码。然后是单元测试 test_ner.py test_beam_ner_scores() 它几乎展示了如何做到这一点。
如果您想了解如何修改您的 config,cfg,请保存模型(如下面的 make_nlp() 中所做的那样)并查看保存的模型 config.cfg。
问题在于 它仅适用于单元测试生成的“模型” .对于我的真实模型(每个 5000 个文档 ~4k 文本,训练 NER f-scores 大约 75%),它失败了。
“悲惨”是指“贪婪”搜索会找到我的实体,但“光束搜索”会报告数百个标记(甚至标点符号)的“分数”,例如 0.013。并且(基于偏移量)那些通常来自文档的一小部分。
这令人沮丧,因为我相信 spacy 训练(对于“beam_ner”)使用相同的代码来“验证”训练迭代,并且训练报告的分数几乎不错(好吧,比 Spacy 2 低 10%,但这种情况发生在训练机器人上与 'ner' 和 'beam_ner')。
所以我发布这个是希望有人有更好的运气或者可以指出我做错了什么。
到目前为止,Spacy3 对我来说是一个重大灾难:无法获得信心,我不能再使用 GPU(我只有 6GB),基于 Ray 的并行化不起作用(在 Windows 上=实验性)并且通过使用基于“变压器”的模型我的训练 NER 分数比 Spacy 2 差 10%。
代码
import spacy
from spacy.lang.en import English
from spacy.language import Language
from spacy.tokens import Doc
from spacy.training import Example
# Based upon test_ner.py test_beam_ner_scores()
TRAIN_DATA = [
("Who is Shaka Khan?", {"entities": [(7, 17, "PERSON")]}),
("I like London and Berlin.", {"entities": [(7, 13, "LOC"), (18, 24, "LOC")]}),
("You like Paris and Prague.", {"entities": [(9, 14, "LOC"), (19, 25, "LOC")]}),
]
def make_nlp(model_dir):
# ORIGINALLY: Test that we can get confidence values out of the beam_ner pipe
nlp = English()
config = { "beam_width": 32, "beam_density": 0.001 }
ner = nlp.add_pipe("beam_ner", config=config)
train_examples = []
for text, annotations in TRAIN_DATA:
train_examples.append(Example.from_dict(nlp.make_doc(text), annotations))
for ent in annotations.get("entities"):
ner.add_label(ent[2])
optimizer = nlp.initialize()
# update once
losses = {}
nlp.update(train_examples, sgd=optimizer, losses=losses)
# save
#if not model_dir.exists():
#model_dir.mkdir()
nlp.to_disk(model_dir)
print("Saved model to", model_dir)
return nlp
def test_greedy(nlp, text):
# Report predicted entities using the default 'greedy' search (no confidences)
doc = nlp(text)
print("GREEDY search");
for ent in doc.ents:
print("Greedy offset=", ent.start_char, "-", ent.end_char, ent.label_, "text=", ent.text)
def test_beam(nlp, text):
# Report predicted entities using the beam search (beam_width 16 or higher)
ner = nlp.get_pipe("beam_ner")
# Get the prediction scores from the beam search
doc = nlp.make_doc(text)
docs = [doc]
# beams = StateClass returned from ner.predict(docs)
beams = ner.predict(docs)
print("BEAM search, labels", ner.labels);
# Show individual entities and their scores as reported
scores = ner.scored_ents(beams)[0]
for ent, sco in scores.items():
tok = doc[ent[0]]
lbl = ent[2]
spn = doc[ent[0]: ent[1]]
print('Beam-search', ent[0], ent[1], 'offset=', tok.idx, lbl, 'score=', sco,
'text=', spn.text.replace('\n', ' '))
MODEL_DIR = "./test_model"
TEST_TEXT = "I like London and Paris."
if __name__ == "__main__":
# You may have to repeat make_nlp() several times to produce a semi-decent 'model'
# nlp = make_nlp(MODEL_DIR)
nlp = spacy.load(MODEL_DIR)
test_greedy(nlp, TEST_TEXT)
test_beam (nlp, TEST_TEXT)
结果应该如下所示(在重复 make_nlp 以生成可用的“模型”之后):
GREEDY search
Greedy offset= 7 - 13 LOC text= London
Greedy offset= 18 - 23 LOC text= Paris
BEAM search, labels ('LOC', 'PERSON')
Beam-search 2 3 offset= 7 LOC score= 0.5315668466265199 text= London
Beam-search 4 5 offset= 18 LOC score= 0.7206478212662492 text= Paris
Beam-search 0 1 offset= 0 LOC score= 0.4679245513356703 text= I
Beam-search 3 4 offset= 14 LOC score= 0.4670399792743775 text= and
Beam-search 5 6 offset= 23 LOC score= 0.2799470367073933 text= .
Beam-search 1 2 offset= 2 LOC score= 0.21658368070744227 text= like
关于python - Spacy 3 命名实体识别的置信度评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66490221/
都是整数,但一直报错 "Only assignment, call, increment, decrement, await, and new object expressions can be us
我有以下情况:一个“对话”实体/表,它有多个关联的标签。Tag 也是一个实体/表 - key/id 是 tagName(一个字符串)。 在客户端 (javascript),我在处理标签时使用字符串数组
我想通过 maven java 源代码生成器自动生成 java 源代码。我想通过查看一个大实体 xml 文件来创建实体类,该文件将包含系统中的所有实体和实体关系。据我搜索,目前maven中没有这样的插
我有一段时间有这个疑问,有人说 EJB 3.0 中没有所谓的实体 bean。有没有可能这样说,EJB 3.0 使用 JPA 来持久化数据并且没有对以前版本(EJB 2.1)中的实体 bean 进行增强
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
实体(entites) 用于定义引用普通文本或特殊字符的快捷方式的变量,可在内部或外部进行声明 实体引用是对实体的引用 声明一个内部实体 语法: <!ENTITY 实体名称 "
This page建议 !ENTITY: If you want to avoid duplication, consider using XML entities (for example, [ ]
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我使用 Symfony2 和 Doctrine,我有一个关于实体的问题。 出于性能方面的考虑,我想知道是否可以在不进行所有关联的情况下使用实体? 目前,我还没有找到另一种方法来创建继承带有关联的类的模
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
我在 grails 中有一个域类......我如何让 gorm 在创建数据库时忽略这个实体?就别管它了。 最佳答案 如果我理解,你不想从域类创建表?如果是,请在域类中使用此代码: static map
我正在努力解决这个问题:如何判断一个概念是聚合根还是只是一个实体(属于 AR 的一部分)? : 他们都有 ID 它们都是由实体或值对象组成 也许如果我需要引用其他 AR 中的实体,那么我需要将其设为
我已经尝试在 HTML 中包含以下代码,用于附加文件符号。但它显示一个空的白框。 📎 📎 📎 是否有替代的 HTML 附加文件符号实体? 如果没有,我们可以手动创建
如何在我的实体中以 14-04-2017 格式存储日期? 但我必须从字符串中解析它。 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-
我需要从两个连接表中获取数据。数据集是什么类型?我是否需要创建一个包含这两个表中的属性的类以用于数据集类型,或者我可以使用实体模式中的类型。我如何修改我的方法才能正常工作? public static
好的,我们正在尝试建立一个中央站点来查看来自销售我们产品的多个供应商的数据。这些多个供应商使用不同的销售系统(确切地说是两个不同的系统),因此每个数据库看起来完全不同。我们与他们的数据库同步,因此数据
我是 backbone 的新手。但是当我研究模型实体时,我不明白一些事情。如果我们可以像 java 或 C# 这样的标准语言一样定义模型属性,那就太好了。有没有可能是这样的。所以我的想法是这样的: M
我想获取存储在可绘制的 xml 文件中的形状的颜色。 我来到了将 Drawable 存储在 Drawable 变量中的步骤,所以,现在我想获取形状的颜色(纯色标签)。 有什么建议吗? 最佳答案 Gra
实体是直接映射到我们的数据库(我们用于 Hibernate)的类。 在调用 DAO 之前,我们的服务类包含这些实体的业务逻辑。 我们还有命令对象,它们是与特定 View 相关的 POJO。有人告诉我实
在我的应用程序中,我需要显示不同存储过程返回的记录列表。每个存储过程返回不同类型的记录(即列数和列类型不同)。 我最初的想法是为每种类型的记录创建一个类,并创建一个函数来执行相应的存储过程并返回 Li
我是一名优秀的程序员,十分优秀!