--- language: en tags: - ner - named-entity-recognition - recipes - food - cooking - token-classification license: mit datasets: - TASTEset --- # Recipe NER Model This is a Named Entity Recognition (NER) model trained to extract entities from recipe text. The model can identify food ingredients, quantities, units, cooking processes, and physical qualities from recipe instructions. ## Model Details ### Model Description - **Model type**: Token Classification (NER) - **Base model**: ModernBERT-base - **Training data**: TASTEset (recipe NER dataset) - **Number of labels**: Unknown ### Entity Types The model recognizes the following entity types: - **FOOD**: Food items and ingredients (e.g., "chicken breast", "olive oil") - **QUANTITY**: Numerical quantities (e.g., "2", "1/2", "three") - **UNIT**: Measurement units (e.g., "tablespoons", "cups", "pounds") - **PROCESS**: Cooking processes and methods (e.g., "heat", "stir", "bake") - **PHYSICAL_QUALITY**: Physical qualities and descriptors (e.g., "hot", "chopped", "fresh") ### Label Format The model uses BIO (Beginning-Inside-Outside) tagging scheme: - `B-ENTITY`: Beginning of an entity - `I-ENTITY`: Inside/continuation of an entity - `O`: Outside any entity (not an entity) ## Usage ### Basic Usage with Transformers ```python from transformers import AutoTokenizer, AutoModelForTokenClassification import torch # Load model and tokenizer model_name = "rgonzale/recipe-ner-model" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForTokenClassification.from_pretrained(model_name) # Example text text = "Heat 2 tablespoons olive oil in a large pan" # Tokenize tokens = tokenizer(text, return_tensors="pt", truncation=True) # Make prediction with torch.no_grad(): outputs = model(**tokens) # Get predictions predictions = torch.argmax(outputs.logits, dim=-1) predicted_labels = [model.config.id2label[pred.item()] for pred in predictions[0]] print("Tokens:", tokenizer.convert_ids_to_tokens(tokens["input_ids"][0])) print("Labels:", predicted_labels) ``` ### Usage with Pipeline ```python from transformers import pipeline # Load NER pipeline ner_pipeline = pipeline("ner", model="rgonzale/recipe-ner-model", aggregation_strategy="simple") # Example text text = "Mix 1 cup flour with 2 eggs and bake at 350 degrees for 25 minutes" # Get entities entities = ner_pipeline(text) for entity in entities: print(f"{entity['word']}: {entity['entity_group']} (confidence: {entity['score']:.2f})") ``` ### Command Line Usage ```bash # Quick inference uv run python scripts/infer_ner.py --text "Heat 2 tablespoons olive oil in a large pan" # Interactive mode uv run python scripts/infer_ner.py --interactive ``` ## Training Details ### Training Data - **Dataset**: TASTEset - A specialized dataset for recipe NER - **Task**: Named Entity Recognition for recipes - **Preprocessing**: Simple tokenization with whitespace/punctuation splitting ### Training Parameters - **Learning rate**: 3e-5 - **Batch size**: 8 (train), 16 (eval) - **Max sequence length**: 512 tokens - **Optimizer**: AdamW with weight decay - **Scheduler**: Cosine annealing ## Evaluation ### Performance Metrics The model was evaluated on the TASTEset validation set with the following results: - **Sequence-level F1**: 0.90 - **Token-level F1**: 0.90 - **Entity-level metrics**: - FOOD: F1 = 0.85 - QUANTITY: F1 = 0.97 - UNIT: F1 = 0.97 - PROCESS: F1 = 0.81 - PHYSICAL_QUALITY: F1 = 0.79 ### Example Predictions ``` Input: "Heat 2 tablespoons olive oil in a large pan over medium heat" Predicted entities: - QUANTITY: 2 - UNIT: tablespoons - FOOD: olive oil - PROCESS: Heat ``` ## Limitations - The model may not recognize very uncommon ingredients or measurements - Performance is optimized for recipe text similar to the TASTEset training data - The model uses simple tokenization and may not handle complex punctuation well ## Ethical Considerations This model is intended for research and educational purposes. Users should be aware that: - The model's predictions may not always be accurate - Food-related predictions should not be used for dietary or health decisions - The training data may contain biases present in recipe datasets ## Citation If you use this model, please cite: ```bibtex @misc{recipe-ner-model, title={Recipe NER Model}, author={Generated by Recipe Archaeology Project}, year={2024}, howpublished={\url{https://huggingface.co/rgonzale/recipe-ner-model}}, } ``` ## Contact For questions or feedback about this model, please create an issue on the model's repository.