Reconhecimento de Entidades Nomeadas (NER) no Domínio Jurídico em Português
O projeto ner-legal-bert-base-cased-ptbr é um modelo de Reconhecimento de Entidades Nomeadas (NER) no domínio jurídico em Português. Ajustado a partir do modelo dominguesm/legal-bert-base-cased-ptbr, este projeto tem o objetivo de auxiliar a pesquisa em Processamento de Linguagem Natural (NLP) no campo jurídico, direito da computação e aplicações de tecnologia legal.
O modelo identifica as seguintes entidades em textos jurídicos em português:
PESSOA
ORGANIZACAO
LOCAL
TEMPO
LEGISLACAO
JURISPRUDENCIA
Os rótulos foram inspirados pelo conjunto de dados LeNER_br.
Conjunto de Dados de Treinamento
O conjunto de dados do projeto inclui:
- 971.932 exemplos de diversos documentos jurídicos (conjunto de treinamento)
- 53.996 exemplos de diversos documentos jurídicos (conjunto de validação)
- 53.997 exemplos de diversos documentos jurídicos (conjunto de teste)
Os dados foram fornecidos pelo SUPREMO TRIBUNAL FEDERAL BRASILEIRO, de acordo com os termos de uso: LREC 2020.
Utilizando o Modelo
O modelo pode ser utilizado para inferência em produção utilizando a biblioteca transformers do HuggingFace
. A seguir está um exemplo de como utilizar o modelo para classificar as entidades em um texto jurídico:
from transformers import AutoModelForTokenClassification, AutoTokenizer
import torch
model_name = "dominguesm/ner-legal-bert-base-cased-ptbr"
model = AutoModelForTokenClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
input_text = "Acrescento que não há de se falar em violação do artigo 114, § 3º, da Constituição Federal, posto que referido dispositivo revela-se impertinente, tratando da possibilidade de ajuizamento de dissídio coletivo pelo Ministério Público do Trabalho nos casos de greve em atividade essencial."
inputs = tokenizer(input_text, max_length=512, truncation=True, return_tensors="pt")
tokens = inputs.tokens()
outputs = model(**inputs).logits
predictions = torch.argmax(outputs, dim=2)
for token, prediction in zip(tokens, predictions[0].numpy()):
print((token, model.config.id2label[prediction]))
Procedimento de Treinamento
O modelo foi treinado durante 3 épocas com um tamanho de batch por dispositivo de 64 e uma taxa de aprendizado de 2e-5. Foi utilizado o otimizador AdamW com uma taxa de decaimento de peso de 0.01.
Os resultados do treinamento mostraram que o modelo alcançou uma precisão de 94,39%, um recall de 96,14%, um F1-score de 95,26% e uma acurácia de 98,94%.
Para mais detalhes sobre o procedimento de treinamento e os resultados, consulte o README do projeto aqui.