flair-uk-pos / README.md
dchaplinsky's picture
Update README.md
d8780ff
metadata
tags:
  - flair
  - token-classification
  - sequence-tagger-model
language: uk
model-index:
  - name: flair-uk-pos
    results:
      - task:
          name: POS
          type: token-classification
        metrics:
          - name: POS F Score
            type: f_score
            value: 0.9793
widget:
  - text: >-
      Президент Володимир Зеленський пояснив, що наразі діалог із режимом
      Володимира путіна неможливий, адже агресор обрав курс на знищення
      українського народу. За словами Зеленського цей режим РФ виявляє неповагу
      до суверенітету і територіальної цілісності України.
license: mit

flair-uk-ner

Model description

flair-uk-pos is a Flair model that is ready to use for part-of-speech (upos) tagging. It is based on flair embeddings, that I've trained for Ukrainian language (available here and here) and has superior performance and a very small size (just 72mb!).

Results:

  • F-score (micro) 0.9793
  • F-score (macro) 0.9275
  • Accuracy 0.9793
By class: precision recall f1-score support
NOUN 0.9857 0.9851 0.9854 4549
PUNCT 0.9984 1.0000 0.9992 3097
ADJ 0.9772 0.9852 0.9812 1959
ADP 0.9956 0.9968 0.9962 1584
VERB 0.9891 0.9910 0.9900 1552
ADV 0.9630 0.9118 0.9367 714
CCONJ 0.9685 0.9746 0.9715 630
PROPN 0.9279 0.9472 0.9375 625
DET 0.9729 0.9698 0.9713 629
PRON 0.9706 0.9631 0.9669 515
PART 0.9235 0.8693 0.8956 375
NUM 0.9722 0.9804 0.9763 357
SCONJ 0.8768 0.9577 0.9154 260
AUX 0.8906 0.9500 0.9194 120
X 0.9833 0.9593 0.9712 123
SYM 1.0000 0.7059 0.8276 17
INTJ 0.5556 0.5000 0.5263 10
accuracy 0.9793 17116
macro avg 0.9383 0.9204 0.9275 17116
weighted avg 0.9794 0.9793 0.9792 17116

The model was fine-tuned on the Ukrainian (UD) corpus, released by the non-profit organization Institute for Ukrainian. Training code is also available here.

Usage demo

from flair.data import Sentence
from flair.models import SequenceTagger

from pprint import pprint

tagger = SequenceTagger.load("dchaplinsky/flair-uk-pos")

sentence = Sentence("Я люблю Україну. Моє імʼя Марія Шевченко, я навчаюся в Київській політехніці.")

tagger.predict(sentence)

print(sentence)
print('---')

print('The following POS tags are found:')

pos_items = []
for label in sentence.get_labels():
    all_labels = []
    keys = label.data_point.annotation_layers.keys()
    
    for key in keys:
        all_labels.extend(
            [
                {'label': label.value, 'score': round(label.score, 4)}
                for label in label.data_point.get_labels(key)
                if label.data_point == label
            ]
        )

    pos_items.append({
        'text': label.data_point.text,
        'all_labels': all_labels,
    })

pprint(pos_items)

# Result:
"""
Sentence: "Я люблю Україну . Моє імʼя Марія Шевченко , я навчаюся в Київській політехніці ." → ["Я"/PRON, "люблю"/VERB, "Україну"/PROPN, "."/PUNCT, "Моє"/DET, "імʼя"/NOUN, "Марія"/PROPN, "Шевченко"/PROPN, ","/PUNCT, "я"/PRON, "навчаюся"/VERB, "в"/ADP, "Київській"/ADJ, "політехніці"/NOUN, "."/PUNCT]
---
The following POS tags are found:
[{'all_labels': [{'label': 'PRON', 'score': 1.0}], 'text': 'Я'},
 {'all_labels': [{'label': 'VERB', 'score': 1.0}], 'text': 'люблю'},
 {'all_labels': [{'label': 'PROPN', 'score': 1.0}], 'text': 'Україну'},
 {'all_labels': [{'label': 'PUNCT', 'score': 1.0}], 'text': '.'},
 {'all_labels': [{'label': 'DET', 'score': 0.9999}], 'text': 'Моє'},
 {'all_labels': [{'label': 'NOUN', 'score': 1.0}], 'text': 'імʼя'},
 {'all_labels': [{'label': 'PROPN', 'score': 1.0}], 'text': 'Марія'},
 {'all_labels': [{'label': 'PROPN', 'score': 1.0}], 'text': 'Шевченко'},
 {'all_labels': [{'label': 'PUNCT', 'score': 1.0}], 'text': ','},
 {'all_labels': [{'label': 'PRON', 'score': 1.0}], 'text': 'я'},
 {'all_labels': [{'label': 'VERB', 'score': 1.0}], 'text': 'навчаюся'},
 {'all_labels': [{'label': 'ADP', 'score': 1.0}], 'text': 'в'},
 {'all_labels': [{'label': 'ADJ', 'score': 1.0}], 'text': 'Київській'},
 {'all_labels': [{'label': 'NOUN', 'score': 1.0}], 'text': 'політехніці'},
 {'all_labels': [{'label': 'PUNCT', 'score': 1.0}], 'text': '.'}]
"""

Copyright: Dmytro Chaplynskyi, lang-uk project, 2022