Spaces:
Running
Running
| /* LEADBOARD 문자열 사전. | |
| * | |
| * 문자열은 전부 여기에만 둔다. 화면 코드에 한국어가 섞이면 영어판이 조용히 뒤처진다. | |
| * 작은따옴표를 쓰지 않는다 - 영문 축약형(don't) 하나가 문자열을 끊어 사전 전체를 | |
| * 무너뜨린 전례가 있다. 축약형은 풀어 쓴다. | |
| */ | |
| window.T = { | |
| ko: { | |
| htmlLang: "ko", | |
| title: "LEADBOARD — 신약 예측 도구 시험대", | |
| navSpec: "규격", | |
| login: "HF 로그인", logout: "로그아웃", | |
| langBtn: "EN", | |
| heroKicker: "AI 신약 개발 벤치마크", | |
| heroTag: "신약 예측 도구를<br>분야별로, 동일한 기준으로 평가합니다", | |
| heroLede: "본 시험대는 정답을 배포하지 않습니다. 대신 <b>학습하지 않은 기준선</b>과 " + | |
| "<b>해당 종목의 실험실 간 재현 오차</b>를 사전에 공시하여, 보고된 성능이 " + | |
| "측정 한계 대비 어디에 위치하는지 판정할 수 있게 합니다.", | |
| statBoards: "개설 부문", statCompounds: "테스트 화합물", statFields: "분야", | |
| statClauses: "규격 조항", statPlanned: "계획 부문", | |
| secLeaders: "부문별 1위", | |
| secLeadersLead: "각 부문의 현재 선두입니다. 참가 제출이 없는 부문은 비워 둡니다 — 기준선은 넘어야 할 선이지 우승자가 아닙니다.", | |
| thBoard: "부문", thBest: "1위", thScore: "점수", thVs: "기준선 대비", thN: "테스트", | |
| noLeader: "아직 없음", | |
| leadersEmpty: n => `${n}개 부문 모두 참가 제출을 기다리고 있습니다.`, | |
| leadersSome: (a, b) => `${b}개 부문 중 ${a}개에 선두가 있습니다.`, | |
| secBrowse: "분야", secBrowseLead: "분야를 선택하면 소속 부문의 순위표와 제출 창구로 이동합니다.", | |
| secEvidence: "측정 한계 지형", | |
| secEvidenceLead: "가로축은 <b>기준선 오차 ÷ 실험 재현 오차</b>입니다. 1.0 에 근접할수록 " + | |
| "모델을 개선해도 <b>측정의 산포를 예측하는 일</b>에 가까워집니다.", | |
| secMethod: "채점 규격 8개 조항", | |
| secMethodLead: "참가자에게 부과하는 요건이 아니라, 채점자가 스스로에게 부과하는 제약입니다.", | |
| secData: "데이터와 라이선스", | |
| terrLeft: "실험 오차 안쪽", terrRight: "모델 오차가 더 큼", | |
| insideCount: n => `${n}개 부문이 1.3배 안쪽에 위치합니다.`, | |
| lostNote: n => `<b>${n}개 부문에서 학습 기준선이 상수 예측에 미달했습니다.</b> ` + | |
| "학습하지 않은 예측이 더 정확했다는 의미입니다. 기준선을 순위표에 상주시키지 " + | |
| "않으면(3조) 이 사실은 어떤 지표에도 나타나지 않습니다.", | |
| openN: n => `${n} 개설`, prep: "준비 중", | |
| cardBoards: (o, p) => `부문 ${o}/${p}`, | |
| cardCompounds: n => `${n} 화합물`, | |
| clauses: [ | |
| ["정답은 배포하지 않는다", "부문마다 분할 등급과 정답 등급을 공시한다"], | |
| ["점수마다 두 개의 지문", "데이터 판본과 채점 코드의 SHA-256 을 각인한다"], | |
| ["기준선은 순위표에서 내려가지 않는다", "상수 예측 · 최근접 이웃 · Morgan+LightGBM 영구 등재"], | |
| ["실험 오차를 사전 공시한다", "동일 화합물의 논문 간 측정 차이로 산출한다"], | |
| ["누출은 매 제출마다 검사한다", "정답과 소수 자리까지 일치하는 항목의 과밀도를 공시한다"], | |
| ["결과 제출과 모델 제출을 구분한다", "직접 재실행하여 확인한 제출에만 [검증됨]을 부여한다"], | |
| ["미산출은 0점이 아니다", "측정하지 못한 것과 측정하여 나쁜 것은 다르다"], | |
| ["반복 제출로 순위가 오르지 않는다", "Ladder · Blum & Hardt, ICML 2015"] | |
| ], | |
| all: "전체", | |
| tabRank: "순위", tabSubmit: "제출", tabInfo: "부문 정보", | |
| thRank: "#", thMethod: "방법", thUser: "제출자", thLeak: "누출", thGrade: "등급", | |
| baseline: "기준선", submitted: "제출됨", verified: "검증됨", reference: "참조 도구", | |
| leakHigh: "조회 흔적", leakElev: "근접 과밀", | |
| noiseNote: v => `<b>실험 재현 오차 ${v}.</b> 이 폭 안의 차이는 순위 차이로 주장하지 ` + | |
| "않습니다 (4조). 기준선 3종은 순위표에서 내려가지 않습니다 (3조).", | |
| noEntries: "참가 제출이 아직 없습니다. 표에 표시된 것은 기준선입니다.", | |
| updated: t => `순위 갱신 ${t}`, | |
| gradeH: "등급", holdoutH: "홀드아웃", noiseH: "실험 재현 오차", baseH: "기준선", | |
| splitGrade: "분할 등급", answerGrade: "정답 등급", | |
| gradeNote: { | |
| T: "시간 분할 — 최초 보고 연도 기준. 기준일 이후 처음 등장한 화합물만 평가한다", | |
| S: "스캐폴드 분할 — 골격이 훈련에 없는 화합물만 평가한다", | |
| P1: "정답이 공개 데이터베이스에 존재한다. 조회 방어는 8조가 담당한다", | |
| P2: "원자료는 공개지만 선별과 환산이 본 판본을 구성한다. 공개 DB 조회로는 동일 값이 나오지 않는다", | |
| P3: "파트너로부터 제공받은 미공표 실측", | |
| P4: "부문 개설 이후 생성된 측정. 개설 시점에 존재하지 않았다" | |
| }, | |
| kSource: "출처", kCut: "분할 기준일", kTrainTest: "훈련 / 테스트", | |
| kOverlap: "구조 겹침", kThr: "분류 임계", kSha: "데이터 지문", kLicense: "라이선스", | |
| cutNote: "최초 보고 연도 기준", overlapNote: "0 (시간 분할 정의상)", | |
| posRate: p => `양성 ${p}%`, | |
| noisePairs: (p, c) => `비교쌍 ${p} · 화합물 ${c}`, | |
| noiseDesc: "동일 화합물을 <b>서로 다른 논문</b>에서 측정한 값의 차이", | |
| noiseSd: "단일 측정 표준편차 추정", | |
| nearNote: (p, hi) => `분류 임계선에서 실험 오차 1 표준편차 안에 있는 테스트 화합물이 ` + | |
| `<b>${p}%</b> 입니다. ` + (hi ? "재측정 시 라벨이 반전될 수 있어 <b>회귀를 주지표</b>로 둡니다." | |
| : "분류 지표를 함께 사용합니다."), | |
| beatsYes: "학습 기준선이 상수 예측을 상회했습니다.", | |
| beatsNo: "<b>학습 기준선이 상수 예측에 미달했습니다.</b> 학습하지 않은 예측이 더 정확했습니다.", | |
| noiseFloorRow: "실험 오차 바닥", | |
| step1: "테스트셋 수령", step2: "예측 제출", step3: "컨테이너 제출 (선택)", | |
| step1d: n => `화합물 <b>${n}개</b>의 구조(SMILES)만 포함합니다. 라벨은 본 서버에 존재하지 않습니다.`, | |
| licLine: "ChEMBL 파생 · CC BY-SA 3.0 — 재배포 시 출처와 동일 라이선스를 유지하십시오.", | |
| dl: "테스트셋 내려받기", | |
| fMethod: "방법 이름", fMethodH: "순위표에 표시될 명칭", | |
| fTrain: "학습에 사용한 데이터", fTrainH: "5조 누출 검사에 사용합니다", | |
| fPred: "예측값", fPredH: "JSON 또는 CSV (compound_id, prediction)", | |
| fPredAx: n => `이 부문은 축이 ${n}개다 — 화합물마다 숫자 ${n}개짜리 배열을 JSON 으로 올린다`, | |
| drop: "파일을 끌어다 놓거나 클릭하여 선택", | |
| send: "제출", needLogin: "제출하려면 HF 계정 로그인이 필요합니다.", | |
| step3d: "모델과 추론 환경을 함께 제출하면 직접 재실행하여 동일 결과를 확인하고 " + | |
| "[검증됨]을 부여합니다 (6조).", | |
| ladderNote: (v, c) => `<b>8조.</b> 반복 제출로는 순위가 오르지 않습니다. 직전 최고 점수를 ` + | |
| `실험 오차 <b>${v}</b> 이상 개선한 경우에만 새 점수가 공개됩니다. 일일 제출 한도 ${c}회.`, | |
| accepted: id => `접수 완료 · 제출 번호 ${id}`, | |
| parseFail: m => `예측값을 해석하지 못했습니다: ${m}`, | |
| sending: n => `${n}개 항목 전송 중`, | |
| emptyCat: "본 분야는 아직 개설된 부문이 없습니다.", | |
| loadFail: "화면을 불러오지 못했습니다.", | |
| dataNote: "모든 부문은 ChEMBL_37 에서 구축했으며 최초 보고 연도를 기준으로 시간 분할했습니다. " + | |
| "배포되는 테스트셋은 구조만 포함하며 라벨은 포함하지 않습니다.", | |
| srcLabel: "데이터 출처", | |
| sib: "자매 시험대", | |
| sibOdc: "AI가 찾아낸 신약 후보 물질을 계산 검증합니다", | |
| sibOmc: "전고체 배터리 신소재를 찾는 시험대입니다", | |
| secWhy: "왜 만들었는가", | |
| why1: "AI가 신약 후보를 쏟아내는 만큼, 그 후보를 판정하는 <b>예측 도구</b>도 쏟아집니다. " + | |
| "흡수 · 대사 · 독성 · 표적 결합마다 도구가 수십 개씩 있습니다. 그런데 그 도구들의 " + | |
| "성능은 개발자가 자기 논문에서, 자기가 고른 데이터로 보고합니다. " + | |
| "<b>같은 문제로 잰 것이 아니므로 비교가 성립하지 않습니다.</b>", | |
| why2: "2026년 2월, 널리 쓰이는 ADMET 리더보드 22개 종목의 상위 모델을 전수 검증한 결과가 " + | |
| "보고되었습니다. 검증 대상 66개 중 완전히 재현된 것은 3개였고, 테스트셋에 맞춘 모델은 " + | |
| "22개 종목 중 10개에서 3위 안에 진입했습니다. 같은 설계를 정직하게 구성한 모델은 2개였습니다.", | |
| why3: "문제는 특정 연구실이 아니라 <b>시험 방식</b>입니다. " + | |
| "정답을 함께 배포하는 시험은, 아무리 성실히 치러도 예측력과 노출을 분리하지 못합니다.", | |
| whyCite: "Koleiev 외, Critical Assessment of ML models for ADMET Prediction in TDC leaderboards, bioRxiv 2026", | |
| secFound: "본 시험대가 실측한 것", | |
| secFoundLead: "아래는 인용이 아니라 본 시험대가 19개 부문에서 직접 산출한 결과입니다.", | |
| ratioLabel: "오차 ÷ 실험오차", | |
| found1t: "분할 방식만으로 AUROC 가 0.21 이동한다", | |
| found1d: "동일 데이터 · 동일 모델(Morgan+LightGBM 기본값) · 동일 테스트 비율에서 분할만 교체했습니다. " + | |
| "hERG 기준 무작위 분할 0.818 → 시간 분할 0.606. " + | |
| "<b>분할 방식이 공시되지 않은 순위표의 수치는 비교가 불가능합니다.</b>", | |
| found2t: "19개 부문 중 7개에서 학습 기준선이 상수 예측에 미달했다", | |
| found2d: "훈련 데이터의 중앙값을 그대로 내놓는 예측이 학습한 모델보다 정확했습니다. " + | |
| "기준선을 순위표에 상주시키지 않으면 이 사실은 어떤 지표에도 나타나지 않습니다.", | |
| found3t: "모델 오차가 실험 오차의 0.91 ~ 2.79 배 구간에 있다", | |
| found3d: "동일 화합물을 서로 다른 논문에서 측정한 값의 차이로 각 부문의 실험 재현 오차를 " + | |
| "산출했습니다. 7개 부문은 그 오차의 1.3배 안쪽에 있습니다.", | |
| secHow: "참여 방법", | |
| how1t: "테스트셋을 받습니다", | |
| how1d: "부문을 선택하면 화합물 구조(SMILES)와 식별자만 담긴 파일을 내려받습니다. " + | |
| "라벨은 포함되지 않으며, 본 서버에도 존재하지 않습니다.", | |
| how2t: "원하는 도구로 예측합니다", | |
| how2d: "자체 모델 · 상용 도구 · 공개 가중치 · 물리 기반 계산 무엇이든 무방합니다. 제한하지 않습니다. " + | |
| "학습에 사용한 데이터만 기재해 주십시오 (5조 누출 검사에 사용합니다).", | |
| how3t: "예측값을 제출하면 자동 채점됩니다", | |
| how3d: "JSON 또는 CSV 로 올리면 채점 · 누출 검사 · 지문 각인이 자동 수행되고, " + | |
| "기준선 3종 및 실험 오차와 함께 순위표에 표시됩니다.", | |
| secMetric: "채점 기준", | |
| mMae: "주지표. 예측값과 실측값의 평균 절대 오차입니다. 낮을수록 좋습니다.", | |
| mAuroc: "분류 지표. 임계선 위아래를 가르는 능력입니다. 0.5 는 무작위와 같습니다.", | |
| mPrauc: "양성이 드문 부문에서 AUROC 보다 실태를 잘 드러냅니다.", | |
| mNoise: "동일 화합물의 논문 간 측정 차이로 산출한 재현 오차입니다. 이 폭 안의 차이는 순위로 인정하지 않습니다.", | |
| mRatio: "최선 기준선 오차 ÷ 실험 오차. 1.0 에 근접하면 측정 한계에 도달한 것입니다.", | |
| mLeak: "예측값이 실측값과 소수 자리까지 일치하는 항목의 밀도입니다. 의도를 판정하지 않고 사실만 표시합니다.", | |
| secOwn: "제출물의 취급", | |
| own1: "<b>제출한 예측값은 제출자의 것입니다.</b> VIDRAFT 는 채점과 순위표 표시에 필요한 " + | |
| "범위에서만 사용하며, 개별 제출을 자사 파이프라인에 투입하지 않고 제3자에게 제공하지 않습니다.", | |
| own2: "다만 <b>부문 단위 집계</b>는 공개할 수 있습니다 — 전 제출의 합의 예측, 모든 방법이 " + | |
| "실패한 화합물 목록, 접근법별 성능 지형 등입니다. 개별 제출자의 예측값은 식별되지 않으며, " + | |
| "집계 결과는 참가자를 포함한 모두에게 공개됩니다.", | |
| own3: "방법 이름과 순위는 공개됩니다. 모델 내부 구조나 가중치를 요구하지 않습니다.", | |
| secOpen: "개설 예정", | |
| openLead: "각 부문은 홀드아웃과 실험 오차가 확보된 뒤에 엽니다. 확보되지 않은 부문은 열지 않습니다.", | |
| learnMore: "자세히", | |
| tabGuide: "참여 가이드", | |
| gdIntro: "예측 도구를 처음 만드신다면 아래 순서대로 하시면 됩니다. " + | |
| "직접 코딩하셔도 되고, 아래 프롬프트를 언어모델에 그대로 붙여 넣으셔도 됩니다.", | |
| gdWhat: "무엇을 만드는가", | |
| gdWhatD: "화합물 구조(SMILES)를 받아 <b>값 하나</b>를 내놓는 함수입니다. " + | |
| "그 값이 실측과 얼마나 가까운지로 채점합니다.", | |
| gdPrompt: "언어모델용 프롬프트", | |
| gdPromptD: "아래를 통째로 복사해 Claude · GPT · Gemini 등에 붙여 넣으십시오. " + | |
| "이 부문의 값이 이미 채워져 있습니다.", | |
| gdCopy: "복사", gdCopied: "복사됨", | |
| gdStarter: "바로 돌려볼 수 있는 뼈대", | |
| gdStarterD: "직접 짜시려면 이 뼈대에서 시작하십시오. 훈련 자료를 받아 지문을 만들고 " + | |
| "모델을 학습해 제출 파일까지 씁니다.", | |
| gdRules: "지켜야 할 것", | |
| gdR1: "기준일 이후 최초 보고된 화합물은 학습에 쓰지 마십시오. 그것이 테스트셋입니다.", | |
| gdR2: "같은 화합물이 여러 논문에 있으면 InChIKey 로 접어 중앙값을 쓰십시오. " + | |
| "문자열로 접으면 같은 분자가 여러 번 들어갑니다.", | |
| gdR3: "정답을 조회해 채우지 마십시오. 예측값이 실측과 소수 자리까지 일치하는 밀도를 " + | |
| "검사해 순위표에 함께 표시합니다.", | |
| gdR4: "방법에는 제한이 없습니다. 지문+트리 · 그래프 신경망 · 사전학습 모델 · 물리 계산 " + | |
| "무엇이든 좋습니다.", | |
| gdTarget: "넘어야 할 선", | |
| gdTargetD: "기준선을 넘지 못하면 순위표에서 그 아래에 표시됩니다.", | |
| }, | |
| en: { | |
| htmlLang: "en", | |
| title: "LEADBOARD — Benchmark for Drug Prediction Tools", | |
| navSpec: "spec", | |
| login: "Sign in with HF", logout: "Sign out", | |
| langBtn: "한국어", | |
| heroKicker: "AI Drug Discovery Benchmark", | |
| heroTag: "One yardstick, per discipline,<br>for drug prediction tools", | |
| heroLede: "We do not release the answer key. Instead we publish, in advance, " + | |
| "<b>baselines that learned nothing</b> and <b>the inter-laboratory reproducibility " + | |
| "of each endpoint</b> — so that any reported score can be judged against the " + | |
| "measurement limit itself.", | |
| statBoards: "open boards", statCompounds: "test compounds", statFields: "disciplines", | |
| statClauses: "spec clauses", statPlanned: "planned boards", | |
| secLeaders: "Current leaders", | |
| secLeadersLead: "The leading entry on each board. Boards without an entrant are left blank — a baseline is a line to cross, not a winner.", | |
| thBoard: "Board", thBest: "Leader", thScore: "Score", thVs: "vs baseline", thN: "Test", | |
| noLeader: "none yet", | |
| leadersEmpty: n => `All ${n} boards are awaiting their first entry.`, | |
| leadersSome: (a, b) => `${a} of ${b} boards have a leader.`, | |
| secBrowse: "Disciplines", | |
| secBrowseLead: "Select a discipline to reach its boards, leaderboards and submission desk.", | |
| secEvidence: "Measurement-limit landscape", | |
| secEvidenceLead: "The axis is <b>baseline error divided by experimental error</b>. " + | |
| "The closer to 1.0, the more that further tuning amounts to " + | |
| "<b>predicting measurement scatter</b>.", | |
| secMethod: "Eight clauses the scorer imposes on itself", | |
| secMethodLead: "These are not requirements placed on entrants. They are constraints we accept.", | |
| secData: "Data and licence", | |
| terrLeft: "inside experimental error", terrRight: "model error larger", | |
| insideCount: n => `${n} boards sit within 1.3x.`, | |
| lostNote: n => `<b>On ${n} boards the trained baseline failed to beat constant prediction.</b> ` + | |
| "A prediction that learned nothing was more accurate. Without baselines resident on the " + | |
| "leaderboard (clause 3), this fact appears in no metric.", | |
| openN: n => `${n} open`, prep: "in preparation", | |
| cardBoards: (o, p) => `boards ${o}/${p}`, | |
| cardCompounds: n => `${n} compounds`, | |
| clauses: [ | |
| ["The answer key is not distributed", "Each board declares its split grade and answer grade"], | |
| ["Every score carries two fingerprints", "SHA-256 of the data revision and of the scoring code"], | |
| ["Baselines never leave the table", "Constant, nearest-neighbour and Morgan+LightGBM stay resident"], | |
| ["Experimental error is published first", "Derived from cross-publication measurements of the same compound"], | |
| ["Leakage is screened on every submission", "We report the density of predictions matching labels to the decimal"], | |
| ["Result submission and model submission are distinct", "Only re-executed submissions receive [verified]"], | |
| ["An unmeasured axis is not a zero", "Failing to measure differs from measuring a poor result"], | |
| ["Repeated submission does not raise rank", "Ladder · Blum & Hardt, ICML 2015"] | |
| ], | |
| all: "All", | |
| tabRank: "Leaderboard", tabSubmit: "Submit", tabInfo: "Board detail", | |
| thRank: "#", thMethod: "Method", thUser: "Entrant", thLeak: "Leakage", thGrade: "Grade", | |
| baseline: "baseline", submitted: "submitted", verified: "verified", reference: "reference tool", | |
| leakHigh: "lookup trace", leakElev: "near-exact density", | |
| noiseNote: v => `<b>Experimental error ${v}.</b> Differences within this band are not ` + | |
| "claimed as rank differences (clause 4). The three baselines stay resident (clause 3).", | |
| noEntries: "No entrant submissions yet. The rows shown are baselines.", | |
| updated: t => `Leaderboard updated ${t}`, | |
| gradeH: "Grades", holdoutH: "Holdout", noiseH: "Experimental error", baseH: "Baselines", | |
| splitGrade: "Split grade", answerGrade: "Answer grade", | |
| gradeNote: { | |
| T: "Time split by year of first report. Only compounds first reported after the cut are scored", | |
| S: "Scaffold split. Only compounds whose scaffold is absent from training are scored", | |
| P1: "The answer exists in a public database. Clause 8 carries the defence against lookup", | |
| P2: "The source is public, but selection and unit conversion define this revision. " + | |
| "Querying the public database does not reproduce these values", | |
| P3: "Unpublished measurements provided by a partner", | |
| P4: "Measured after the board opened. It did not exist at opening" | |
| }, | |
| kSource: "Source", kCut: "Split year", kTrainTest: "Train / test", | |
| kOverlap: "Structure overlap", kThr: "Classification threshold", kSha: "Data fingerprint", | |
| kLicense: "Licence", | |
| cutNote: "by year of first report", overlapNote: "0 (by construction of the time split)", | |
| posRate: p => `positives ${p}%`, | |
| noisePairs: (p, c) => `${p} pairs · ${c} compounds`, | |
| noiseDesc: "Difference between measurements of the same compound in <b>different publications</b>", | |
| noiseSd: "Estimated single-measurement SD", | |
| nearNote: (p, hi) => `<b>${p}%</b> of test compounds lie within one experimental SD of the ` + | |
| "classification threshold. " + (hi ? "Labels there can invert on re-measurement, so " + | |
| "<b>regression is the primary metric</b>." : "Classification metrics are reported alongside."), | |
| beatsYes: "The trained baseline beat constant prediction.", | |
| beatsNo: "<b>The trained baseline failed to beat constant prediction.</b> " + | |
| "A prediction that learned nothing was more accurate.", | |
| noiseFloorRow: "experimental error floor", | |
| step1: "Obtain the test set", step2: "Submit predictions", step3: "Submit a container (optional)", | |
| step1d: n => `Structures (SMILES) for <b>${n} compounds</b>. No labels — they do not exist on this server.`, | |
| licLine: "Derived from ChEMBL · CC BY-SA 3.0 — retain attribution and the same licence on redistribution.", | |
| dl: "Download test set", | |
| fMethod: "Method name", fMethodH: "as it will appear on the leaderboard", | |
| fTrain: "Training data used", fTrainH: "used for the clause 5 leakage screen", | |
| fPred: "Predictions", fPredH: "JSON or CSV (compound_id, prediction)", | |
| fPredAx: n => `This board has ${n} axes — upload JSON with an array of ${n} numbers per compound`, | |
| drop: "Drop a file here, or click to choose", | |
| send: "Submit", needLogin: "Signing in with a Hugging Face account is required to submit.", | |
| step3d: "Submit the model with its inference environment and we re-execute it, confirm the " + | |
| "same numbers, and mark it [verified] (clause 6).", | |
| ladderNote: (v, c) => `<b>Clause 8.</b> Repeated submission does not raise rank. A new score is ` + | |
| `released only when it improves on your previous best by more than the experimental error ` + | |
| `<b>${v}</b>. Daily limit ${c}.`, | |
| accepted: id => `Accepted · submission ${id}`, | |
| parseFail: m => `Could not parse the predictions: ${m}`, | |
| sending: n => `sending ${n} entries`, | |
| emptyCat: "No boards are open in this discipline yet.", | |
| loadFail: "The page could not be loaded.", | |
| dataNote: "Every board is built from ChEMBL_37 and split by year of first report. " + | |
| "Distributed test sets contain structures only; labels are not included.", | |
| srcLabel: "Data source", | |
| sib: "Sister benchmarks", | |
| sibOdc: "Computational validation of AI-generated drug candidates", | |
| sibOmc: "A benchmark for solid-state battery materials", | |
| secWhy: "Why this exists", | |
| why1: "As AI produces drug candidates, it also produces the <b>prediction tools</b> that judge " + | |
| "them. Absorption, metabolism, toxicity, target binding — each has dozens of tools. " + | |
| "Yet their performance is reported by their own authors, on data of their own choosing. " + | |
| "<b>They were not measured on the same problem, so the comparison does not hold.</b>", | |
| why2: "In February 2026 an audit of the top-ranked models across 22 endpoints of a widely used " + | |
| "ADMET leaderboard was published. Of 66 models examined, three reproduced fully. Models " + | |
| "deliberately tuned on the public test set reached the top three on 10 of 22 endpoints; " + | |
| "the same design built honestly reached it on two.", | |
| why3: "The fault lies not with any laboratory but with <b>the format of the examination</b>. " + | |
| "A test distributed together with its answer key cannot separate predictive power from exposure.", | |
| whyCite: "Koleiev et al., Critical Assessment of ML models for ADMET Prediction in TDC leaderboards, bioRxiv 2026", | |
| secFound: "What this benchmark measured", | |
| secFoundLead: "These are not citations. They were produced here, across 19 boards.", | |
| ratioLabel: "error / experimental error", | |
| found1t: "The split alone moves AUROC by 0.21", | |
| found1d: "Same data, same model (Morgan+LightGBM at defaults), same test fraction — only the split " + | |
| "changed. On hERG: random split 0.818, time split 0.606. " + | |
| "<b>A leaderboard that does not declare its split cannot be compared against.</b>", | |
| found2t: "On 7 of 19 boards the trained baseline failed to beat constant prediction", | |
| found2d: "Returning the training median outperformed a trained model. Without baselines resident " + | |
| "on the leaderboard, this fact appears in no metric.", | |
| found3t: "Model error sits between 0.91x and 2.79x the experimental error", | |
| found3d: "Each board carries an experimental error derived from measurements of the same compound " + | |
| "in different publications. Seven boards lie within 1.3x of that error.", | |
| secHow: "How to take part", | |
| how1t: "Obtain the test set", | |
| how1d: "Choose a board and download a file containing structures (SMILES) and identifiers only. " + | |
| "No labels are included, and none exist on this server.", | |
| how2t: "Predict with any tool you like", | |
| how2d: "Proprietary models, commercial tools, open weights, physics-based calculation — all are " + | |
| "permitted. We impose no restriction. Only declare the data you trained on, which is used " + | |
| "for the clause 5 leakage screen.", | |
| how3t: "Submit predictions for automatic scoring", | |
| how3d: "Upload JSON or CSV. Scoring, leakage screening and fingerprinting run automatically, and " + | |
| "the result appears on the leaderboard beside the three baselines and the experimental error.", | |
| secMetric: "What is scored", | |
| mMae: "Primary metric. Mean absolute error against the measured value. Lower is better.", | |
| mAuroc: "Classification metric. Ability to separate above and below the threshold. 0.5 equals chance.", | |
| mPrauc: "More informative than AUROC where positives are rare.", | |
| mNoise: "Reproducibility derived from cross-publication measurements of the same compound. " + | |
| "Differences within this band are not recognised as rank differences.", | |
| mRatio: "Best baseline error divided by experimental error. Approaching 1.0 means the measurement " + | |
| "limit has been reached.", | |
| mLeak: "Density of predictions matching the measured value to the decimal. We do not adjudicate " + | |
| "intent; we report the fact.", | |
| secOwn: "How submissions are handled", | |
| own1: "<b>Your predictions remain yours.</b> VIDRAFT uses them only as required for scoring and " + | |
| "leaderboard display. Individual submissions are not fed into our own pipeline and are not " + | |
| "provided to third parties.", | |
| own2: "We may publish <b>board-level aggregates</b> — a consensus prediction across all entries, " + | |
| "the compounds every method failed, the performance landscape by approach. Individual " + | |
| "predictions are not identifiable in these, and the aggregates are released to everyone, " + | |
| "entrants included.", | |
| own3: "Method names and ranks are public. We do not ask for model internals or weights.", | |
| secOpen: "Opening next", | |
| openLead: "A board opens only once its holdout and experimental error are established. " + | |
| "Boards without them are not opened.", | |
| learnMore: "Detail", | |
| tabGuide: "Guide", | |
| gdIntro: "If this is your first predictor, follow the steps below. Write it yourself, " + | |
| "or paste the prompt into a language model as it is.", | |
| gdWhat: "What you are building", | |
| gdWhatD: "A function that takes a structure (SMILES) and returns <b>one number</b>. " + | |
| "We score how close that number is to the measured value.", | |
| gdPrompt: "Prompt for a language model", | |
| gdPromptD: "Copy the whole block into Claude, GPT, Gemini or similar. " + | |
| "The values for this board are already filled in.", | |
| gdCopy: "Copy", gdCopied: "Copied", | |
| gdStarter: "A skeleton you can run", | |
| gdStarterD: "If you would rather write it yourself, start here. It pulls the training data, " + | |
| "builds fingerprints, fits a model and writes the submission file.", | |
| gdRules: "Rules to observe", | |
| gdR1: "Do not train on compounds first reported on or after the split year. That is the test set.", | |
| gdR2: "Fold duplicate measurements by InChIKey and take the median. Folding by SMILES string " + | |
| "leaves the same molecule in several times.", | |
| gdR3: "Do not fill predictions by looking up the answer. We measure how many predictions match " + | |
| "the measured value to the decimal and show it on the leaderboard.", | |
| gdR4: "There is no restriction on method. Fingerprints and trees, graph networks, pretrained " + | |
| "models, physics-based calculation — all are fine.", | |
| gdTarget: "Lines to cross", | |
| gdTargetD: "A submission that does not clear a baseline is shown below it on the leaderboard.", | |
| } | |
| }; | |