Build, Borrow, or Just Fine-Tune? A Political Scientist's Guide to Choosing NLP Models
Organizations: School of Social and Behavioural Sciences, Erasmus University Rotterdam
Abstract
Political scientists increasingly face a consequential choice when adopting natural language processing tools: build a domain-specific model from scratch, borrow and adapt an existing one, or simply fine-tune a general-purpose model on task data? Each approach occupies a different point on the spectrum of performance, cost, and required expertise, yet the discipline has offered little empirical guidance on how to navigate this trade-off. This paper provides such guidance. Using conflict event classification as a test case, I fine-tune ModernBERT on the Global Terrorism Database (GTD) to create Confli-mBERT and systematically compare it against ConfliBERT, a domain-specific pretrained model that represents the current gold standard. Confli-mBERT achieves 75.46% accuracy compared to ConfliBERT's 79.34%. Critically, the four-percentage-point gap is not uniform: on high-frequency attack types such as Bombing/Explosion (F1 = 0.95 vs. 0.96) and Kidnapping (F1 = 0.92 vs. 0.91), the models are nearly indistinguishable. Performance differences concentrate in rare event categories comprising fewer than 2% of all incidents. I use these findings to develop a practical decision framework for political scientists considering any NLP-assisted research task: when does the research question demand a specialized model, and when does an accessible fine-tuned alternative suffice? The answer, I argue, depends not on which model is "better" in the abstract, but on the specific intersection of class prevalence, error tolerance, and available resources. The model, training code, and data are publicly available on Hugging Face.
Figures & tables
| Attack Type | Count | Percentage |
|---|---|---|
| Bombing/Explosion | 14,578 | 35.9% |
| Armed Assault | 10,365 | 25.5% |
| Unknown | 4,328 | 10.6% |
| Facility/Infrastructure Attack | 4,176 | 10.3% |
| Hostage Taking (Kidnapping) | 3,523 | 8.7% |
| Assassination | 2,990 | 7.4% |
| Attack Type | Training Count ( ) | Weight ( ) |
|---|---|---|
| Bombing/Explosion | 83,710 | 2.04 |
| Armed Assault | 43,425 | 3.93 |
| Assassination | 18,575 | 9.19 |
| Facility/Infrastructure Attack | 11,111 | 15.35 |
| Hostage Taking (Kidnapping) | 10,789 | 15.81 |
| Unknown | 6,485 | 26.31 |
| Parameter | Value |
|---|---|
| Base model | answerdotai/ModernBERT-base (149M params.) |
| Number of output labels | 9 |
| Maximum sequence length | 512 tokens |
| Training epochs | 5 |
| Per-device batch size | 16 |
| Learning rate |
| Metric | ConfliBERT | Confli-mBERT | ConflLlama |
|---|---|---|---|
| Overall Accuracy | 79.34% | 75.46% | 72.41% |
| Attack Type | ConfliBERT | Confli-mBERT | ConflLlama |
|---|---|---|---|
| Bombing/Explosion | 0.96 | 0.95 | 0.91 |
| Armed Assault | 0.74 | 0.72 | 0.69 |
| Unknown | 0.61 | 0.59 | 0.47 |
| Kidnapping | 0.91 | 0.92 | 0.84 |
| Assassination | 0.79 | 0.66 | 0.66 |
| Facility/Infrastructure | 0.73 | 0.73 | 0.67 |
| Attack Type | ConfliBERT AUC | Confli-mBERT AUC | Difference |
|---|---|---|---|
| Bombing/Explosion | 0.9905 | 0.9688 | +0.0217 |
| Hostage Taking (Kidnapping) | 0.9860 | 0.9585 | +0.0275 |
| Assassination | 0.9613 | 0.7814 | +0.1799 |
| Armed Assault | 0.9244 | 0.8468 | +0.0776 |
| Unknown | 0.9225 | 0.7640 | +0.1585 |
| Facility/Infrastructure Attack | 0.9193 | 0.8211 | +0.0982 |
| Attack Type | ConfliBERT | Confli-mBERT | Difference | Diff % |
|---|---|---|---|---|
| Bombing/Explosion | 14,086 | 13,780 | +306 | +2.2% |
| Armed Assault | 7,662 | 8,056 | 394 | 5.1% |
| Hostage Taking (Kidnapping) | 3,096 | 3,243 | 147 | 4.7% |
| Facility/Infrastructure Attack | 2,639 | 2,731 | 92 | 3.5% |
| Unknown | 2,381 | 2,463 | 82 | 3.4% |
| Assassination | 2,203 | 1,720 | +483 | +21.9% |
| Error Type | ConfliBERT | Confli-mBERT | Difference | Better Model |
|---|---|---|---|---|
| Armed misclassified as Assassination | 232 | 294 | +62 | ConfliBERT |
| Armed misclassified as Unknown | 820 | 1,050 | +230 | ConfliBERT |
| Assassination misclassified as Armed | 350 | 840 | +490 | ConfliBERT |
| Bombing misclassified as Armed | 88 | 405 | +317 | ConfliBERT |
| Bombing misclassified as Unknown | 60 | 234 | +174 | ConfliBERT |
| Kidnapping misclassified as Armed | 107 | 641 | +534 | ConfliBERT |
| Model & Prevalence Tier | True Pos. Rate | False Pos. Rate | Precision | F1 Score |
|---|---|---|---|---|
| ConfliBERT – High Prevalence | 83.0% | 3.7% | 86.2% | 0.8458 |
| Confli-mBERT – High Prevalence | 84.0% | 5.6% | 80.8% | 0.8235 |
| ConfliBERT – Medium Prevalence | 67.6% | 1.1% | 86.1% | 0.7572 |
| Confli-mBERT – Medium Prevalence | 62.1% | 1.6% | 79.9% | 0.6899 |
| ConfliBERT – Low Prevalence | 53.3% | 0.1% | 73.8% | 0.6188 |
| Confli-mBERT – Low Prevalence | 25.9% | 0.3% | 36.6% | 0.3030 |
| Type | Model | Accuracy | Micro F1 | Macro F1 |
|---|---|---|---|---|
| Fine-tuned | ConfliBERT (110M) | 79.70% | 0.831 | 0.708 |
| Confli-mBERT (177M) | 75.80% | 0.797 | 0.580 | |
| ConflLlama-Q8 (8B) | 72.85% | 0.759 | 0.610 | |
| Commercial API | Gemini 3 Flash † | 65.85% | 0.730 | 0.602 |
| Claude Haiku 4.5 † | 60.95% | 0.664 | 0.526 | |
| DeepSeek V3.2 | 56.45% | 0.665 | 0.492 |
| Model | Input | Output | 2,000 | 37,709 | 170,623 |
|---|---|---|---|---|---|
| ($/M tok.) | ($/M tok.) | rows | rows a | rows b | |
| Claude Haiku 4.5 | $1.00 | $5.00 | $1.00 | $18.85 | $85.31 |
| Gemini 3 Flash | $0.50 | $3.00 | $0.53 | $9.99 | $45.22 |
| DeepSeek V3.2 | $0.26 | $0.38 | $0.20 | $3.77 | $17.06 |
| 3-model total | — | — | $1.73 | $32.61 | $147.59 |
LLM Fine-Tuning
LLM fine-tuning adapts pretrained large language models to tasks, domains, languages, and behaviors through additional training.
See all 753 papers