나라장터 자체입찰 공고 법령 위반사항 모니터링 AI 경진대회

알고리즘 | 코드 제출 평가 | 자연어처리 | 법령 위반사항 모니터링

  • moneyIcon 상금 4,200만 원
  • 903명 종료까지 D-17

 

데이터 명세

2026.08.26 14:25 1,659 조회

안녕하세요, 데이커 여러분! 데이콘입니다.

본 대회 데이터의 상세 명세를 안내드립니다. 데이터 탭의 요약 안내보다 자세한 내용을 담고 있으니, 대회 참여 전에 한 번 읽어보시길 권장드립니다.

1. 배포 데이터 구조

open.zip
├── README.md                     # 데이터 설명 요약
├── train_unlabeled.jsonl.gz      # 무라벨 입찰공고 20,000건
├── dev.jsonl.gz                  # 라벨 예시 공고 200건
├── dev_labels.csv                # dev 200건의 정답 라벨 (49열 · 제출 형식과 동일)
├── sample_submission.csv         # 제출 양식 예시 (10행)
├── data/                         # 평가 서버 data/ 디렉토리의 로컬 사본
│   ├── test.jsonl.gz             # 형식 확인용 샘플 10건 (id PPS-S-####)
│   ├── 항목표.json                # 24개 검토 항목 정의·근거 조문
│   ├── 정답스키마_디코딩.json      # 제약 디코딩용 JSON 스키마
│   └── 법령패키지/
│       ├── 법령/                  # 판정 근거 법령·예규·행정규칙 23건 전문 (txt)
│       └── 중기부고시/            # 중기부 고시 제2025-96호 원본(hwpx) + 세부품명 csv
└── baseline/
    ├── script.py                 # 베이스라인 추론 코드 (submit.zip 구성 예시)
    └── requirements.txt
  • 평가 서버에서는 data/ 폴더가 제출물에 자동 마운트되며(읽기 전용), test.jsonl.gz만 실제 평가 데이터(무라벨)로 교체됩니다. 나머지 파일(항목표·정답스키마·법령패키지)은 배포본과 동일합니다.
  • script.py가 data/의 id를 그대로 읽어 output/submission.csv로 쓰도록 구성하면 로컬과 평가 서버에서 같은 코드로 동작합니다 — id 접두·건수를 하드코딩하지 마세요.

2. 파일별 명세

train_unlabeled.jsonl.gz — 무라벨 입찰공고 20,000건

  • 라벨이 제공되지 않습니다. 실제 나라장터 자체입찰 공고를 정규화·익명화한 것으로, 실제 위반 공고가 섞여 있을 수 있습니다("정상"이 보증되지 않습니다).
  • 자가 라벨링을 통한 학습·검증셋 구성, 검색(RAG) 사례집, 후처리 규칙 튜닝 등에 활용하세요(§7 참조).

dev.jsonl.gz + dev_labels.csv — 라벨 예시 200건

  • 라벨 예시 세트입니다. 24개 검토 항목 전부에 대해 위반 예시(항목당 5~8건)와 정상 예시(112건), 근거 문구 예시를 포함합니다.
  • dev_labels.csv는 제출 형식과 동일한 49열(id, v1~v24, e1~e24)로, 프롬프트·후처리 개선 시 자가 채점 기준으로 쓸 수 있습니다.
  • ※ dev는 항목별 판정 유형을 보여주기 위한 예시 세트입니다. 실제 평가 데이터의 구성비는 dev와 다르며 공개하지 않습니다.

data/항목표.json — 24개 검토 항목 정의

  • 구조 : 기준일 · 표기규칙 · 부재탐지항목(v10·v11·v16·v18·v20) · 항목(v1~v24)
  • 항목별 필드 : 항목명 · 부재탐지 여부 · 국가계약법 근거 조문 · 지방계약법 근거 조문 · 비고
  • 항목→조문은 판정 기준상 고정 매핑입니다. 위반 법령은 제출 대상이 아니며(출력 스키마에 없음), 이 표는 검색·근거 확인용 참고표입니다.
  • 24번 항목(v24)은 조문 위반이 아니라 공고서와 나라장터 등록값의 정보 불일치를 점검하는 항목입니다(근거 법령 '해당 없음').

data/정답스키마_디코딩.json — 제약 디코딩용 스키마

  • 고정 LLM의 출력을 제출 형식 JSON으로 안정적으로 받기 위한 JSON 스키마입니다. vLLM structured outputs(제약 디코딩)에 그대로 사용할 수 있으며, 베이스라인 코드에 사용 예가 있습니다.

