SahilGoel commited on
Commit
4bf4772
·
verified ·
1 Parent(s): 30c13af

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +39 -14
README.md CHANGED
@@ -11,15 +11,37 @@ tags:
11
  - qwen
12
  - fine-tuned
13
  base_model: Qwen/Qwen2.5-0.5B
 
 
 
 
 
14
  ---
15
 
16
  # Indian Transaction Classifier
17
 
18
  Fine-tuned Qwen2.5-0.5B for classifying Indian bank transactions (UPI, NEFT, IMPS, RTGS) into 30+ categories with merchant identification.
19
 
20
- ## Model Description
21
 
22
- This model is fine-tuned on 1,700 privacy-sanitized Indian bank transaction descriptions. It classifies transactions into categories like salary, food, grocery, trading, bills, etc. and identifies the merchant/company when possible.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
  ## Categories
25
 
@@ -29,7 +51,17 @@ This model is fine-tuned on 1,700 privacy-sanitized Indian bank transaction desc
29
 
30
  **Special:** friends, family, flat_deposit, trading_fees, vehicle_purchase, staff_salary, health_fitness, transfer, unclassified
31
 
32
- ## Usage
 
 
 
 
 
 
 
 
 
 
33
 
34
  ```python
35
  from transformers import AutoModelForCausalLM, AutoTokenizer
@@ -38,24 +70,17 @@ model = AutoModelForCausalLM.from_pretrained("SahilGoel/indian-txn-classifier")
38
  tokenizer = AutoTokenizer.from_pretrained("SahilGoel/indian-txn-classifier")
39
 
40
  system_prompt = "You are a bank transaction classifier for Indian bank statements..."
41
-
42
- input_text = "UPI/zerodhabroking@/HDFC BANK LTD"
43
  prompt = f"### System:\n{system_prompt}\n\n### Input:\n{input_text}\n\n### Output:\n"
44
 
45
  inputs = tokenizer(prompt, return_tensors="pt")
46
- outputs = model.generate(**inputs, max_new_tokens=100)
47
  print(tokenizer.decode(outputs[0], skip_special_tokens=True))
48
  ```
49
 
50
- ## Training Data
51
-
52
- 1,700 privacy-sanitized transaction descriptions. PII (phone numbers, personal UPI handles, reference numbers) has been redacted.
53
-
54
- ## Pipeline Architecture
55
 
56
- 1. **Rule engine** (70-80% coverage) - regex patterns for known merchants and UPI handles
57
- 2. **Recurring pattern detector** (10% more) - identifies repeating transactions
58
- 3. **Fine-tuned Qwen 0.5B** (remaining) - LLM fallback for uncertain transactions
59
 
60
  ## Supported Banks
61
 
 
11
  - qwen
12
  - fine-tuned
13
  base_model: Qwen/Qwen2.5-0.5B
14
+ widget:
15
+ - text: "### System:\nYou are a bank transaction classifier for Indian bank statements. Given a raw transaction description, infer both its category and the actual company when evidence exists. Respond with ONLY a JSON object: {\"category\": \"<category>\", \"company_name\": \"<company_or_null>\", \"is_income\": false, \"confidence\": 0.0}.\n\n### Input:\nUPI/zerodhabroking@/HDFC BANK LTD\n\n### Output:\n"
16
+ example_title: "UPI — Zerodha"
17
+ - text: "### System:\nYou are a bank transaction classifier for Indian bank statements. Given a raw transaction description, infer both its category and the actual company when evidence exists. Respond with ONLY a JSON object: {\"category\": \"<category>\", \"company_name\": \"<company_or_null>\", \"is_income\": false, \"confidence\": 0.0}.\n\n### Input:\nNEFT/SALARY/ACME CORP\n\n### Output:\n"
18
+ example_title: "NEFT — Salary"
19
  ---
20
 
21
  # Indian Transaction Classifier
22
 
23
  Fine-tuned Qwen2.5-0.5B for classifying Indian bank transactions (UPI, NEFT, IMPS, RTGS) into 30+ categories with merchant identification.
24
 
25
+ ## Try it now (Inference API — free, no setup)
26
 
27
+ Use the **Inference API** widget on the right side of this page. Type a transaction description in the text box and click Compute.
28
+
29
+ Or call it programmatically:
30
+
31
+ ```python
32
+ from huggingface_hub import InferenceClient
33
+
34
+ client = InferenceClient(model="SahilGoel/indian-txn-classifier")
35
+
36
+ system_prompt = 'You are a bank transaction classifier for Indian bank statements. Given a raw transaction description, infer both its category and the actual company when evidence exists. Respond with ONLY a JSON object: {"category": "<category>", "company_name": "<company_or_null>", "is_income": false, "confidence": 0.0}.'
37
+
38
+ tx = "UPI/zerodhabroking@/HDFC BANK LTD"
39
+ prompt = f"### System:\n{system_prompt}\n\n### Input:\n{tx}\n\n### Output:\n"
40
+
41
+ result = client.text_generation(prompt, max_new_tokens=100, temperature=0.1)
42
+ print(result)
43
+ # {"category": "trading_deposit", "company_name": "Zerodha", "is_income": false, "confidence": 0.95}
44
+ ```
45
 
46
  ## Categories
47
 
 
51
 
52
  **Special:** friends, family, flat_deposit, trading_fees, vehicle_purchase, staff_salary, health_fitness, transfer, unclassified
53
 
54
+ ## Pipeline Architecture
55
+
56
+ 1. **Rule engine** (70-80% coverage) — regex patterns for known merchants and UPI handles
57
+ 2. **Recurring pattern detector** (10% more) — identifies repeating transactions
58
+ 3. **Fine-tuned Qwen 0.5B** (remaining) — LLM fallback for uncertain transactions
59
+
60
+ ## Run locally
61
+
62
+ ```bash
63
+ pip install transformers torch
64
+ ```
65
 
66
  ```python
67
  from transformers import AutoModelForCausalLM, AutoTokenizer
 
70
  tokenizer = AutoTokenizer.from_pretrained("SahilGoel/indian-txn-classifier")
71
 
72
  system_prompt = "You are a bank transaction classifier for Indian bank statements..."
73
+ input_text = "UPI/swiggybengaluru@/HDFC BANK LTD"
 
74
  prompt = f"### System:\n{system_prompt}\n\n### Input:\n{input_text}\n\n### Output:\n"
75
 
76
  inputs = tokenizer(prompt, return_tensors="pt")
77
+ outputs = model.generate(**inputs, max_new_tokens=100, temperature=0.1, do_sample=False)
78
  print(tokenizer.decode(outputs[0], skip_special_tokens=True))
79
  ```
80
 
81
+ ## Run on Google Colab (free GPU)
 
 
 
 
82
 
83
+ Open `app.py` from the GitHub repo in a Colab notebook it works as a Gradio app with a public share link.
 
 
84
 
85
  ## Supported Banks
86