generic feature-extraction endpoints-template arxiv:2305.13915 license:apache-2.0 region:us
---
tags:
- feature-extraction
- endpoints-template
license: apache-2.0
library_name: generic
---

# Coreference Resolution for Long Documents
Modified coreference resolution model from [BERT for Coreference Resolution: Baselines and Analysis](https://aclanthology.org/D19-1588/) for handling long documents (~40K words) efficiently (500K words/s on a NVIDIA Tesla V100). The checkpoint is based on AllenNLP's coref-spanbert-large-2021.03.10. This modified model was used in [DAPR: A Benchmark on Document-Aware Passage Retrieval](https://arxiv.org/abs/2305.13915).

## Usage
### API call
One can call the Hugging's Inference Endpoints API directly: (need your access token from https://huggingface.co/settings/tokens and the loading takes around 6 minutes)
```python
import requests
import time

API_URL = "https://api-inference.huggingface.co/models/kwang2049/long-coref"
headers = {"Authorization": "Bearer ${YOUR_HUGGINGFACE_ACCESS_TOKEN}"}


def query(payload):
    while True:
        response = requests.post(API_URL, headers=headers, json=payload)
        if response.status_code == 503:
            time.sleep(5)
            print(response.json()["error"])
            continue
        elif response.status_code == 200:
            return response.json()
        else:
            error_message = f"{response.status_code}: {response.json['error']}."
            raise requests.HTTPError(error_message)


doc = [
    "The Half Moon is a public house and music venue in Putney, London. It is one of the city's longest running live music venues, and has hosted live music every night since 1963.",
    "The pub is on the south side of the Lower Richmond road, in the London Borough of Wandsworth."
]

PARAGRAPH_DELIMITER = "\n\n"

output = query(
    {
        "inputs": PARAGRAPH_DELIMITER.join(doc),
    }
)
print(output)
# {
#     'pargraph_sentences': ..., 
#     'top_spans': ..., 
#     'antecedents': ...
# }
```
### Local run
One can also run the code of the repo on a local machine:

```bash
# Clone the repo
git lfs install
git clone https://huggingface.co/kwang2049/long-coref
cd long-coref && pip install -r requirements.txt && python local_run.py
```

## Evalution
The evaluation results on OntoNotesv5 are:

| Model | Precision | Recall | F1 | Input Length|
| --- |  --- | --- | --- | --- |
| AllenNLP's original implementation | 79.2 | 78.4 | 78.8 | <= 2K words|
| This modification | 78.9 | 67.0 | 72.4| <= 40K words |

## Citation
If you use the repo, feel free to cite our publication [DAPR: A Benchmark on Document-Aware Passage Retrieval](https://arxiv.org/abs/2305.13915):
```bibtex 
@article{wang2023dapr,
    title = "DAPR: A Benchmark on Document-Aware Passage Retrieval",
    author = "Kexin Wang and Nils Reimers and Iryna Gurevych", 
    journal= "arXiv preprint arXiv:2305.13915",
    year = "2023",
    url = "https://arxiv.org/abs/2305.13915",
}
```