Detect Problems, Tests and Treatments (Dutch)

Description

Pretrained named entity recognition deep learning model for clinical terms. The SparkNLP deep learning model (NerDL) is inspired by a former state of the art model for NER: Chiu & Nicols, Named Entity Recognition with Bidirectional LSTM-CNN.

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")

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

ner_model = MedicalNerModel.pretrained("ner_clinical", "nl", "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,
    embeddings,
    ner_model,
    ner_converter   
    ])

sample_df = spark.createDataFrame([["Dhr. Van Dijk, 58 jaar oud, kwam naar de kliniek met klachten van aanhoudende hoest, koorts en kortademigheid. We hebben besloten om een röntgenfoto van de borst, bloedonderzoek en een CT-scan te laten uitvoeren. De resultaten wezen op een ernstige longontsteking, een verhoogd aantal witte bloedcellen en mogelijk COPD. Hem is een antibiotica kuur en een sterke hoestsiroop voorgeschreven. Daarnaast adviseren we hem een voedzaam dieet te volgen."]]).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 embeddings = WordEmbeddingsModel.pretrained("w2v_cc_300d", "nl")
    .setInputCols(Array("sentence", "token"))
    .setOutputCol("embeddings")

val ner_model = MedicalNerModel.pretrained("ner_clinical", "nl", "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,
    embeddings,
    ner_model,
    ner_converter))

val sample_data = Seq("Dhr. Van Dijk, 58 jaar oud, kwam naar de kliniek met klachten van aanhoudende hoest, koorts en kortademigheid. We hebben besloten om een röntgenfoto van de borst, bloedonderzoek en een CT-scan te laten uitvoeren. De resultaten wezen op een ernstige longontsteking, een verhoogd aantal witte bloedcellen en mogelijk COPD. Hem is een antibiotica kuur en een sterke hoestsiroop voorgeschreven. Daarnaast adviseren we hem een voedzaam dieet te volgen.").toDS.toDF("text")

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

Results

+-------------------------------------+-----+---+---------+----------+
|chunk                                |begin|end|ner_label|confidence|
+-------------------------------------+-----+---+---------+----------+
|aanhoudende hoest                    |66   |82 |PROBLEM  |0.8191    |
|koorts                               |85   |90 |PROBLEM  |0.9932    |
|kortademigheid                       |95   |108|PROBLEM  |0.9917    |
|röntgenfoto van de borst             |137  |160|TEST     |0.60539997|
|bloedonderzoek                       |163  |176|TEST     |0.9186    |
|een CT-scan                          |181  |191|TEST     |0.7307    |
|ernstige longontsteking              |240  |262|PROBLEM  |0.7775    |
|een verhoogd aantal witte bloedcellen|265  |301|PROBLEM  |0.45136   |
|COPD                                 |315  |318|PROBLEM  |0.9806    |
|antibiotica kuur                     |332  |347|TREATMENT|0.62645   |
|een sterke hoestsiroop               |352  |373|TREATMENT|0.4657    |
|een voedzaam dieet                   |418  |435|TREATMENT|0.6946666 |
+-------------------------------------+-----+---+---------+----------+

Model Information

Model Name: ner_clinical
Compatibility: Healthcare NLP 4.4.4+
License: Licensed
Edition: Official
Input Labels: [document, token, embeddings]
Output Labels: [ner]
Language: nl
Size: 888.0 KB

Benchmarking

       label   precision  recall  f1-score   support
     PROBLEM        0.68    0.71      0.69       434
        TEST        0.79    0.83      0.81       377
   TREATMENT        0.71    0.80      0.75       271
   micro-avg        0.73    0.77      0.75      1082
   macro-avg        0.73    0.78      0.75      1082
weighted-avg        0.73    0.77      0.75      1082