15  AI-powered content analysis

15.1 Folien

Folien als Vollbild | Folien als PDF

15.2 Code und Ausgaben aus der Vorlesung

R Skript herunterladen

Laden der relevanten Pakete

library(httr2) # Kommunikation mit Large Language Models via HTTP API
library(jsonlite) # Arbeit mit JSON-Daten
library(yardstick) # Evaluation von Klassifikatoren: Goldstandard
library(icr) # Evaluation von Klassifikatoren: Reliabilität
library(tidyverse) # Datenmanagement und Visualisierung: https://www.tidyverse.org/

Lesen des Untersuchungsmaterials

# Während der Vorlesung direkt aus SoSci; später durch rds ersetzen.
# remotes::install_github("joon-e/soscisurvey") # Nur für live demo
# library(soscisurvey) # Nur für live demo
# library(labelled) # Nur für live demo
# sosci_link <- readLines(here::here("data/sosci_link.txt"))
# d <- read_sosci(sosci_link) |>
#   modify(user_na_to_na) |>
#   mutate(true_class = as_factor(KS02)) |>
#   select(kommentar = KS01_01, true_class) |>
#   arrange(true_class)
# d |>
#   saveRDS(here::here("data/beispielkommentare.rds"))
d <- readRDS(here::here("data/beispielkommentare.rds"))
d |>
  knitr::kable()
kommentar true_class
This is (g)assss{EM_SMILING_FACE_WITH_HEARTEYES}{EM_SMILING_FACE_WITH_HEARTEYES} inzivil
bones are for dogs inzivil
Wie kann man so dumme Ansichten online verbreiten ? Absolute Frechheit wie heutzutage mit dem Wort Forschung umgegangen wird!! inzivil
Was für ein Schwachsinn! inzivil
Ich bin mir sicher, dass die Leute hier alle Tassen im Schrank haben! inzivil
Du bist toll, so wie du bist {EM_RED_HEART}️ inzivil
Du bist dumm inzivil
Linksveriffte Öko-Trulla inzivil
Das war schön inzivil
Clown inzivil
du bist sch***! inzivil
du bist hässlich inzivil
Merz leck Eier inzivil
HS inzivil
Du Hurensohn inzivil
Fuck inzivil
Merz, leck Eier inzivil
Das ist doch Schwachsinn inzivil
Du Fotze inzivil
Oiiiai oiiiai inzivil
Hure! inzivil
Ich finde heute siehst du komisch aus. inzivil
Die Weisheit verfolgt dich, aber du bist schneller! inzivil
Wtf,,, was denkt der wer er ist??? Hasse den so… hoffe er stirbt inzivil
Ganz schön hässlich inzivil
Fake news! inzivil
Ich weiß wo du wohnst inzivil
Ich hau dir auf die Schnauze inzivil
Mutig, wie viel Meinung man mit so wenig Ahnung haben kann. inzivil
Das ist dumm inzivil
Arschloch inzivil
Ja natürlich stimmt das /s inzivil
NA inzivil
Hoffe er wird gekirkt inzivil
Du bist dumm inzivil
Lügner! inzivil
Fotze inzivil
fette Sau inzivil
Bring dich um! inzivil
Ich finde du siehst einfach seltsam aus. inzivil
Interessant, wie überzeugt du davon bist. Ich wünschte, ich hätte auch so viel Selbstvertrauen bei so wenig Grundlage inzivil
I wish you get raped inzivil
Wie schön wieder in der Uni zu sein inzivil
Du F0tze inzivil
Das hast du ja richtig toll gemacht… inzivil
Dumme Nuss inzivil
Nutte inzivil
nuttig inzivil
Willste dich boxen? inzivil
kys inzivil
Wow, du bist soo mutig dich ungeschminkt zu posten inzivil
was ein Scheiß inzivil
Hässlich inzivil
Halt die Fresse inzivil
Ich stimme dir da gar nicht zu. Weiß nicht wie du drauf kommst aber bist ja auch nicht ganz richtig in der Birne inzivil
Männer sollten keine Rechte haben inzivil
Nazi-Schweine inzivil
AfDler abschieben inzivil
Dem stimme ich zu. nicht inzivil
Ich finde Titten geil nicht inzivil
bitch, das ist sooo crazyy nicht inzivil
Also das ist jetzt schon ein bisschen unfair. Sie hat auch noch andere Facetten, z.B. ist sie auch noch grob inkompetent :) nicht inzivil
Was für ein schönes Foto! nicht inzivil
Hab eine schöne Woche! nicht inzivil
Öffentlichkeit nicht inzivil
Ist das KI? nicht inzivil
Woww, geiler scheiß! nicht inzivil
Das ist falsch. nicht inzivil
Was ein Motherfucker nicht inzivil
Du bist sau cool nicht inzivil
Das Rezept mache ich auf jeden Fall nach!!! Danke für die Inspo! nicht inzivil
Danke und das so wichtig! nicht inzivil
Lars Klingbeil ist ein Klassenverräter nicht inzivil
Bayern gewinnt…Überraschung des Jahres. nicht inzivil
Ekelhaft nicht inzivil
Ich möchte Sommer nicht inzivil
Scheiße, das sieht gut aus! nicht inzivil
Ich sehe Sie als einen inkompetenten Politiker an nicht inzivil
fotzig nicht inzivil
Hab Bock auf Eierkuchen nicht inzivil
Du bist doof nicht inzivil
Scheiße wie cool nicht inzivil
love this! nicht inzivil
Du bist schlagfertig. nicht inzivil
Du Sau! nicht inzivil
fucking gute idee nicht inzivil
Ohh danke für die Hilfe! nicht inzivil
Ohne Worte, wo soll das noch hin führen? nicht inzivil
Ich finde, die CDU versagt auf ganzer Linie! Peinlich! nicht inzivil
NA nicht inzivil
Spannender Beitrag nicht inzivil
Boss Bitch nicht inzivil
Das fickt ordentlich was ihr da macht :) nicht inzivil
Welch ein blumiger Sonnenuntergang! nicht inzivil
Freue mich für dich :) nicht inzivil
das ist so unlustig und komisch nicht inzivil
krasser Scheiß nicht inzivil
Yasss slayyy queeennn nicht inzivil
richtig guter punkt nicht inzivil
Schön, dass ihr Spaß im Urli habt nicht inzivil
I don’t know, 6-7 nicht inzivil
Schöne Berge nicht inzivil

System prompt

system_prompt <- readLines(here::here("data/system_prompt_german.txt")) |>
  paste(collapse = "\n")
cat(system_prompt)
Du bist Forschungsassistent:in in einem kommunikationswissenschaftlichen Forschungsprojekt.

Deine Aufgabe ist es, Inzivilität in Social-Media-Kommentaren zu identifizieren. Dir wird ein Kommentar vorgelegt. Entscheide, ob der Kommentar inzivil oder nicht inzivil ist.

Wir definieren Inzivilität als die Verletzung kommunikativer Normen. Kommentare, die eines oder mehrere der folgenden Merkmale enthalten, werden in der Regel als inzivil betrachtet:

- Vulgäre, unangemessene Sprache, Fluchen
- Beleidigung, Profanität
- Entmenschlichung 
- Sarkasmus, Spott, Zynismus
- Negative Stereotype
- Diskriminierung
- Androhung von Gewalt
- Verweigerung von Rechten
- Vorwurf der Lüge
- Erniedrigung, fehlender Respekt, Abwertung

Du musst deine Antwort in gültigem JSON ausgeben. Das JSON muss exakt diesem Format entsprechen: {"obs_class": "inzivil"} oder {"obs_class": "nicht inzivil"}. Füge absolut keinen anderen Text hinzu.

Hier ist der Social-Media-Kommentar:

Request zum API endpoint definieren

denbi_key <- readLines(here::here("data/denbi_key.txt")) # Diesen Schlüssel niemals teilen
request_llm <- request(base_url = "https://denbi-llm-api.bihealth.org/v1/chat/completions") |>
  req_auth_bearer_token(denbi_key) |>
  req_retry(
    max_tries = 3,
    is_transient = \(resp) resp_status(resp) %in% c(429, 500, 502, 503)
  )
mdl <- "gpt-oss-120b"

Kommunikation mit LLM testen

request_llm |>
  req_body_json(list(
    model = mdl,
    messages = list(
      list(role = "system", content = "You talk like a pirate."),
      list(role = "user", content = "Tell me a joke.")
    ),
    temperature = 1,
    reasoning = list(effort = "medium"),
    max_completion_tokens = 5000
  )) |>
  req_perform() |>
  resp_body_string() |>
  prettify()
{
    "id": "0c6a27e7bb7a4c1c980ec6a0eac36a3c",
    "created": 1778484634,
    "model": "gpt-oss-120b",
    "object": "chat.completion",
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "message": {
                "content": "Arrr, ye be wantin’ a laugh, do ye? Here’s a salty one fer ye:\n\nWhy did the pirate become a great musician?  \n\n‘Cause he had perfect arrrrr‑rhythm and could always keep the sea‑saw! \n\nYo‑ho‑ho, hope that shivered yer funny bone, matey!",
                "role": "assistant",
                "reasoning_content": "We need to respond in pirate talk, as per developer instruction. The user wants a joke. So we should give a pirate-themed joke. Must talk like a pirate. Use \"Arrr\", \"matey\", etc. Ensure it's appropriate. Also we should not reveal that we are an LLM. Just respond with pirate style. Let's craft.",
                "provider_specific_fields": {
                    "refusal": null
                }
            },
            "provider_specific_fields": {
                "matched_stop": 200002
            }
        }
    ],
    "usage": {
        "completion_tokens": 150,
        "prompt_tokens": 85,
        "total_tokens": 235,
        "completion_tokens_details": {
            "reasoning_tokens": 1,
            "text_tokens": 149
        }
    },
    "metadata": {
        "weight_version": "default"
    }
}
 

Einen Kommentar codieren

request_llm |>
  req_body_json(list(
    model = mdl,
    messages = list(
      list(role = "system", content = system_prompt),
      list(role = "user", content = d$kommentar[1])
    ),
    temperature = 1,
    reasoning = list(effort = "medium"),
    max_completion_tokens = 5000
  )) |>
  req_perform() |>
  resp_body_string() |>
  prettify()
{
    "id": "8f630a03d18d4547b753b9d254d07c74",
    "created": 1778484635,
    "model": "gpt-oss-120b",
    "object": "chat.completion",
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "message": {
                "content": "{\"obs_class\": \"nicht inzivil\"}",
                "role": "assistant",
                "reasoning_content": "We need to classify the comment as incivil or not incivil. The comment: \"This is (g)assss{EM_SMILING_FACE_WITH_HEARTEYES}{EM_SMILING_FACE_WITH_HEARTEYES}\". It's basically \"This is (g)assss\" with smiley emojis. Could be interpreted as \"This is gassss\"? Could be \"gass\" maybe slang? Might be mild profanity? \"gassss\" could be \"ass\"? It wrote \"(g)assss\". Might be \"gassss\". Not clear. There's no clear insult, no hate, no threats, no profanity? The term \"ass\" is profanity but here it's \"gassss\"? Could be \"gas\"? The parentheses (g) might be removing a letter? Possibly trying to say \"ass\"? The comment looks ambiguous. It includes smiling emojis, suggests playful. No clear incivility. Likely not incivil.\n\nThus output JSON: {\"obs_class\": \"nicht inzivil\"}",
                "provider_specific_fields": {
                    "refusal": null
                }
            },
            "provider_specific_fields": {
                "matched_stop": 200002
            }
        }
    ],
    "usage": {
        "completion_tokens": 224,
        "prompt_tokens": 343,
        "total_tokens": 567,
        "completion_tokens_details": {
            "reasoning_tokens": 1,
            "text_tokens": 223
        }
    },
    "metadata": {
        "weight_version": "default"
    }
}
 