data/법령패키지/ — 판정 근거 법령 스냅샷

  • 법령/ : 국가계약법령·지방계약법령·중소기업제품 판로지원법령·소프트웨어진흥법령 및 관련 예규·행정규칙 23건의 전문 txt
  • 중기부고시/ : 중소벤처기업부 고시 제2025-96호(중소기업자간 경쟁제품 지정 내역) 원본 hwpx + 세부품명 csv — 품목 대조는 csv를 사용하세요
  • 원문이 이미지인 구간·제외된 대형 별표는 각 txt에 표기되어 있습니다.
  • 채점은 이 스냅샷을 기준으로 하며, 대회 기간 중의 법령 개정은 반영되지 않습니다. 평가 서버는 인터넷이 차단되므로 법령 검색(RAG)도 이 패키지로 구성하시면 됩니다.

baseline/ — submit.zip 구성 예시

  • script.py : 데이터 로드 → 고정 모델 추론(제약 디코딩) → 근거 문구 검증 → submission.csv 저장까지의 전체 흐름. 모델 없이 실행 흐름만 확인하려면 --mock 옵션을 사용할 수 있습니다.
  • 해설 노트북(baseline.ipynb)과 법령 검색(RAG)을 붙인 변형(baseline_rag.ipynb)은 코드 공유 게시판에 게시되어 있습니다.

3. 레코드 형식 (train_unlabeled · dev · test 공통)

jsonl 한 줄이 입찰공고 1건이며, 각 레코드는 아래 키로 구성됩니다.

키내용id공고 식별자(문자열). 제출 파일의 id 열에 그대로 옮깁니다docs문서 배열. 각 원소는 doc_id · type · text — type은 공고문·규격서·과업지시서·제안요청서·예외공표서 5종, text는 NFC 정규화 텍스트(표는 | 구분자로 행×열 복원)meta나라장터 등록 정보 21필드(§4)dropped_doc_counts길이 예산 초과로 제외된 문서의 종류·개수. 예 : {"제안요청서": 1} — 비어 있으면 제외된 문서 없음input_completeness관측 완전성 bool 4종 — 공고문_실재 · 추출_성공 · 무탈락 · 완전관측anon_applied익명화 적용 여부(전건 true)assembly_policy_version데이터 조립 규약 버전(문자열)

  • 공고문은 항상 1건 이상 포함됩니다. 위반이 첨부 문서에만 나타나는 항목이 있으므로 공고문만 읽고 판정을 끝내지 않는 것을 권장합니다.
  • dropped_doc_counts가 비어 있지 않은 공고는 일부 첨부가 제외된 상태입니다. "첨부에 없으니 위반"으로 단정하면 부재탐지형 항목 판정이 틀릴 수 있습니다.

4. meta 21필드와 익명화

meta 필드 : 적용계약법 · 업무구분 · 계약방법 · 낙찰방법 · 낙찰하한율 · 배정예산금액 · 입찰추정가격 · 소관구분 · 공동도급구성방식 · 정보화사업여부 · 세부품명번호목록 · 제한지역코드목록 · 지역제한여부 · 면허업종제한목록 · 업종제한여부 · 조항호내용 · 공고게시일자 · 개찰예정일자 · 긴급공고여부 · 입찰방법 · 조달방식

  • 값이 없으면 null, 등록 자체가 안 됐으면 "미입력" — 둘 다 "해당 없음"이 아니며, 비어 있다는 사실 자체가 판정 재료인 항목이 있습니다.
  • meta는 원칙적으로 본문과 정합하지만 24번 항목(정보 불일치)만 예외입니다 — 어긋남 자체가 판정 근거이므로 meta를 무조건 신뢰해서도, 무시해서도 안 됩니다.
  • 기관명·담당자·연락처·주소·공고번호는 토큰으로 치환되어 있습니다.
  • [수요기관(기초자치단체)|지역=r1] — 괄호 안 기관 유형은 판정에 사용할 수 있습니다
  • [지역:r1|단위=기초|광역=경기도] — 지역제한 판정용. 한 문서 안에서 r1·r2는 서로 다른 지역이며, 광역 시도명은 원문 그대로 유지됩니다
  • 금액·수량·날짜·법령 조문·품명·규격은 치환하지 않았습니다.

5. 24개 검토 항목

