Financial NER for German Financial Statements

Description

This is a German NER model trained on German Financial Statements, aimed to extract the following entities from the financial documents.

Predicted Entities

FINANCIAL_ENTITY, FINANCIAL_VALUE

Copy S3 URI

How to use

documentAssembler = nlp.DocumentAssembler()\
        .setInputCol("text")\
        .setOutputCol("document")
        
sentenceDetector = nlp.SentenceDetectorDLModel.pretrained("sentence_detector_dl","xx")\
        .setInputCols(["document"])\
        .setOutputCol("sentence")

tokenizer = nlp.Tokenizer()\
        .setInputCols(["sentence"])\
        .setOutputCol("token")

embeddings = nlp.BertEmbeddings.pretrained("bert_sentence_embeddings_financial","de") \
    .setInputCols("sentence", "token") \
    .setOutputCol("embeddings")

ner_model= finance.NerModel.pretrained("finner_financial_entity_value", "de", "finance/models")\
  .setInputCols(["sentence", "token", "embeddings"])\
  .setOutputCol("ner")

ner_converter = nlp.NerConverter()\
        .setInputCols(["sentence","token","ner"])\
        .setOutputCol("ner_chunk")

pipeline =  nlp.Pipeline(stages=[
    documentAssembler,
    sentenceDetector,
    tokenizer,
    embeddings,
    ner_model,
    ner_converter
    ]
)

import pandas as pd

p_model = pipeline.fit(spark.createDataFrame(pd.DataFrame({'text': ['']})))


text = 'Die Kapitalstruktur wird im Wesentlichen durch eine weitere Reduzierung der langfristigen Bankverbindlichkeiten um 3.000 TEUR auf 0 TEUR , einer Erhöhung der Rückstellungen um 3.397 TEUR auf 31.717 TEUR sowie die Erhöhung des Eigenkapitals um 1.771 TEUR auf 110.668 TEUR beeinflusst .'


res = p_model.transform(spark.createDataFrame([[text]]).toDF("text"))

result_df = res.select(F.explode(F.arrays_zip(res.token.result,res.ner.result, res.ner.metadata)).alias("cols"))\
                          .select(F.expr("cols['0']").alias("token"),
                                       F.expr("cols['1']").alias("label"),
                                       F.expr("cols['2']['confidence']").alias("confidence"))

result_df.show(50, truncate=100)

Results

+---------------------+------------------+
|                token|             label|
+---------------------+------------------+
|                  Die|                 O|
|      Kapitalstruktur|                 O|
|                 wird|                 O|
|                   im|                 O|
|         Wesentlichen|                 O|
|                durch|                 O|
|                 eine|                 O|
|              weitere|                 O|
|          Reduzierung|                 O|
|                  der|                 O|
|        langfristigen|B-FINANCIAL_ENTITY|
|Bankverbindlichkeiten|I-FINANCIAL_ENTITY|
|                   um|                 O|
|                3.000|                 O|
|                 TEUR|                 O|
|                  auf|                 O|
|                    0| B-FINANCIAL_VALUE|
|                 TEUR|                 O|
|                    ,|                 O|
|                einer|                 O|
|             Erhöhung|                 O|
|                  der|                 O|
|       Rückstellungen|B-FINANCIAL_ENTITY|
|                   um|                 O|
|                3.397|                 O|
|                 TEUR|                 O|
|                  auf|                 O|
|               31.717| B-FINANCIAL_VALUE|
|                 TEUR|                 O|
|                sowie|                 O|
|                  die|                 O|
|             Erhöhung|                 O|
|                  des|                 O|
|        Eigenkapitals|B-FINANCIAL_ENTITY|
|                   um|                 O|
|                1.771|                 O|
|                 TEUR|                 O|
|                  auf|                 O|
|              110.668| B-FINANCIAL_VALUE|
|                 TEUR|                 O|
|          beeinflusst|                 O|
|                    .|                 O|
+---------------------+------------------+

Model Information

Model Name: finner_financial_entity_value
Compatibility: Finance NLP 1.0.0+
License: Licensed
Edition: Official
Input Labels: [sentence, token, embeddings]
Output Labels: [ner]
Language: de
Size: 1.1 MB

Benchmarking

label               precision   recall      f1-score   support     
B-FINANCIAL_ENTITY  0.8947      0.9444      0.9189     18 
B-FINANCIAL_VALUE   1.0000      0.8750      0.9333     16 
I-FINANCIAL_ENTITY  0.8000      0.6154      0.6957     13 
micro-avg           0.9070      0.8298      0.8667     47 
macro-avg           0.8982      0.8116      0.8493     47 
weighted-avg        0.9044      0.8298      0.8621     47