wikillm

Paper · 2023-02-21 · cs.CL, cs.AI, cs.CY, cs.LG

ChatGPT: Jack of all trades, master of none

Tests ChatGPT (version not stated) on 25 analytical NLP tasks, mostly subjective, with prompts and manual answer extraction. Averaged over tasks, it scores 56.5 against 73.7 for the best reference system, a 25.5% loss; emotion tasks lose most. Adds personalized in-context prompts, prompt-pattern and context tests, and a GPT-4 check on five tasks. Author-reported.

LLM evaluationPrompt engineeringIn-context learningchatgptllm-evaluationnlp-benchmarkspromptingpersonalizationevaluation-study

arXivPDFCodeMarkdown14 min read

AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Chatbots are often judged by how fluent their answers sound. This paper asks a plainer question: when you give ChatGPT ordinary text-analysis jobs, such as spotting spam, judging the sentiment of a post, or working out which emotions a sentence conveys, how close does it come to systems built for each job? The authors turned 25 datasets, most of them public, into questions, asked ChatGPT, and scored its answers against the human labels. ChatGPT is a generalist that never beats the best specialised systems here. It does worst on the most subjective tasks, especially emotion. They also tried a few tricks: giving the chatbot labelled examples from one annotator so it could imitate that person, changing the wording of prompts, and checking whether earlier messages in the same chat affect later answers. The numbers describe one chatbot at one time, not a fixed property of the product.

TL;DR

  • Evaluates ChatGPT on 25 analytical NLP tasks, comparing its answers with labels and with the best reference system for each task §1 §4 §5.
  • Averaged over all 25 tasks, ChatGPT scores 56.51 against 73.71 for the reference, a loss of 25.50% tab. 2.
  • The loss is largest on emotion tasks (52.59% on average) and smallest on semantic tasks (12.90%) tab. 2.
  • Scores are author-reported. The main runs used an unofficial API client, answers were extracted by hand, and the ChatGPT version and sampling settings are not stated §5.2 §5.3.

Problem

Early ChatGPT evaluations covered one task at a time, were often manual, and used small samples. Benchmark datasets rarely appeared §2. The authors ask whether ChatGPT performs as well as the best recent models on typical analytical NLP tasks, which are mostly classification §3 §4. Many of these tasks are subjective, even for people, so the ground truth is unclear §1. Whether ChatGPT was trained on each dataset is unknown. The authors rate the likelihood by hand §4 tab. 1.

Method

The study runs in three stages: build prompts from each dataset, query the chatbot and extract its answers, then score those answers against a reference §5 fig. 3.

  1. Select tasks and samples. Twenty-five tasks, 23 in English and 2 in Polish §4. Most datasets are public; ClarinEmo is unpublished §4. Where a dataset is too large for the query budget, the authors draw a random subset from its test or dev split. Subset sizes are in tab. 1.
  2. Build a prompt per item. Each prompt has three parts: a task instruction, the input text, and the allowed labels. The answer is requested as a Python list containing the chosen label, or as a number, emoji or JSON for some tasks §5.1 §7.1.
  3. Personalized prompts. For the "Per" tasks and the GoEmoPer variants, the prompt first lists up to three labelled texts from the same annotator, then asks for that annotator's label on a new text §6.3 [app. "Example prompts", AggressionPer]. The selection rule is not stated in the paper; see §Paper vs code.
  4. Query. Prompts go through an unofficial API client (PyGPT), using up to 20 accounts in parallel. A new conversation is not forced for each prompt, so earlier messages can remain in context §5.1 §5.3.
  5. Extract answers. Raw answers are parsed by hand. Typos in label names are mapped to the intended label. Answers outside the label set become "none" and are excluded from scoring §5.2.
  6. Score. F1 macro for most tasks, accuracy for CoLa, WNLI, WordContext and MathQA. Only valid, post-processed cases count §5.4 tab. 1.
  7. Reference. Where possible, the authors rerun the best available model (marked "Our" in tab. 2) using its source code. Otherwise they take the score reported in the source paper ("Paper") §5.3.
  8. Derived measures. Loss, difficulty and gain, defined below §5.4 §6.2 §6.3.

Further analyses: context and conversation effects on SQuAD §6.4, availability of datasets for training §6.5, prompt patterns §6.6, GPT-4 on five tasks §6.7, expert review of disagreements §7.2, and ChatGPT's own explanations §7.3. Limitations are listed in §8.

