SupratimRK commited on
Commit
f30ce71
·
verified ·
1 Parent(s): fefc1b3

Sync model from GitHub repository

Browse files

Automated sync via GitHub Action / script

Files changed (4) hide show
  1. .gitattributes +35 -35
  2. README.md +27 -22
  3. config.json +26 -26
  4. predict.py +6 -14
.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -48,6 +48,17 @@ widget:
48
 
49
  # CompactNameClassifier: Ultra-Efficient Name Classifier Trained From Scratch
50
 
 
 
 
 
 
 
 
 
 
 
 
51
  `CompactNameClassifier` is a state-of-the-art, ultra-lightweight neural text classifier trained **from scratch** on a curated dataset of **455,669 records** (245.7k real human names across global cultures + 210.0k non-names, usernames, gamer tags, and alphanumeric codes).
52
 
53
  Unlike generic large language models or pretrained BERT variants, `CompactNameClassifier` has **zero external pretrained dependencies**, weighs just **~647 KB** (INT8 ONNX), and delivers sub-millisecond CPU inference (**< 0.25 ms per query**).
@@ -164,28 +175,22 @@ CSE3048 => NON_NAME (99.9%)
164
 
165
  ---
166
 
167
- ### 3. Node.js Inference (onnxruntime-node)
168
 
169
  ```javascript
170
- import ort from 'onnxruntime-node';
171
-
172
- // Set single-thread session for sub-millisecond execution
173
- const sessionOpts = {
174
- intraOpNumThreads: 1,
175
- interOpNumThreads: 1
176
- };
177
- const session = await ort.InferenceSession.create('./model_int8.onnx', sessionOpts);
178
-
179
- const inputIds = new Int32Array(20); // padded token ids
180
- const attentionMask = new Int32Array(20); // 1 for tokens, 0 for pad
181
-
182
- const feeds = {
183
- input_ids: new ort.Tensor('int32', inputIds, [1, 20]),
184
- attention_mask: new ort.Tensor('int32', attentionMask, [1, 20])
185
- };
186
-
187
- const results = await session.run(feeds);
188
- console.log(results);
189
  ```
190
 
191
  ---
@@ -194,7 +199,7 @@ console.log(results);
194
 
195
  ```python
196
  import torch
197
- from model import CompactNameClassifier
198
 
199
  model = CompactNameClassifier(
200
  vocab_size=4000,
@@ -205,7 +210,7 @@ model = CompactNameClassifier(
205
  max_len=20,
206
  dropout=0.0
207
  )
208
- model.load_state_dict(torch.load("model_weights.pt", weights_only=True))
209
  model.eval()
210
  ```
211
 
 
48
 
49
  # CompactNameClassifier: Ultra-Efficient Name Classifier Trained From Scratch
50
 