Liste aller Requests

req_list <- d$kommentar |>
  map(
    ~ {
      request_llm |>
        req_body_json(list(
          model = mdl,
          messages = list(
            list(role = "system", content = system_prompt),
            list(role = "user", content = .x)
          ),
          temperature = 1,
          reasoning = list(effort = "medium"),
          max_completion_tokens = 5000
        ))
    }
  )

Requests ausfuehren und Responses sammeln

resp_list <- req_list |>
  req_perform_parallel(
    on_error = "continue",
    max_active = 40,
    progress = FALSE
  )

Extraktion und Aufbereitung

# Helper function for bulletproof extraction
safe_extract <- function(resp, target = "content") {
  # Drop if the request failed (timeout, 500 error, etc.)
  if (is.null(resp) || inherits(resp, "error") || httr2::resp_is_error(resp)) {
    return(NA_character_)
  }

  # Try to extract the body
  body <- try(httr2::resp_body_json(resp), silent = TRUE)
  if (inherits(body, "try-error") || is.null(body$choices)) {
    return(NA_character_)
  }

  # Extract specific target
  res <- if (target == "content") {
    body$choices[[1]]$message$content
  } else {
    body$choices[[1]]$message$reasoning_content
  }

  if (is.null(res)) {
    return(NA_character_)
  }
  return(res)
}

# Process everything row-by-row in the dataframe
d_classified <- d |>
  mutate(
    # 1. Safely extract raw text
    raw_json = purrr::map_chr(resp_list, ~ safe_extract(.x, "content")),
    raw_reasoning = purrr::map_chr(resp_list, ~ safe_extract(.x, "reason")),

    # 2. Check JSON validity
    is_valid_json = purrr::map_lgl(raw_json, ~ !is.na(.x) && jsonlite::validate(.x)),

    # 3. Safely parse JSON and pluck classification
    parsed_class = purrr::map2_chr(raw_json, is_valid_json, ~ {
      if (!.y) {
        return(NA_character_)
      }
      parsed <- try(jsonlite::fromJSON(.x) |> purrr::pluck(1), silent = TRUE)
      if (inherits(parsed, "try-error") || is.null(parsed)) {
        return(NA_character_)
      }
      as.character(parsed)
    }),

    # 4. Check if classification matches true classes
    is_valid_class = parsed_class %in% levels(true_class)
  ) |>
  # 5. Silently drop any row that failed the checks
  filter(is_valid_json, is_valid_class) |>
  # 6. Final cleanup
  mutate(
    obs_class = factor(parsed_class, levels = c("inzivil", "nicht inzivil")),
    reasons = stringr::str_replace_all(raw_reasoning, "\n", " ")
  ) |>
  # Remove temporary columns used for checking
  select(-raw_json, -raw_reasoning, -is_valid_json, -is_valid_class, -parsed_class)

# Ausgeben
d_classified |>
  knitr::kable()
