首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用NLP和实体识别从文本中正确地提取诸如设施和建立等实体?

如何使用NLP和实体识别从文本中正确地提取诸如设施和建立等实体?
EN

Stack Overflow用户
提问于 2020-10-23 07:13:19
回答 3查看 894关注 0票数 4

我需要使用自然语言处理和NER从给定的文本中识别出所有的establishmentsfacilities

示例文本:

政府致力于为城外建造新的公园、游泳池和商业综合体,并改善现有的住宅建筑群、学校和联排别墅。

预期要识别的实体:

公园,游泳池,商业综合体,住宅综合体,学校和联排别墅

我确实探索了一些python库,比如Spacy和NLTK,但是结果并不好,只有两个实体被识别出来。我认为这些数据需要进行适当的预处理。

我应该做些什么来改善结果呢?还有其他更适合这个用例的库/框架吗?有没有办法使用现有的db来训练我们的模型?

EN

回答 3

Stack Overflow用户

发布于 2020-10-26 13:40:42

正如@Sergey所提到的,您需要一个自定义的NER模型。如果你有培训数据的话,Spacy对定制的NER来说真的很有用。下面是一个简单的方法,并考虑到你的例子-

代码语言:javascript
运行
复制
import spacy
from tqdm import tqdm
import random
train_data = [
    ('Government built new parks', {
        'entities': [(0, 10, 'ORG'),(21, 26, 'FAC')]
    }),
]

创建空白模型&添加“NER”管道

代码语言:javascript
运行
复制
nlp=spacy.blank('en')
ner=nlp.create_pipe('ner')
nlp.add_pipe(ner, last=True)

训练步骤

代码语言:javascript
运行
复制
n_iter=100 
for _, annotations in train_data:
    for ent in annotations.get('entities'):
        ner.add_label(ent[2])

    other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
    with nlp.disable_pipes(*other_pipes):  # only train NER
        optimizer = nlp.begin_training()
        for itn in range(n_iter):
            random.shuffle(train_data)
            losses = {}
            for text, annotations in tqdm(train_data):
                nlp.update(
                    [text],  
                    [annotations],  
                    drop=0.25,  
                    sgd=optimizer,
                    losses=losses)
            print(losses)
 
#Test           
for text, _ in train_data:
    doc = nlp(text)
    print('Entities', [(ent.text, ent.label_) for ent in doc.ents])

调优超参数,并检查哪一个最适合你.

其他探索的方法-

  1. 为自定义节点提供了一个seq2seq模型。(拥抱脸变压器库可能会派上用场)
  2. 使用无监督NER和BERT或其他转换器
  3. 语言模型为NER.

提供了“最先进的”结果。

干杯!

票数 4
EN

Stack Overflow用户

发布于 2020-11-13 08:41:14

来自@anat的非常好的答案,实际上你必须训练一个模型,除非你找到一个工具能够专注于具有细粒度实体的组织,通过一些类型包括设施作为组织/地点的一个子类型,它可能对建立是一样的。

从技术角度来看,您肯定可以使用Spacy并对其进行培训,或者rasa https://rasa.com也是一个不错的解决方案,在这种情况下,您必须只为实体配置它(不要为意图/故事操心)。

我的贡献将是包括预先培训的嵌入,以方便培训。根据所选择的工具和语言,可能已经包含了它,或者您可能必须指定/实现它。SOTA的作品是BERT,它可以与HuggingFace https://huggingface.co集成,在那里您可以找到许多预先训练过的模型。这将使系统能够识别实体,即使它们没有在您的专用培训语料库中进行注释。从实现的角度来看,它现在是相当标准的,不应成为一个问题。

而且,最重要的是,不要忘记在一个单独的(分裂的)数据集上进行评估!

票数 0
EN

Stack Overflow用户

发布于 2022-08-11 14:50:30

在2022年,你不一定需要为此培养一种新的模式。

相反,您可以使用大型语言模型,如GPT-3、GPT或GPT,并对任何类型的复杂实体执行实体提取,甚至无需为其训练新的模型!

请参阅如何安装GPT并在Python中使用它:https://github.com/kingoflolz/mesh-transformer-jax。如果这个型号对您的机器来说太大了,您也可以使用一个更小的型号,比如这个小版本的OPT (由Facebook编写):https://huggingface.co/facebook/opt-125m

为了了解如何将这些模型用于NER,请参阅这篇关于“很少射击学习:https://nlpcloud.com/effectively-using-gpt-j-gpt-neo-gpt-3-alternatives-few-shot-learning.html”的文章。

还可以看到TDS的这篇关于少有的学习和NER:https://towardsdatascience.com/advanced-ner-with-gpt-3-and-gpt-j-ce43dc6cdb9c的文章。

最后,您可能对这个关于NER与GPT-NeoX : spaCy:https://www.youtube.com/watch?v=E-qZDwXpeY0的视频感兴趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64495524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档