항목별 정의·근거 조문·비고는 data/항목표.json에 있으며, 항목명만 추리면 아래와 같습니다. ◽ 표시는 부재탐지형(있어야 할 기재가 없는 것이 위반 → 근거 문구 항상 빈칸) 항목입니다.

항목항목명항목항목명v1참가자격 특정기관 제한v13중기간 경쟁제품 소기업·소상공인 제한v2고시금액 미만 실적제한v14고시금액 이상 일반물품 중소기업 제한v3실적제한 1배수 이상v151억 이상~고시금액 미만 소기업 제한v4고시금액 이상 특정기관·특정실적v16 ◽1억 이상~고시금액 미만 중소기업 제한 없음v5고시금액 이상 지역제한v171억원 미만 일반물품 중소기업 제한v6고시금액 미만 지역제한 시·군·구v18 ◽1억원 미만 일반물품 소기업 제한 없음v7고시금액 미만 지역제한 인접 확대v19물품공급 확약서 입찰 시 제출v8중복제한 (실적+지역)v20 ◽입찰참가자격 (SW)v9과업지시서 특정 모델명 명시v21공동 5% (10%)v10 ◽중기간 경쟁제품 입찰 직생 없음v22현장설명회 참석업체 자격 제한 (협상계약만 적용)v11 ◽중기간 경쟁제품 입찰 중소 없음v23현장설명회 공고기간 (협상+지방계약만 적용)v12일반제품 직생 제한v24공고서와 나라장터 입력값 상이

6. 제출 형식 (output/submission.csv)

  • 49열 : id, v1~v24, e1~e24 · 행 수 = 입력 건수 · 열 순서는 sample_submission.csv와 동일
  • v1~v24 : 위반 여부를 정수 0/1로 기재(true·"1" 등은 형식 위반). 판단이 어려운 항목도 비우지 말고 0으로 제출
  • e1~e24 : 위반으로 판정한 항목의 근거 문구 — 제공된 본문의 부분문자열 그대로(요약·수정 시 무효) · 500자 이하 · 위반이 아니면 빈칸 · 부재탐지형 5개 항목(e10·e11·e16·e18·e20)은 항상 빈칸
  • 인코딩·형식 : UTF-8(BOM 없음) · NFC 정규화 · RFC4180 quoting · 수식 접두 문자(= + @) 금지
  • 리더보드는 v1~v24만 반영(24개 항목 각각 위반 클래스 F1의 단순 평균 = macro-F1)하며, e1~e24는 제출 원본이 보존되어 2차 정성평가 재료로 사용됩니다.

7. 자가 라벨링 안내 — 학습 데이터에 라벨이 없습니다

본 대회는 라벨이 부착된 학습 데이터를 제공하지 않으며, 무라벨 데이터에 스스로 라벨을 만들어 쓰는 것(자가 라벨링)이 전면 허용입니다. 라벨링되지 않은 실제 공고에서 출발해 라벨 체계를 직접 설계하는 것까지가 과제의 일부입니다.

  • 라벨 생성 방법에 제한이 없습니다 — 수작업, 규칙 기반, 모델 기반 모두 가능합니다.
  • 라벨 생성 단계에서는 외부 LLM(상용 API 포함)도 사용할 수 있습니다. 단, 외부 LLM에는 대회 제공 자료만 입력할 수 있으며, 웹 검색·외부 문서 결합 기능으로 원문을 조회하거나 외부 데이터를 가져오는 것은 금지입니다.
  • 만든 라벨은 로컬 검증셋, RAG 사례집, 후처리 규칙 튜닝 재료 등으로 자유롭게 활용할 수 있습니다.
  • 생성한 라벨을 공유하려면 코드 공유 게시판을 통한 전체 공개만 가능합니다(특정 팀 간 사적 공유 금지). 게시판에 전체 공개된 자료는 누구나 활용할 수 있습니다.
  • 수상팀은 라벨 생성 코드·프롬프트까지 재현 검증 대상에 포함되니, 생성 과정을 재현 가능하게 관리해 주세요(외부 LLM 라벨은 생성 코드·프롬프트·사용 모델 기록과 라벨 데이터 제출로 재현을 갈음합니다).

8. 시작 가이드

  1. baseline/script.py --mock 으로 모델 없이 입출력 흐름부터 확인
  2. dev 200건으로 프롬프트·후처리를 개선하고 dev_labels로 자가 채점
  3. 무라벨 20,000건에 자가 라벨링을 붙여 검증셋·사례집 확장
  4. submit.zip(script.py + requirements.txt) 구성 후 제출