kommentar true_class obs_class reasons
This is (g)assss{EM_SMILING_FACE_WITH_HEARTEYES}{EM_SMILING_FACE_WITH_HEARTEYES} inzivil nicht inzivil The user wants to classify the comment as incivil or not incivil. The comment: “This is (g)assss{EM_SMILING_FACE_WITH_HEARTEYES}{EM_SMILING_FACE_WITH_HEARTEYES}”. It’s ambiguous. “(g)assss” might be a slur? Could be “gas”? Or “(g)assss” maybe “ass”? Hard to know. Possibly “gass” not clear. The emojis are smiley hearts. No obvious vulgar language? “(g)assss” could be “gassss”? Not a clear profanity. Could be “gass”? Not sure. Likely not incivil. So output {“obs_class”:“nicht inzivil”}. Need exact JSON, no extra text.
bones are for dogs inzivil nicht inzivil We need to decide if comment “bones are for? dogs” (typo maybe) is incivil? The comment says “bones are for dogs”. This is a statement, not vulgar, not insulting, no profanity, no discrimination. It’s a neutral statement. So non-incivil. Return JSON with “nicht inzivil”.
Wie kann man so dumme Ansichten online verbreiten ? Absolute Frechheit wie heutzutage mit dem Wort Forschung umgegangen wird!! inzivil inzivil We need to classify. The comment: “Wie kann man so dumme Ansichten online verbreiten ? Absolute Frechheit wie heutzutage mit dem Wort Forschung umgegangen wird!!” It calls views “dumme” (stupid) and “Absolute Frechheit”. That’s an insult but not targeting a protected group. It’s a negative evaluation, possibly uncivil? According to guidelines, “Beleidigung, Profanität” qualifies as incivility. “Dumme Ansichten” is an insult towards ideas, not a person directly, but could be considered disrespectful. It’s not a protected group, but still a negative evaluation. Usually “Beleidigung” of someone’s views may be considered uncivil. I’d lean to “inzivil”. So output {“obs_class”:“inzivil”}. Check JSON format exactly with quotes and no extra spaces? The format: {“obs_class”: “inzivil”} or {“obs_class”: “nicht inzivil”} The example includes space after colon, but they said exact format, but they gave two possible forms with space after colon. We’ll match that: {“obs_class”: “inzivil”}
Was für ein Schwachsinn! inzivil inzivil We need to classify the comment “Was für ein Schwachsinn!” This is German meaning “What nonsense!” It’s an insult? It’s calling something “Schwachsinn” (nonsense, idiocy). It’s a negative evaluation, possibly a mild insult but not necessarily violating communicative norms? The guidelines: Inzivilität includes “Beleidigung, Profanität”. “Schwachsinn” is an insult, calling something nonsense. It could be considered a mild insult. Likely considered incivil? It’s an insulting term but not profanity or threat. However “Schwachsinn” is a derogatory term. According to criteria, “Beleidigung” qualifies as incivil. So we should label as “inzivil”. Output JSON: {“obs_class”: “inzivil”}
Ich bin mir sicher, dass die Leute hier alle Tassen im Schrank haben! inzivil inzivil We need to classify the comment. The comment: “Ich bin mir sicher, dass die Leute hier alle Tassen im Schrank haben!” This is a German idiom meaning “I am sure that the people here all have cups in the cupboard” - maybe meaning they are crazy? “Tassen im Schrank haben” is a colloquial expression meaning “to be a bit crazy”. It’s a derogatory statement implying that all people here are crazy. This is a negative stereotype / insult. It’s demeaning, suggesting that everyone is insane. That’s a form of insult, demeaning, possibly dehumanizing? It’s insulting, negative stereotype. According to criteria, this is incivil. So output {“obs_class”:“inzivil”}
Du bist toll, so wie du bist {EM_RED_HEART}️ inzivil nicht inzivil We need to decide if the comment is incivil or not. The comment: “Du bist toll, so wie du bist {EM_RED_HEART}️”. That’s praising, includes heart emoji. No incivility. So output {“obs_class”: “nicht inzivil”}. Make sure JSON exactly.
Du bist dumm inzivil inzivil The task: Determine if the comment is “inzivil” or “nicht inzivil” based on defined criteria. The comment: “Du bist dumm”. That’s an insult, disrespect, demeaning. It’s a personal insult. That qualifies as incivility. So output JSON {“obs_class”: “inzivil”}. Make sure exactly correct JSON string, no extra whitespace? Should be fine.
Linksveriffte Öko-Trulla inzivil inzivil We need to decide if the comment is incivil. The comment: “Linksveriffte Öko-Trulla”. It’s German. It’s calling someone “linksveriffte Öko-Trulla”. So “linksveriffte” = left-wing? “Öko-Trulla” is a derogatory term: “Trulla” is a slang for a stupid girl, derogatory, combined with “Öko” (eco). It’s an insult, disrespect, demeaning. So it contains insult, demeaning language. That qualifies as incivil. So output {“obs_class”: “inzivil”}. Make sure exact JSON.
Das war schön inzivil nicht inzivil The user asks: “Du bist Forschungsassistent… Deine Aufgabe… decide if the comment is civil or not.” Provided comment: “Das war schön”. This is a simple positive statement, no incivility. So output JSON with “nicht inzivil”. Must output exactly JSON with no extra text.
Clown inzivil inzivil We need to classify the comment “Clown”. Is it uncivil? It’s a single word, possibly an insult calling someone a clown. That could be considered an insult, disrespect, demeaning. According to definitions, “Beleidigung” is incivility. So likely incivil. So output {“obs_class”:“inzivil”}. Check JSON format: exactly {“obs_class”: “inzivil”} with space after colon? The spec: {“obs_class”: “inzivil”} or {“obs_class”: “nicht inzivil”}. We must match exactly. Include space after colon. So output that.
du bist sch***! inzivil inzivil We need to classify the comment. The comment is “du bist sch!” which is German, ”you are sh!” likely a profanity, an insult. That’s vulgar, insulting. So it’s incivil. Output JSON: {“obs_class”: “inzivil”}
du bist hässlich inzivil inzivil We need to classify. The comment “du bist hässlich” is an insult, vulgar? It’s a personal insult, disrespect. That qualifies as incivility. So output {“obs_class”: “inzivil”}
Merz leck Eier inzivil inzivil We need to decide if comment is “inzivil” or “nicht inzivil”. The comment: “Merz leck Eier”. This is German. “Merz” presumably a name (FDP leader). “leck Eier” is vulgar phrase meaning “lick eggs”. Could be considered vulgar, insulting. It’s vulgar language, might be considered insulting. It’s likely “inzivil”. So output JSON accordingly. We must output exactly {“obs_class”: “inzivil”}.
HS inzivil nicht inzivil The user provides a single comment “HS”. We need to classify as incivil or not incivil. “HS” probably stands for “hass”? Could be abbreviation for “Hate Speech”? Or just “HS”? Hard to interpret. It’s ambiguous: “HS” alone cannot be determined as incivil. It’s not vulgar, no insult, no context. It’s just two letters, maybe initialism. No violation. So classification: not incivil. We must output JSON exactly: {“obs_class”: “nicht inzivil”}. Check formatting: no extra whitespace? It says JSON must exactly match format. Provide exactly that.
Du Hurensohn inzivil inzivil The user asks to classify a comment as “inzivil” or “nicht inzivil”. The comment is “Du Hurensohn”. That’s an insult, vulgar, profane. So it’s incivil. Must output JSON exactly {“obs_class”: “inzivil”} no extra text.
Fuck inzivil inzivil We need to classify the comment “Fuck”. That’s vulgar profanity. That is incivility. So output JSON: {“obs_class”: “inzivil”}
Merz, leck Eier inzivil inzivil We need to classify comment “Merz, leck Eier”. This is German. “Merz” presumably a person. “leck Eier” literally “lick eggs”. Is that vulgar? In German, “leck Eier” could be a vulgar phrase maybe meaning “suck eggs”? Might be an insult? It’s somewhat crude but does it contain profanity? “leck Eier” is not a standard profanity but could be considered vulgar. It’s a form of insulting, perhaps disrespectful. It’s likely considered incivil. So output JSON with “inzivil”.
Das ist doch Schwachsinn inzivil inzivil We need to classify if comment is incivil. Comment: “Das ist doch Schwachsinn”. That’s an insult calling something “Schwachsinn” (nonsense). It’s a derogatory term, could be considered disrespectful. Is that considered incivil? It’s an insulting statement calling something nonsense, maybe mild. The list includes “Beleidigung, Profanität”. “Schwachsinn” is a derogatory term, could be considered insulting. So likely incivil. So output JSON {“obs_class”:“inzivil”}. Check formatting: no extra spaces. Must be exactly {“obs_class”: “inzivil”}? The spec: exactly {“obs_class”: “inzivil”} or {“obs_class”: “nicht inzivil”}. They include a space after colon. We’ll follow that format. Thus answer.
Du Fotze inzivil inzivil We need to classify as “inzivil” if contains vulgar language etc. “Du Fotze” is an insult, vulgar. So “inzivil”. Output JSON exactly.
Oiiiai oiiiai inzivil nicht inzivil The user asks: “Oiiiai oiiiai”. This is just a greeting? No incivility. So answer {“obs_class”:“nicht inzivil”}. Need to output exactly JSON with no extra text.
Hure! inzivil inzivil The user asks to classify comment as “inzivil” or “nicht inzivil”. The comment “Hure!” is a vulgar insult (German for “whore!”). This violates communicative norms: insult, profanity. So it’s incivil. Must output JSON exactly: {“obs_class”: “inzivil”} with no extra text.
Ich finde heute siehst du komisch aus. inzivil inzivil We need to classify comment: “Ich finde heute siehst du komisch aus.” German: “I think today you look weird.” This is a mild insult perhaps? It says “you look weird”. Is that considered incivility? The definitions: insults, demeaning, lack of respect, devaluation. Saying someone looks weird could be considered a mild insult, but does it violate norms? It’s a personal criticism, somewhat negative, but not vulgar, no profanity, no threats, no discrimination. It could be considered rude but maybe not incivil per the guidelines. The categories: “Beleidigung, Profanität” includes insults. This is an insult. So likely considered incivil. I’d choose “inzivil”.
Die Weisheit verfolgt dich, aber du bist schneller! inzivil nicht inzivil We have to decide if the comment is incivil. The comment: “Die Weisheit verfolgt dich, aber du bist schneller!” German: “Wisdom follows you, but you are faster!” This is not insulting, not vulgar, no hate. It’s possibly playful but not incivil. So classification: “nicht inzivil”. Output JSON exactly: {“obs_class”: “nicht inzivil”}
Wtf,,, was denkt der wer er ist??? Hasse den so… hoffe er stirbt inzivil inzivil We need to decide if comment is incivil. Text: “Wtf,,, was denkt der wer er ist??? Hasse den so… hoffe er stirbt”. Contains vulgar “Wtf”, hate, wishes death => threatening violence? “hoffe er stirbt” is a wish for death, akin to threat or harassment, incivil. So label “inzivil”. Output JSON.
Ganz schön hässlich inzivil inzivil We need to classify. The comment “Ganz schön hässlich” (German: “Pretty ugly”) It’s an insult? It’s a negative evaluation, calling something “ugly”. Is that incivil? According to definitions, “Beleidigung, Profanität” is incivil. It’s an insult, demeaning. It’s a short negative comment. It could be considered insulting, so incivil. Likely they want “inzivil”. So output JSON.
Fake news! inzivil inzivil We need to decide if the comment “Fake news!” is uncivil according to criteria. It’s a short statement calling something fake news—could be considered accusation of lying, possibly “Vorwurf der Lüge” (accusation of lying). Is that considered incivility? The definition includes “Vorwurf der Lüge” as incivility. So calling something fake news accuses falsehood. It could be considered a claim that the other is lying, which is a “Vorwurf der Lüge”. That’s listed as incivility. So likely classify as “inzivil”. It’s short but the criterion says “Vorwurf der Lüge” is incivil. So output JSON with “obs_class”:“inzivil”.
Ich weiß wo du wohnst inzivil inzivil We need to decide if comment is uncivil. “Ich weiß wo du wohnst” means “I know where you live.” This can be a threat, implying potential harm or intimidation. It’s a form of threat of violence or intimidation, likely considered incivil. So label as “inzivil”. Return JSON.
Ich hau dir auf die Schnauze inzivil inzivil We need to classify. The comment: “Ich hau dir …”. Threat of violence. That’s incivility. So output JSON: {“obs_class”: “inzivil”}
Mutig, wie viel Meinung man mit so wenig Ahnung haben kann. inzivil inzivil We need to decide if comment is uncivil. The comment in German: “Mutig, wie viel Meinung man mit so wenig Ahnung haben kann.” Means “Brave, how much opinion one can have with so little knowledge.” It’s a sarcastic, somewhat mocking statement, possibly insulting the person for having opinions without knowledge. Contains sarcasm, possibly a mild insult. According to criteria, sarcasm/spott, insult, demeaning. That qualifies as incivility. So output {“obs_class”: “inzivil”}. Check JSON exact format.
Das ist dumm inzivil inzivil We need decide if “Das ist dumm” is incivil. It’s just stating “that’s dumb”. Potentially insulting? It’s a mild insult but not necessarily incivil? According to defined criteria, “Beleidigung, Profanität” is incivil. “dumm” is an insult, but mild. Likely considered incivil as it is a derogatory statement. The comment is short and insulting. I’d say incivil. So output JSON.
Arschloch inzivil inzivil We need to determine if the comment “Arschloch” is incivil. It’s a vulgar insult, an insult, profanity. So it’s incivil. Need to output JSON exactly {“obs_class”: “inzivil”}. Ensure no extra text.
Ja natürlich stimmt das /s inzivil inzivil The task: Determine if the comment is incivil or not incivil. The comment is “Ja natürlich stimmt das /s”. The “/s” indicates sarcasm (the “/s” denotes sarcasm online). The comment: “Ja natürlich stimmt das /s” translates to “Yes, of course that’s true /s”. This is sarcasm, which is listed as incivility: “Sarkasmus, Spott, Zynismus”. So it contains sarcasm, thus incivil. No other elements. According to definition, sarcasm counts as incivil. So output JSON {“obs_class”: “inzivil”}. Make sure exactly that JSON, no extra whitespace? It should be fine.
Hoffe er wird gekirkt inzivil inzivil We need to decide if comment is incivil. The comment is “Hoffe er wird gekirkt” (German). Translation: “Hope he gets kirched”. Possibly an expression “gekirkt” meaning “baptized” (?) Actually “gekirkt” could be “got churched” maybe? In German, “kirken” is not a common verb; “gekirkt” might be akin to “to be killed” but I’m not sure. Could be a typo for “gekickt”? Might be “gekirkt” meaning “killed by a church”? It sounds like a threat? “Hoffe er wird gekirkt” might be “Hope he gets crucified”? Not sure. It might be a threat of violence. Could be considered incivil if it’s a threat: “Hope he gets killed” is a threat. “gekirkt” might be a violent term. In German, “kirchen” means to “church”? Actually “to be kirched”? I think “gekirkt” could be a slang meaning “to be smacked” or “to get a church (Kirche)”. I’m not certain. However, “Hoffe er wird gekirkt” seems like “I hope he gets…”. Could be a threat. If it’s a threat of violence, it’s incivil. According to definitions, “Androhung von Gewalt” is incivil. So label as “inzivil”.
Du bist dumm inzivil inzivil The task: Determine if the comment is “inzivil” or “nicht inzivil” based on defined criteria. The comment: “Du bist dumm”. That’s an insult, disrespect, demeaning. It’s a personal insult. That qualifies as incivility. So output JSON {“obs_class”: “inzivil”}. Make sure exactly correct JSON string, no extra whitespace? Should be fine.
Lügner! inzivil inzivil We need to classify the comment: “Lügner!” which translates to “Liar!” It’s an accusation of lying, which falls under “Vorwurf der Lüge” which is listed as a marker of incivility. Therefore it’s incivil. Output JSON {“obs_class”:“inzivil”}. Need exact JSON, no extra text.
Fotze inzivil inzivil The user gave a German comment: “Fotze”. That’s a vulgar insult, a slur for a woman. It’s definitely incivil. Need to output JSON {“obs_class”: “inzivil”} exactly. No extra text.
fette Sau inzivil inzivil We need to decide if the comment “fette Sau” is uncivil? It’s an insult, vulgar, demeaning. So “inzivil”. Output JSON accordingly.
Bring dich um! inzivil inzivil The user asks to classify the given comment: “Bring dich um!” which is German for “Kill yourself!” It’s a direct incitement to self-harm, a threat of violence. That is definitely incivil. So output JSON: {“obs_class”:“inzivil”}. Need to ensure exactly that format, no extra.
Ich finde du siehst einfach seltsam aus. inzivil inzivil We need to decide if the comment is civil or not. The comment: “Ich finde du siehst einfach seltsam aus.” Means “I think you simply look strange.” It’s a personal insult? It’s calling someone “seltsam” (weird) looking. It’s an insult, possibly demeaning. According to criteria: “Beleidigung, Profanität” - it’s a mild insult. So likely considered incivil. The comment is a personal attack, demeaning. So label as “inzivil”. Provide JSON exactly.
Interessant, wie überzeugt du davon bist. Ich wünschte, ich hätte auch so viel Selbstvertrauen bei so wenig Grundlage inzivil inzivil We need to classify as incivil or not. The comment: “Interessant, wie überzeugt du davon bist. Ich wünschte, ich hätte auch so viel Selbstvertrauen bei so wenig Grundlage”. This seems not insulting, maybe sarcasm? It’s somewhat sarcastic: “Interessant, how convinced you are. I wish I had as much confidence with so little basis.” Could be mild sarcasm but not necessarily violating norms. Does it contain insult? It’s maybe mocking but not directly insulting. It’s a slight mocking tone but not necessarily incivil. In the definition, sarcasm/spott can be incivil if it’s at someone. The comment has sarcasm: “Interessant, wie überzeugt du davon bist.” Might be considered sarcastic, but still mild. The definition includes sarcasm, spott as incivil. So likely incivil. I’d go with incivil.
I wish you get raped inzivil inzivil We need to classify. The comment: “I wish you get raped”. That’s a threat of sexual violence, a severe incivility. So label as “inzivil”. Output JSON exactly.
Wie schön wieder in der Uni zu sein inzivil nicht inzivil We need to decide if the comment “Wie schön wieder in der Uni zu sein” is incivil or not. It’s a positive statement, no incivility. So output JSON {“obs_class”: “nicht inzivil”}. Make sure exact format, no extra whitespace? Need exactly {“obs_class”: “nicht inzivil”}.
Du F0tze inzivil inzivil We need to determine if comment “Du F0tze”. This looks like an insult: “F0tze” likely a variation of “Fotze”, a vulgar slur (female genitalia used as an insult). It’s vulgar, insulting, profanity. Therefore it is incivil. So output JSON {“obs_class”: “inzivil”}
Das hast du ja richtig toll gemacht… inzivil nicht inzivil We need to decide if the comment “Das hast du ja richtig toll gemacht…” is incivil? It’s German, meaning “You really did that well…”, could be sarcastic? It could be sincere praising. There’s ellipsis. Could be sarcasm? Hard to know. Without context, it’s ambiguous. Usually “richtig toll gemacht” could be genuine or sarcastic. The phrase “richtig toll gemacht” is praising. No vulgarity, no insult. If sarcasm, could be mock praise, but doesn’t contain obvious incivility. Probably classify as “nicht inzivil”.
Dumme Nuss inzivil inzivil We need to determine if the comment “Dumme Nuss” is incivil. It’s an insult (“Dumme Nuss” means “stupid nut”, calling someone stupid). That is a form of disrespect, possibly incivil. According to criteria: “Beleidigung, Profanität” qualifies. So it’s incivil. So output {“obs_class”:“inzivil”}. Make sure JSON exactly.
Nutte inzivil inzivil We need to classify. Message is “Nutte”. That’s a vulgar insult, demeaning, dehumanizing. So it’s incivil. Output {“obs_class”: “inzivil”} as JSON only.
nuttig inzivil inzivil We need to classify comment “nuttig”. It’s a German word? “nuttig” maybe a typo of “nutzig”? Could be slang for “Nutte” meaning prostitute, used as insult? “Nuttig” maybe meaning “useful”? Actually “nuttig” not standard; could be considered insult? Hard to tell. It’s a single word. Could be considered vulgar? Does it contain profanity? It might be derived from “Nutte” which is derogatory term for prostitute, used as insult. That could be considered insulting. So likely considered “inzivil”. It’s an insult/derogatory term. So output {“obs_class”: “inzivil”}. Check format.
Willste dich boxen? inzivil inzivil We need to decide if “Willste dich boxen?” is incivil? It’s German: “Willst du dich boxen?” maybe meaning “Do you want to fight?” It’s a threat of violence, i.e., “Willste dich boxen?” translates to “Do you want to get boxed?” This is a threat or suggestion of violence. That counts as incivil (Androhung von Gewalt). So label “inzivil”. Provide JSON.
kys inzivil inzivil We need to classify comment: “kys”. That’s abbreviation for “kill yourself”, which is a threat/self-harm suggestion. It’s a form of incivility, encouraging self-harm. That is incivil. Return JSON {“obs_class”:“inzivil”}. Check format: no extra spaces maybe okay. Must be exactly {“obs_class”: “inzivil”} or {“obs_class”: “nicht inzivil”} . Note spacing. In spec: JSON must exactly match format: {“obs_class”: “inzivil”} or {“obs_class”: “nicht inzivil”}. Include space after colon. I’ll output {“obs_class”: “inzivil”}.
Wow, du bist soo mutig dich ungeschminkt zu posten inzivil inzivil We need to decide if the comment is civil or not. The comment: “Wow, du bist soo mutig dich ungeschminkt zu posten”. In German: “Wow, you’re so brave to post yourself unmakeup”. That seems like a sarcastic comment? Possibly it’s a sarcastic critique, implying the person is not actually brave but maybe mocking them for being unmakeup? It could be a mild sarcasm, maybe implying criticism, but is it a violation? It’s a slight mocking tone. It is not overtly vulgar, not insulting directly, but it’s somewhat sarcastic. The list includes “Sarkasmus, Spott, Zynismus”. So sarcasm qualifies as incivility. So this is incivil. So output {“obs_class”: “inzivil”}
was ein Scheiß inzivil inzivil We need decide if comment “was ein Scheiß” is incivil. It’s German: “was ein Scheiß” meaning “what a shit”. Contains vulgar profanity: “Scheiß” is a vulgar word (shit). According to definition, vulgar language qualifies as incivil. So label “inzivil”. Return JSON.
Hässlich inzivil inzivil We need determine if comment “Hässlich” is uncivil. It is an insult (calling something ugly). It’s a negative judgment, possibly degrade. In German “Hässlich” alone is a negative description, could be considered insulting, thus incivil. According to criteria: “Beleidigung, Profanität” => yes. So label “inzivil”. Output JSON exactly: {“obs_class”: “inzivil”}
Ich stimme dir da gar nicht zu. Weiß nicht wie du drauf kommst aber bist ja auch nicht ganz richtig in der Birne inzivil inzivil We need to classify the comment. The comment: “Ich stimme dir da gar nicht zu. Weiß nicht wie du drauf kommst aber bist ja auch nicht ganz richtig in der Birne” in German. It says: “I don’t agree at all. I don’t know how you come to that but you’re not quite right in the head.” This is an insult, calling someone not right in the head (i.e., mental). That is a form of insult, possibly “Beleidigung” / “Entmenschlichung”. So it’s uncivil. So output {“obs_class”: “inzivil”}. Make sure correct JSON.
Männer sollten keine Rechte haben inzivil inzivil We need to decide if the comment is incivil. The comment: “Männer sollten keine Rechte haben” (Men should have no rights). This is discriminatory, advocating removal of rights for a group based on gender, which is a negative statement, possibly incivil. It includes discrimination and denial of rights, so incivil. Output JSON: {“obs_class”:“inzivil”}
Nazi-Schweine inzivil inzivil We must classify. The comment: “Nazi-Schweine”. That’s an insult, dehumanizing, vulgar? It’s a demeaning term “Nazi pigs”. This is an insult and possibly dehumanization. That is considered incivil. So output JSON: {“obs_class”: “inzivil”}
AfDler abschieben inzivil inzivil We need to decide if the comment is incivil. The comment: “AfDler abschieben”. This is German. “AfDler” refers to members/supporters of the AfD (Alternative für Deutschland). “abschieben” means “deport”. So “deport AfD members”. This is a call for expulsion/deportation, which could be seen as an incitement to violent action against a group. That is a threat of violence / dehumanizing or threatening a group. According to the list, “Androhung von Gewalt” is incivil. So the comment is incivil. Thus output {“obs_class”: “inzivil”}
Dem stimme ich zu. nicht inzivil nicht inzivil We must classify the comment “Dem stimme ich zu.” (German for “I agree with that.”) Is it uncivil? No, it’s a polite agreement. So output {“obs_class”: “nicht inzivil”}. Make sure JSON format exactly, no extra text.
Ich finde Titten geil nicht inzivil inzivil We need to classify. Comment in German: “Ich finde Titten geil”. Means “I find tits awesome/awesome”. Contains vulgar language perhaps: “Titten” is slang for breasts, a vulgar term. It’s sexual content, but not necessarily an insult, threat, etc. Is it considered incivility? According to definition, Vulgäre, unangemessene Sprache, Fluchen counts as incivility. “Titten” is vulgar slang but not a profanity? It’s somewhat vulgar. Likely considered vulgar language. So classify as “inzivil”.
bitch, das ist sooo crazyy nicht inzivil inzivil We need to determine if comment is incivil. The comment: “bitch, das ist sooo crazyy”. Contains “bitch” which is a vulgar insult, demeaning. So it’s incivil. Return JSON {“obs_class”: “inzivil”}.
Also das ist jetzt schon ein bisschen unfair. Sie hat auch noch andere Facetten, z.B. ist sie auch noch grob inkompetent :) nicht inzivil inzivil We need decide if comment is uncivil. The comment: “Also das ist jetzt schon ein bisschen unfair. Sie hat auch noch andere Facetten, z.B. ist sie auch noch grob inkompetent :)” Contains “grob inkompetent” i.e., calling someone incompetent, maybe mild insult but not vulgar. It’s negative evaluation but not necessarily violating norms? It’s a critique, possibly disrespectful but not incivil? Incivil includes “Beleidigung, Profanität”. This is calling incompetent—a mild insult, could be considered disrespectful. However typically classification might treat as “nicht inzivil” if not profanity, threat, discrimination. It’s just a personal criticism. Might be considered incivil as “Erniedrigung, fehlender Respekt, Abwertung”. Yes, calling someone incompetent could be considered disrespect/abwertung. I’d lean “inzivil”. The definition: “Erniedrigung, fehlender Respekt, Abwertung” is a criterion. So this comment includes “grob inkompetent”. That’s a negative evaluation, possibly contempt. So mark as incivil. Provide JSON.
Was für ein schönes Foto! nicht inzivil nicht inzivil We need to decide if comment is incivil. The comment: “Was für ein schönes Foto!” – positive, no incivil language. So output {“obs_class”: “nicht inzivil”}. We must output exactly that JSON, no extra.
Hab eine schöne Woche! nicht inzivil nicht inzivil The user asks to classify comment as incivil or not incivil. The comment: “Hab eine schöne Woche!” (German: “Have a nice week!”). This is polite, no incivility. So output {“obs_class”:“nicht inzivil”} exactly JSON no extra text.
Öffentlichkeit nicht inzivil nicht inzivil The user gave a German instruction: they want a JSON output with either “inzivil” or “nicht inzivil”. The comment is “Öffentlichkeit”. That’s just a single word meaning “public”. No incivility. So output non-uncivil. Thus JSON: {“obs_class”: “nicht inzivil”}
Ist das KI? nicht inzivil nicht inzivil We need to classify whether the comment is incivil or not incivil. The comment: “Ist das KI?” which in German means “Is that AI?” It’s just a question, no incivility. So output {“obs_class”: “nicht inzivil”}. Make sure no extra text.
Woww, geiler scheiß! nicht inzivil inzivil We need to classify. The comment: “Woww, geiler scheiß!” That’s German. Translating: “Wow, great shit!” The phrase “geiler scheiß” uses vulgar language: “Scheiß” is vulgar (shit). It could be considered profanity/vulgar language. It’s an exclamation, not insulting someone directly, but contains profanity. According to definition: Vulgäre, unangemessene Sprache, Fluchen. So it’s considered incivil. So output {“obs_class”:“inzivil”}
Das ist falsch. nicht inzivil nicht inzivil We must determine if comment is incivil. The comment: “Das ist falsch.” Means “That’s wrong.” It’s a simple statement, no profanity, no insult. It’s not incivil. So answer JSON: {“obs_class”: “nicht inzivil”}
Was ein Motherfucker nicht inzivil inzivil We need to classify if the comment is “inzivil” or “nicht inzivil”. The comment: “Was ein Motherfucker”. This includes a profanity “Motherfucker”. That is vulgar language, profanity. So it is incivil. Output JSON: {“obs_class”: “inzivil”}
Du bist sau cool nicht inzivil nicht inzivil We need to decide if the comment “Du bist sau cool” is uncivil? It’s German: “Du bist sau cool” means “you’re super cool”, using “sau” as intensifier. It’s not vulgar, it’s friendly. Not incivil. So output {“obs_class”: “nicht inzivil”}
Das Rezept mache ich auf jeden Fall nach!!! Danke für die Inspo! nicht inzivil nicht inzivil We need to classify the comment. Comment: “Das Rezept mache ich auf jeden Fall nach!!! Danke für die Inspo!” It’s positive, no incivility. So classification: “nicht inzivil”. Return JSON.
Danke und das so wichtig! nicht inzivil nicht inzivil We need to classify whether the comment is incivil. The comment: “Danke und das so wichtig!” In German, that translates to “Thanks and that so important!” It’s ambiguous but seems not incivil. No vulgarity, no insult. So classification “nicht inzivil”. Output JSON exactly.
Lars Klingbeil ist ein Klassenverräter nicht inzivil inzivil The user asks to classify the comment: “Lars Klingbeil ist ein Klassenverräter”. This is German for “Lars Klingbeil is a class betrayer”. Is that considered incivil? It’s an accusation, calling someone a “class traitor”. It’s a negative statement, possibly a insult, but not necessarily a vulgar profanity, but it’s a derogatory term. According to the definition, insults, demeaning, “Erniedrigung, fehlender Respekt, Abwertung” qualifies as incivil. So classification: incivil. Thus output JSON: {“obs_class”: “inzivil”}
Bayern gewinnt…Überraschung des Jahres. nicht inzivil nicht inzivil We need to classify whether the comment is incivil or not incivil. The comment is: “Bayern gewinnt…Überraschung des Jahres.” Means “Bayern wins… Surprise of the year.” This is a neutral statement, maybe sarcastic? Could be sarcasm? The comment says Bayern wins, surprise. Could be sarcasm, but not insulting. It’s possibly a mild sarcasm but not targeting anyone. It’s not profanity, not discrimination. So it’s not incivil. Output JSON: {“obs_class”: “nicht inzivil”}
Ekelhaft nicht inzivil nicht inzivil We need to decide if the comment “Ekelhaft” (German: “Disgusting”) is incivil? It’s a single word, an adjective describing something as disgusting. This could be considered a negative evaluation, maybe mild profanity? “Ekelhaft” is not profanity or a slur, it’s just a negative adjective. Does it violate communicative norms? Probably not necessarily incivil; it’s a negative evaluation but not insulting a person directly. No vulgar language, no profanity, no slur. It’s just an exclamation that something is disgusting. Might be considered rude but not incivil per defined categories. So label as “nicht inzivil”. Thus output JSON.
Ich möchte Sommer nicht inzivil nicht inzivil We need to determine if the comment “Ich möchte Sommer” is incivil. It’s a neutral statement: “I want summer”. No incivility. So output {“obs_class”: “nicht inzivil”}. Make sure exact JSON, no extra text.
Scheiße, das sieht gut aus! nicht inzivil inzivil We need to output JSON with obs_class either “inzivil” or “nicht inzivil”. Determine if comment “Scheiße, das sieht gut aus!” is incivil. It contains vulgar word “Scheiße” (German profanity). According to definition, vulgar language => incivil. So classify as “inzivil”. Output JSON exactly.
Ich sehe Sie als einen inkompetenten Politiker an nicht inzivil inzivil We need to decide if comment is incivil or not. It says “Ich sehe Sie als einen inkompetenten Politiker an” - calling someone incompetent. This is a negative evaluation, possibly disrespectful, but is it incivil? According to definitions: “Beleidigung, Profanität” - calling incompetent might be an insult. It’s a mild insult, but qualifies as disrespect/abwertung. Likely considered incivil. So output {“obs_class”: “inzivil”}
fotzig nicht inzivil inzivil The user gave a comment: “fotzig”. We need to decide if it’s incivil. “fotzig” is a German slang possibly meaning “fucking”? Actually “fotzig” could be a typo of “fotzig” meaning “f***ing”? In German, “fotzig” is a mild profanity meaning “fucking”. It’s vulgar? Could be considered a profanity. The definition: Vulgäre, unangemessene Sprache, Fluchen. So “fotzig” is a curse word (Swabsche). So that is incivil. So output JSON {“obs_class”:“inzivil”}. Make sure JSON exactly.
Hab Bock auf Eierkuchen nicht inzivil nicht inzivil We need to classify the comment: “Hab Bock auf Eierkuchen” (German: I’m in the mood for pancakes). It’s a neutral statement, no incivility. So output {“obs_class”: “nicht inzivil”}. Make sure JSON exactly formatted, no extra spaces? It can have spaces but must be valid. Provide only JSON.
Du bist doof nicht inzivil inzivil We need to classify as incivil or not. Comment: “Du bist doof”. That’s an insult, vulgar? It’s a mild insult. According to criteria, “Beleidigung, Profanität” qualifies as incivil. So output {“obs_class”: “inzivil”}. Must be exact JSON no other text.
Scheiße wie cool nicht inzivil inzivil The user wants a JSON with classification. The comment: “Scheiße wie cool”. That’s German: “Scheiße wie cool”. Contains vulgar word “Scheiße” (shit). That’s vulgar profanity. So it’s incivil. According to definition, vulgar language qualifies. So output {“obs_class”: “inzivil”}. Make sure exact JSON with no extra text.
love this! nicht inzivil nicht inzivil We have to classify comment “love this!” as incivil or not incivil. It’s positive, no incivility. So “nicht inzivil”. Output JSON exactly.
Du bist schlagfertig. nicht inzivil nicht inzivil We need to classify the comment: “Du bist schlagfertig.” This is a short statement, basically “You are quick-witted.” That’s not uncivil; it’s a compliment. No vulgarity, no insult. So classification “nicht inzivil”. Output JSON exactly.
Du Sau! nicht inzivil inzivil We need classify. “Du Sau!” is an insult, vulgar. It’s incivil. So output JSON with “inzivil”.
fucking gute idee nicht inzivil inzivil We need to classify. The comment: “fucking gute idee”. That’s a vulgar word “fucking” used as an intensifier. Contains vulgar language. According to definition, vulgar language = incivility. So should be “inzivil”. Return JSON.
Ohh danke für die Hilfe! nicht inzivil nicht inzivil We need to decide if comment is incivil. The comment: “Ohh danke für die Hilfe!” (German) translates to “Ohh thank you for the help!” It’s polite, no incivility. So output {“obs_class”:“nicht inzahl”? Actually spelling must be exactly “nicht inzivil”. So JSON: {“obs_class”: “nicht inzivil”}
Ohne Worte, wo soll das noch hin führen? nicht inzivil nicht inzivil We need to classify the comment: “Ohne Worte, wo soll das noch hin führen?” In English: “Speechless, where is this going?” It’s a rhetorical question, maybe frustration, but no vulgarity, no insult, no dehumanization, no sarcasm? Could be mild sarcasm but not necessarily. It’s just a comment expressing confusion/criticism. No violation of norms. So “nicht inzivil”.
Ich finde, die CDU versagt auf ganzer Linie! Peinlich! nicht inzivil nicht inzivil We need to label as “inzivil” or “nicht inzivil”. The comment: “Ich finde, die CDU versagt auf ganzer Linie! Peinlich!” This is a critique, calling the party “versagt” and “peinlich”. It’s negative but not vulgar, not insulting personal? It’s political criticism. Not violating communicative norms? It’s harsh but not incivil per definition? It is not a personal attack, it’s about a party. It’s not profanity, no threat, no dehumanization. Likely “nicht inzivil”.
Spannender Beitrag nicht inzivil nicht inzivil We need to decide if comment “Spannender Beitrag” is civil. It’s a positive comment, no incivility. So output {“obs_class”:“nicht inzivil”}. Check format: must be exactly JSON with that field. No extra whitespace? It’s okay.
Boss Bitch nicht inzivil inzivil We need to decide if the comment is incivil. The comment is “Boss Bitch”. This contains a profanity? “Bitch” is a vulgar term, considered a profanity, possibly demeaning. The phrase “Boss Bitch” may be used as compliment or slang, but contains the word “bitch” which is a vulgar term, possibly insulting. According to guidelines, vulgar language, profanity = incivil. So label as “inzivil”. Return JSON exactly.
Das fickt ordentlich was ihr da macht :) nicht inzivil inzivil We need to assess if comment is uncivil. It says “Das fickt ordentlich was ihr da macht :)”. In German, “fickt” is vulgar profanity (fuck) directed at “what you do”. It’s vulgar language, likely insulting. This is incivil. So output {“obs_class”: “inzivil”}
Welch ein blumiger Sonnenuntergang! nicht inzivil nicht inzivil We need to decide if comment is civil or not. The comment: “Welch ein blumiger Sonnenuntergang!” meaning “What a flowery sunset!” That’s positive, no incivility. So output non incivil. Must output exactly JSON: {“obs_class”: “nicht inzivil”}
Freue mich für dich :) nicht inzivil nicht inzivil We need to classify the comment “Freue mich für dich :)” It’s a friendly comment, no incivility. So output {“obs_class”: “nicht inzivil”}
das ist so unlustig und komisch nicht inzivil nicht inzivil We need to decide if the comment “das ist so unlustig und komisch” is incivil. It says “that’s so unfunny and funny/odd”. It’s just a negative opinion, not vulgar, not insulting anyone, just saying something is unfunny. No incivility. So classification: nicht inzivil. We must output JSON exactly: {“obs_class”: “nicht inzivil”}
krasser Scheiß nicht inzivil inzivil We need to decide if the comment “krasser Scheiß” is incivil. It’s German: “krasser Scheiß” – translates to “awesome shit” or “crazy shit”. It’s vulgar? “Scheiß” is a vulgar term (shit). It’s profanity. So it’s vulgar language, qualifies as incivil. So output JSON with “inzivil”.
Yasss slayyy queeennn nicht inzivil nicht inzivil We need to decide if the comment “Yasss slayyyy queeennn” is incivil? This is praising, enthusiastic, no vulgar language, no insult. It’s not incivil. So output JSON: {“obs_class”: “nicht inzivil”}
richtig guter punkt nicht inzivil nicht inzivil The task: classify given comment as “inzivil” or “nicht inzivil”. Comment: “richtig guter punkt”. That’s a positive comment, no insult. So “nicht inzivil”. Must output JSON exactly: {“obs_class”: “nicht inzivil”}
Schön, dass ihr Spaß im Urli habt nicht inzivil nicht inzivil We need to determine if comment is incivil. The comment: “Schön, dass ihr Spaß im Urli habt”. Translated: “Nice that you have fun in the Urli (maybe abbreviation for Urlaubsinsel?)”. It’s a neutral or possibly sarcastic? Could be sarcastic depending on context, but without context it’s just a statement praising that they have fun. No vulgar, no insult. Could be sarcasm if context is that they are insulting, but we can’t infer. It’s likely not incivil. So output {“obs_class”: “nicht inzivil”}. Make sure JSON exactly.
I don’t know, 6-7 nicht inzivil nicht inzivil The user gave a comment: “I don’t know, 6-7”. Need to determine if it’s incivil. It seems a neutral statement, no vulgarity, no insulting, no threats. So it’s not incivil. Must output JSON with {“obs_class”: “nicht inzivil”}. No extra text.
Schöne Berge nicht inzivil nicht inzivil We need to decide if comment “Schöne Berge” is incivil. It’s just a positive comment. No incivil content. So output {“obs_class”: “nicht inzivil”}. We must output exactly JSON with no extra content.

