gpt4 book ai didi

python - 如何使用 NLP 和实体识别从文本中正确提取设施和设施等实体?

转载 作者:行者123 更新时间:2023-12-04 01:12:14 25 4
gpt4 key购买 nike

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

The government panned to build new parks, swimming pool and commercial complex for out town and improve existing housing complex, schools and townhouse.


要识别的预期实体:

parks, swimming pool, commercial complex, housing complex, school and townhouse


我确实探索了一些 python 库,如 Spacy 和 NLTK,但结果并不好,只有 2 个实体被识别出来。我认为数据需要正确预处理。
我应该怎么做才能改善结果?有没有其他库/框架更适合这个用例?有没有办法使用现有的 db 训练我们的模型?

最佳答案

@Sergey提到,你需要一个自定义的 NER 模型。考虑到您拥有训练数据,Spacy 对于自定义 NER 来说真的很方便。
这是一个简单的方法,并考虑您的示例 -

import spacy
from tqdm import tqdm
import random
train_data = [
('Government built new parks', {
'entities': [(0, 10, 'ORG'),(21, 26, 'FAC')]
}),
]
创建一个空白模型并添加“NER”管道
nlp=spacy.blank('en')
ner=nlp.create_pipe('ner')
nlp.add_pipe(ner, last=True)
训练步骤
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])
调整超参数并检查哪个最适合您。
其他探索方式 -
  • 为自定义 NER 训练 seq2seq 模型。 (拥抱脸变压器库可能会派上用场)
  • 将无监督 NER 与 BERT 或其他变压器模型一起使用。
  • 最近,语言模型为 NER 提供了“最先进”的结果。

  • 干杯!

    关于python - 如何使用 NLP 和实体识别从文本中正确提取设施和设施等实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64495524/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com