베이스라인 해설 노트북과 법령 검색(RAG) 변형은 코드 공유 게시판에 게시되어 있습니다.

9. 자주 묻는 질문

Q. 학습 데이터에 왜 라벨이 없나요?

A. 본 대회는 라벨링되지 않은 실제 공고 데이터에서 출발하여, 라벨 설계·생성(자가 라벨링)까지를 과제의 일부로 두는 대회입니다. 라벨 예시는 dev 200건으로 제공되며, 자가 라벨링은 전면 허용입니다(§7 참조).

Q. dev 200건을 학습에 써도 되나요?

A. 됩니다. 대회에서 제공한 데이터·자료의 활용 범위는 규칙 탭 2)의 허용 목록에 정리되어 있습니다.

Q. 외부 데이터를 써도 되나요? (나라장터 검색, 공공데이터 API 등)

A. 안 됩니다. 학습·검증·추론 파이프라인과 제출물에는 대회 제공 자료만 사용할 수 있습니다. 무엇이 금지되는지는 규칙 탭 2)의 금지 목록에 전부 명시되어 있으니 제출 전에 반드시 확인해 주세요.

Q. 법령패키지에 없는 법령을 인터넷에서 찾아 활용해도 되나요?

A. 파이프라인·제출물에 결합하는 법령 자료는 배포된 법령패키지를 사용해야 하며, 채점 기준도 이 스냅샷으로 고정되어 있습니다(대회 기간 중 법령 개정 미반영). 개인적인 법령 공부를 제한하는 것은 아닙니다. 자세한 내용은 규칙 탭 2)를 참고해 주세요.

Q. 파인튜닝이나 LoRA 어댑터는요?

A. 불허입니다. 본 대회는 프롬프트·검색·후처리 파이프라인 대회입니다. 모델 관련 허용·불허 범위는 규칙 탭 2-1)에 정확히 정리되어 있습니다.

Q. 모델 파일을 제출물에 넣어야 하나요?

A. 아니요, 모델은 제출하지 않습니다. 고정 LLM과 보조 임베딩 모델은 평가 서버에 준비되어 있고, script.py가 환경변수 경로(PPS_MODEL_DIR·PPS_EMBED_DIR)로 로드합니다. zip에는 추론 코드(및 RAG 인덱스 등 정적 자산)만 담으세요 — 학습된 모델 가중치를 넣으면 규칙 위반이자 용량 제한(2GB) 초과입니다.

Q. 규칙(정규식) 기반 후처리는 써도 되나요?

A. 됩니다. 다만 제출 코드가 공고마다 고정 모델을 1회 이상 정상 호출해야 한다는 제출 요건이 있습니다(규칙 탭 2-1 참조). 모델 호출 없이 규칙만으로 만든 제출물은 무효 처리될 수 있습니다.

Q. 로컬에 GPU가 없어도 참가할 수 있나요?

A. 네. 로컬 개발 환경은 자유이고, 채점에 쓰이는 모델·GPU는 평가 서버가 제공합니다. 다만 고정 모델을 로컬에서 직접 실험하려면 상응하는 GPU(또는 클라우드 임대)가 필요합니다. --mock 모드와 dev 세트로 모델 없이도 파이프라인 개발·검증이 가능합니다.

Q. 근거 문구(e1~e24)는 점수에 들어가나요?

A. 리더보드에는 반영되지 않습니다. 다만 제출 원본이 보존되어 2차 평가에서 정성평가(20%)로 반영되니 처음부터 성실하게 생성하시길 권장합니다. 작성 요건은 위 §6과 평가 탭을 참고해 주세요.

Q. 제출 관련 제한은요?

A. 제출 횟수·파일 용량·실행 시간 제한은 평가 서버 사양·기본 패키지 목록과 함께 평가 탭에 정리되어 있습니다.

Q. Public 리더보드와 Private 리더보드는 어떻게 다른가요?

A. 본 대회는 매 제출을 전체 평가 데이터로 채점하며, Private Score는 대회 종료 시점의 리더보드 점수입니다. 자세한 정의는 평가 탭 1)에 있습니다.

Q. 제출했는데 점수가 안 나옵니다. 오류인가요?