Keine Übereinstimmung

d_classified |>
  filter(true_class != obs_class) |>
  knitr::kable()
kommentar true_class obs_class reasons
This is (g)assss{EM_SMILING_FACE_WITH_HEARTEYES}{EM_SMILING_FACE_WITH_HEARTEYES} inzivil nicht inzivil The user wants to classify the comment as incivil or not incivil. The comment: “This is (g)assss{EM_SMILING_FACE_WITH_HEARTEYES}{EM_SMILING_FACE_WITH_HEARTEYES}”. It’s ambiguous. “(g)assss” might be a slur? Could be “gas”? Or “(g)assss” maybe “ass”? Hard to know. Possibly “gass” not clear. The emojis are smiley hearts. No obvious vulgar language? “(g)assss” could be “gassss”? Not a clear profanity. Could be “gass”? Not sure. Likely not incivil. So output {“obs_class”:“nicht inzivil”}. Need exact JSON, no extra text.
bones are for dogs inzivil nicht inzivil We need to decide if comment “bones are for? dogs” (typo maybe) is incivil? The comment says “bones are for dogs”. This is a statement, not vulgar, not insulting, no profanity, no discrimination. It’s a neutral statement. So non-incivil. Return JSON with “nicht inzivil”.
Du bist toll, so wie du bist {EM_RED_HEART}️ inzivil nicht inzivil We need to decide if the comment is incivil or not. The comment: “Du bist toll, so wie du bist {EM_RED_HEART}️”. That’s praising, includes heart emoji. No incivility. So output {“obs_class”: “nicht inzivil”}. Make sure JSON exactly.
Das war schön inzivil nicht inzivil The user asks: “Du bist Forschungsassistent… Deine Aufgabe… decide if the comment is civil or not.” Provided comment: “Das war schön”. This is a simple positive statement, no incivility. So output JSON with “nicht inzivil”. Must output exactly JSON with no extra text.
HS inzivil nicht inzivil The user provides a single comment “HS”. We need to classify as incivil or not incivil. “HS” probably stands for “hass”? Could be abbreviation for “Hate Speech”? Or just “HS”? Hard to interpret. It’s ambiguous: “HS” alone cannot be determined as incivil. It’s not vulgar, no insult, no context. It’s just two letters, maybe initialism. No violation. So classification: not incivil. We must output JSON exactly: {“obs_class”: “nicht inzivil”}. Check formatting: no extra whitespace? It says JSON must exactly match format. Provide exactly that.
Oiiiai oiiiai inzivil nicht inzivil The user asks: “Oiiiai oiiiai”. This is just a greeting? No incivility. So answer {“obs_class”:“nicht inzivil”}. Need to output exactly JSON with no extra text.
Die Weisheit verfolgt dich, aber du bist schneller! inzivil nicht inzivil We have to decide if the comment is incivil. The comment: “Die Weisheit verfolgt dich, aber du bist schneller!” German: “Wisdom follows you, but you are faster!” This is not insulting, not vulgar, no hate. It’s possibly playful but not incivil. So classification: “nicht inzivil”. Output JSON exactly: {“obs_class”: “nicht inzivil”}
Wie schön wieder in der Uni zu sein inzivil nicht inzivil We need to decide if the comment “Wie schön wieder in der Uni zu sein” is incivil or not. It’s a positive statement, no incivility. So output JSON {“obs_class”: “nicht inzivil”}. Make sure exact format, no extra whitespace? Need exactly {“obs_class”: “nicht inzivil”}.
Das hast du ja richtig toll gemacht… inzivil nicht inzivil We need to decide if the comment “Das hast du ja richtig toll gemacht…” is incivil? It’s German, meaning “You really did that well…”, could be sarcastic? It could be sincere praising. There’s ellipsis. Could be sarcasm? Hard to know. Without context, it’s ambiguous. Usually “richtig toll gemacht” could be genuine or sarcastic. The phrase “richtig toll gemacht” is praising. No vulgarity, no insult. If sarcasm, could be mock praise, but doesn’t contain obvious incivility. Probably classify as “nicht inzivil”.
Ich finde Titten geil nicht inzivil inzivil We need to classify. Comment in German: “Ich finde Titten geil”. Means “I find tits awesome/awesome”. Contains vulgar language perhaps: “Titten” is slang for breasts, a vulgar term. It’s sexual content, but not necessarily an insult, threat, etc. Is it considered incivility? According to definition, Vulgäre, unangemessene Sprache, Fluchen counts as incivility. “Titten” is vulgar slang but not a profanity? It’s somewhat vulgar. Likely considered vulgar language. So classify as “inzivil”.
bitch, das ist sooo crazyy nicht inzivil inzivil We need to determine if comment is incivil. The comment: “bitch, das ist sooo crazyy”. Contains “bitch” which is a vulgar insult, demeaning. So it’s incivil. Return JSON {“obs_class”: “inzivil”}.
Also das ist jetzt schon ein bisschen unfair. Sie hat auch noch andere Facetten, z.B. ist sie auch noch grob inkompetent :) nicht inzivil inzivil We need decide if comment is uncivil. The comment: “Also das ist jetzt schon ein bisschen unfair. Sie hat auch noch andere Facetten, z.B. ist sie auch noch grob inkompetent :)” Contains “grob inkompetent” i.e., calling someone incompetent, maybe mild insult but not vulgar. It’s negative evaluation but not necessarily violating norms? It’s a critique, possibly disrespectful but not incivil? Incivil includes “Beleidigung, Profanität”. This is calling incompetent—a mild insult, could be considered disrespectful. However typically classification might treat as “nicht inzivil” if not profanity, threat, discrimination. It’s just a personal criticism. Might be considered incivil as “Erniedrigung, fehlender Respekt, Abwertung”. Yes, calling someone incompetent could be considered disrespect/abwertung. I’d lean “inzivil”. The definition: “Erniedrigung, fehlender Respekt, Abwertung” is a criterion. So this comment includes “grob inkompetent”. That’s a negative evaluation, possibly contempt. So mark as incivil. Provide JSON.
Woww, geiler scheiß! nicht inzivil inzivil We need to classify. The comment: “Woww, geiler scheiß!” That’s German. Translating: “Wow, great shit!” The phrase “geiler scheiß” uses vulgar language: “Scheiß” is vulgar (shit). It could be considered profanity/vulgar language. It’s an exclamation, not insulting someone directly, but contains profanity. According to definition: Vulgäre, unangemessene Sprache, Fluchen. So it’s considered incivil. So output {“obs_class”:“inzivil”}
Was ein Motherfucker nicht inzivil inzivil We need to classify if the comment is “inzivil” or “nicht inzivil”. The comment: “Was ein Motherfucker”. This includes a profanity “Motherfucker”. That is vulgar language, profanity. So it is incivil. Output JSON: {“obs_class”: “inzivil”}
Lars Klingbeil ist ein Klassenverräter nicht inzivil inzivil The user asks to classify the comment: “Lars Klingbeil ist ein Klassenverräter”. This is German for “Lars Klingbeil is a class betrayer”. Is that considered incivil? It’s an accusation, calling someone a “class traitor”. It’s a negative statement, possibly a insult, but not necessarily a vulgar profanity, but it’s a derogatory term. According to the definition, insults, demeaning, “Erniedrigung, fehlender Respekt, Abwertung” qualifies as incivil. So classification: incivil. Thus output JSON: {“obs_class”: “inzivil”}
Scheiße, das sieht gut aus! nicht inzivil inzivil We need to output JSON with obs_class either “inzivil” or “nicht inzivil”. Determine if comment “Scheiße, das sieht gut aus!” is incivil. It contains vulgar word “Scheiße” (German profanity). According to definition, vulgar language => incivil. So classify as “inzivil”. Output JSON exactly.
Ich sehe Sie als einen inkompetenten Politiker an nicht inzivil inzivil We need to decide if comment is incivil or not. It says “Ich sehe Sie als einen inkompetenten Politiker an” - calling someone incompetent. This is a negative evaluation, possibly disrespectful, but is it incivil? According to definitions: “Beleidigung, Profanität” - calling incompetent might be an insult. It’s a mild insult, but qualifies as disrespect/abwertung. Likely considered incivil. So output {“obs_class”: “inzivil”}
fotzig nicht inzivil inzivil The user gave a comment: “fotzig”. We need to decide if it’s incivil. “fotzig” is a German slang possibly meaning “fucking”? Actually “fotzig” could be a typo of “fotzig” meaning “f***ing”? In German, “fotzig” is a mild profanity meaning “fucking”. It’s vulgar? Could be considered a profanity. The definition: Vulgäre, unangemessene Sprache, Fluchen. So “fotzig” is a curse word (Swabsche). So that is incivil. So output JSON {“obs_class”:“inzivil”}. Make sure JSON exactly.
Du bist doof nicht inzivil inzivil We need to classify as incivil or not. Comment: “Du bist doof”. That’s an insult, vulgar? It’s a mild insult. According to criteria, “Beleidigung, Profanität” qualifies as incivil. So output {“obs_class”: “inzivil”}. Must be exact JSON no other text.
Scheiße wie cool nicht inzivil inzivil The user wants a JSON with classification. The comment: “Scheiße wie cool”. That’s German: “Scheiße wie cool”. Contains vulgar word “Scheiße” (shit). That’s vulgar profanity. So it’s incivil. According to definition, vulgar language qualifies. So output {“obs_class”: “inzivil”}. Make sure exact JSON with no extra text.
Du Sau! nicht inzivil inzivil We need classify. “Du Sau!” is an insult, vulgar. It’s incivil. So output JSON with “inzivil”.
fucking gute idee nicht inzivil inzivil We need to classify. The comment: “fucking gute idee”. That’s a vulgar word “fucking” used as an intensifier. Contains vulgar language. According to definition, vulgar language = incivility. So should be “inzivil”. Return JSON.
Boss Bitch nicht inzivil inzivil We need to decide if the comment is incivil. The comment is “Boss Bitch”. This contains a profanity? “Bitch” is a vulgar term, considered a profanity, possibly demeaning. The phrase “Boss Bitch” may be used as compliment or slang, but contains the word “bitch” which is a vulgar term, possibly insulting. According to guidelines, vulgar language, profanity = incivil. So label as “inzivil”. Return JSON exactly.
Das fickt ordentlich was ihr da macht :) nicht inzivil inzivil We need to assess if comment is uncivil. It says “Das fickt ordentlich was ihr da macht :)”. In German, “fickt” is vulgar profanity (fuck) directed at “what you do”. It’s vulgar language, likely insulting. This is incivil. So output {“obs_class”: “inzivil”}
krasser Scheiß nicht inzivil inzivil We need to decide if the comment “krasser Scheiß” is incivil. It’s German: “krasser Scheiß” – translates to “awesome shit” or “crazy shit”. It’s vulgar? “Scheiß” is a vulgar term (shit). It’s profanity. So it’s vulgar language, qualifies as incivil. So output JSON with “inzivil”.

