An open API service indexing awesome lists of open source software.

https://github.com/datascienceuibk/wikihint

WikiHint: A Human-Annotated Dataset for Hint Ranking and Generation
https://github.com/datascienceuibk/wikihint

Last synced: 2 days ago
JSON representation

WikiHint: A Human-Annotated Dataset for Hint Ranking and Generation

Awesome Lists containing this project

README

          

[English](README.md) | [中文](README.zh.md) | [Deutsch](README.de.md) | [Français](README.fr.md) | [Русский](README.ru.md)

# WikiHint: Ein von Menschen annotierter Datensatz für Hinweisbewertung und -generierung
Huggingface


[![License](https://img.shields.io/badge/License-CC%20BY%204.0-blue)](https://creativecommons.org/licenses/by/4.0/)

WikiHint ist ein **von Menschen annotierter Datensatz**, der für die **automatische Generierung und Bewertung von Hinweisen** bei Faktfragen entwickelt wurde. Der Datensatz basiert auf Wikipedia und enthält **5.000 Hinweise zu 1.000 Fragen**. Er unterstützt die Forschung in den Bereichen **Hinweisbewertung, -ranking und -generierung**.

## Achtung

Ab **Februar 2025** empfehlen wir die Nutzung von **HintEval**, dem Framework für **Hinweiserzeugung und -bewertung**. HintEval enthält den **WikiHint-Datensatz** sowie die Evaluationsmetriken aus der WikiHint-Publikation und macht die Arbeit mit Hinweisen so einfach wie nie zuvor.

Hier geht’s zu HintEval:
- 📖 **[HintEval-Dokumentation](http://hinteval.readthedocs.io/)**
- 📦 **[HintEval PyPI-Installation](https://pypi.org/project/hinteval/)**
- 💻 **[HintEval GitHub-Repository](https://github.com/DataScienceUIBK/HintEval)**
- 📜 **[HintEval-Paper (arXiv)](https://doi.org/10.48550/arXiv.2502.00857)**

Für eine **nahtlose Integration** von Hinweiserzeugung und -bewertung empfehlen wir dringend den **Umstieg** auf **HintEval**!

## 🗂 Überblick

- **1.000 Fragen** mit **5.000 manuell erstellten Hinweisen**.
- Hinweise werden von **menschlichen Annotatoren** nach Nützlichkeit bewertet.
- Evaluierung durch **LLMs (LLaMA, GPT-4)** und **Studien zur menschlichen Leistung**.
- Unterstützt **Hinweisranking** und **automatische Hinweisbewertung**.

## 🔬 Wissenschaftliche Beiträge

✅ **Erster von Menschen annotierter Datensatz** für die Generierung und Bewertung von Hinweisen.
✅ **HintRank:** Eine leichtgewichtige Methode zur automatischen Hinweisbewertung.
✅ **Human-Studie** zur Bewertung der Effektivität von Hinweisen für Benutzer.
✅ **Feinabstimmung von Open-Source-LLMs** (LLaMA-3.1, GPT-4) zur Hinweisgenerierung.

## 📈 Zentrale Erkenntnisse

- **Antwortbewusste Hinweise** verbessern die Effektivität.
- **Feinabgestimmte LLaMA-Modelle** erzeugen bessere Hinweise als Standardmodelle.
- **Kürzere Hinweise** sind tendenziell **effektiver** als längere.
- **Von Menschen erstellte Hinweise** übertreffen LLM-generierte Hinweise in Klarheit und Ranking.

## 🚀 Erste Schritte

### 1️⃣ Repository klonen

```sh
git clone https://github.com/DataScienceUIBK/WikiHint.git
cd WikiHint
```

### 2️⃣ Datensatz laden

```python
import json

with open("./WikiHint/training.json", "r") as f:
training_data = json.load(f)

with open("./WikiHint/test.json", "r") as f:
test_data = json.load(f)

print(f"Trainingsset: {len(training_data)} Fragen")
print(f"Testset: {len(test_data)} Fragen")
```

## 🏆 HintRank: Eine leichtgewichtige Methode zur Hinweisbewertung

HintRank ist eine **automatische Methode zur Bewertung von Hinweisen**, die auf **BERT-basierten Modellen** beruht. Sie nutzt **paarweise Vergleiche**, um die **relative Nützlichkeit von Hinweisen** zu bestimmen.



### ✨ Funktionen:
✔ **Leichtgewichtig**: Läuft lokal ohne hohen Rechenaufwand.
✔ **LLM-freie Bewertung**: Funktioniert ohne **große generative Modelle**.
✔ **An Menschen ausgerichtetes Ranking**: Hohe Korrelation mit **von Menschen zugewiesenen Hinweisbewertungen**.

### 🔍 Funktionsweise:
1. **Verknüpft Frage & zwei Hinweise** → Konvertiert sie in ein BERT-kompatibles Format.
2. **Berechnet die Qualität der Hinweise** → Bestimmt, welcher Hinweis **nützlicher** ist.
3. **Erstellt ein Hinweisranking** → Vergibt Platzierungen basierend auf paarweisen Vergleichen.

## 📌 Nutzung von `HintRank` zur Hinweisbewertung

Das `HintRank`-Modul dient zur **automatischen Bewertung von Hinweisen** anhand ihrer Nützlichkeit mit **BERT-basierten Modellen**.

### 🚀 HintRank-Demo in Google Colab ausführen

Du kannst **HintRank** einfach in deinem Browser über **Google Colab** ausprobieren, ohne eine lokale Installation vornehmen zu müssen. Starte einfach das **[Colab-Notebook](https://colab.research.google.com/github/DataScienceUIBK/WikiHint/blob/main/HintRank/Demo.ipynb)** und erkunde **HintRank** interaktiv.

### 1️⃣ Abhängigkeiten installieren

Falls du `HintRank` lokal ausführst, installiere die erforderlichen Abhängigkeiten:

```sh
pip install transformers torch numpy scipy
```

### 2️⃣ HintRank importieren und initialisieren

Navigiere in das `HintRank`-Verzeichnis und importiere das `hint_rank`-Modul:

```python
from HintRank.hint_rank import HintRank

# HintRank-Modell initialisieren
ranker = HintRank()
```

### 3️⃣ Hinweise für eine Frage bewerten

```python
question = "Was ist die Hauptstadt von Österreich?"
answer = "Wien"
hints = [
"Mozart und Beethoven haben hier gelebt.",
"Es ist eine große Stadt in Europa.",
"Österreichs größte Stadt."
]

# Beispiel für paarweisen Vergleich
better_hint_answer_aware = ranker.pairwise_compare(question, hints[1], hints[2], answer)
better_hint_answer_agnostic = ranker.pairwise_compare(question, hints[0], hints[1])

print(f"Antwortbewusst: Hinweis {2 if better_hint_answer_aware == 1 else 3} ist besser als Hinweis {3 if better_hint_answer_aware == 0 else 2}.")
print(f"Antwortagnostisch: Hinweis {1 if better_hint_answer_agnostic == 1 else 2} ist besser als Hinweis {2 if better_hint_answer_agnostic == 0 else 1}.")
```

### 4️⃣ Listweises Hinweisranking

Mehrere Hinweise auf einmal bewerten:

```python
print("\nAntwortbewusst gerankte Hinweise:")
ranked_hints_answer_aware = ranker.listwise_compare(question, hints, answer)
for i, (hint, _) in enumerate(ranked_hints_answer_aware):
print(f"Rang {i + 1}: {hint}")

print("\nAntwortagnostisch gerankte Hinweise:")
ranked_hints_answer_agnostic = ranker.listwise_compare(question, hints)
for i, (hint, _) in enumerate(ranked_hints_answer_agnostic):
print(f"Rang {i + 1}: {hint}")
```

### 📌 Erwartete Ausgabe

```
Paarweiser Hinweisvergleich
Antwortbewusst: Hinweis 3 ist besser als Hinweis 2.
Antwortagnostisch: Hinweis 2 ist besser als Hinweis 1.

Listweises Hinweisranking
Antwortbewusst gerankte Hinweise:
Rang 1: Österreichs größte Stadt.
Rang 2: Mozart und Beethoven haben hier gelebt.
Rang 3: Es ist eine große Stadt in Europa.

Antwortagnostisch gerankte Hinweise:
Rang 1: Es ist eine große Stadt in Europa.
Rang 2: Österreichs größte Stadt.
Rang 3: Mozart und Beethoven haben hier gelebt.
```

---

## 📊 🆚 Vergleich zwischen WikiHint und TriviaHG-Dataset

Die folgende Tabelle vergleicht **WikiHint** mit **TriviaHG**, dem bisher größten Datensatz zur Hinweisgenerierung. WikiHint zeigt eine **bessere Konvergenz**, **kürzere Hinweise** und **höhere Qualität**, basierend auf mehreren Evaluierungskriterien.

| **Datensatz** | **Subset** | **Relevanz** | **Lesbarkeit** | **Konvergenz** | **Vertrautheit** | **Länge** | **Antwort-Leckage (Ø)** | **Antwort-Leckage (Max.)** |
|--------------|-----------|--------------|----------------|----------------|----------------|----------|----------------|----------------|
| TriviaHG | Gesamter Datensatz | 0.95 | 0.71 | 0.57 | 0.77 | 20.82 | 0.23 | 0.44 |
| WikiHint | Gesamter Datensatz | 0.98 | 0.72 | 0.73 | 0.75 | 17.82 | 0.24 | 0.49 |
| TriviaHG | Training | 0.95 | 0.73 | 0.57 | 0.75 | 21.19 | 0.22 | 0.44 |
| WikiHint | Training | 0.98 | 0.71 | 0.74 | 0.76 | 17.77 | 0.24 | 0.49 |
| TriviaHG | Test | 0.95 | 0.73 | 0.60 | 0.77 | 20.97 | 0.23 | 0.44 |
| WikiHint | Test | 0.98 | 0.83 | 0.72 | 0.73 | 18.32 | 0.24 | 0.47 |

📌 **Wichtige Erkenntnisse**:
- **WikiHint übertrifft TriviaHG** in der **Konvergenz**, was bedeutet, dass seine Hinweise Benutzern **effektiver helfen**, zur richtigen Antwort zu gelangen.
- **WikiHint enthält kürzere Hinweise**, die eine **präzisere und effektivere Unterstützung** bieten.

---

## 📊🤖 Bewertung der generierten Hinweise

Die folgende Tabelle zeigt die **Bewertung der generierten Hinweise** verschiedener **LLMs (LLaMA-3.1, GPT-4)** anhand von **Relevanz, Lesbarkeit, Konvergenz, Vertrautheit, Hinweislänge und Antwort-Leckage**. Sie gibt Einblick, wie sich **Feinabstimmung (FT)** und **Antwortbewusstsein (wA)** auf die Qualität der Hinweise auswirken.

| **Modell** | **Konfiguration** | **Verwendet Antwort?** | **Relevanz** | **Lesbarkeit** | **Konvergenz (LLaMA-8B)** | **Konvergenz (LLaMA-70B)** | **Vertrautheit** | **Länge** | **Antwort-Leckage (Ø)** | **Antwort-Leckage (Max.)** |
|-----------|----------------|------------------|------------|-------------|------------------|------------------|--------------|---------|----------------|----------------|
| **GPT-4** | Vanilla | ✅ | 0.91 | 1.00 | 0.14 | 0.48 | 0.84 | 26.36 | 0.23 | 0.51 |
| **GPT-4** | Vanilla | ❌ | 0.92 | 1.10 | 0.12 | 0.47 | 0.81 | 26.93 | 0.24 | 0.52 |
| **LLaMA-3.1-405b** | Vanilla | ✅ | 0.94 | 1.49 | 0.11 | 0.47 | 0.76 | 41.81 | 0.23 | 0.50 |
| **LLaMA-3.1-405b** | Vanilla | ❌| 0.92 | 1.53 | 0.10 | 0.45 | 0.78 | 50.91 | 0.23 | 0.50 |
| **LLaMA-3.1-70b** | FTwA | ✅ | 0.88 | 1.50 | 0.09 | 0.42 | 0.84 | 43.69 | 0.22 | 0.48 |
| **LLaMA-3.1-70b** | Vanilla | ✅ | 0.86 | 1.53 | 0.05 | 0.42 | 0.80 | 45.51 | 0.23 | 0.50 |
| **LLaMA-3.1-70b** | FTwoA | ❌ | 0.86 | 1.50 | 0.08 | 0.38 | 0.80 | 51.07 | 0.22 | 0.51 |
| **LLaMA-3.1-70b** | Vanilla | ❌ | 0.87 | 1.56 | 0.06 | 0.38 | 0.76 | 53.24 | 0.22 | 0.50 |
| **LLaMA-3.1-8b** | FTwA | ✅ | 0.78 | 1.63 | 0.05 | 0.37 | 0.79 | 50.33 | 0.22 | 0.52 |
| **LLaMA-3.1-8b** | Vanilla | ✅ | 0.81 | 1.72 | 0.05 | 0.32 | 0.80 | 54.38 | 0.22 | 0.50 |
| **LLaMA-3.1-8b** | FTwoA | ❌ | 0.76 | 1.70 | 0.03 | 0.32 | 0.80 | 55.02 | 0.22 | 0.51 |
| **LLaMA-3.1-8b** | Vanilla | ❌ | 0.78 | 1.76 | 0.04 | 0.30 | 0.83 | 52.99 | 0.22 | 0.50 |

📌 **Wichtige Erkenntnisse**:
- **Relevanz**: **Größere Modelle (405b, 70b) generieren bessere Hinweise** als kleinere (8b).
- **Lesbarkeit**: **GPT-4 erzeugt die am besten lesbaren Hinweise**.
- **Konvergenz**: **Antwortbewusste Hinweise (wA) verbessern die Qualität der Hinweise**.
- **Vertrautheit**: Größere Modelle erstellen **vertrautere Hinweise**, basierend auf allgemeinem Wissen.
- **Hinweislänge**: **Feinabgestimmte Modelle (FTwA, FTwoA) erzeugen kürzere und bessere Hinweise**.

---

## 📂 Verzeichnisstruktur

```
📂 WikiHint/ # 🗂 Datensatzdateien
│ ├── 📄 Pipeline.png # 📊 Visualisierung der Datensatz-Pipeline
│ ├── 📄 training.json # 📊 Trainingsdatensatz (900 Fragen, 4500 Hinweise)
│ ├── 📄 test.json # 📊 Testdatensatz (100 Fragen, 500 Hinweise)

├── 📂 Experiments/ # 🧪 Modellgenerierte Hinweise
│ ├── 📄 GPT-4-Vanilla-answer-agnostic.json
│ ├── 📄 LLaMA-3.1-70b-FTwA-answer-aware.json

├── 📂 HintRank/ # 🏆 Methode zur Hinweisbewertung
│ ├── 📄 EvaluationMethod.png # 📊 Visualisierung der HintRank-Methode
│ ├── 📄 hint_rank.py # 📜 HintRank-Implementierung

├── 📂 HumanEvaluation/ # 👨‍🔬 Menschliche Evaluationsdaten
│ ├── 📂 Person_1/
│ │ ├── 📑 Part_1.xlsx
│ │ ├── 📑 Part_2.xlsx

│ ├── 📂 Person_2/ (Gleiche Struktur wie Person_1)
│ ├── 📂 Person_3/ (Gleiche Struktur wie Person_1)

└── 📘 README.md # 📖 Diese Datei
```

---

## 📜 Lizenz

Dieses Projekt steht unter der **Creative Commons Attribution 4.0 International License (CC BY 4.0)**. Sie können den Datensatz frei nutzen, teilen und anpassen, solange eine korrekte Quellenangabe erfolgt.

---

## 📑 Zitation

Falls Sie unsere Arbeit nützlich finden, zitieren Sie bitte [📜 unser Paper](https://doi.org/10.1145/3726302.3730284):

Jamshid Mozafari, Florian Gerhold, and Adam Jatowt. 2025. WikiHint: A Human-Annotated Dataset for Hint Ranking and Generation. In Proceedings of the 48th International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR '25). Association for Computing Machinery, New York, NY, USA, 3821–3831. https://doi.org/10.1145/3726302.3730284

### 📄 BibTeX:
```bibtex
@inproceedings{10.1145/3726302.3730284,
author = {Mozafari, Jamshid and Gerhold, Florian and Jatowt, Adam},
title = {WikiHint: A Human-Annotated Dataset for Hint Ranking and Generation},
year = {2025},
isbn = {9798400715921},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
url = {https://doi.org/10.1145/3726302.3730284},
doi = {10.1145/3726302.3730284},
booktitle = {Proceedings of the 48th International ACM SIGIR Conference on Research and Development in Information Retrieval},
pages = {3821–3831},
numpages = {11},
keywords = {hint dataset, hint evaluation, hint generation, hint ranking},
location = {Padua, Italy},
series = {SIGIR '25}
}
```

---

## 🙏 Danksagungen

Vielen Dank an unsere Mitwirkenden und die Universität Innsbruck für die Unterstützung dieses Projekts. 🚀