在空间中训练两个连续的NER管道

2024-09-28 05:20:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,训练分类器识别文本中的引文。我们正在处理的引文往往非常杂乱无章。以下是一些引用示例:

  • 见A书第3章第7段
  • 见A卷第3章第7段
  • 见A卷第7段“某章标题”

我们已经确定了一些倾向于出现在这些引文中的实体。例如,“书名”、“章节号”、“章节名”、“段落号”

该项目分为两个阶段:

  1. 文本中引文的二元分类
  2. 引文中引文实体的分类

Spacy(我们使用的是v3)有可能拥有两个连续的NER管道吗?我希望分类器首先标记引用,然后才标记每个引用中的实体

我能够用以下代码实例化具有两个NER管道的模型:

from spacy.lang.en import English
nlp = English()
nlp.add_pipe("ner", name="ner1", last=True)
ner1 = nlp.get_pipe("ner1")
ner1.add_label("Citation")
nlp.add_pipe("ner", name="ner2", last=True)
ner2 = nlp.get_pipe("ner2")
for label in ["Book Title", "Chapter Number", "Chapter Name", "Paragraph Number"]:
    ner2.add_label(label)

我的问题是如何分别培训每个NER管道。通常,Spacy需要以下形状的数据来训练NER:

{
    "text": <TEXT>,
    "spans": [<LIST OF NAMED ENTITY SPANS>]
}

如何区分训练数据中每个管道的数据


Tags: 数据项目文本实体add管道nlp分类器
1条回答
网友
1楼 · 发布于 2024-09-28 05:20:07

这有几个部分

  1. 您可以在一个spaCy管道中有两个NER组件,但由于问题2和问题3,这不会按您希望的方式工作
  2. 管道无法在下游组件的培训期间设置注释。这是一个正在研究的限制,应该很快解决
  3. 注释不能重叠。这是一个设计决策,不会很快改变。它可以与自定义组件一起工作,但这是额外的工作

I would want the classifier to first tag the citations and only then tag the entities within each citation.

您是否真的需要单独使用整个引文标签,或者出于某种原因将其设计为两个阶段的过程来提高性能?如果是后者,我会先尝试第二阶段详细注释的训练,看看你是否真的有问题;我怀疑两个阶段的过程是否会让事情变得更容易

若你们真的需要整个“引文”,那个么你们只需要将详细实体的链提取到一个跨度中,并没有必要为此建立一个单独的模型

我建议您仔细阅读文档中关于Combining Models and Rules的部分。它有一些例子,比如将人名扩展为包含先生或博士之类的头衔,或者使用依赖项解析信息,这些似乎适用于您的问题

相关问题 更多 >

    热门问题