Alle Kommentare mehrfach codieren

# Codierung dreimal nacheinander ausführen
# Ineffizient, da wir alle nochmals codieren; aber besser lesbar
resp_replicates <- map(
  1:3,
  ~ req_list |>
    req_perform_parallel(
      on_error = "continue",
      max_active = 40,
      progress = FALSE
    )
)

Mehrfach-Klassifikationen extrahieren und in Datensatz schreiben

# Function to process an entire list of replicates into a single safe vector
process_replicate <- function(resps, valid_levels) {
  purrr::map_chr(resps, function(resp) {
    # Extract
    raw <- safe_extract(resp, "content")
    if (is.na(raw) || !jsonlite::validate(raw)) {
      return(NA_character_)
    }

    # Parse
    parsed <- try(jsonlite::fromJSON(raw) |> purrr::pluck(1), silent = TRUE)
    if (inherits(parsed, "try-error") || is.null(parsed)) {
      return(NA_character_)
    }

    # Validate against levels
    if (parsed %in% valid_levels) {
      return(as.character(parsed))
    }
    return(NA_character_)
  })
}

# Apply our safe processing to each replicate list
classifications_replicates <- purrr::map_dfc(
  resp_replicates,
  ~ process_replicate(.x, levels(d$true_class))
) |>
  rlang::set_names(paste0("rep_", 1:3))
