Description
Pretrained named entity recognition deep learning model for clinical terms in Hebrew. 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")
embeddings = BertEmbeddings.pretrained("alephbertgimmel_base_512","he") \
.setInputCols(["sentence", "token"]) \
.setOutputCol("embeddings")
ner_model = MedicalNerModel.pretrained("ner_clinical", "he", "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_text = """פה רגיל צוואר רגיל תרואיד תקין שדיים רגילים ללא גושים בולטים פטילות רגילות הפוכות [ב] , מתפשטות עם גירוי חזה רגיל LCTA COR תקין RRR בטן רגילה מעוברת רגליים רגילות עור רגיל צמיגים רגילים פרטים רגילים ללא גידולים פלפים רגילים ללא תסמין נמוך רגיל פרטים לבנים דקים כמות קטנה של פ 4.5 , קוה + אמין , NS + רמז , טריש - רגיל רחם רגיל 1/100/0 SROM ברור סגור נפשות רגילות ללא גידולים פלפים NT רגיל רחם רגיל גודל בשבועות תקין מעי רגיל ללא גידולים חיצוניים."""
data = spark.createDataFrame([[sample_text]]).toDF("text")
result = pipeline.fit(data).transform(data)
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 = BertEmbeddings.pretrained("alephbertgimmel_base_512","he")
.setInputCols(Array("sentence", "token"))
.setOutputCol("embeddings")
val ner_model = MedicalNerModel.pretrained("ner_clinical", "he", "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
))
sample_data = Seq("""פה רגיל צוואר רגיל תרואיד תקין שדיים רגילים ללא גושים בולטים פטילות רגילות הפוכות [ב] , מתפשטות עם גירוי חזה רגיל LCTA COR תקין RRR בטן רגילה מעוברת רגליים רגילות עור רגיל צמיגים רגילים פרטים רגילים ללא גידולים פלפים רגילים ללא תסמין נמוך רגיל פרטים לבנים דקים כמות קטנה של פ 4.5 , קוה + אמין , NS + רמז , טריש - רגיל רחם רגיל 1/100/0 SROM ברור סגור נפשות רגילות ללא גידולים פלפים NT רגיל רחם רגיל גודל בשבועות תקין מעי רגיל ללא גידולים חיצוניים.""").toDS.toDF("text")
val result = pipeline.fit(sample_data).transform(sample_data)
Results
+--------------------------+-----------+
|chunk | ner_label |
+--------------------------+-----------+
| גושים בולטים | PROBLEM |
| הפוכות | PROBLEM |
| מתפשטות עם גירוי חזה | TREATMENT |
| כמות קטנה של פ | TEST |
| קוה | TEST |
| NS | TEST |
| טריש | TEST |
| SROM | PROBLEM |
+--------------------------+-----------+
Model Information
Model Name: | ner_clinical |
Compatibility: | Healthcare NLP 5.1.1+ |
License: | Licensed |
Edition: | Official |
Input Labels: | [sentence, token, embeddings] |
Output Labels: | [ner] |
Language: | he |
Size: | 3.4 MB |
Benchmarking
label precision recall f1-score support
PROBLEM 0.80 0.78 0.79 607
TREATMENT 0.80 0.64 0.71 280
TEST 0.85 0.85 0.85 354
micro-avg 0.81 0.77 0.79 1241
macro-avg 0.82 0.75 0.78 1241
weighted-avg 0.81 0.77 0.79 1241