Detect Clinical Entities (ner_eu_clinical_case - es)

Description

Pretrained named entity recognition (NER) deep learning model for extracting clinical entities from Spanish texts. The SparkNLP deep learning model (MedicalNerModel) is inspired by a former state of the art model for NER: Chiu & Nichols, Named Entity Recognition with Bidirectional LSTM-CNN.

The corpus used for model training is provided by European Clinical Case Corpus (E3C), a project aimed at offering a freely available multilingual corpus of semantically annotated clinical narratives.

Predicted Entities

clinical_event, bodypart, clinical_condition, units_measurements, patient, date_time

Copy S3 URI

How to use

document_assembler = DocumentAssembler()\
	.setInputCol("text")\
	.setOutputCol("document")
 
sentenceDetectorDL = SentenceDetectorDLModel.pretrained("sentence_detector_dl", "xx")\
	.setInputCols(["document"])\
	.setOutputCol("sentence")

tokenizer = Tokenizer()\
	.setInputCols(["sentence"])\
	.setOutputCol("token")

word_embeddings = WordEmbeddingsModel.pretrained("w2v_cc_300d","es")\
	.setInputCols(["sentence","token"])\
	.setOutputCol("embeddings")

ner = MedicalNerModel.pretrained("ner_eu_clinical_case", "es", "clinical/models") \
	.setInputCols(["sentence", "token", "embeddings"]) \
	.setOutputCol("ner")
 
ner_converter = NerConverterInternal()\
	.setInputCols(["sentence", "token", "ner"])\
	.setOutputCol("ner_chunk")

pipeline = Pipeline(stages=[
	document_assembler,
	sentenceDetectorDL,
	tokenizer,
	word_embeddings,
	ner,
	ner_converter])

data = spark.createDataFrame([["""Un niño de 3 años con trastorno autista en el hospital de la sala pediátrica A del hospital universitario. No tiene antecedentes familiares de enfermedad o trastorno del espectro autista. El niño fue diagnosticado con un trastorno de comunicación severo, con dificultades de interacción social y retraso en el procesamiento sensorial. Los análisis de sangre fueron normales (hormona estimulante de la tiroides (TSH), hemoglobina, volumen corpuscular medio (MCV) y ferritina). La endoscopia alta también mostró un tumor submucoso que causaba una obstrucción subtotal de la salida gástrica. Ante la sospecha de tumor del estroma gastrointestinal, se realizó gastrectomía distal. El examen histopatológico reveló proliferación de células fusiformes en la capa submucosa."""]]).toDF("text")

result = pipeline.fit(data).transform(data)
val document_assembler = new DocumentAssembler()
	.setInputCol("text")
	.setOutputCol("document")
 
val sentenceDetectorDL = SentenceDetectorDLModel.pretrained("sentence_detector_dl", "xx")
	.setInputCols("document")
	.setOutputCol("sentence")

val tokenizer = new Tokenizer()
	.setInputCols("sentence")
	.setOutputCol("token")

val word_embeddings = WordEmbeddingsModel.pretrained("w2v_cc_300d","es")
	.setInputCols(Array("sentence","token"))
	.setOutputCol("embeddings")

val ner = MedicalNerModel.pretrained("ner_eu_clinical_case", "es", "clinical/models")
	.setInputCols(Array("sentence", "token", "embeddings"))
	.setOutputCol("ner")
 
val ner_converter = new NerConverterInternal()
	.setInputCols(Array("sentence", "token", "ner"))
	.setOutputCol("ner_chunk")

val pipeline = new Pipeline().setStages(Array(
	document_assembler,
	sentenceDetectorDL,
	tokenizer,
	word_embeddings,
	ner,
	ner_converter))

val data =  Seq("""Un niño de 3 años con trastorno autista en el hospital de la sala pediátrica A del hospital universitario. No tiene antecedentes familiares de enfermedad o trastorno del espectro autista. El niño fue diagnosticado con un trastorno de comunicación severo, con dificultades de interacción social y retraso en el procesamiento sensorial. Los análisis de sangre fueron normales (hormona estimulante de la tiroides (TSH), hemoglobina, volumen corpuscular medio (MCV) y ferritina). La endoscopia alta también mostró un tumor submucoso que causaba una obstrucción subtotal de la salida gástrica. Ante la sospecha de tumor del estroma gastrointestinal, se realizó gastrectomía distal. El examen histopatológico reveló proliferación de células fusiformes en la capa submucosa.""").toDS.toDF("text")

val result = pipeline.fit(data).transform(data)

Results

+--------------------------------+------------------+
|chunk                           |ner_label         |
+--------------------------------+------------------+
|Un niño de 3 años               |patient           |
|trastorno autista               |clinical_event    |
|antecedentes                    |clinical_event    |
|enfermedad                      |clinical_event    |
|trastorno del espectro autista  |clinical_event    |
|El niño                         |patient           |
|diagnosticado                   |clinical_event    |
|trastorno de comunicación severo|clinical_event    |
|dificultades                    |clinical_event    |
|retraso                         |clinical_event    |
|análisis                        |clinical_event    |
|sangre                          |bodypart          |
|normales                        |units_measurements|
|hormona                         |clinical_event    |
|la tiroides                     |bodypart          |
|TSH                             |clinical_event    |
|hemoglobina                     |clinical_event    |
|volumen                         |clinical_event    |
|MCV                             |clinical_event    |
|ferritina                       |clinical_event    |
|endoscopia                      |clinical_event    |
|mostró                          |clinical_event    |
|tumor submucoso                 |clinical_event    |
|obstrucción                     |clinical_event    |
|tumor                           |clinical_event    |
|del estroma gastrointestinal    |bodypart          |
|gastrectomía                    |clinical_event    |
|examen                          |clinical_event    |
|reveló                          |clinical_event    |
|proliferación                   |clinical_event    |
|células fusiformes              |bodypart          |
|la capa submucosa               |bodypart          |
+--------------------------------+------------------+

Model Information

Model Name: ner_eu_clinical_case
Compatibility: Healthcare NLP 4.2.8+
License: Licensed
Edition: Official
Input Labels: [sentence, token, embeddings]
Output Labels: [ner]
Language: es
Size: 895.1 KB

References

The corpus used for model training is provided by European Clinical Case Corpus (E3C), a project aimed at offering a freely available multilingual corpus of semantically annotated clinical narratives.

Benchmarking

             label     tp     fp    fn  total  precision  recall      f1
         date_time   87.0   10.0  17.0  104.0     0.8969  0.8365  0.8657
units_measurements   37.0    5.0  11.0   48.0     0.8810  0.7708  0.8222
clinical_condition   50.0   34.0  70.0  120.0     0.5952  0.4167  0.4902
           patient   76.0    8.0  11.0   87.0     0.9048  0.8736  0.8889
    clinical_event  399.0   44.0  79.0  478.0     0.9007  0.8347  0.8664
          bodypart  153.0   56.0  13.0  166.0     0.7321  0.9217  0.8160
            macro     -      -      -     -         -       -     0.7916
            micro     -      -      -     -         -       -     0.8128