Downloads · 30 days
14
22% of all-time downloads
ingyoun/A.X-patent-len4096-op
A.X-patent-len4096-op is a text classification model from ingyoun. Use it when you need a label for a piece of text. It is set up for transformers. The card lists the license as apache-2.0.
한국어 특허 문헌을 과학기술표준분류 188개 중분류로 자동 분류하는 다중 레이블 인코더 분류기다. 한 문서가 여러 중분류에 대응할 수 있으며(고유 문서의 약 14%가 2~10개), 17개 대분류는 예측된 각 중분류 코드의 앞 두 글자로 유도한다.
Downloads · 30 days
14
22% of all-time downloads
All-time downloads
64
Public
Parameters
149M
598 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors598 MB · 100%
From the Hugging Face model README
한국어 특허 문헌을 과학기술표준분류 188개 중분류로 자동 분류하는 다중 레이블 인코더 분류기다. 한 문서가 여러 중분류에 대응할 수 있으며(고유 문서의 약 14%가 2~10개), 17개 대분류는 예측된 각 중분류 코드의 앞 두 글자로 유도한다.
skt/A.X-Encoder-base(한국어 ModernBERT, 16k 컨텍스트)를 4,096 토큰 창에서 파인튜닝했다.
정리 test 11,244건에서 micro-F1 0.8660 — 같은 데이터·같은 레시피의 512 토큰 창 기준 런(0.8588) 대비 +0.72pt이며, 문서 단위 paired bootstrap CI95 [+0.33, +1.10]으로 시드 잡음(±0.2pt) 밖이다.
import json
import torch
from huggingface_hub import hf_hub_download
from transformers import AutoTokenizer, AutoModelForSequenceClassification
REPO = "ingyoun/A.X-patent-len4096-op"
tokenizer = AutoTokenizer.from_pretrained(REPO)
model = AutoModelForSequenceClassification.from_pretrained(REPO).eval()
# 입력은 네 필드를 공백으로 이어 붙인다(빈 필드는 건너뛴다) — 훈련과 같은 순서여야 한다.
fields = ["invention_title", "ipc_main", "abstract", "claims"]
doc = {
"invention_title": "반도체 소자의 제조 방법",
"ipc_main": "H01L-021/00",
"abstract": "...",
"claims": "...",
}
text = " ".join(str(doc[f]) for f in fields if doc[f])
enc = tokenizer(text, truncation=True, max_length=4096, return_tensors="pt")
with torch.no_grad():
probs = torch.sigmoid(model(**enc).logits)[0]
# τ=0.5 다중 레이블 결정
pred_ids = (probs >= 0.5).nonzero().flatten().tolist()
mno = [model.config.id2label[i] for i in pred_ids]
lno = sorted({m[:2] for m in mno}) # 대분류는 중분류 코드의 앞 두 글자
print(mno, lno)
probs.argmax()를 대체 경로로 둔다.config.json의 id2label이 188개 중분류 코드(EA01 … OB02)를 담는다. 같은 매핑과 중분류→대분류 대응은 label_mappings.json에도 있다.Mno) 188개 — 정렬된 코드 순서가 곧 출력 열 순서다(EA01이 0번, OB02가 187번).Lno) 17개 — EA EB EC ED EE EF EG EH EI LA LB LC NB NC ND OA OB.| 항목 | 값 |
|---|---|
| 베이스 모델 | skt/A.X-Encoder-base |
| 최대 길이 | 4,096 토큰 |
| 손실 | Focal Loss (α=0.25, γ=2), sigmoid 다중 레이블 |
| 유효 배치 · lr | 128 · 4.8e-4 |
| 스케줄 | linear · warmup_ratio 0.1 · weight decay 0.01 |
| 에폭 | 12 (18,912 step 완주, 조기 종료 미발동) |
| 시드 | 42 |
| 모델 선택 | val micro-F1 |
4,096은 8,192 대비 잃는 것이 토큰 1.60%뿐인데 최악 시퀀스가 절반이라 마이크로 배치를 2배로 쓸 수 있는 손익 분기점이다. 훈련 문서의 토큰 길이는 평균 796 · 중앙 629 · p99 3,619이며, 4,096을 넘는 문서는 0.8%다.
AI Hub 과학기술표준분류 대응 특허 데이터를 원천으로 한다 — https://www.aihub.or.kr. 원본 데이터의 재배포 제한 때문에 가공본은 공개하지 않으며, 전처리 절차는 아래 코드 저장소에 있다.
documentId 단위로 재분할했다. 원 배포본은 같은 문서가 train과 val 양쪽에 나타나는 누수 위험이 있어 문서 단위로 다시 나눴다.invention_title · ipc_main · abstract · claims를 이 순서로 공백 연결test 11,244건 · τ=0.5. 비교 대상은 모두 같은 문서·같은 순서에서 잰 값이다.
| 런 | micro | macro | sample | empty | P@1 |
|---|---|---|---|---|---|
| KoBERT (512) | 0.8500 | 0.8467 | 0.8653 | 1.17% | 0.8935 |
| A.X (512) | 0.8588 | 0.8565 | 0.8738 | 1.17% | 0.9000 |
| 이 모델 (4096) | 0.8660 | 0.8638 | 0.8835 | 0.83% | 0.9051 |
길이 구간별 micro-F1 — 창 확장의 이득이 긴 문서에서 커진다.
| 길이 구간 | n | A.X (512) | 이 모델 (4096) | Δ |
|---|---|---|---|---|
| ≤512 | 3,187 | 0.8724 | 0.8753 | +0.29pt |
| 512–1024 | 5,172 | 0.8636 | 0.8691 | +0.55pt |
| 1024–2048 | 2,336 | 0.8360 | 0.8518 | +1.58pt |
| >2048 | 549 | 0.8318 | 0.8462 | +1.44pt |
라벨 개수별 — 다중 레이블 문서가 남은 헤드룸이다.
| 구간 | n | micro | sample |
|---|---|---|---|
| k=1 | 9,555 | 0.8883 | 0.8997 |
| k≥2 | 1,689 | 0.8047 | 0.7921 |
Apache-2.0 — 베이스 모델 skt/A.X-Encoder-base의 라이선스를 따른다. 학습 데이터는 AI Hub 이용 약관의 적용을 받으며 이 저장소에 포함되지 않는다.
전처리·훈련·평가·오류 분석 전 과정과 실험 기록: https://github.com/buzziru/patent_disc