framolfese
commited on
Commit
โข
a97ae7b
1
Parent(s):
a98e5a4
Create README.md
Browse files
README.md
ADDED
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
license: cc
|
3 |
+
language:
|
4 |
+
- en
|
5 |
+
base_model:
|
6 |
+
- intfloat/e5-base-v2
|
7 |
+
tags:
|
8 |
+
- retrieval
|
9 |
+
- question answering
|
10 |
+
---
|
11 |
+
|
12 |
+
<div align="center">
|
13 |
+
<img src="https://github.com/SapienzaNLP/zebra/blob/master/assets/zebra.png?raw=true" width="100" height="100">
|
14 |
+
</div>
|
15 |
+
|
16 |
+
<div align="center">
|
17 |
+
<h1>ZEBRA: Zero-Shot Example-Based Retrieval Augmentation for Commonsense Question Answering</h1>
|
18 |
+
</div>
|
19 |
+
|
20 |
+
<div style="display:flex; justify-content: center; align-items: center; flex-direction: row;">
|
21 |
+
<a href="https://2024.emnlp.org/"><img src="https://img.shields.io/badge/EMNLP-2024-4b44ce"></a>
|
22 |
+
<a href="https://arxiv.org/abs/2410.05077"><img src="https://img.shields.io/badge/arXiv-paper-b31b1b.svg"></a>
|
23 |
+
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><img src="https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg"></a>
|
24 |
+
<a href="https://huggingface.co/collections/sapienzanlp/zebra-66e3ec50c8ce415ea7572d0e"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Collection-FCD21D"></a>
|
25 |
+
<a href="https://github.com/SapienzaNLP/zebra"><img src="https://img.shields.io/badge/GitHub-Repo-121013?logo=github&logoColor=white"></a>
|
26 |
+
</div>
|
27 |
+
|
28 |
+
<div align="center"> A retrieval augmentation framework for zero-shot commonsense question answering with LLMs. </div>
|
29 |
+
|
30 |
+
## ๐ ๏ธ Installation
|
31 |
+
|
32 |
+
Installation from PyPi
|
33 |
+
|
34 |
+
```bash
|
35 |
+
pip install zebra-qa
|
36 |
+
```
|
37 |
+
|
38 |
+
Installation from source
|
39 |
+
|
40 |
+
```bash
|
41 |
+
git clone https://github.com/sapienzanlp/zebra.git
|
42 |
+
cd zebra
|
43 |
+
conda create -n zebra python==3.10
|
44 |
+
conda activate zebra
|
45 |
+
pip install -e .
|
46 |
+
```
|
47 |
+
|
48 |
+
## ๐ Quick Start
|
49 |
+
|
50 |
+
ZEBRA is a plug-and-play retrieval augmentation framework for **Commonsense Question Answering**. \
|
51 |
+
It is composed of three pipeline stages: *example retrieval*, *knowledge generation* and *informed reasoning*.
|
52 |
+
|
53 |
+
- Example retrieval: given a question, we retrieve relevant examples of question-knowledge pairs from a large collection
|
54 |
+
- Knowledge generation: we prompt an LLM to generate useful explanations for the given input question by leveraging the relationships in the retrieved question-knowledge pairs.
|
55 |
+
- Informed reasoning: we prompt the same LLM for the question answering task by taking advantage of the previously generated explanations.
|
56 |
+
|
57 |
+
Here is an example of how to use ZEBRA for question answering:
|
58 |
+
|
59 |
+
```python
|
60 |
+
from zebra import Zebra
|
61 |
+
|
62 |
+
# Load Zebra with language model, retriever, document index and explanations.
|
63 |
+
zebra = Zebra(
|
64 |
+
model="meta-llama/Meta-Llama-3-8B-Instruct",
|
65 |
+
retriever="sapienzanlp/zebra-retriever-e5-base-v2",
|
66 |
+
document_index="sapienzanlp/zebra-kb"
|
67 |
+
)
|
68 |
+
|
69 |
+
# Provide a question and answer choices.
|
70 |
+
questions = [
|
71 |
+
"What should you do if you see someone hurt and in need of help?",
|
72 |
+
"If your friend is upset, what is the best way to support them?",
|
73 |
+
"What should you do if your phone battery is running low in a public place?",
|
74 |
+
"What should you do if you are running late for an important meeting?",
|
75 |
+
]
|
76 |
+
|
77 |
+
choices = [
|
78 |
+
["Walk away.", "Call for help.", "Take a photo for social media."],
|
79 |
+
["Listen to them and offer comfort.", "Tell them they are overreacting.", "Ignore them and walk away."],
|
80 |
+
["Borrow a stranger's phone.", "Use public charging station.", "Leave your phone unattended while it charges."],
|
81 |
+
["Rush through traffic.", "Call and inform them you will be late.", "Do not show up at all."],
|
82 |
+
]
|
83 |
+
|
84 |
+
# Generate knowledge and perform question answering.
|
85 |
+
zebra_output = zebra.pipeline(questions=questions, choices=choices)
|
86 |
+
```
|
87 |
+
|
88 |
+
The output contains, for each question, a list of generated explanations and the predicted answer:
|
89 |
+
|
90 |
+
```bash
|
91 |
+
ZebraOutput(
|
92 |
+
explanations=[
|
93 |
+
[
|
94 |
+
"Walking away would be neglecting the person's need for help and potentially putting them in danger.",
|
95 |
+
'Calling for help, such as 911, is the most effective way to get the person the assistance they need.',
|
96 |
+
"Taking a photo for social media might spread awareness, but it's not a direct way to help the person in need."
|
97 |
+
],
|
98 |
+
[
|
99 |
+
'Listening and offering comfort shows empathy and understanding.',
|
100 |
+
"Telling someone they're overreacting can be dismissive and unhelpful.",
|
101 |
+
'Ignoring someone in distress can be hurtful and unkind.'
|
102 |
+
],
|
103 |
+
[
|
104 |
+
"Borrow a stranger's phone: Unwise, as it's a security risk and may lead to theft or damage.",
|
105 |
+
"Use public charging station: Safe and convenient, as it's a designated charging area.",
|
106 |
+
'Leave your phone unattended while it charges: Not recommended, as it may be stolen or damaged.'
|
107 |
+
],
|
108 |
+
[
|
109 |
+
'Rush through traffic: This option is risky and may lead to accidents or stress.',
|
110 |
+
'Call and inform them you will be late: This is the most likely option, as it shows respect for the meeting and allows for adjustments.',
|
111 |
+
'Do not show up at all: This is unacceptable, as it shows disrespect for the meeting and may damage relationships.'
|
112 |
+
],
|
113 |
+
],
|
114 |
+
answers=[
|
115 |
+
"Call for help.",
|
116 |
+
"Listen to them and offer comfort.",
|
117 |
+
"Use public charging station.",
|
118 |
+
"Call and inform them you will be late."
|
119 |
+
],
|
120 |
+
)
|
121 |
+
```
|
122 |
+
|
123 |
+
You can also call the `zebra.pipeline` method with the `return_dict` parameter set to `True` to ask ZEBRA to return also the retrieved examples along with their explanations.
|
124 |
+
|
125 |
+
## Models and Data
|
126 |
+
|
127 |
+
Models and data can be found at the following [HuggingFace Collection ๐ค](https://huggingface.co/collections/sapienzanlp/zebra-66e3ec50c8ce415ea7572d0e).
|
128 |
+
|
129 |
+
## ๐ Performance
|
130 |
+
|
131 |
+
We evaluate the performance of ZEBRA on 8 well-established commonsense question answering datasets. The following table shows the results (accuracy) of the models before / after the application of ZEBRA.
|
132 |
+
|
133 |
+
| Model | CSQA | ARC-C | ARC-E | OBQA | PIQA | QASC | CSQA2 | WG | AVG |
|
134 |
+
| ------------------------ | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- |
|
135 |
+
| Mistral-7B-Instruct-v0.2 | 68.2 / **73.3** | 72.4 / **75.2** | 85.8 / **87.4** | 68.8 / **75.8** | 76.1 / **80.2** | 66.1 / **68.3** | 58.5 / **67.5** | 55.8 / **60.7** | 68.9 / **73.5** |
|
136 |
+
| Phi3-small-8k-Instruct | 77.2 / **80.9** | 90.4 / **91.6** | 96.9 / **97.7** | 90.4 / **91.2** | 86.6 / **88.1** | **83.5** / 81.0 | 68.0 / **74.6** | 79.1 / **81.0** | 84.0 / **85.8** |
|
137 |
+
| Meta-Llama-3-8b-Instruct | 73.9 / **78.7** | 79.4 / **83.5** | 91.7 / **92.9** | 73.4 / **79.6** | 78.3 / **84.0** | 78.2 / **79.1** | 64.3 / **69.4** | 56.2 / **63.2** | 74.4 / **78.8** |
|
138 |
+
| Phi3-mini-128k-Instruct | 73.4 / **74.8** | 85.7 / **88.0** | 95.4 / **96.0** | 82.8 / **87.8** | 80.4 / **84.2** | **74.7** / 73.9 | 59.3 / **64.6** | 67.3 / **72.9** | 77.4 / **80.5** |
|
139 |
+
|
140 |
+
You can also download the official paper results at the following [Google Drive Link](https://drive.google.com/file/d/1l7bY-TkqnmVQn5M5ynQfT-0upMcRlMnT/view?usp=drive_link).
|
141 |
+
|
142 |
+
## Cite this work
|
143 |
+
|
144 |
+
If you use any part of this work, please consider citing the paper as follows:
|
145 |
+
|
146 |
+
```bibtex
|
147 |
+
@inproceedings{molfese-etal-2024-zebra,
|
148 |
+
title = "ZEBRA: Zero-Shot Example-Based Retrieval Augmentation for Commonsense Question Answering",
|
149 |
+
author = "Molfese, Francesco Maria and
|
150 |
+
Conia, Simone and
|
151 |
+
Orlando, Riccardo and
|
152 |
+
Navigli, Roberto",
|
153 |
+
editor = "",
|
154 |
+
booktitle = "Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing",
|
155 |
+
month = nov,
|
156 |
+
year = "2024",
|
157 |
+
address = "Miami",
|
158 |
+
publisher = "Association for Computational Linguistics",
|
159 |
+
url = "",
|
160 |
+
doi = "",
|
161 |
+
pages = "",
|
162 |
+
abstract = "",
|
163 |
+
}
|
164 |
+
```
|
165 |
+
|
166 |
+
## ๐ชช License
|
167 |
+
|
168 |
+
The data and software are licensed under [Creative Commons Attribution-NonCommercial-ShareAlike 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/).
|
169 |
+
|
170 |
+
## Acknowledgements
|
171 |
+
We gratefully acknowledge CREATIVE (CRoss-modalunderstanding and gEnerATIon of Visual and tExtual content) for supporting this work. Simone Conia gratefully acknowledges the support of Future AI Research ([PNRR MUR project PE0000013-FAIR](https://fondazione-fair.it/en/)), which fully funds his fellowship at Sapienza University of Rome since October 2023.
|