Task profile (the paper's counts, per task):

IDTaskCat.TestUsedNonePost-processedN
1AggressionP23153100013151 (15.1%)987
2AggressionPerP34958210001992 (9.2%)981
3CoLaS1042104200 (0%)1042
4ColBERTP400001000593 (9.3%)995
5SarcasmP596710001061 (6.1%)990
6SpamP11151115314 (1.3%)1112
7WordContextS63863805 (0.8%)638
8TextEntailS27727700 (0%)277
9WNLIS717100 (0%)71
10SQuADS1187310000247 (24.7%)1000
11MathQAS1319100001 (0.1%)999
12ClarinEmo (PL)P1264126409 (0.7%)1264
13GoEmoP542710001887 (8.7%)1000
14GoEmoPer0P194701151281 (0.1%)1123
15GoEmoPer1P194701151110 (0%)1140
16GoEmoPer2P19470115180 (0%)1143
17GoEmoPer3P194701151100 (0%)1141
18UnhealthyP44354100022348 (34.8%)963
19UnhealthyPerP2279751000915 (1.5%)991
20PolEmo (PL)P820820323 (2.8%)817
21TweetEmojiP50000166620 (0%)1664
22TweetSentP1228351430245 (4.8%)5143
23TweetStanceS12491249799 (7.9%)1249
24ReAdingS488710004206 (20.6%)996
25WSDS725372535176 (2.4%)7253

Cat.: P = pragmatic, S = semantic. Test = size of the test or dev split; Used = prompts sent; None = answers outside the label set; N = cases scored tab. 1.

Prompt schema as the paper shows it for Aggression §5.1:

Pseudocode
Instruction: Which one of the attributes "aggressive" or "non-aggressive"
             describes a given text? Write the answer as a Python list.
Text:        <input text>
ChatGPT answer (raw):       ["non-aggressive"]
Extracted answer:           non-aggressive

Evaluation loop for one task, as the paper describes it:

Pseudocode
# Score one task with ChatGPT  [§4] [§5.1] [§5.2] [§5.4]
# Input:  dataset (texts, gold labels), label set, instruction
# Output: F1 macro, or accuracy for four tasks, over valid answers

def evaluate_task(dataset, label_set, instruction, n_used):
    # Draw a random subset of the test or dev split  [§4]
    subset = random_sample(dataset, size=n_used)
    # One prompt per item: instruction, text, allowed labels  [§5.1]
    prompts = [
        build_prompt(instruction, item.text, label_set)
        for item in subset
    ]
    # Send each prompt and keep the raw answer as returned  [§5.3]
    raw_answers = [chat_model(prompt) for prompt in prompts]
    # Map raw answers to labels; typos are fixed by hand  [§5.2]
    labels = [extract_label(answer, label_set) for answer in raw_answers]
    # Labels outside the set become "none" and are not scored  [§5.2]
    valid = [
        (label, item.gold)
        for label, item in zip(labels, subset)
        if label != "none"
    ]
    return score(valid)  # [§5.4]

Personalized prompt, as the paper describes it. The selection rule is not stated; the code is discussed in §Paper vs code:

Pseudocode
# Build a personalized in-context prompt  [§6.3]
# Input:  annotator_items (texts with that annotator's labels), target text
# Output: prompt string

def personalized_prompt(annotator_items, target_text):
    # Pick up to three labelled texts from the same annotator  [§6.3]
    examples = select_examples(annotator_items, max_count=3)
    # Show each example as text with the annotator's label  [§6.3]
    context = "\n".join(
        "Text: " + example.text + "; Attribute: " + example.label
        for example in examples
    )
    # Ask for the label of the new text in the same format  [§5.1]
    return context + ask_for_label(target_text)

Key equations. The paper does not number them; they are cited by section.

F1_{macro} = \frac{1}{Q} \sum_{i=1}^{Q} \frac{2\, p_i\, r_i}{p_i + r_i} §5.4

Here Q is the number of labels, and p_i and r_i are the precision and recall for label i §5.4.

\mathrm{Loss} = \frac{100\% \cdot (\mathrm{SOTA} - \mathrm{ChatGPT})}{\mathrm{SOTA}} §5.4

\mathrm{Difficulty} = 100\% - \mathrm{SOTA} §6.2

\mathrm{Gain} = \frac{100\% \cdot (\mathrm{Per} - \mathrm{NonPer})}{100\% - \mathrm{NonPer}} §5.4

Gain compares a personalized in-context run (Per) with the non-personalized reference (NonPer), both as F1 values §5.4 fig. 9.

Hyperparameters

The paper gives no model version and no sampling settings. Items marked "not stated" should be taken as unknown, not as defaults.

NameValueWhereNotes
ModelChatGPT, version not stated§5.3Release or snapshot not given
Access, main runsUnofficial API client (PyGPT), session-based§5.3 interrogate.pyUp to 20 accounts; 13 accounts in §8 item 6
Access, prompt patternsOfficial OpenAI API, "default API parameters"§6.6Values of the defaults not stated
Temperature, top-p, max tokensnot stated§5.3 §6.6No such setting or model name found in the client or READMEs
Conversation handlingOne conversation shared across prompts, not forced per prompt§5.1Separate-conversation variant in §6.4
Items per taskRandom subset of the split, sizes in the task profile table§4 tab. 1Full split only where Used = Test
Total promptsMore than 38,000§5.3Footnote: 35,142 Used plus 3k for §6.4
Personalization contextUp to 3 labelled texts from the same annotator§6.3Selection rule differs in code; see §Paper vs code
Random seed, AggressionPer context2202_AggressionPer.ipynb cell-7Seeds the test-item draw only
Random seed, GoEmoPer rater subset7; up to 15 items per rater14_15_16_17_GoEmoPer_0_1_2_3.ipynb [#L586-L600]Seeds the item draw; context draw below is unseeded
Context examples, GoEmoPerUp to 314_15_16_17_GoEmoPer_0_1_2_3.ipynbSet by NUMBER_OF_MAX_CONTEXTS = 3
Unanswerable-question test300 unanswerable SQuAD v2 questions§6.4Accuracy, F1, detection counts tab. 3
Access rateAbout 50 prompts per hour per token before a temporary block; 2–3k per day§8 item 6Blocks lasted mostly under an hour
GPT-4 access limit25 prompts per 3 hours§6.7 footnoteLimited to five tasks
Expert review sample100 random cases for each of 4 datasets§7.2Two experts (psychologist, linguist); no guidelines
Rate-limit wait (client)600 s after a rate-limit statusinterrogate.pyClient timeout 600 s at interrogate.py

Results

Author-reported. ChatGPT is run through the unofficial client; the reference is the authors' rerun ("Our") or the value from the source paper ("Paper"). Scores are percentages.

Table 2 (all 25 tasks). Difficulty = 100 − reference; Loss from the formula above tab. 2:

IDTaskCat.MeasureReferenceChatGPT (a)Reference (b)Loss
1AggressionPF1 macroOur69.1074.457.19
2AggressionPerPF1 macroOur72.5781.0310.44
3CoLaSAccuracyPaper80.8286.406.46
4ColBERTPF1 macroOur86.4798.5012.21
5SarcasmPF1 macroOur49.8853.576.89
6SpamPF1 macroOur82.6799.4216.85
7WordContextSAccuracyPaper64.5874.0012.73
8TextEntailSF1 macroPaper88.0992.104.35
9WNLISAccuracyPaper81.6997.9016.56
10SQuADSF1 macroPaper69.2190.7523.74
11MathQASAccuracyPaper71.4083.2014.18
12*ClarinEmoPF1 macroOur53.2368.0421.77
13*GoEmoPF1 macroOur25.5552.7551.56
14*GoEmoPer0PF1 macroPaper23.7454.5056.44
15*GoEmoPer1PF1 macroPaper19.0066.1071.26
16*GoEmoPer2PF1 macroPaper20.3466.1069.23
17*GoEmoPer3PF1 macroPaper23.4166.1064.58
18UnhealthyPF1 macroOur45.2150.9611.28
19UnhealthyPerPF1 macroOur54.0270.9223.83
20*PolEmoPF1 macroOur44.0876.4442.33
21*TweetEmojiPF1 macroOur18.1932.2043.51
22TweetSentPF1 macroOur63.3272.0712.14
23TweetStanceSF1 macroOur56.4467.4216.29
24ReAdingSF1 macroOur76.3684.719.86
25WSDSF1 macroPaper73.3083.2011.90

Asterisk = emotion task. Summary rows, as the paper reports them tab. 2:

SubsetChatGPT (a)Reference (b)LossDifficulty
All 25 tasks56.51 ± 23.3173.71 ± 16.7425.50 ± 21.4426.29
Without the 8 emotion tasks69.71 ± 12.7680.04 ± 14.3612.76 ± 5.4919.96
Only emotion tasks28.44 ± 18.7660.28 ± 14.8752.59 ± 20.1039.72
Only pragmatic tasks46.92 ± 23.4267.70 ± 17.1832.59 ± 23.8532.30
Only semantic tasks73.54 ± 9.5984.41 ± 9.2612.90 ± 5.8015.59

Other reported results:

  • Difficulty and loss. Pearson correlation between difficulty and loss is 0.46 across the 25 tasks. The authors call the sample small §6.2.

  • Personalization §6.3 fig. 9. The paper reports loss gaps for AggressionPer and UnhealthyPer and a gain for GoEmoPer3 over GoEmoPer0 in the text. These numbers do not match tab. 2; see §Pitfalls.

  • Context, SQuAD v2 §6.4 tab. 3:

    SetupAccuracyF1Unanswerable detectedNot detected
    Original set56.5069.2176 (25.33%)224 (74.67%)
    One week later55.4068.7264 (21.33%)236 (78.67%)
    New order (unanswerable first)57.0069.7674 (24.67%)226 (75.33%)
    Separate conversations53.6067.2360 (20.00%)240 (80.00%)

    The authors say these differences are not significant and that repeated launches vary.

  • Prompt patterns §6.6 tab. 4: initial ChatGPT average 59.4, pattern average 56.5 (−2.9). Table rows point to appendix chats by label:

    IDTaskChat (label in source)Initial (a)Pattern (b)Difference
    8TextEntaileng788.177.6−10.5
    8TextEntaileng888.181.2−6.9
    8TextEntaileng988.177.6−10.5
    8TextEntaileng1088.175.1−13.0
    9WNLIeng1181.774.2−7.5
    9WNLIeng1281.777.5−4.2
    9WNLIeng1381.776.1−5.6
    13GoEmoeng025.621.8−3.8
    13GoEmoeng125.626.4+0.8
    13GoEmoeng225.623.7−1.9
    13GoEmoeng325.624.6−1.0
    20PolEmoeng444.138.6−5.5
    20PolEmoeng544.157.8+13.7
    20PolEmoeng644.158.9+14.8
  • GPT-4 on five tasks §6.7 tab. 5. Both models use the same prompts. "All tasks" is the average over these five tasks only.

    IDTaskChatGPT (a)GPT-4 (b)DifferenceReference (c)ChatGPT lossGPT-4 loss
    8TextEntail88.191.33.292.14.30.9
    9WNLI81.791.69.997.916.56.4
    10SQuAD69.276.37.190.823.816.0
    13GoEmo25.623.1−2.552.851.656.3
    20PolEmo44.141.0−3.176.442.346.3
    All five61.7 (printed "61,7")64.72.982.027.725.2
  • Expert review of label disagreements §7.2 tab. 6. Share of values the experts accepted, for human annotations and for ChatGPT answers:

    TaskHuman annotation approvedChatGPT answer approved
    Aggression68%51%
    TweetSent69%55%
    GoEmo61%73%
    Unhealthy43%81%

    A finer split is in tab. 7. For example, for Unhealthy, 57% of cases had only ChatGPT's label accepted, and for Aggression, 48% had only the human label accepted.

Paper vs code

The official repository is CLARIN-PL/chatgpt-evaluation-01-2023 at commit 737e3882f50dff0de63d4fa95c63425afc01d06c, under the MIT license (copyright CLARIN-PL, 2023). The paper links it in §5.1; its README cites this paper. The repository holds prompt-generation notebooks, the ChatGPT and reference runs, an interrogation client (interrogation-api/), and the results sheet ChatGPT Evaluation v2.0.xlsx. We did not rerun any query or recompute any score.

Discrepancies:

  • Personalized context selection, AggressionPer. The paper's title and §6.3 describe "random" contextual few-shot personalization. The notebook takes, for each annotator, the three texts with the highest inter-annotator standard deviation, sorted in descending order, from the annotator's non-selected items 02_AggressionPer.ipynb cell-9. This is deterministic, not random. The notebook is one JSON line, so only the cell is cited.
  • Personalized context selection, GoEmoPer. Here the context is random: up to three other texts from the same rater, drawn with pandas sample and no random_state in that cell 14_15_16_17_GoEmoPer_0_1_2_3.ipynb. Before that, a seeded draw (seed 7) keeps up to 15 items per rater 14_15_16_17_GoEmoPer_0_1_2_3.ipynb.
  • Prompt formatting, AggressionPer. The notebook joins context items with "; Attribute:" on one line each. The paper's example puts "Attribute:" on its own line app. "Example prompts", AggressionPer. This is minor but matters for exact replication.
  • Access. The paper says the main runs used the PyGPT client §5.3. The repository's client reads a session token from a browser cookie file and waits 600 s after a rate-limit status interrogate.py interrogate.py. This is consistent with the paper but shows that the runs depended on a live web session.
  • Model and settings. Neither the model version nor any sampling parameter appears in the repository. The grep covered src/pygpt.py and both READMEs.

Pitfalls

  • Unstated model and settings. The version of ChatGPT, the query dates, and the sampling settings are not given. The authors observed non-deterministic answers across launches §6.4. Treat the scores as a snapshot, not as a property of a named model.
  • "None" answers are excluded. Answers outside the label set, and policy refusals, are removed before scoring §5.2 §8 items 3, 4 and 9. The scores measure accuracy on valid answers, not coverage. Per-task None counts range from 0 to 28 tab. 1.
  • Manual extraction and label mapping. Typos were mapped to labels "assuming the intended answer" §5.2. No written rules are given. Check the raw answers in the repository's spreadsheet before relying on any mapping. Post-processing affects more than 15% of cases for Aggression, SQuAD, Unhealthy and ReAding §5.2.
  • Subsets, no intervals. Most tasks are scored on random subsets §4. The paper gives standard deviations across tasks but no confidence intervals per task tab. 2. Differences of a few points may be noise.
  • Mixed references. "Our" rows use the authors' rerun; "Paper" rows use numbers from other setups and splits §5.3 tab. 2. The authors note the setups often differ. Loss values mix both kinds.
  • Mixed metrics. Accuracy is used for CoLa, WNLI, WordContext and MathQA; F1 macro otherwise §5.4. The overall averages combine both.
  • Loss and difficulty are linked. Difficulty is 100 minus the reference score §6.2, so low-scoring references produce high difficulty and large losses partly by construction. The correlation of 0.46 is from 25 tasks, and the authors call it preliminary §6.2.
  • Availability is a judgement. The 0–3 availability ratings are the authors' estimates §4 tab. 1. The "Trained" column records ChatGPT's own claim §6.5, which the authors did not verify.
  • Personalization numbers in the text do not match Table 2. The text gives a gain of 4.08 pp for GoEmoPer3 over GoEmoPer0 §6.3. Table 2 gives 23.41 against 23.74, a difference of −0.33 pp tab. 2. The 3.25 and 12.55 pp loss gaps for AggressionPer and UnhealthyPer §6.3 match no difference in tab. 2, where the gaps against the reference are 8.46 and 16.90 pp. Figure 9 carries the gain values but no numbers in the text fig. 9. More context did not help monotonically: GoEmoPer1 (19.00) and GoEmoPer2 (20.34) score below GoEmoPer0 (23.74) tab. 2.
  • Context effects are not significant. The authors say the differences in the SQuAD context test are not significant §6.4.
  • Prompt wording moves results a lot. One prompt per task is used for the main numbers §5.1. The prompt was tuned by hand on a small validation sample §7.1. Changing the wording moved PolEmo by up to +14.8 pp and TextEntail by up to −13.0 pp tab. 4. The text cites "patterns 76 and 77"; the table lists chat labels eng5 and eng6, and we could not map the numbers without rendering.
  • Access limits and account counts. Section 5.3 says up to 20 accounts; §8 item 6 says 13. Throughput was about 2–3k prompts per day at the end §8 item 6.
  • Table artifacts. The GPT-4 average is printed "61,7" tab. 5. The "All tasks" rows in tab. 4 and tab. 5 average different subsets, so they cannot be compared with the 25-task average of 56.51 tab. 2.
  • Expert review is informal. The two experts had no written guidelines and no inter-annotator agreement is reported §7.2. The approval shares tab. 6 are not reproducible measures.
  • GPT-4 is a small sample. Only five tasks, limited by a prompt quota §6.7.
  • Version. This card follows arXiv v4 (updated 2023-06-09), the version in our metadata.

Lineage

  • Builds on: InstructGPT, whose reinforcement learning from human feedback motivates the study §1 (not carded; named only). The authors' earlier work on personalized NLP is cited for the personalization idea §6.3 (not carded; named only).
  • Compared against: the best available reference model for each task tab. 2, and GPT-4 on five tasks tab. 5.

Source and license

Adapted from “ChatGPT: Jack of all trades, master of none” by Jan Kocoń, Igor Cichecki, Oliwier Kaszyca, Mateusz Kochanek, Dominika Szydło, Joanna Baran, Julita Bielaniewicz, Marcin Gruza, Arkadiusz Janz, Kamil Kanclerz, Anna Kocoń, Bartłomiej Koptyra, Wiktoria Mieleszczenko-Kowszewicz, Piotr Miłkowski, Marcin Oleksy, Maciej Piasecki, Łukasz Radliński, Konrad Wojtasik, Stanisław Woźniak, Przemysław Kazienko (arXiv:2302.10724), 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. Code citations refer to https://github.com/CLARIN-PL/chatgpt-evaluation-01-2023 at commit 737e3882f50d (MIT). Any quoted code is shown under that license.