Paper · 2023-04-13 · cs.CL, cs.AI, cs.SI
ChatGPT-4 Outperforms Experts and Crowd Workers in Annotating Political Twitter Messages with Zero-Shot Learning
Labels whether US senators' 2020 election tweets come from a Democrat or a Republican, using one zero-shot ChatGPT-4 prompt run at temperatures 0.2 and 1.0. Against two experts and Master-qualified MTurk workers, the LLM has higher accuracy and reliability (Krippendorff's alpha) and a bias similar to experts. Author-reported; exact values appear only in figures.
Text classificationZero-shot learningInter-annotator agreementLLM evaluationllm-annotationzero-shottext-as-datapolitical-scienceevaluationbias
AI-compiled by claude-haiku-5-5 on 2026-11-06, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.
In plain words
Social scientists often want to label large piles of text, such as posts, by hand. Trained people are slow and costly, and crowd workers on online labour platforms are cheap but inconsistent. This paper asks whether a large language model can make the same kind of label with only a plain-language instruction and no training examples.
The test case is a set of tweets from US senators written in the two months before the 2020 election. Each tweet is labelled with the party of the person who wrote it. The model gets one instruction, to guess Democrat or Republican, and is asked the same question many times. Its answers are then compared with two groups of human labellers and with the true parties.
The main finding is that the model is more accurate and more consistent than the human labellers, and leans toward Democrat about as much as the experts do. The author stresses that the results depend on careful checking of each task and that the model's reasons may not match what happens inside it.
TL;DR
A zero-shot ChatGPT-4 prompt labels US senators' 2020 election tweets by party. Across 500 tweets, the model beats individual human coders and the crowd plurality on accuracy, and it is more consistent (higher Krippendorff's alpha) than the human coders §Results fig. 1 fig. 2. All coders lean toward Democrat, and the model's lean is similar to the experts' §Results fig. 3. Author-reported, single model, single dataset.
Problem
Interpretive text labelling, where the right label needs context about politics or the author's intent, has been done by expert coders or crowd workers. Both are slow, costly and biased, and they limit studies to small samples [intro]. Earlier LLM studies lacked ground truth or compared only with crowd workers, which the author regards as unreliable [intro]. The paper therefore asks how accuracy, reliability and bias of ChatGPT-4 compare with both experts and crowd workers on a task with known ground truth [intro] §Method.
Method
The task is a binary label: the party (Democrat or Republican) of the author of a tweet, judged from the tweet text alone §Method.
- Data. Use the dataset of van Vliet et al. §Method. Keep all tweets from US senators posted between 3 Sep and 3 Nov 2020. Drop retweets, replies, tweets containing a URL and tweets shorter than 100 characters §Method. Draw 250 tweets from Republican and 250 from Democratic senators, giving 500 tweets §Method.
- Ground truth. The party of the account holder is the label §Method.
- LLM labelling. Send each tweet to ChatGPT-4 through the API with the instruction quoted below §Method. Tweets are presented in random order §Method. Run every tweet 5 times at temperature 0.2 and 5 times at temperature 1.0, for 5000 calls in total §Method. Each run is scored on its own fig. 1.
- Crowd labelling. Ten Master-qualified MTurk workers in the US label each tweet with the same instruction. Their answers are grouped into batches of 50 questions, each batch with 4 control questions whose answer is evident §Method. The paper reports both single-worker accuracy and the plurality of the ten answers per tweet §Results fig. 1.
- Expert labelling. Two political science researchers, who do not specialise in US politics, label all 500 tweets with the same instruction §Method.
- Scoring. Accuracy is the share of correct labels §Results fig. 1. Reliability is Krippendorff's alpha with a 95% bootstrap interval fig. 2. Bias is the share of answers that name Democrat §Results fig. 3.
The instruction given to the model and the crowd, quoted exactly §Method:
"You will be given a set of Twitter posts from different US politicians, sent during the two months preceding the 2020 US presidential election, that is, between September 3rd, 2020, and November 3rd, 2020. Your task is to use your knowledge of US politics to make an educated guess on whether the poster is a Democrat or Republican. Respond either
Democrat' orRepublican'. If the message does not have enough information for an educated guess, just make your best guess."
The method has no training, fitting or model weights. The steps below restate the procedure; they are not code from the paper.
# Zero-shot labelling of tweets by party [§Method]
# Input: tweets: list of (text, gold) with gold in {"Democrat", "Republican"}
# Output: answers: list of (tweet index, temperature, run, label)
def label_tweets(tweets, instruction):
# Present tweets in random order [§Method]
answers = []
for index in shuffled(range(len(tweets))):
# Two temperatures, five independent runs each [§Method]
for temperature in [0.2, 1.0]:
for run in range(5):
# One API call per tweet and run [§Method]
reply = llm(instruction, tweets[index].text, temperature)
# Parsing of replies is not stated in the paper
label = parse_label(reply)
answers.append((index, temperature, run, label))
return answers# Scores for one coder [§Results] [fig. 1] [fig. 3]
# Input: labels: list of answers for this coder; gold: matching party labels
# Output: accuracy and share of "Democrat" answers
def score_coder(labels, gold):
# Accuracy: share of answers equal to the poster's party [fig. 1]
accuracy = mean(label == g for label, g in zip(labels, gold))
# Bias: share of answers that name Democrat [fig. 3]
democrat_share = mean(label == "Democrat" for label in labels)
return accuracy, democrat_share# Crowd label for one tweet [§Method] [§Results]
# Input: votes: the 10 worker answers for this tweet
# Output: the plurality label
def crowd_label(votes):
# Plurality of the ten answers; tie-breaking is not stated
return most_common(votes)Hyperparameters
| Name | Value | Where | Notes |
|---|---|---|---|
| model | ChatGPT-4, via the API | §Method | Model snapshot and API date not stated |
| temperature | 0.2 and 1.0 | §Method | Two settings compared |
| runs per tweet and temperature | 5 | §Method | Total 5000 calls = 500 × 5 × 2 |
| sample size | 500 tweets, 250 per party | §Method | Balanced sample |
| time window | 3 Sep 2020 to 3 Nov 2020 | §Method | US senators only |
| minimum tweet length | 100 characters | §Method | Shorter tweets removed |
| excluded tweets | retweets, replies, tweets with a URL | §Method | |
| label set | "Democrat" or "Republican" | §Method | Instruction text in Method |
| few-shot examples | none | §Method | Zero-shot: no examples given |
| max output tokens, top-p, seed, system message | not stated | §Method | |
| MTurk workers per tweet | 10 | §Method | Master-qualified, US residents |
| MTurk batch size and controls | 50 questions, 4 control questions per batch | §Method | Fail any control: all answers rejected |
| MTurk rejection for near-random accuracy | yes; test and threshold not stated | §Method | |
| expert coders | 2 political science researchers | §Method | Each labels all 500 tweets |
| reliability metric | Krippendorff's alpha, 95% bootstrap CI | fig. 2 | Coder units and bootstrap size not stated |
Results
Author-reported. Setup: 500 US senators' tweets from 2020, ChatGPT-4 zero-shot with 5 runs at each of two temperatures, 10 MTurk workers per tweet, 2 expert coders §Method §Results.
The text gives no numeric accuracy, alpha or bias values. These are shown only in the figures and are not reproduced here.
| Setting | Metric | Baseline | This paper | Source |
|---|---|---|---|---|
| Single LLM run vs individual coders | accuracy (distribution) | individual MTurk workers and experts | LLM outperforms all individual human classifiers at both temperatures | §Results fig. 1 |
| LLM vs crowd | accuracy | plurality of 10 MTurk workers per tweet | LLM slightly higher, with lower spread at temperature 0.2 | §Results fig. 1 |
| Reliability | Krippendorff's alpha, 95% bootstrap CI | human coders | LLM "much higher"; higher at temperature 0.2 | §Results fig. 2 |
| Bias | share of "Democrat" answers | experts; MTurk | all coders lean Democrat; LLM and experts not significantly different; MTurk significantly more biased | §Results fig. 3 |
| Two example tweets | correct label | MTurk workers | LLM correct on both; 7 of 10 workers on the first, 9 of 10 on the second | §Results |
Two tweets were also followed up with a request for the model to explain its answer §Results. Both explanations were judged plausible by the author, who notes that their stringency can be questioned §Results.
Paper vs code
No official code. The paper gives no code, data or prompt-run link, and the abstract and arXiv metadata name none. I searched GitHub with tornberg chatgpt and chatgpt political twitter annotation; both returned no repositories. The author's GitHub profile could not be located from the paper.
Pitfalls
- Unnumbered paper. Sections, figures and the opening text carry no numbers in the source. Citations use section titles (
[§Method],[§Results]),[intro]for the unnumbered opening, and[fig. 1]to[fig. 3]in order of appearance. The paper has no equations, tables or algorithms. - Model version is not pinned. The paper says "ChatGPT-4 through the API" and gives no snapshot, date or decoding settings beyond temperature. Results from one time point may not reproduce on later model versions.
- Reply parsing is not stated. The paper does not say how a reply that is neither label, or that adds text, is scored.
- Forced guess. The instruction tells the model to "just make your best guess" when unsure. There is no abstain option, so accuracy counts forced guesses only.
- Ground truth is the party of the account. The task asks the model to infer the poster's party, and the label is the account's party. Tweets from politicians may be easier than tweets from ordinary users, which the paper notes but does not test.
- Narrow test. One chamber of US Congress, one election period, one model, 500 tweets, one balanced sample. The paper says the method "could be similarly applied" to ordinary users, but does not test that.
- Balanced classes. The sample is 50/50, so accuracy is not comparable to a skewed real-world base rate.
- Per-run scoring. Figure 1 shows accuracy per model run and per worker, so each run counts as one coder. Whether the LLM is also aggregated across its 5 runs (majority vote or otherwise) is not stated.
- Crowd baseline depends on quality control. In a pre-study without strict quality control, MTurk accuracy was not significantly different from random. The final baseline uses Master qualifications, controls and a rejection rule. The rejection test for near-random accuracy is not stated.
- Expert baseline is weak. The two experts do not specialise in US politics. The paper states this itself §Method.
- Reliability units. The paper computes Krippendorff's alpha but does not say which units are the coders (runs, workers, or experts), or how many bootstrap resamples were drawn fig. 2.
- Bias test not described. The text says the biases are "significantly" different, but names no test or correction §Results. Abstract wording "equal or lower bias" should be read with the text: the LLM and experts are not significantly different, and only MTurk is significantly more biased §Results.
- Reasoning is anecdotal. The two explanations are selected cases. The paper concedes that it is unknown what drives the model's answers.
- No cost figures. The claim that LLMs are "orders of magnitude less costly and time-consuming" §Discussion is not backed by any cost or time data in the paper.
- Known LLM caveats from the paper. Sensitivity to prompt design, emergent zero-shot ability that is not well understood, and bias inherited from training data §Discussion. The paper recommends validating every task.
Lineage
- Builds on: the dataset of van Vliet et al. (2020), used for the tweets §Method. The paper cites Gilardi et al. (2023) and Wu et al. (2023) as related LLM annotation and scaling studies [intro]; no cards exist for them, so nothing from them is used here.
- Compared against: MTurk crowd workers and two expert coders, both from this paper's own study §Method.
- Superseded by: not known from content in this wiki.
Source and license
Adapted from “ChatGPT-4 Outperforms Experts and Crowd Workers in Annotating Political Twitter Messages with Zero-Shot Learning” by Petter Törnberg (arXiv:2304.06588), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors.