Description
Pretrained named entity recognition deep learning model for clinical terms in Vietnamese. 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
document_assembler = DocumentAssembler()\
.setInputCol("text")\
.setOutputCol("document")
sentence_detector = SentenceDetectorDLModel.pretrained("sentence_detector_dl", "xx")\
.setInputCols(["document"])\
.setOutputCol("sentence")
tokenizer = Tokenizer()\
.setInputCols(["sentence"])\
.setOutputCol("token")
clinical_embeddings = WordEmbeddingsModel.pretrained("w2v_cc_300d","vi") \
.setInputCols(["sentence", "token"]) \
.setOutputCol("embeddings")
ner_model = MedicalNerModel.pretrained("ner_clinical", "vi", "clinical/models")\
.setInputCols(["sentence", "token", "embeddings"])\
.setOutputCol("ner")
ner_converter = NerConverterInternal()\
.setInputCols(["sentence", "token", "ner"])\
.setOutputCol("ner_chunk")
pipeline = Pipeline(stages=[
document_assembler,
sentence_detector,
tokenizer,
clinical_embeddings,
ner_model,
ner_converter
])
sample_df = spark.createDataFrame([["""A/P : Nam , 48 tuổi, có tiền sử HCV, rối loạn lưỡng cực , có nỗ lực tự tử, dùng Inderal, Klonopin, Geodon, nhập viện tại Jackson với ống thông khí để bảo vệ đường thở, có câu hỏi về xâm nhập phía sau tim bên trái, hiện tại đang ổn định. một cuộc quét MRI cổ chỉ ra sự thoái hóa đĩa ấn tượng rất ở C5-C6, ít hơn ở C4-C5, với sự nén tủy rõ ràng, đặc biệt là ở phía bên phải C5-C6."""]]).toDF("text")
result = pipeline.fit(sample_df).transform(sample_df)
val document_assembler = new DocumentAssembler()
.setInputCol("text")
.setOutputCol("document")
val sentence_detector = SentenceDetectorDLModel.pretrained("sentence_detector_dl", "xx")
.setInputCols("document")
.setOutputCol("sentence")
val tokenizer = new Tokenizer()
.setInputCols("sentence")
.setOutputCol("token")
val clinical_embeddings = WordEmbeddingsModel.pretrained("w2v_cc_300d","vi")
.setInputCols(Array("sentence", "token"))
.setOutputCol("embeddings")
val ner_model = MedicalNerModel.pretrained("ner_clinical", "vi", "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,
sentence_detector,
tokenizer,
clinical_embeddings,
ner_model,
ner_converter))
val sample_data = Seq("""A/P : Nam , 48 tuổi, có tiền sử HCV, rối loạn lưỡng cực , có nỗ lực tự tử, dùng Inderal, Klonopin, Geodon, nhập viện tại Jackson với ống thông khí để bảo vệ đường thở, có câu hỏi về xâm nhập phía sau tim bên trái, hiện tại đang ổn định. một cuộc quét MRI cổ chỉ ra sự thoái hóa đĩa ấn tượng rất ở C5-C6, ít hơn ở C4-C5, với sự nén tủy rõ ràng, đặc biệt là ở phía bên phải C5-C6.""").toDS.toDF("text")
val result = pipeline.fit(sample_data).transform(sample_data)
Results
+------------------------------+-----+---+---------+
|chunk |begin|end|ner_label|
+------------------------------+-----+---+---------+
|HCV |32 |34 |PROBLEM |
|rối loạn lưỡng cực |37 |54 |PROBLEM |
|tự tử |68 |72 |PROBLEM |
|Inderal |80 |86 |TREATMENT|
|Klonopin |89 |96 |TREATMENT|
|Geodon |99 |104|TREATMENT|
|ống thông khí |133 |145|TREATMENT|
|bảo vệ đường thở |150 |165|TREATMENT|
|xâm nhập phía sau tim bên trái|182 |211|PROBLEM |
|một cuộc quét MRI cổ |237 |256|TEST |
|sự nén tủy rõ ràng |324 |341|PROBLEM |
+------------------------------+-----+---+---------+
Model Information
Model Name: | ner_clinical |
Compatibility: | Healthcare NLP 5.1.0+ |
License: | Licensed |
Edition: | Official |
Input Labels: | [sentence, token, embeddings] |
Output Labels: | [ner] |
Language: | vi |
Size: | 2.9 MB |
Benchmarking
label precision recall f1-score support
TREATMENT 0.68 0.75 0.71 554
TEST 0.86 0.75 0.80 357
PROBLEM 0.78 0.78 0.78 1373
micro-avg 0.76 0.77 0.77 2284
macro-avg 0.77 0.76 0.77 2284
weighted-avg 0.77 0.77 0.77 2284