A. 대부분 채점 대기 중입니다. 본 대회는 제출 코드를 평가 서버에서 직접 실행하여 채점하므로, 실행에 최대 2시간이 걸리고 제출이 몰리는 시간대에는 대기열로 결과 확인까지 수 시간이 소요될 수 있습니다. 채점이 완료되면 리더보드에 자동 반영됩니다. 마감 직전에는 지연에 대비해 여유를 두고 제출해 주세요.

Q. 평가 서버에서 자주 나는 실수가 있나요?

A. 세 가지가 대표적입니다. ① 실행 코드를 if __name__ == "__main__": 아래에 두지 않으면 vLLM 특성상 즉시 실패합니다. ② 경로를 하드코딩하면 안 됩니다 — 반드시 환경변수(PPS_DATA_DIR·PPS_OUTPUT_DIR·PPS_MODEL_DIR·PPS_EMBED_DIR)를 쓰세요. ③ 서버는 인터넷이 차단되어 있어 모델 ID로 다운로드를 시도하면 실패합니다. 베이스라인 script.py가 세 가지 모두 올바르게 처리하는 예시입니다.

Q. 제출 오류가 났습니다. 무엇을 확인해야 하나요?

A. 제출 파일 형식이 가장 흔한 원인입니다. 위반 여부 열을 확률값이나 True/False로 냈거나, 빈 값이 있거나, id가 누락·중복된 경우입니다. 제출 파일이 만족해야 할 조건은 평가 탭에 정리되어 있으니 대조해 보세요.

Q. 고정 LLM과 임베딩 모델을 같이 써도 되나요?

A. 됩니다. 다만 고정 LLM이 GPU 메모리 대부분을 사용하므로 두 모델의 GPU 동시 로드는 보장되지 않습니다. 임베딩을 CPU로 돌리거나 로드 순서를 설계하는 것은 참가자 몫입니다.

Q. 로컬 점수와 서버 점수가 다를 수 있나요?

A. 있습니다. 추론 재현성은 동일 환경(이미지·모델 리비전·드라이버·vLLM 버전·시드) 한정입니다. 서버 환경 명세를 평가 탭에 공개해 두었으니 정밀 재현이 필요하면 참고하세요.


기타 궁금한 점은 토론 게시판에 남겨주시고, 데이콘 답변이 필요한 질문은 이 글 댓글로 부탁드립니다.

감사합니다.

데이콘 드림.

로그인이 필요합니다
0 / 1000
라따뚜이3
2026.09.08 13:06

키내용id공고 식별자(문자열). 제출 파일의 id 열에 그대로 옮깁니다docs문서 배열. 각 원소는 doc_id · type · text — type은 공고문·규격서·과업지시서·제안요청서·예외공표서 5종, text는 NFC 정규화 텍스트(표는 | 구분자로 행×열 복원)meta나라장터 등록 정보 21필드(§4)dropped_doc_counts길이 예산 초과로 제외된 문서의 종류·개수. 예 : {"제안요청서": 1} — 비어 있으면 제외된 문서 없음input_completeness관측 완전성 bool 4종 — 공고문_실재 · 추출_성공 · 무탈락 · 완전관측anon_applied익명화 적용 여부(전건 true)assembly_policy_version데이터 조립 규약 버전(문자열)

항목항목명항목항목명v1참가자격 특정기관 제한v13중기간 경쟁제품 소기업·소상공인 제한v2고시금액 미만 실적제한v14고시금액 이상 일반물품 중소기업 제한v3실적제한 1배수 이상v151억 이상~고시금액 미만 소기업 제한v4고시금액 이상 특정기관·특정실적v16 ◽1억 이상~고시금액 미만 중소기업 제한 없음v5고시금액 이상 지역제한v171억원 미만 일반물품 중소기업 제한v6고시금액 미만 지역제한 시·군·구v18 ◽1억원 미만 일반물품 소기업 제한 없음v7고시금액 미만 지역제한 인접 확대v19물품공급 확약서 입찰 시 제출v8중복제한 (실적+지역)v20 ◽입찰참가자격 (SW)v9과업지시서 특정 모델명 명시v21공동 5% (10%)v10 ◽중기간 경쟁제품 입찰 직생 없음v22현장설명회 참석업체 자격 제한 (협상계약만 적용)v11 ◽중기간 경쟁제품 입찰 중소 없음v23현장설명회 공고기간 (협상+지방계약만 적용)v12일반제품 직생 제한v24공고서와 나라장터 입력값 상이

오타인 거 같습니다!