Description
This model uses Hebrew word embeddings to find 10 different types of entities in Hebrew text. It is trained using hebrew_cc_300d
word embeddings, please use the same embeddings in the pipeline.
Predicted entities: Persons-PERS
, Dates-DATE
, Organizations-ORG
, Locations-LOC
, Percentage-PERCENT
, Money-MONEY
, Time-TIME
, Miscellaneous (Affiliation)-MISC_AFF
, Miscellaneous (Event)-MISC_EVENT
, Miscellaneous (Entity)-MISC_ENT
.
Predicted Entities
PERS
, LOC
, DATE
, ORG
, TIME
, MONEY
, MISC_EVENT
, MISC_AFF
, PERCENT
, MISC_ENT
How to use
Use as part of an nlp pipeline with the following stages: DocumentAssembler, SentenceDetector, Tokenizer, WordEmbeddingsModel, NerDLModel. Add the NerConverter to the end of the pipeline to convert entity tokens into full entity chunks.
document_assembler = DocumentAssembler()\
.setInputCol("text")\
.setOutputCol("document")
sentence_detector = SentenceDetector()\
.setInputCols(["document"])\
.setOutputCol("sentence")
tokenizer = Tokenizer()\
.setInputCols(["sentence"])\
.setOutputCol("token")
word_embeddings = WordEmbeddingsModel.pretrained("hebrew_cc_300d", "he") \
.setInputCols(["sentence", "token"]) \
.setOutputCol("embeddings")
ner = NerDLModel.pretrained("hebrewner_cc_300d", "he") \
.setInputCols(["sentence", "token", "embeddings"]) \
.setOutputCol("ner")
ner_converter = NerConverter()\
.setInputCols(["sentence", "token", "ner"])\
.setOutputCol("ner_chunk")
nlp_pipeline = Pipeline(stages=[document_assembler,
sentence_detector,
tokenizer,
word_embeddings,
ner,
ner_converter])
light_pipeline = LightPipeline(nlp_pipeline.fit(spark.createDataFrame([['']]).toDF("text")))
annotations = light_pipeline.fullAnnotate("""ב- 25 לאוגוסט עצר השב"כ את מוחמד אבו-ג'וייד , אזרח ירדני , שגויס לארגון הפת"ח והופעל על ידי חיזבאללה. אבו-ג'וייד התכוון להקים חוליות טרור בגדה ובקרב ערביי ישראל , לבצע פיגוע ברכבת ישראל בנהריה , לפגוע במטרות ישראליות בירדן ולחטוף חיילים כדי לשחרר אסירים ביטחוניים.""")
val documentAssembler = new DocumentAssembler()
.setInputCol("text")
.setOutputCol("document")
val sentenceDetector = new SentenceDetector()
.setInputCols(Array("document"))
.setOutputCol("sentence")
val tokenizer = new Tokenizer()
.setInputCols(Array("sentence"))
.setOutputCol("token")
val embeddings = WordEmbeddingsModel.pretrained("hebrew_cc_300d", "he",)
.setInputCols(Array("sentence", "token"))
.setOutputCol("embeddings")
val ner = NerDLModel.pretrained("hebrewner_cc_300d", "he")
.setInputCols(Array("sentence", "token", "embeddings"))
.setOutputCol("ner")
val ner_converter = new NerConverter()
.setInputCols(Array("sentence", "token", "ner"))
.setOutputCol("ner_chunk")
val nlp_pipeline = new Pipeline().setStages(Array(
documentAssembler,
sentenceDetector,
tokenizer,
embeddings,
ner,
ner_converter))
val data = Seq("""ב- 25 לאוגוסט עצר השב"כ את מוחמד אבו-ג'וייד , אזרח ירדני , שגויס לארגון הפת"ח והופעל על ידי חיזבאללה. אבו-ג'וייד התכוון להקים חוליות טרור בגדה ובקרב ערביי ישראל , לבצע פיגוע ברכבת ישראל בנהריה , לפגוע במטרות ישראליות בירדן ולחטוף חיילים כדי לשחרר אסירים ביטחוניים.""").toDS.toDF("text")
val result = nlp_pipeline.fit(data).transform(data)
import nlu
nlu.load("he.ner").predict("""ח והופעל על ידי חיזבאללה. אבו-ג'וייד התכוון להקים חוליות טרור בגדה ובקרב ערביי ישראל , לבצע פיגוע ברכבת ישראל בנהריה , לפגוע במטרות ישראליות בירדן ולחטוף חיילים כדי לשחרר אסירים ביטחוניים.""")
Results
| | ner_chunk | entity_label |
|---:|------------------:|---------------:|
| 0 | 25 לאוגוסט | DATE |
| 1 | השב"כ | ORG |
| 2 | מוחמד אבו-ג'וייד | PERS |
| 3 | ירדני | MISC_AFF |
| 4 | הפת"ח | ORG |
| 5 | חיזבאללה | ORG |
| 6 | אבו-ג'וייד | PERS |
| 7 | בגדה | LOC |
| 8 | ערביי | MISC_AFF |
| 9 | ישראל | LOC |
| 10 | ברכבת ישראל | ORG |
| 11 | בנהריה | LOC |
| 12 | ישראליות | MISC_AFF |
| 13 | בירדן < | LOC |
Model Information
Model Name: | hebrewner_cc_300d |
Type: | ner |
Compatibility: | Spark NLP 4.0.2+ |
License: | Open Source |
Edition: | Official |
Input Labels: | [document, token, word_embeddings] |
Output Labels: | [ner] |
Language: | he |
Size: | 14.8 MB |
References
This model is trained on dataset obtained from https://www.cs.bgu.ac.il/~elhadad/nlpproj/naama/
Benchmarking
label tp fp fn prec rec f1
I-TIME 5 2 0 0.714286 1 0.833333
I-MISC_AFF 2 0 3 1 0.4 0.571429
B-MISC_EVENT 7 0 1 1 0.875 0.933333
B-LOC 180 24 37 0.882353 0.829493 0.855107
I-ORG 124 47 38 0.725146 0.765432 0.744745
B-DATE 50 4 7 0.925926 0.877193 0.900901
I-PERS 157 10 15 0.94012 0.912791 0.926254
I-DATE 39 7 8 0.847826 0.829787 0.83871
B-MISC_AFF 132 11 9 0.923077 0.93617 0.929577
I-MISC_EVENT 6 0 2 1 0.75 0.857143
B-TIME 4 0 1 1 0.8 0.888889
I-PERCENT 8 0 0 1 1 1
I-MISC_ENT 11 3 10 0.785714 0.52381 0.628571
B-MISC_ENT 8 1 5 0.888889 0.615385 0.727273
I-LOC 79 18 23 0.814433 0.77451 0.79397
B-PERS 231 22 26 0.913044 0.898833 0.905882
B-MONEY 36 2 2 0.947368 0.947368 0.947368
B-PERCENT 28 3 0 0.903226 1 0.949152
B-ORG 166 41 37 0.801932 0.817734 0.809756
I-MONEY 61 1 1 0.983871 0.983871 0.983871
Macro-average 1334 196 225 0.899861 0.826869 0.861822
Micro-average 1334 196 225 0.871895 0.855677 0.86371