File size: 3,579 Bytes
38d76f6
 
6d16533
 
 
470b7ff
 
 
 
38d76f6
 
470b7ff
 
 
 
 
 
 
 
 
 
38d76f6
 
61013fb
 
 
 
 
 
 
 
 
38d76f6
e704b8f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
---
library_name: transformers
license: cc-by-4.0
language:
- de
datasets:
- SinclairSchneider/trainset_political_party_big
base_model:
- ikim-uk-essen/geberta-xlarge
---

Parameter: 750M

Context Length: 512

F1: 0.76

Precision: 0.79

Recall: 0.74

**BibTeX:**

@misc {schneider2024GerPolClass,
    author       = { Schneider, Sinclair A M },
    title        = { German Politics Party Text Classifier },
    year         = { 2024 },
    month        = { June },
    url          = { https://huggingface.co/SinclairSchneider/german_politic_direction_DeBERTa-large },
    publisher    = { Hugging Face },
    note         = { DeBERTa transformer model }
}

# Ideology Prediction of German Political Texts based on DeBERTa-large (highly experimental)

Predicts the ideology of German texts on a scale from -1 (left-wing) over 0 (liberal) to 1 (right wing)

Simple example

```python
from transformers import pipeline, DebertaV2ForSequenceClassification, AutoTokenizer
import numpy as np
import pandas as pd
import torch

model_name = "SinclairSchneider/german_politic_direction_DeBERTa-large"
model = DebertaV2ForSequenceClassification.from_pretrained(model_name, dtype=torch.bfloat16)
tokenizer = AutoTokenizer.from_pretrained(model_name)
pipe = pipeline("text-classification", model=model, tokenizer=tokenizer, top_k=None)

vectors = np.array([[-1, 0],
                    [-9.99193435e-01,  4.01556900e-02],
                    [-9.18323655e-01,  3.95830349e-01],
                    [ 3.82683432e-01,  9.23879533e-01],
                    [ 8.69790824e-01,  4.93420634e-01],
                    [1, 0]])

def classify(text):
    classification_result = np.array(pd.DataFrame(pipe(text)[0]).sort_values(by=['label'], key=lambda x: x.map({'DIE LINKE':0, 
                                                                                                                'BÜNDNIS 90/DIE GRÜNEN':1, 
                                                                                                                'SPD':2, 
                                                                                                                'FDP':3, 
                                                                                                                'CDU/CSU':4, 
                                                                                                                'AfD':5}))['score'])
    return float(np.arctan2(*classification_result@vectors)/(np.pi/2))

#Links
print(classify("Wir brauchen eine Vermögensteuer, um den Sozialstaat nachhaltig zu finanzieren."))
#-0.8840736055794486
print(classify("Mietendeckel und mehr gemeinnütziger Wohnungsbau sollen Wohnen bezahlbar machen."))
#-0.9584728540548622
print(classify("Die Energiewende muss mit massiven öffentlichen Investitionen beschleunigt werden."))
#-0.8996415250285207


#Mitte
print(classify("Die soziale Marktwirtschaft braucht moderne Regeln und weniger Bürokratie."))
#0.2951027133966755
print(classify("Gezielte Entlastungen für kleine und mittlere Einkommen stärken die Mitte."))
#-0.5463382000342903
print(classify("Bildungsoffensive: Basiskompetenzen sichern, Weiterbildung im Beruf fördern."))
#0.16923175427437903

#Rechts
print(classify("Deutsche Leitkultur und Sprache stärker in öffentlichen Einrichtungen betonen."))
#0.9907646874287308
print(classify("Grenzschutz an EU-Außengrenzen verstärken, Sekundärmigration begrenzen."))
#0.7533596283240895
print(classify("Identitätspolitik an Schulen und Behörden zurückfahren, Fokus auf Leistungsprinzip."))
#0.9748775694774731
```