--- license: mit language: - en pipeline_tag: sentence-similarity datasets: - darrow-ai/LegalLensNLI metrics: - f1 base_model: - ynie/roberta-large-snli_mnli_fever_anli_R1_R2_R3-nli library_name: transformers --- # roberta_cnn_legal ## Overview This repository hosts the uOttawa model developed for Subtask B (Legal Natural Language Inference) in the LegalLens-2024 shared task. The task focuses on classifying relationships between legal texts, such as determining if a premise (e.g., a summary of a legal complaint) entails, contradicts, or is neutral with respect to a hypothesis (e.g., an online review). ## Model Details - **Model Type**: Transformer-based model combined with a Convolutional Neural Network (CNN) - **Framework**: PyTorch, Transformers library - **Training Data**: LegalLensNLI dataset provided by the LegalLens-2024 organizers - **Architecture**: Integration of RoBERTa (ynie/roberta-large-snli_mnli_fever_anli_R1_R2_R3-nli) with a custom CNN for keyword pattern detection - **Use Case**: Classifying relationships between legal documents for applications like legal case matching and automated reasoning ## Model Architecture The model architecture consists of: - **RoBERTa model**: Responsible for capturing contextual information from the input text. - **CNN model**: Used for keyword detection, including an embedding layer and three convolutional layers with filter sizes (2, 3, 4). - **Fully connected layer**: Combines the outputs from RoBERTa and CNN for the final classification. ## Installation To use this model, clone this repository and make sure to have the following installed: ```bash pip install torch pip install transformers ``` ## Quick Start Load the model and run inference using the Hugging Face Transformers library: ```code from transformers import AutoTokenizer, AutoModelForSequenceClassification # Load the model and tokenizer model = AutoModelForSequenceClassification.from_pretrained("nimamegh/roberta_cnn_legal") tokenizer = AutoTokenizer.from_pretrained("nimamegh/roberta_cnn_legal") # Example inputs premise = "The cat is on the mat." hypothesis = "The animal is on the mat." inputs = tokenizer(premise, hypothesis, return_tensors='pt') # Get predictions outputs = model(**inputs) predictions = outputs.logits.argmax(dim=-1) # Print the prediction result print("Predicted class:", predictions.item()) # Interpretation (optional) label_map = {0: "Entailment", 1: "Neutral", 2: "Contradiction"} print("Result:", label_map[predictions.item()]) ``` ## Training Configuration - Learning Rate: 2e-5 - Batch Size: 4 (train and evaluation) - Number of Epochs: 20 - Weight Decay: 0.01 - Optimizer: AdamW - Trainer Class: Used for fine-tuning with early stopping and warmup steps ## Evaluation Metrics The model was evaluated using an F1-score across multiple domains in the validation set: - Average F1-score: 88.6% ## Result - Performance on Hidden Test Set: F1-score of 0.724, achieving 5th place in the LegalLens-2024 competition. - Comparison: - Falcon 7B: 81.02% (average across domains) - RoBERTa base: 71.02% (average) - uOttawa Model: 88.6% (average on validation) ## Citation ```bibtex @misc{meghdadi2024uottawalegallens2024transformerbasedclassification, title={uOttawa at LegalLens-2024: Transformer-based Classification Experiments}, author={Nima Meghdadi and Diana Inkpen}, year={2024}, eprint={2410.21139}, archivePrefix={arXiv}, primaryClass={cs.CL}, url={https://arxiv.org/abs/2410.21139}, } ```