taidopurason's picture
Update README.md
f76b124 verified
---
library_name: transformers
tags:
- GEC
language:
- et
base_model:
- tartuNLP/Llammas-base
pipeline_tag: text-generation
---
# Llammas-base-p1-llama-errors-p2-GEC
GEC model for Estonian based on [tartuNLP/Llammas-base](https://huggingface.co/tartuNLP/Llammas-base) and fine-tuned on 1) correcting 1M synthetic errors produced by our Llama-based error generation model 2) human GEC data.
For training and inference code used in our paper see our repository [https://github.com/TartuNLP/gec-llm](https://github.com/TartuNLP/gec-llm).
### Usage for Inference
Simple example (we provide the templating in `tokenizer.chat_template`)
````
from transformers import pipeline
import torch
gec_pipe = pipeline(
"text-generation",
model="tartuNLP/Llammas-base-p1-llama-errors-p2-GEC",
torch_dtype=torch.bfloat16,
device_map="auto",
do_sample=False, num_beams=4, temperature=None, top_p=None
)
gec_pipe.tokenizer.pad_token_id = gec_pipe.tokenizer.eos_token_id
gec_pipe.tokenizer.padding_side = "left"
### Input sentence here:
input_sentence = "Ma läheb koju"
gec_pipe([{"role": "user", "content": input_sentence}], max_new_tokens=300)[0]["generated_text"][-1]["content"]
````
Alternative:
````
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
model = AutoModelForCausalLM.from_pretrained(
"tartuNLP/Llammas-base-p1-llama-errors-p2-GEC",
device_map="auto",
return_dict=True,
low_cpu_mem_usage=True,
torch_dtype=torch.bfloat16
)
tokenizer = AutoTokenizer.from_pretrained(
"tartuNLP/Llammas-base-p1-llama-errors-p2-GEC",
padding_side="left"
)
# Need to set the padding token to 0 or eos_token_id if batching is used
# (the model does not set it by default)
tokenizer.pad_token_id = tokenizer.eos_token_id
gec_pipe = pipeline(
"text-generation", model=model, tokenizer=tokenizer, do_sample=False, num_beams=4, temperature=None, top_p=None
)
### Input sentence here
input_sentence = "Ma läheb koju"
# Two options:
# 1)
PROMPT = '### Instruction:\nReply with a corrected version of the input sentence in Estonian with all grammatical and spelling errors fixed. If there are no errors, reply with a copy of the original sentence.\n\n### Input:\n{input}\n\n### Response:\n'
example = PROMPT.format(input=input_sentence)
# 2) or use the chat template provided by us that does the same thing
example = tokenizer.apply_chat_template([{"role": "user", "content": input_sentence}], tokenize=False)
gec_pipe(example, max_new_tokens=300)[0]["generated_text"][len(example):]
````
#### Preprocessing
For Estonian, we used a detokenization script ([detokenize.py](https://github.com/TartuNLP/gec-llm/blob/main/scripts/gec/detokenize.py))
that also did whitespace and quote normalization, so you might also want to apply those regex rules.
## Citation
**BibTeX:**
````
@inproceedings{luhtaru-etal-2024-err,
title = "To Err Is Human, but Llamas Can Learn It Too",
author = "Luhtaru, Agnes and
Purason, Taido and
Vainikko, Martin and
Del, Maksym and
Fishel, Mark",
editor = "Al-Onaizan, Yaser and
Bansal, Mohit and
Chen, Yun-Nung",
booktitle = "Findings of the Association for Computational Linguistics: EMNLP 2024",
month = nov,
year = "2024",
address = "Miami, Florida, USA",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2024.findings-emnlp.727",
doi = "10.18653/v1/2024.findings-emnlp.727",
pages = "12466--12481",
abstract = "This study explores enhancing grammatical error correction (GEC) through automatic error generation (AEG) using language models (LMs). Specifically, we fine-tune Llama 2 LMs for error generation and find that this approach yields synthetic errors akin to human errors. Next, we train GEC Llama models using these artificial errors and outperform previous state-of-the-art error correction models, with gains ranging between 0.8 and 6 F0.5 points across all tested languages (German, Ukrainian, and Estonian). Moreover, we demonstrate that generating errors by fine-tuning smaller sequence-to-sequence models and prompting large commercial LMs (GPT3.5 and GPT4) also results in synthetic errors beneficially affecting error generation models. We openly release trained models for error generation and correction as well as all the synthesized error datasets for the covered languages.",
}
````
Arxiv link: [https://arxiv.org/abs/2403.05493](https://arxiv.org/abs/2403.05493)