--- license: mit base_model: microsoft/Phi-3-mini-4k-instruct tags: - phi-3 - lora - payments - finance - information-extraction - structured-data-extraction - text-to-data - finetuned datasets: - custom language: - en pipeline_tag: text-generation library_name: transformers --- # Phi-3 Mini Reverse Fine-tuned for Payments Domain This is a **reverse** fine-tuned version of [Microsoft's Phi-3-Mini-4k-Instruct](microsoft/Phi-3-mini-4k-instruct) model, adapted for extracting structured payment metadata from natural language descriptions using LoRA (Low-Rank Adaptation). ## Model Description This model converts natural language payment descriptions into structured, machine-readable metadata. It performs the **opposite** task of the forward model - instead of generating human-friendly text, it extracts structured data that can be processed by payment APIs and applications. ### Related Models **Forward Model (Companion):** [aamanlamba/phi3-payments-finetune](https://huggingface.co/aamanlamba/phi3-payments-finetune) - Converts structured metadata → natural language - Use together for round-trip validation ### Training Data The model was trained on a dataset of 500+ synthetic payment transactions where: - **Input**: Natural language payment descriptions - **Output**: Structured metadata in `action(field[value], ...)` format Transaction types covered: - Standard payments (ACH, wire transfer, credit/debit card) - Refunds (full and partial) - Chargebacks and disputes - Failed/declined transactions - International transfers with currency conversion - Transaction fees - Recurring payments/subscriptions ### Example Usage ```python from transformers import AutoModelForCausalLM, AutoTokenizer from peft import PeftModel import torch # Load base model base_model = "microsoft/Phi-3-mini-4k-instruct" model = AutoModelForCausalLM.from_pretrained( base_model, torch_dtype=torch.float16, device_map="auto" ) # Load LoRA adapters (reverse model) model = PeftModel.from_pretrained(model, "aamanlamba/phi3-payments-reverse-finetune") tokenizer = AutoTokenizer.from_pretrained(base_model, trust_remote_code=True) # Extract structured data prompt = """<|system|> You are a financial data extraction assistant that converts natural language payment descriptions into structured metadata that can be processed by payment applications.<|end|> <|user|> Extract structured payment information from the following description: Your payment of USD 1,500.00 to Global Supplies Inc via wire transfer was successfully completed on 2024-10-27.<|end|> <|assistant|> """ inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=200, temperature=0.3, # Lower temperature for more deterministic extraction top_p=0.9, do_sample=True ) response = tokenizer.decode(outputs[0], skip_special_tokens=True) structured_data = response.split("<|assistant|>")[-1].strip() print(structured_data) ``` **Expected output:** ``` inform(transaction_type[payment], amount[1500.00], currency[USD], receiver[Global Supplies Inc], status[completed], method[wire_transfer], date[2024-10-27]) ``` ### Parsing the Output ```python import re def parse_structured_data(structured_str: str) -> dict: """Parse structured payment data into a dictionary""" action_match = re.match(r'(\w+)\((.*)\)', structured_str) if not action_match: return None action_type = action_match.group(1) fields_str = action_match.group(2) fields = {} field_pattern = r'(\w+)\[(.*?)\]' for match in re.finditer(field_pattern, fields_str): field_name = match.group(1) field_value = match.group(2) # Convert numeric values if field_name in ['amount', 'refund_amount', 'fee_amount', 'exchange_rate']: try: field_value = float(field_value) except ValueError: pass fields[field_name] = field_value return { 'action_type': action_type, 'fields': fields } # Use it parsed = parse_structured_data(structured_data) print(parsed) # Output: {'action_type': 'inform', 'fields': {'transaction_type': 'payment', 'amount': 1500.0, ...}} ``` ## Training Details ### Training Configuration - **Base Model**: microsoft/Phi-3-mini-4k-instruct - **Fine-tuning Method**: LoRA (Low-Rank Adaptation) - **Task Direction**: Natural Language → Structured Data (Reverse) - **LoRA Rank**: 16 - **LoRA Alpha**: 32 - **Target Modules**: q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj - **Quantization**: 8-bit (training), float16 (inference) - **Training Epochs**: 3 - **Learning Rate**: 2e-4 - **Batch Size**: 1 (with 8 gradient accumulation steps) - **Hardware**: NVIDIA RTX 3060 (12GB VRAM) - **Training Time**: ~35-45 minutes ### Training Loss - Initial Loss: ~3.5-4.0 - Final Loss: ~0.8-1.2 - Validation Loss: ~1.0-1.3 - Extraction Accuracy: ~90-95% on validation set ## Model Size - **LoRA Adapter Size**: ~15MB (only the adapter weights, not the full model) - **Full Model Size**: ~7GB (when combined with base model) ## Supported Transaction Types 1. **Payments**: Standard payment transactions with various methods 2. **Refunds**: Full and partial refunds 3. **Chargebacks**: Dispute and chargeback processing 4. **Failed Payments**: Declined or failed transactions with reasons 5. **International Transfers**: Cross-border payments with currency conversion 6. **Fees**: Transaction and processing fees 7. **Recurring Payments**: Subscriptions and scheduled payments 8. **Reversals**: Payment reversals and adjustments ## Output Format The model extracts data in this structured format: ``` action_type(field1[value1], field2[value2], ...) ``` **Action Types:** - `inform`: Informational transactions (payments, refunds, transfers) - `alert`: Alerts and notifications (failures, chargebacks) **Common Fields:** - `transaction_type`: Type of transaction - `amount`: Transaction amount (numeric) - `currency`: Currency code (USD, EUR, GBP, etc.) - `sender`/`receiver`/`merchant`: Party names - `status`: Transaction status (completed, pending, failed, etc.) - `method`: Payment method (credit_card, ACH, wire_transfer, etc.) - `date`: Transaction date (YYYY-MM-DD) - `reason`: Failure/chargeback reason (for alerts) ## Use Cases ### 1. Conversational Payment Interfaces Extract payment details from user messages: ``` User: "I want to send $500 to John via PayPal" Extracted: inform(transaction_type[payment], amount[500], currency[USD], receiver[John], method[PayPal]) ``` ### 2. Email Parsing Extract transaction data from payment notification emails automatically. ### 3. Voice Payment Systems Convert spoken payment descriptions into structured API calls. ### 4. Payment API Integration Transform natural language payment requests into API-ready parameters. ## Limitations - Trained on synthetic data - may require additional fine-tuning for production use - Optimized for English language only - Best performance on transaction patterns similar to training data - Output format is custom - requires parsing (see example above) - Not suitable for handling real financial transactions without validation - Lower temperature (0.3) recommended for consistent extraction ## Ethical Considerations - This model was trained on synthetic, anonymized data only - Does not contain any real customer PII or transaction data - Should be validated for accuracy before production deployment - Implement validation and error handling for extracted data - Consider regulatory compliance (PCI-DSS, GDPR, etc.) in your jurisdiction - Always verify extracted financial data before processing ## Intended Use **Primary Use Cases:** - Extracting transaction data from natural language descriptions - Building conversational payment bots - Parsing payment notifications and emails - Converting user requests to API parameters - Training and demonstration purposes - Research in financial NLP and information extraction **Out of Scope:** - Direct transaction processing without validation - Real-time financial systems without error handling - Compliance-critical data extraction - Medical or legal payment processing ## Performance Notes - **Inference Speed**: ~2-3 seconds per extraction on RTX 3060 - **Temperature**: Use 0.1-0.3 for deterministic extraction - **Validation**: Always validate output format and field values - **Error Handling**: Implement fallbacks for malformed outputs ## How to Cite If you use this model in your research or application, please cite: ```bibtex @misc{phi3-payments-reverse-finetuned, author = {aamanlamba}, title = {Phi-3 Mini Reverse Fine-tuned for Payments Domain}, year = {2024}, publisher = {HuggingFace}, howpublished = {\url{https://huggingface.co/aamanlamba/phi3-payments-reverse-finetune}} } ``` ## Training Code The complete training code and dataset generation scripts are available on GitHub: - **Repository**: [github.com/aamanlamba/phi3-tune-payments](https://github.com/aamanlamba/phi3-tune-payments) - **Branch**: `reverse-structured-extraction` (this model) - **Includes**: Reverse dataset generator, training scripts, testing utilities, parsing examples ## Acknowledgements - Base model: [Microsoft Phi-3-Mini-4k-Instruct](microsoft/Phi-3-mini-4k-instruct) - Fine-tuning method: [LoRA: Low-Rank Adaptation of Large Language Models](https://arxiv.org/abs/2106.09685) - Training framework: HuggingFace Transformers + PEFT - Inspired by: [NVIDIA AI Workbench Phi-3 Fine-tuning Example](https://github.com/NVIDIA/workbench-example-phi3-finetune) ## License This model is released under the MIT license, compatible with the base Phi-3 model license. ## Contact For questions or issues, please open an issue on the GitHub repository or contact the author. --- **Note**: This is a **reverse** model for structured data extraction. For generating natural language from structured data, see the companion forward model.