Roberta Multilingual Medieval Ner
R
Roberta Multilingual Medieval Ner
由 magistermilitum 开发
基于多语言RoBERTa模型微调的中世纪文本命名实体识别模型,支持拉丁语、法语和西班牙语的历史文献分析。
下载量 38
发布时间 : 4/24/2022
模型简介
该模型专门用于识别中世纪特许状文本中的地点和人名实体,支持扁平化及嵌套实体识别,适用于11至15世纪的历史文献研究。
模型特点
多语言历史文本支持
专门针对中世纪拉丁语、古法语及古西班牙语文本优化
高精度实体识别
在测试集上达到98.01%精确率和97.08%召回率
嵌套实体处理
可识别文本中的嵌套命名实体结构
模型能力
历史文本实体识别
多语言文本处理
嵌套实体检测
使用案例
历史研究
中世纪特许状分析
自动提取历史文献中的人物、地点和机构名称
建立结构化历史人物关系网络
数字人文研究
辅助历史学家进行大规模文献数字化分析
提升历史文献处理效率
档案管理
古籍数字化
自动化标记古籍文档中的关键实体信息
构建可检索的历史档案数据库
🚀 多语言中世纪命名实体识别模型(roberta-multilingual-medieval-ner)
这是一个基于多语言Roberta模型在中世纪宪章文本上微调的模型,旨在以扁平与嵌套的方式识别中世纪文本中的地点和人物。训练数据集包含8000篇标注文本,涵盖了11世纪至15世纪的中世纪拉丁语、古法语和古西班牙语。
🚀 快速开始
该模型的使用方式非常简单:
import torch
from transformers import pipeline
pipe = pipeline("token-classification", model="magistermilitum/roberta-multilingual-medieval-ner")
results = list(map(pipe, list_of_sentences))
results =[[[y["entity"],y["word"], y["start"], y["end"]] for y in x] for x in results]
print(results)
✨ 主要特性
- 多语言支持:支持拉丁语、法语、西班牙语等多种语言,适用于中世纪多语言文本的命名实体识别。
- 高精度识别:在中世纪文本的地点和人物识别任务中,精度达到98.01%,召回率达到97.08%。
- 灵活的输出格式:可以将模型推理结果转换为CONLL格式,方便后续处理。
📦 安装指南
文档未提及安装步骤,故跳过该章节。
💻 使用示例
基础用法
import torch
from transformers import pipeline
pipe = pipeline("token-classification", model="magistermilitum/roberta-multilingual-medieval-ner")
results = list(map(pipe, list_of_sentences))
results =[[[y["entity"],y["word"], y["start"], y["end"]] for y in x] for x in results]
print(results)
高级用法
以下代码展示了如何将模型推理结果转换为CONLL格式:
class TextProcessor:
def __init__(self, filename):
self.filename = filename
self.sent_detector = nltk.data.load("tokenizers/punkt/english.pickle") #sentence tokenizer
self.sentences = []
self.new_sentences = []
self.results = []
self.new_sentences_token_info = []
self.new_sentences_bio = []
self.BIO_TAGS = []
self.stripped_BIO_TAGS = []
def read_file(self):
#Reading a txt file with one document per line.
with open(self.filename, 'r') as f:
text = f.read()
self.sentences = self.sent_detector.tokenize(text.strip())
def process_sentences(self): #We split long sentences as encoder has a 256 max-lenght. Sentences with les of 40 words will be merged.
for sentence in self.sentences:
if len(sentence.split()) < 40 and self.new_sentences:
self.new_sentences[-1] += " " + sentence
else:
self.new_sentences.append(sentence)
def apply_model(self, pipe):
self.results = list(map(pipe, self.new_sentences))
self.results=[[[y["entity"],y["word"], y["start"], y["end"]] for y in x] for x in self.results]
def tokenize_sentences(self):
for n_s in self.new_sentences:
tokens=n_s.split() # Basic tokenization
token_info = []
# Initialize a variable to keep track of character index
char_index = 0
# Iterate through the tokens and record start and end info
for token in tokens:
start = char_index
end = char_index + len(token) # Subtract 1 for the last character of the token
token_info.append((token, start, end))
char_index += len(token) + 1 # Add 1 for the whitespace
self.new_sentences_token_info.append(token_info)
def process_results(self): #merge subwords and BIO tags
for result in self.results:
merged_bio_result = []
current_word = ""
current_label = None
current_start = None
current_end = None
for entity, subword, start, end in result:
if subword.startswith("▁"):
subword = subword[1:]
merged_bio_result.append([current_word, current_label, current_start, current_end])
current_word = "" ; current_label = None ; current_start = None ; current_end = None
if current_start is None:
current_word = subword ; current_label = entity ; current_start = start+1 ; current_end= end
else:
current_word += subword ; current_end = end
if current_word:
merged_bio_result.append([current_word, current_label, current_start, current_end])
self.new_sentences_bio.append(merged_bio_result[1:])
def match_tokens_with_entities(self): #match BIO tags with tokens
for i,ss in enumerate(self.new_sentences_token_info):
for word in ss:
for ent in self.new_sentences_bio[i]:
if word[1]==ent[2]:
if ent[1]=="L-PERS":
self.BIO_TAGS.append([word[0], "I-PERS", "B-LOC"])
break
else:
if "LOC" in ent[1]:
self.BIO_TAGS.append([word[0], "O", ent[1]])
else:
self.BIO_TAGS.append([word[0], ent[1], "O"])
break
else:
self.BIO_TAGS.append([word[0], "O", "O"])
def separate_dots_and_comma(self): #optional
signs=[",", ";", ":", "."]
for bio in self.BIO_TAGS:
if any(bio[0][-1]==sign for sign in signs) and len(bio[0])>1:
self.stripped_BIO_TAGS.append([bio[0][:-1], bio[1], bio[2]]);
self.stripped_BIO_TAGS.append([bio[0][-1], "O", "O"])
else:
self.stripped_BIO_TAGS.append(bio)
def save_BIO(self):
with open('output_BIO_a.txt', 'w', encoding='utf-8') as output_file:
output_file.write("TOKEN\tPERS\tLOCS\n"+"\n".join(["\t".join(x) for x in self.stripped_BIO_TAGS]))
# Usage:
processor = TextProcessor('my_docs_file.txt')
processor.read_file()
processor.process_sentences()
processor.apply_model(pipe)
processor.tokenize_sentences()
processor.process_results()
processor.match_tokens_with_entities()
processor.separate_dots_and_comma()
processor.save_BIO()
直接使用示例
对于句子 "Ego Radulfus de Francorvilla miles, notum facio tam presentibus cum futuris quod, cum Guillelmo Bateste militi de Miliaco",模型将以BIO格式进行标注:
('Ego', 'O', 'O')
('Radulfus', 'B-PERS')
('de', 'I-PERS', 'O')
('Francorvilla', 'I-PERS', 'B-LOC')
('miles', 'O')
(',', 'O', 'O')
('notum', 'O', 'O')
('facio', 'O', 'O')
('tam', 'O', 'O')
('presentibus', 'O', 'O')
('quam', 'O', 'O')
('futuris', 'O', 'O')
('quod', 'O', 'O')
(',', 'O', 'O')
('cum', 'O', 'O')
('Guillelmo', 'B-PERS', 'O')
('Bateste', 'I-PERS', 'O')
('militi', 'O', 'O')
('de', 'O', 'O')
('Miliaco', 'O', 'B-LOC')
📚 详细文档
模型信息
属性 | 详情 |
---|---|
模型开发者 | [Sergio Torres Aguilar] |
模型类型 | [XLM-Roberta] |
支持语言(NLP) | [中世纪拉丁语、西班牙语、法语] |
微调基础模型 | [命名实体识别] |
训练过程
该模型在XML-Roberta-Large的基础上进行了5个epoch的微调,学习率为5e-5,批次大小为16。
BibTeX引用
@inproceedings{aguilar2022multilingual,
title={Multilingual Named Entity Recognition for Medieval Charters Using Stacked Embeddings and Bert-based Models.},
author={Aguilar, Sergio Torres},
booktitle={Proceedings of the second workshop on language technologies for historical and ancient languages},
pages={119--128},
year={2022}
}
🔧 技术细节
该模型在XML-Roberta-Large基础上进行微调,训练过程中使用了5e-5的学习率和16的批次大小,经过5个epoch的训练,在中世纪文本的命名实体识别任务中取得了较好的效果,精度达到98.01%,召回率达到97.08%。
📄 许可证
本模型采用CC BY-NC 4.0许可证。
模型卡片联系方式
[sergio.torres@uni.lu]
Indonesian Roberta Base Posp Tagger
MIT
这是一个基于印尼语RoBERTa模型微调的词性标注模型,在indonlu数据集上训练,用于印尼语文本的词性标注任务。
序列标注
Transformers 其他

