Tagging other things#

This tutorial gives you a tour of other crazy models shipped with Flair. These include:

  • tagging semantic frames

  • chunking text

  • relation extraction

  • others

Let’s get started!

Semantic Frame Detection#

For English, we provide a pre-trained model that detects semantic frames in text, trained using Propbank 3.0 frames. This provides a sort of word sense disambiguation for frame evoking words, and we are curious what researchers might do with this.

Here’s an example:

from flair.nn import Classifier
from flair.data import Sentence

# load model
tagger = Classifier.load('frame')

# make English sentence
sentence = Sentence('George returned to Berlin to return his hat.')

# predict NER tags
tagger.predict(sentence)

# go through tokens and print predicted frame (if one is predicted)
for token in sentence:
    print(token)

This should print:

Token[0]: "George"
Token[1]: "returned" → return.01 (0.9951)
Token[2]: "to"
Token[3]: "Berlin"
Token[4]: "to"
Token[5]: "return" → return.02 (0.6361)
Token[6]: "his"
Token[7]: "hat"
Token[8]: "."

As we can see, the frame detector makes a distinction in the sentence between two different meanings of the word ‘return’. ‘return.01’ means returning to a location, while ‘return.02’ means giving something back.

Syntactic Chunking#

For English, we provide a model for chunking verb and noun phrases, trained using CoNLL 2000.

from flair.nn import Classifier
from flair.data import Sentence

# load model
tagger = Classifier.load('chunk')

# make English sentence
sentence = Sentence('The quick brown fox jumps over the lazy dog.')

# predict NER tags
tagger.predict(sentence)

# print the chunks
for chunk in sentence.get_labels():
  print(chunk)

This should print:

Span[0:4]: "The quick brown fox" → NP (0.9914)
Span[4:5]: "jumps" → VP (1.0)
Span[5:6]: "over" → PP (0.9967)
Span[6:9]: "the lazy dog" → NP (0.9991)

This tells us for instance that “the quick brown fox” and “the lazy dog” form syntactic units in this sentence.

Tagging Relations#

Relations hold between two entities. For instance, a text like “George was born in Washington” names two entities and also expresses that there is a born_in relationship between both.

We added an experimental relation extraction model trained over a modified version of TACRED. You must use this model together with an entity tagger. Here is an example:

from flair.data import Sentence
from flair.nn import Classifier

# 1. make example sentence
sentence = Sentence("George was born in Washington")

# 2. load entity tagger and predict entities
tagger = Classifier.load('ner-fast')
tagger.predict(sentence)

# check which named entities have been found in the sentence
entities = sentence.get_labels('ner')
for entity in entities:
    print(entity)

# 3. load relation extractor
extractor = Classifier.load('relations')

# predict relations
extractor.predict(sentence)

# check which relations have been found
relations = sentence.get_labels('relation')
for relation in relations:
    print(relation)
print("")

# Use the `get_labels()` method with parameter 'relation' to iterate over all relation predictions. 
for label in sentence.get_labels('relation'):
    print(label)

This should print:

Span[0:1]: "George" → PER (0.9971)
Span[4:5]: "Washington" → LOC (0.9847)

Relation[0:1][4:5]: "George -> Washington" → born_in (1.0)

Indicating that a born_in relationship holds between “George” and “Washington”!

List of Other Models#

We end this section with a list of all other models we currently ship with Flair:

ID

Task

Language

Training Dataset

Accuracy

Contributor / Notes

chunk

Chunking

English

Conll-2000

96.47 (F1)

chunk-fast

Chunking

English

Conll-2000

96.22 (F1)

(fast model)

frame

Frame Detection

English

Propbank 3.0

97.54 (F1)

frame-fast

Frame Detection

English

Propbank 3.0

97.31 (F1)

(fast model)

‘negation-speculation’

Negation / speculation

English

Bioscope

80.2 (F1)

‘communicative-functions’

detecting function of sentence in research paper (BETA)

English

scholarly papers

‘de-historic-indirect’

historical indirect speech

German

@redewiedergabe project

87.94 (F1)

redewiedergabe

‘de-historic-direct’

historical direct speech

German

@redewiedergabe project

87.94 (F1)

redewiedergabe

‘de-historic-reported’

historical reported speech

German

@redewiedergabe project

87.94 (F1)

redewiedergabe

‘de-historic-free-indirect’

historical free-indirect speech

German

@redewiedergabe project

87.94 (F1)

redewiedergabe