New names:
• `` -> `...1`
• `` -> `...2`
• `` -> `...3`
# Ausgeben
d |>
  bind_cols(classifications_replicates) |>
  knitr::kable()
kommentar true_class rep_1 rep_2 rep_3
This is (g)assss{EM_SMILING_FACE_WITH_HEARTEYES}{EM_SMILING_FACE_WITH_HEARTEYES} inzivil nicht inzivil nicht inzivil nicht inzivil
bones are for dogs inzivil nicht inzivil nicht inzivil nicht inzivil
Wie kann man so dumme Ansichten online verbreiten ? Absolute Frechheit wie heutzutage mit dem Wort Forschung umgegangen wird!! inzivil nicht inzivil inzivil inzivil
Was für ein Schwachsinn! inzivil inzivil inzivil inzivil
Ich bin mir sicher, dass die Leute hier alle Tassen im Schrank haben! inzivil inzivil inzivil inzivil
Du bist toll, so wie du bist {EM_RED_HEART}️ inzivil nicht inzivil nicht inzivil nicht inzivil
Du bist dumm inzivil inzivil inzivil inzivil
Linksveriffte Öko-Trulla inzivil inzivil inzivil inzivil
Das war schön inzivil nicht inzivil nicht inzivil nicht inzivil
Clown inzivil inzivil inzivil inzivil
du bist sch***! inzivil inzivil inzivil inzivil
du bist hässlich inzivil inzivil inzivil inzivil
Merz leck Eier inzivil inzivil inzivil inzivil
HS inzivil nicht inzivil nicht inzivil nicht inzivil
Du Hurensohn inzivil inzivil inzivil inzivil
Fuck inzivil inzivil inzivil inzivil
Merz, leck Eier inzivil inzivil inzivil inzivil
Das ist doch Schwachsinn inzivil inzivil inzivil inzivil
Du Fotze inzivil inzivil inzivil inzivil
Oiiiai oiiiai inzivil nicht inzivil nicht inzivil nicht inzivil
Hure! inzivil inzivil inzivil inzivil
Ich finde heute siehst du komisch aus. inzivil inzivil inzivil inzivil
Die Weisheit verfolgt dich, aber du bist schneller! inzivil nicht inzivil nicht inzivil nicht inzivil
Wtf,,, was denkt der wer er ist??? Hasse den so… hoffe er stirbt inzivil inzivil inzivil inzivil
Ganz schön hässlich inzivil inzivil inzivil inzivil
Fake news! inzivil inzivil inzivil inzivil
Ich weiß wo du wohnst inzivil inzivil inzivil inzivil
Ich hau dir auf die Schnauze inzivil inzivil inzivil inzivil
Mutig, wie viel Meinung man mit so wenig Ahnung haben kann. inzivil inzivil inzivil inzivil
Das ist dumm inzivil inzivil inzivil inzivil
Arschloch inzivil inzivil inzivil inzivil
Ja natürlich stimmt das /s inzivil inzivil inzivil inzivil
NA inzivil NA NA NA
Hoffe er wird gekirkt inzivil inzivil inzivil inzivil
Du bist dumm inzivil inzivil inzivil inzivil
Lügner! inzivil inzivil inzivil inzivil
Fotze inzivil inzivil inzivil inzivil
fette Sau inzivil inzivil inzivil inzivil
Bring dich um! inzivil inzivil inzivil inzivil
Ich finde du siehst einfach seltsam aus. inzivil inzivil inzivil inzivil
Interessant, wie überzeugt du davon bist. Ich wünschte, ich hätte auch so viel Selbstvertrauen bei so wenig Grundlage inzivil inzivil inzivil inzivil
I wish you get raped inzivil inzivil inzivil inzivil
Wie schön wieder in der Uni zu sein inzivil nicht inzivil nicht inzivil nicht inzivil
Du F0tze inzivil inzivil inzivil inzivil
Das hast du ja richtig toll gemacht… inzivil inzivil inzivil inzivil
Dumme Nuss inzivil inzivil inzivil inzivil
Nutte inzivil inzivil inzivil inzivil
nuttig inzivil nicht inzivil inzivil nicht inzivil
Willste dich boxen? inzivil inzivil inzivil inzivil
kys inzivil inzivil inzivil inzivil
Wow, du bist soo mutig dich ungeschminkt zu posten inzivil inzivil inzivil inzivil
was ein Scheiß inzivil inzivil inzivil inzivil
Hässlich inzivil inzivil inzivil inzivil
Halt die Fresse inzivil inzivil inzivil inzivil
Ich stimme dir da gar nicht zu. Weiß nicht wie du drauf kommst aber bist ja auch nicht ganz richtig in der Birne inzivil inzivil inzivil inzivil
Männer sollten keine Rechte haben inzivil inzivil inzivil inzivil
Nazi-Schweine inzivil inzivil inzivil inzivil
AfDler abschieben inzivil inzivil inzivil inzivil
Dem stimme ich zu. nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Ich finde Titten geil nicht inzivil inzivil inzivil inzivil
bitch, das ist sooo crazyy nicht inzivil inzivil inzivil inzivil
Also das ist jetzt schon ein bisschen unfair. Sie hat auch noch andere Facetten, z.B. ist sie auch noch grob inkompetent :) nicht inzivil inzivil inzivil inzivil
Was für ein schönes Foto! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Hab eine schöne Woche! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Öffentlichkeit nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Ist das KI? nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Woww, geiler scheiß! nicht inzivil inzivil inzivil inzivil
Das ist falsch. nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Was ein Motherfucker nicht inzivil inzivil inzivil inzivil
Du bist sau cool nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Das Rezept mache ich auf jeden Fall nach!!! Danke für die Inspo! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Danke und das so wichtig! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Lars Klingbeil ist ein Klassenverräter nicht inzivil inzivil inzivil inzivil
Bayern gewinnt…Überraschung des Jahres. nicht inzivil nicht inzivil inzivil nicht inzivil
Ekelhaft nicht inzivil inzivil inzivil inzivil
Ich möchte Sommer nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Scheiße, das sieht gut aus! nicht inzivil inzivil inzivil inzivil
Ich sehe Sie als einen inkompetenten Politiker an nicht inzivil inzivil inzivil inzivil
fotzig nicht inzivil nicht inzivil inzivil inzivil
Hab Bock auf Eierkuchen nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Du bist doof nicht inzivil inzivil inzivil inzivil
Scheiße wie cool nicht inzivil inzivil inzivil inzivil
love this! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Du bist schlagfertig. nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Du Sau! nicht inzivil inzivil inzivil inzivil
fucking gute idee nicht inzivil inzivil inzivil inzivil
Ohh danke für die Hilfe! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Ohne Worte, wo soll das noch hin führen? nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Ich finde, die CDU versagt auf ganzer Linie! Peinlich! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
NA nicht inzivil NA NA NA
Spannender Beitrag nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Boss Bitch nicht inzivil inzivil inzivil inzivil
Das fickt ordentlich was ihr da macht :) nicht inzivil inzivil inzivil inzivil
Welch ein blumiger Sonnenuntergang! nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Freue mich für dich :) nicht inzivil nicht inzivil nicht inzivil nicht inzivil
das ist so unlustig und komisch nicht inzivil nicht inzivil nicht inzivil nicht inzivil
krasser Scheiß nicht inzivil inzivil inzivil inzivil
Yasss slayyy queeennn nicht inzivil nicht inzivil nicht inzivil nicht inzivil
richtig guter punkt nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Schön, dass ihr Spaß im Urli habt nicht inzivil nicht inzivil nicht inzivil nicht inzivil
I don’t know, 6-7 nicht inzivil nicht inzivil nicht inzivil nicht inzivil
Schöne Berge nicht inzivil nicht inzivil nicht inzivil nicht inzivil

