Text Classification
Transformers
Safetensors
Chinese
spam-detection
advertising-detection
ad-classification
chinese
modernbert
mmbert
multi-task
four-head
Instructions to use x6nux/laya-ad with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use x6nux/laya-ad with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="x6nux/laya-ad")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("x6nux/laya-ad", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Download code/scripts/build_teacher_dataset.py from x6nux/laya-ad: direct link, hf CLI and curl.
- Browser
- Download file 2.61 kB
-
https://huggingface.co/x6nux/laya-ad/resolve/main/code/scripts/build_teacher_dataset.py
- Command line
-
hf download hf://x6nux/laya-ad/code/scripts/build_teacher_dataset.py
-
curl -L -o build_teacher_dataset.py https://huggingface.co/x6nux/laya-ad/resolve/main/code/scripts/build_teacher_dataset.py
2.61 kB
| #!/usr/bin/env python3 | |
| """把 teacher 清洗后的干净数据转成四头训练格式,并分层切分。 | |
| 输入: data/cleaned/archive_latest_full_clean.jsonl(build_cleaned_dataset.py 输出) | |
| 输出: data/processed_teacher/{train,dev,val,holdout827}.jsonl | |
| 字段: text / label_bin / label_kind / label_scope / label_sev | |
| - normal: kind=-100, scope=1(message), sev=0 | |
| - ad: kind 0..6(none -> -100); scope account=0/message=1; sev bucket 0..3 | |
| """ | |
| import argparse | |
| import json | |
| from collections import Counter | |
| from pathlib import Path | |
| import numpy as np | |
| from sklearn.model_selection import train_test_split | |
| KINDS = ["crypto", "gambling", "porn", "porn_bait", "promo", "scam", "spam_flood"] | |
| def main(): | |
| ap = argparse.ArgumentParser() | |
| ap.add_argument("--input", default="data/cleaned/archive_latest_full_clean.jsonl") | |
| ap.add_argument("--out", default="data/processed_teacher") | |
| ap.add_argument("--seed", type=int, default=42) | |
| args = ap.parse_args() | |
| rows = [] | |
| for line in open(args.input, encoding="utf-8"): | |
| r = json.loads(line) | |
| is_ad = r.get("label") == "ad" | |
| kind = r.get("ad_kind") | |
| rows.append({ | |
| "text": r.get("text"), | |
| "label_bin": 0 if is_ad else 1, | |
| "label_kind": KINDS.index(kind) if (is_ad and kind in KINDS) else -100, | |
| "label_scope": (0 if (is_ad and r.get("scope") == "account") else 1), | |
| "label_sev": (int(r.get("severity_bucket", 0)) if is_ad else 0), | |
| }) | |
| labels = np.array([r["label_bin"] for r in rows]) | |
| idx = np.arange(len(rows)) | |
| tr, rest = train_test_split(idx, test_size=0.10, stratify=labels, random_state=args.seed) | |
| dev, rest2 = train_test_split(rest, test_size=0.50, stratify=labels[rest], random_state=args.seed) | |
| val, hold = train_test_split(rest2, test_size=0.50, stratify=labels[rest2], random_state=args.seed) | |
| out = Path(args.out) | |
| out.mkdir(parents=True, exist_ok=True) | |
| for name, ids in [("train", tr), ("dev", dev), ("val", val), ("holdout827", hold)]: | |
| data = [rows[i] for i in ids] | |
| with open(out / f"{name}.jsonl", "w", encoding="utf-8") as f: | |
| for x in data: | |
| f.write(json.dumps(x, ensure_ascii=False) + "\n") | |
| print(name, len(data), | |
| "bin", dict(Counter(x["label_bin"] for x in data)), | |
| "kind", dict(Counter(x["label_kind"] for x in data)), | |
| "scope", dict(Counter(x["label_scope"] for x in data)), | |
| "sev", dict(Counter(x["label_sev"] for x in data))) | |
| print("out", out.resolve()) | |
| if __name__ == "__main__": | |
| main() | |