51
+ <div align="center">
52
+
53
+ [![Hugging Face](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Model%20Hub-yellow.svg)](https://huggingface.co/SupratimRK/compact-name-classifier)
54
+ [![GitHub](https://img.shields.io/badge/GitHub-Repository-black?logo=github)](https://github.com/SupratimRK/compact-name-classifier)
55
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
56
+ [![ONNX Runtime](https://img.shields.io/badge/ONNX-INT8%20Quantized-blue)](https://onnxruntime.ai/)
57
+
58
+ **[🤗 Hugging Face Model Hub](https://huggingface.co/SupratimRK/compact-name-classifier)** | **[🐙 GitHub Repository](https://github.com/SupratimRK/compact-name-classifier)**
59
+
60
+ </div>
61
+
62
  `CompactNameClassifier` is a state-of-the-art, ultra-lightweight neural text classifier trained **from scratch** on a curated dataset of **455,669 records** (245.7k real human names across global cultures + 210.0k non-names, usernames, gamer tags, and alphanumeric codes).
63
 
64
  Unlike generic large language models or pretrained BERT variants, `CompactNameClassifier` has **zero external pretrained dependencies**, weighs just **~647 KB** (INT8 ONNX), and delivers sub-millisecond CPU inference (**< 0.25 ms per query**).
 
175
 
176
  ---
177
 
178
+ ### 3. Node.js Native Inference (onnxruntime-node)
179
 
180
  ```javascript
181
+ import { CompactNameClassifier } from './scripts/classifier.mjs';
182
+
183
+ const classifier = new CompactNameClassifier();
184
+ await classifier.init();
185
+
186
+ const result = await classifier.predict('Sayantika Biswas');
187
+ console.log(result);
188
+ // {
189
+ // text: 'Sayantika Biswas',
190
+ // classification: 'REAL_NAME',
191
+ // confidence: 0.998,
192
+ // raw_probs: { non_name: 0.002, real_name: 0.998 }
193
+ // }
 
 
 
 
 
 
194
  ```
195
 
196
  ---
 
199
 
200
  ```python
201
  import torch
202
+ from scripts.model import CompactNameClassifier
203
 
204
  model = CompactNameClassifier(
205
  vocab_size=4000,
 
210
  max_len=20,
211
  dropout=0.0
212
  )
213
+ model.load_state_dict(torch.load("models/model_weights.pt", weights_only=True))
214
  model.eval()
215
  ```
216
 
config.json CHANGED
@@ -1,26 +1,26 @@
1
- {
2
- "model_type": "CompactNameClassifier",
3
- "architectures": [
4
- "CompactNameClassifier"
5
- ],
6
- "vocab_size": 4000,
7
- "emb_dim": 64,
8
- "hidden_dim": 128,
9
- "num_layers": 2,
10
- "num_heads": 4,
11
- "dim_feedforward": 256,
12
- "max_length": 20,
13
- "dropout": 0.1,
14
- "id2label": {
15
- "0": "NON_NAME",
16
- "1": "REAL_NAME"
17
- },
18
- "label2id": {
19
- "NON_NAME": 0,
20
- "REAL_NAME": 1
21
- },
22
- "metrics": {
23
- "best_val_accuracy": 0.9547553093259464,
24
- "best_val_f1": 0.9586647384912027
25
- }
26
- }
 
1
+ {
2
+ "model_type": "CompactNameClassifier",
3
+ "architectures": [
4
+ "CompactNameClassifier"
5
+ ],
6
+ "vocab_size": 4000,
7
+ "emb_dim": 64,
8
+ "hidden_dim": 128,
9
+ "num_layers": 2,
10
+ "num_heads": 4,
11
+ "dim_feedforward": 256,
12
+ "max_length": 20,
13
+ "dropout": 0.1,
14
+ "id2label": {
15
+ "0": "NON_NAME",
16
+ "1": "REAL_NAME"
17
+ },
18
+ "label2id": {
19
+ "NON_NAME": 0,
20
+ "REAL_NAME": 1
21
+ },
22
+ "metrics": {
23
+ "best_val_accuracy": 0.9547553093259464,
24
+ "best_val_f1": 0.9586647384912027
25
+ }
26
+ }
predict.py CHANGED
@@ -10,20 +10,12 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
10
  from model import CompactNameClassifier
11
 
12
  SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
13
- if os.path.exists(os.path.join(SCRIPT_DIR, "config.json")):
14
- PROJECT_ROOT = SCRIPT_DIR
15
- MODELS_DIR = SCRIPT_DIR
16
- CONFIG_PATH = os.path.join(SCRIPT_DIR, "config.json")
17
- TOKENIZER_DIR = SCRIPT_DIR
18
- ONNX_PATH = os.path.join(SCRIPT_DIR, "model_int8.onnx")
19
- WEIGHTS_PATH = os.path.join(SCRIPT_DIR, "model_weights.pt")
20
- else:
21
- PROJECT_ROOT = os.path.abspath(os.path.join(SCRIPT_DIR, ".."))
22
- MODELS_DIR = os.path.join(PROJECT_ROOT, "models")
23
- CONFIG_PATH = os.path.join(PROJECT_ROOT, "config", "model_config.json")
24
- TOKENIZER_DIR = os.path.join(MODELS_DIR, "tokenizer")
25
- ONNX_PATH = os.path.join(MODELS_DIR, "model_int8.onnx")
26
- WEIGHTS_PATH = os.path.join(MODELS_DIR, "model_weights.pt")
27
 
28
  class NameClassifier:
29
  """
 
10
  from model import CompactNameClassifier
11
 
12
  SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
13
+ PROJECT_ROOT = os.path.abspath(os.path.join(SCRIPT_DIR, ".."))
14
+ MODELS_DIR = os.path.join(PROJECT_ROOT, "models")
15
+ CONFIG_PATH = os.path.join(PROJECT_ROOT, "config", "model_config.json")
16
+ TOKENIZER_DIR = os.path.join(MODELS_DIR, "tokenizer")
17
+ ONNX_PATH = os.path.join(MODELS_DIR, "model_int8.onnx")
18
+ WEIGHTS_PATH = os.path.join(MODELS_DIR, "model_weights.pt")
 
 
 
 
 
 
 
 
19
 
20
  class NameClassifier:
21
  """