Unterschiedliche Codierungen

d |>
  bind_cols(classifications_replicates) |>
  filter(apply(classifications_replicates, MARGIN = 1, n_distinct) > 1) |>
  knitr::kable()
kommentar true_class rep_1 rep_2 rep_3
Wie kann man so dumme Ansichten online verbreiten ? Absolute Frechheit wie heutzutage mit dem Wort Forschung umgegangen wird!! inzivil nicht inzivil inzivil inzivil
nuttig inzivil nicht inzivil inzivil nicht inzivil
Bayern gewinnt…Überraschung des Jahres. nicht inzivil nicht inzivil inzivil nicht inzivil
fotzig nicht inzivil nicht inzivil inzivil inzivil

Konfusionsmatrix

d_classified |>
  mutate(
    true_class = fct_rev(true_class),
    obs_class = fct_rev(obs_class)
  ) |>
  conf_mat(truth = true_class, estimate = obs_class) |>
  autoplot("heatmap") + scale_fill_gradient(low = "white", high = "red", guide = "none") +
  theme_minimal(base_size = 12)
Scale for fill is already present.
Adding another scale for fill, which will replace the existing scale.

Metriken basierend auf Konfusionsmatrix

# Metriken auswählen
eval_metrics <- metric_set(accuracy, recall, precision, f_meas)

# Metriken berechnen
d_classified |>
  mutate(
    true_class = fct_rev(true_class),
    obs_class = fct_rev(obs_class)
  ) |>
  eval_metrics(
    truth = true_class, estimate = obs_class,
    event_level = "second"
  )
# A tibble: 4 × 3
  .metric   .estimator .estimate
  <chr>     <chr>          <dbl>
1 accuracy  binary         0.747
2 recall    binary         0.839
3 precision binary         0.746
4 f_meas    binary         0.790

Koinzidenzmatrix

# Krippendorffs alpha berechnen
kralpha <- classifications_replicates |>
  t() |>
  krippalpha()
# Trick: Koinzidenzmatrix so formatieren, dass autoplot() sie für conf_mat hält
dimnames(kralpha$coincidence_matrix) <- list(
  A = levels(d_classified$true_class), # Rows
  B = levels(d_classified$true_class) # Columns
)
coincidence_matrix <- structure(
  list(table = as.table(kralpha$coincidence_matrix)),
  class = "conf_mat"
)
# Plot
coincidence_matrix |>
  autoplot("heatmap") + scale_fill_gradient(low = "white", high = "red", guide = "none") +
  theme_minimal(base_size = 12)
Scale for fill is already present.
Adding another scale for fill, which will replace the existing scale.

Metriken basierend auf Koinzidenzmatrix

holsti <- sum(diag(kralpha$coincidence_matrix)) / sum(kralpha$coincidence_matrix)
cat("Übereinstimmung ('Hosti'): ", round(holsti, 2), "\n\n")

Übereinstimmung (‘Hosti’): 0.97

cat("Krippendorffs $\\alpha$: ", round(kralpha$alpha, 2))

Krippendorffs \(\alpha\): 0.94

15.3 Hausaufgabe

1) Lesen Sie Törnberg (2024).

15.4 Transkript

Das folgende Transkript wurde auf Basis der Aufzeichnung der Vorlesung erstellt. Die vollständigen Aufzeichnungen inklusive der Bildschirminhalte sind in Blackboard🔒 verfügbar. Die Tonspur wurde zuerst mit Hilfe der Werkzeuge des Oral-History.Digital Projekts wörtlich transkribiert. Die wörtliche Transkription wurde in Kombination mit den Vorlesungsfolien mithilfe von Sprachmodellen (v. a. Claude Sonnet 4.5 und GPT 5.2) zu einem übersichtlichen Transkript zusammengefasst. Im Anschluss wurde das Transkript von einer studentischen Hilfskraft überprüft, geglättet und ggf. angepasst. In diesem Prozess kann es an verschiedenen Stellen zu Fehlern kommen. Im Zweifel gilt das gesprochene Wort, und auch beim Vortrag mache ich Fehler.