I
w11wo
2.2M
7
Bert Base NER
MIT
基于BERT微调的命名实体识别模型,可识别四类实体:地点(LOC)、组织机构(ORG)、人名(PER)和杂项(MISC)
序列标注 英语
B
dslim
1.8M
592
Deid Roberta I2b2
MIT
该模型是基于RoBERTa微调的序列标注模型,用于识别和移除医疗记录中的受保护健康信息(PHI/PII)。
序列标注
Transformers 支持多种语言

D
obi
1.1M
33
Ner English Fast
Flair自带的英文快速4类命名实体识别模型,基于Flair嵌入和LSTM-CRF架构,在CoNLL-03数据集上达到92.92的F1分数。
序列标注
PyTorch 英语
N
flair
978.01k
24
French Camembert Postag Model
基于Camembert-base的法语词性标注模型,使用free-french-treebank数据集训练
序列标注
Transformers 法语

F
gilf
950.03k
9
Xlm Roberta Large Ner Spanish
基于XLM-Roberta-large架构微调的西班牙语命名实体识别模型,在CoNLL-2002数据集上表现优异。
序列标注
Transformers 西班牙语

X
MMG
767.35k
29
Nusabert Ner V1.3
MIT
基于NusaBert-v1.3在印尼语NER任务上微调的命名实体识别模型
序列标注
Transformers 其他

N
cahya
759.09k
3
Ner English Large
Flair框架内置的英文4类大型NER模型,基于文档级XLM-R嵌入和FLERT技术,在CoNLL-03数据集上F1分数达94.36。
序列标注
PyTorch 英语
N
flair
749.04k
44
Punctuate All
MIT
基于xlm-roberta-base微调的多语言标点符号预测模型,支持12种欧洲语言的标点符号自动补全
序列标注
Transformers

P
kredor
728.70k
20
Xlm Roberta Ner Japanese
MIT
基于xlm-roberta-base微调的日语命名实体识别模型
序列标注
Transformers 支持多种语言

X
tsmatz
630.71k
25
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98