Description
Pretrained named entity recognition deep learning model for clinical terms in Bulgarian. The SparkNLP deep learning model (MedicalNerModel) is inspired by a former state-of-the-art model for NER: Chiu & Nicols, Named Entity Recognition with Bidirectional LSTM-CNN.
Predicted Entities
PROBLEM
, TEST
, TREATMENT
Live Demo Open in Colab Copy S3 URI
How to use
documentAssembler = DocumentAssembler()\
.setInputCol("text")\
.setOutputCol("document")
tokenizer = Tokenizer()
.setInputCols(["document"])
.setOutputCol("token")
embeddings = WordEmbeddingsModel.pretrained("w2v_cc_300d","bg")
.setInputCols(["document", "token"])
.setOutputCol("embeddings")
ner_model = MedicalNerModel().pretrained("ner_clinical", "bg", "clinical/models")
.setInputCols(["document", "token", "embeddings"])
.setOutputCol("ner")
ner_converter = NerConverterInternal()
.setInputCols(["document","token","ner"])
.setOutputCol("ner_chunk")
pipeline = Pipeline(stages=[ documentAssembler, tokenizer, embeddings, ner_model, ner_converter])
sample_text = """Пациентът беше изключен от възможността за миокарден инфаркт, като се има предвид падането му в летището и бигеминията, забелязана по електрокардиограмата, която се разви по време на съзнателна седация по време на намаляването на фрактурата."""
data = spark.createDataFrame([[sample_text]]).toDF("text")
result = pipeline.fit(data).transform(data)
val document_assembler = new DocumentAssembler()
.setInputCol("text")
.setOutputCol("document")
val tokenizer = new Tokenizer()
.setInputCols("document")
.setOutputCol("token")
val embeddings = WordEmbeddingsModel.pretrained("w2v_cc_300d","bg")
.setInputCols(Array("document", "token"))
.setOutputCol("embeddings")
val ner_model = MedicalNerModel.pretrained("ner_clinical", "bg", "clinical/models")
.setInputCols(Array("document", "token", "embeddings"))
.setOutputCol("ner")
val ner_converter = new NerConverterInternal()
.setInputCols(Array("document", "token", "ner"))
.setOutputCol("ner_chunk")
val pipeline = new Pipeline().setStages(Array(
document_assembler,
tokenizer,
embeddings,
ner_model,
ner_converter
))
val sample_data = Seq("""Пациентът беше изключен от възможността за миокарден инфаркт, като се има предвид падането му в летището и бигеминията, забелязана по електрокардиограмата, която се разви по време на съзнателна седация по време на намаляването на фрактурата.""").toDS.toDF("text")
val result = pipeline.fit(sample_data).transform(sample_data)
Results
+--------------------------+-----+---+---------+
|chunk |begin|end|ner_label|
+--------------------------+-----+---+---------+
|миокарден инфаркт |44 |60 |PROBLEM |
|падането му |83 |93 |PROBLEM |
|бигеминията |108 |118|PROBLEM |
|електрокардиограмата |135 |154|TEST |
|съзнателна седация |184 |201|TREATMENT|
|намаляването на фрактурата|215 |240|TREATMENT|
+--------------------------+-----+---+---------+
Model Information
Model Name: | ner_clinical |
Compatibility: | Healthcare NLP 5.1.1+ |
License: | Licensed |
Edition: | Official |
Input Labels: | [document, token, embeddings] |
Output Labels: | [ner] |
Language: | bg |
Size: | 920.1 KB |
Benchmarking
label precision recall f1-score support
PROBLEM 0.70 0.70 0.70 216
TEST 0.81 0.81 0.81 176
TREATMENT 0.68 0.60 0.64 161
micro-avg 0.73 0.71 0.72 553
macro-avg 0.73 0.71 0.72 553
weighted-avg 0.73 0.71 0.72 553