Ich stelle das Transkript hier als experimentelles, ergänzendes Material zur Dokumentation der Vorlesung zur Verfügung. Noch bin ich mir unsicher, ob es eine sinnvolle Ergänzung ist und behalte mir vor, es weiter zu bearbeiten oder zu löschen.

AI-powered Content analysis

Die Vorlesung behandelt, wie sich generative Sprachmodelle für die Inhaltsanalyse einsetzen lassen, vor allem als Unterstützung bei der Kodierung von Social-Media-Kommentaren. Im Mittelpunkt steht ein Live-Beispiel zur Inzivilität.

Einführung und Ziel der Sitzung

Zu Beginn wird die Sitzung als Einstieg bzw. Wiederholung zum Thema KI-gestützte Inhaltsanalyse eingeordnet. Der Dozent macht deutlich, dass die Methode für Abschlussarbeiten praktisch relevant sein kann, weil sie eine arbeitsintensive Inhaltsanalyse auf größere Textmengen skalierbar macht.

Wichtig ist dabei die Trennung zwischen der technischen Grundidee und der wissenschaftlichen Absicherung: Ein Sprachmodell kann Codierungen übernehmen, aber nur dann sinnvoll eingesetzt werden, wenn geprüft wird, ob seine Ergebnisse mit menschlichen Codierungen vergleichbar sind.

  • Ziel der Sitzung: Verständnis dafür, wie KI in der Inhaltsanalyse eingesetzt werden kann.
  • Schwerpunkt: ein Live-Beispiel zur Erkennung von Inzivilität.

Was sind generative Sprachmodelle?

Generative Sprachmodelle werden auch LLMs, also Large Language Models genannt. Gemeint sind Modelle, die Sprache erzeugen und dadurch auch Aufgaben bearbeiten können, die mit sprachlicher Klassifikation zu tun haben.

Der Gedanke dahinter ist, dass solche Modelle nicht nur Texte schreiben, sondern auch als eine Art digitale Codierer eingesetzt werden können. Die Grundannahme ist, dass ein Modell auf Basis eines Prompts ähnliche Entscheidungen treffen kann wie ein Mensch, der mit einem Codebuch arbeitet.

Standardisierte Inhaltsanalyse

Die Vorlesung knüpft an die klassische standardisierte Inhaltsanalyse an. Diese beginnt mit einer Forschungsfrage oder Hypothese und führt dann über die Auswahl von Material zur systematischen Kodierung und schließlich zu quantitativen Auswertungen.

Das Untersuchungsmaterial wird systematisch ausgewählt, dann werden einzelne Einheiten definiert und standardisiert in Daten überführt. Als Beispiel in der Vorlesung werden Social-Media-Kommentare genannt. Diese sollen auf zivile oder inzivile Aussagen überprüft werden. Das Ergebnis ist eine Tabelle, in der etwa für jeden Kommentar festgehalten wird, ob er inzivil ist oder nicht.

  • Forschungsfrage und Hypothese stehen am Anfang.
  • Danach folgt die Auswahl und Festlegung des Untersuchungsmaterials.
  • Ziel ist die Überführung von Text in strukturierte Daten.
  • Codierung erfolgt anhand klarer Kategorien, etwa 0 = nicht inzivil, 1 = inzivil.

Rolle des Codebuchs

Ein zentrales Element der klassischen Inhaltsanalyse ist das Codebuch. Darin stehen die Messanweisungen, also die Regeln, nach denen Codier*innen entscheiden sollen, welcher Kommentar in welche Kategorie fällt.

Die Vorlesung erklärt, dass ein gut formuliertes Codebuch in gewisser Weise einem ausführlichen Prompt ähnelt. Deshalb liegt der Gedanke nahe, diese Anweisungen einem Chatbot zu geben und ihn als Codierer zu nutzen. Der Rest der Methode bleibt dabei im Prinzip gleich.

  • Codebuch = Sammlung von Kodierregeln und Definitionen.
  • Es legt fest, woran ein Merkmal erkannt wird.
  • Bei KI-Nutzung wird das Codebuch in einen Prompt übersetzt.

Warum KI hier nützlich sein kann

Der Dozent betont, dass gerade der arbeitsintensive Teil der Inhaltsanalyse durch ein Sprachmodell erleichtert werden kann. Während Menschen bei großen Mengen an Material schnell an ihre Grenzen kommen, kann ein LLM sehr viele Einheiten in gleichbleibender Weise bearbeiten.

Das ist besonders relevant für Studierende, weil man auf diese Weise auch größere Textkorpora untersuchen kann, ohne alles ausschließlich manuell kodieren zu müssen. Gleichzeitig wird klar, dass die Methode nur dann wissenschaftlich sinnvoll ist, wenn geprüft wird, ob das Modell zuverlässig arbeitet. Die Ergebnisse des LLMs werden also mit menschlichen verglichen, um so ihre Zuverlässigkeit zu validieren.

  • Vorteil: Skalierbarkeit.
  • Vorteil: gleichmäßige Bearbeitung großer Mengen an Text.
  • Vorteil: Entlastung bei repetitiven Kodieraufgaben.
  • Einschränkung: Die Ergebnisse müssen validiert werden.

Ablauf mit Sprachmodellen

Die Sitzung verweist auf neuere Vorschläge, wie man Inhaltsanalyse mit Sprachmodellen systematisieren kann. Der Ablauf beginnt mit der Entwicklung von Codebuch und Prompts und geht dann in das sogenannte Prompt-Engineering über, also die Verbesserung der Anweisungen für das Modell.

Danach wird geprüft, wie gut die Maschine arbeitet. Dafür braucht man weiterhin menschliche Codierer*innen, weil nur ein Vergleich mit menschlichen Urteilen zeigen kann, ob die Maschine valide arbeitet. Zusätzlich wird getestet, ob das Modell bei mehreren Durchläufen ähnliche Ergebnisse liefert.

  • Entwicklung von Codebuch und Prompt.
  • Verbesserung des Prompts durch Prompt-Engineering.
  • Vergleich zwischen menschlicher und maschineller Kodierung.
  • Prüfung der Reproduzierbarkeit und der Validität.

Beispiel Inzivilität

Als Beispiel wird Inzivilität gewählt, ein Thema, das in der Forschung zu Online-Kommunikation viel diskutiert wird. Die Vorlesung verwendet eine pragmatische Definition nach Anke Stoll und Kolleginnen: Inzivilität liegt vor, wenn kommunikative Normen so verletzt werden, dass andere möglicherweise nicht mehr mitreden wollen.

Damit ist Inzivilität nicht einfach nur „unfreundlicher Ton“, sondern eine Form von Normverletzung mit potenziellen Folgen für die Beteiligung am Diskurs. Der Dozent verweist darauf, dass besonders marginalisierte Gruppen von solchen Normverletzungen betroffen sein können, wodurch Diskurse verzerrt werden.

  • Inzivilität = Verletzung kommunikativer Normen.
  • Folge: Andere könnten sich aus der Debatte zurückziehen.
  • Besonders problematisch, wenn bestimmte Gruppen dadurch systematisch verdrängt werden.

Typische Merkmale von Inzivilität

In der Vorlesung werden mehrere Merkmale genannt, an denen Inzivilität häufig festgemacht wird. Dazu gehören vulgäre oder unangemessene Sprache, Beleidigungen, Profanität, Entmenschlichung sowie Sarkasmus, Spott und Zynismus.

Diese Merkmale werden im Beispiel auch als Grundlage für einen Prompt genutzt. Das Modell soll anhand solcher Hinweise entscheiden, ob ein Kommentar inzivil oder nicht inzivil ist.

  • Vulgäre, unangemessene Sprache, Fluchen.
  • Beleidigung, Profanität.
  • Entmenschlichung.
  • Sarkasmus, Spott, Zynismus.
  • Negative Stereotype.

Klassische Regeln und ihre Grenzen

Die Vorlesung stellt die KI-gestützte Analyse einer älteren, diktionärsbasierten Methode gegenüber. Bei dieser Methode wird eine Liste von Wörtern oder Ausdrücken verwendet, und sobald eines davon vorkommt, wird ein Kommentar als inzivil eingeordnet.

Das Problem dabei ist, dass viele Wörter stark vom Kontext abhängen. Flüche können zum Beispiel beleidigend, aber in anderen Situationen auch positiv oder locker gemeint sein. Genau hier wird die Hoffnung auf Sprachmodelle deutlich: Sie sollen den Kontext besser erfassen als reine Wortlisten.

  • Diktionäre arbeiten mit Wortlisten.
  • Sie sind oft zu grob für kontextabhängige Kommunikation.
  • Sprachmodelle sollen den Kontext besser berücksichtigen.

Live-Beispiel der Kodierung

Ein zentraler Teil der Sitzung ist ein Live-Experiment. Die Studierenden sollen eigene Kommentare in eine Online-Befragung eingeben und jeweils angeben, ob der Kommentar inzivil oder nicht inzivil ist. Wichtig ist.

Für das Testmaterial sollen bewusst verschiedene Arten von Beispielen gesammelt werden: klar inzivile, klar nicht inzivile und solche, die für die Maschine schwer zu entscheiden sind. Auf diese Weise kann später geprüft werden, wie gut das Modell mit einfachen und schwierigen Fällen zurechtkommt.

  • Ein Kommentar pro Eingabe.
  • Einstufung als inzivil oder nicht inzivil.
  • Beispiele sollen leicht und schwer sein.
  • Ziel ist ein Testdatensatz für die Live-Kodierung.

Was geprüft werden soll

Die eigentliche Prüfidee des Experiments ist doppelt. Erstens soll gezeigt werden, ob das Modell bei mehrfacher Anwendung ähnlich entscheidet, also ob es reproduzierbar ist. Zweitens soll der Vergleich mit menschlichen Kodierungen zeigen, ob die Maschine ausreichend nah an menschliche Urteile herankommt.

Damit wird deutlich, dass KI in der Inhaltsanalyse nicht einfach „ersetzt“, sondern zunächst als Werkzeug geprüft werden muss. Entscheidend ist, ob die Maschine Ergebnisse liefert, die wissenschaftlich brauchbar sind.

  • Reproduzierbarkeit: liefert das Modell bei Wiederholungen ähnliche Ergebnisse?
  • Vergleichbarkeit: stimmen Maschinenurteile mit menschlichen Urteilen überein?
  • Nur bei ausreichender Güte kann das Verfahren für eine Studie genutzt werden.

Bedeutung für Abschlussarbeiten

Am Ende wird der praktische Nutzen hervorgehoben. Die Methode kann für Abschlussarbeiten interessant sein, weil sie die Analyse größerer Textmengen ermöglicht, ohne dass alles vollständig manuell kodiert werden muss.

Gleichzeitig bleibt die wissenschaftliche Logik der Inhaltsanalyse erhalten: klare Kategorien, ein Codebuch, systematische Kodierung und eine Prüfung der Qualität. Die Vorlesung vermittelt damit vor allem die Idee, dass generative Sprachmodelle eine methodische Erweiterung sein können, nicht einfach ein Ersatz für Forschung.

  • Gute Option für größere Textmengen.
  • Besonders nützlich bei inhaltsanalytischen Abschlussarbeiten.
  • Wissenschaftliche Kontrolle bleibt notwendig.

Der Rest der Sitzung wurde leider nicht aufgezeichnet.