是否有任何方法可以使用BERT的偏移量将实体添加到spacy文档对象?问题是我的整个管道都依赖于spacy,我使用的是spacy不支持的最新PUBMEDBERT
因此,有时pubmedbert给出的实体偏移量不会导致spacy的有效跨度,因为标记化是完全不同的
到目前为止,我做了什么工作来解决我的问题? 我通过要求spacy在标点符号上拆分来定制标记器,类似于bert,但在某些情况下我无法制定规则。例如:
text = '''assessment
Exdtve age-rel mclr degn, left eye, with actv chrdl neovas
Mar-10-2020
assessment'''
Pubmedbert预测13:17为一个实体,即dtve 但在spacy doc对象中添加span作为实体时,结果为“无”,因为它不是有效的span
span = doc.char_span(row['start'], row['end'], row['ent'])
doc.ents = list(doc.ents) + [span]
TypeError: object of type 'NoneType' has no len()
考虑行[ [开始] ]为13,行[ [结束] ]为17,行[〔Enter〕〕为标号
我怎样才能解决这个问题?我是否可以使用pubmedbert给出的起始和结束偏移量在spacy doc对象中添加实体
非常感谢您在这方面的帮助,谢谢
因为spacy将实体作为IOB标记存储在文档中的令牌上,所以您只能在下面添加对应于完整令牌的实体范围
如果您仅使用此
doc
来存储这些实体(而不使用任何其他组件,如来自另一个模型的标记器或解析器,它们需要不同的标记器),则可以创建一个具有与BERT模型相同标记化的文档:然后,您应该能够将实体范围添加到文档中
如果需要基于不同标记化的原始空间标记化+实体,则必须调整实体字符偏移以匹配空间标记边界,以便添加它们。由于这在很大程度上取决于数据/任务(如果
dtve
是一个实体,那么Exdtve
是否也必须是相同类型的实体?),因此您可能需要基于数据的自定义解决方案。如果您试图调整实体跨距以与当前标记对齐,则可以通过token.idx
和len(token)
查看每个标记的字符开始和长度相关问题 更多 >
编程相关推荐