1<!doctype html> 2<html lang="en"> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1"> 6<title>Methodology â OpenTWBench</title> 7<meta name="description" content="How OpenTWBench turns Taiwan's published examination papers into benchmarks: parsing hazards, exclusion rules and quality checks."> 8<meta property="og:title" content="Methodology â OpenTWBench"> 9<meta property="og:description" content="How OpenTWBench scores models â boxed-answer extraction, deterministic option shuffling, full-precision serving, and a parse rate beside every score â built for reproducible, comparable results."> 10<meta property="og:type" content="website"> 11<meta property="og:image" content="https://opentwbench.ai/assets/og-image.png"> 12<meta property="og:image:width" content="1200"> 13<meta property="og:image:height" content="630"> 14<meta name="twitter:card" content="summary_large_image"> 15<meta name="twitter:image" content="https://opentwbench.ai/assets/og-image.png"> 16<link rel="icon" href="assets/favicon.svg?v=5019eba3f4" type="image/svg+xml"> 17<link rel="icon" href="assets/favicon.ico?v=e7d4978bfa" sizes="any"> 18<link rel="apple-touch-icon" href="assets/apple-touch-icon.png?v=62d5c134f9"> 19<link rel="mask-icon" href="assets/safari-pinned-tab.svg?v=164f29ae60" color="#6676FF"> 20<link rel="manifest" href="assets/site.webmanifest?v=2ca761e1b6"> 21<link rel="preconnect" href="https://fonts.googleapis.com"> 22<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 23<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter+Tight:[email protected]&family=Playfair+Display:[email protected]&display=swap"> 24<link rel="stylesheet" href="assets/styles.css?v=8ed7de4708"> 25</head> 26<body> 27<header class="site-header"> 28 <div class="wrap header-inner"> 29 <a class="brand" href="/"> 30 <span class="brand-wordmark" role="img" aria-label="OpenTWBench"></span> 31 </a> 32 <nav class="site-nav" id="site-nav"> 33 <a href="/#leaderboard" data-i18n="nav.leaderboard">Leaderboard</a> 34 <a href="/benchmarks.html">Benchmarks</a> 35 <a href="/subjects.html" data-i18n="nav.subjects">Subjects</a> 36 <a href="/methodology.html" data-i18n="nav.methodology">Methodology</a> 37 <a href="/#cite" data-i18n="nav.cite">Cite</a> 38 <a class="nav-mark" href="https://huggingface.co/OpenTWBench" rel="noopener"><img src="assets/logos/huggingface.svg?v=fb54b5823d" alt="" width="18" height="18"><span data-i18n="nav.hf">Hugging Face</span></a> 39 </nav> 40 <div class="header-tools"> 41 <button id="theme-toggle" class="icon-button" type="button" 42 data-i18n-attr="aria-label: theme.toggle">â</button> 43 <button id="nav-toggle" class="icon-button nav-toggle" type="button" 44 data-i18n-attr="aria-label: nav.menu" aria-expanded="false">â°</button> 45 </div> 46 </div> 47</header> 48 49<main class="wrap prose"> 50 <div class="only-en"> 51 <h1>How the data is built</h1> 52 <p class="lede"> 53 The questions come from Taiwan's published past examination papers. This page records 54 what happens in between â because the real risk in a benchmark is not a few missing 55 questions, it is <strong>an answer key that lands one question to the left</strong> and 56 nobody notices. 57 </p> 58 59 <h2>From a paper to a question</h2> 60 <ol class="steps"> 61 <li>Fetch the Ministry of Examination's open-data paper index; keep the multiple-choice papers that publish an answer key.</li> 62 <li>Download the question and answer-key PDFs, rate-limited and cached on disk, so a rerun costs the service nothing.</li> 63 <li>Extract the text layer with PyMuPDF â these are born-digital PDFs, no OCR involved.</li> 64 <li>Filter, deduplicate, and write out in the Twinkle Eval MCQ format.</li> 65 </ol> 66 67 <h2>Parsing hazards</h2> 68 <p>None of these crash anything. They just corrupt the data quietly, so each one is recorded.</p> 69 <div class="table-wrap"> 70 <table class="doc-table"> 71 <thead><tr><th>Hazard</th><th>Handling</th></tr></thead> 72 <tbody> 73 <tr><td>Option markers are <strong>Private Use Area glyphs</strong> (U+E18CâU+E190), not the letters AâD</td> 74 <td>Mapped back to letters; older layouts use <code>A.</code> or <code>(A)</code> instead</td></tr> 75 <tr><td>Answer keys are grids whose <strong>text layer comes out shuffled</strong> â question 13 can appear after question 40</td> 76 <td>Cells are paired <strong>by page coordinates</strong>, with the tolerance derived from the grid pitch. Never by reading order</td></tr> 77 <tr><td>The first answer cell of a row is <strong>glued to the row label</strong> (<code>çæ¡ï¼£</code>)</td> 78 <td>Left unhandled that cell vanishes and the whole row shifts one column right â every answer on the paper wrong</td></tr> 79 <tr><td>A bare number inside a stem looks like the next question number</td> 80 <td>Question numbers must run <strong>1..N monotonically</strong>, or the line is treated as body text</td></tr> 81 <tr><td>Options indented with <strong>U+00A0 / U+3000</strong>, which NFC leaves alone</td> 82 <td>Those spaces are folded explicitly. NFKC would fold them too, but it also rewrites ãï¼ã to an ASCII comma</td></tr> 83 <tr><td>CJK Compatibility Ideographs mixed into the text</td> 84 <td>Normalised with <strong>NFC</strong>, not NFKC</td></tr> 85 </tbody> 86 </table> 87 </div> 88 <p class="note"> 89 Every paper is cross-checked against <strong>the question count its own answer sheet declares</strong>.
90 A mismatch rejects the paper rather than importing a key that has already shifted. 91 </p> 92 93 <h2>What is excluded, and why</h2> 94 <p> 95 Each rule below was added after measurement, and several were <strong>loosened</strong> after 96 measurement showed they were discarding good questions. That direction of error is the 97 dangerous one: it is invisible in the output, and it makes the benchmark quietly smaller 98 and less representative. 99 </p> 100 <div class="table-wrap"> 101 <table class="doc-table"> 102 <thead><tr><th>Excluded</th><th>Rule</th></tr></thead> 103 <tbody> 104 <tr><td>Multi-select and voided items</td><td>The answer sheet marks them</td></tr> 105 <tr><td>English-language items</td> 106 <td>Only when the <strong>stem contains no Chinese at all</strong>. Judging the options too would discard the many Chinese questions answered in English terminology â <em>ä¸åä½è å¯ä»¥æå¶ ribonucleotide reductase çæ´»æ§ï¼</em> with options like <code>dATP</code> is a Chinese question</td></tr> 107 <tr><td>Items needing a figure or table</td> 108 <td>Requires a <strong>deictic reference</strong> (<em>as shown below</em>, <em>in Figure 1</em>, <em>according to the table</em>). Matching å loosely would discard 忏餍 (library), 忏åé¡ (classification), æå (intent)</td></tr> 109 <tr><td>Follow-up items in a question group</td> 110 <td>They open with ãæ¿ä¸é¡ã and refer to the previous question's scenario. Lifted out of the paper <strong>nobody can answer them</strong>. The setup question is self-contained and stays</td></tr> 111 <tr><td>Items whose option swallowed adjacent text</td> 112 <td>One option far outside the 99.9th percentile (95 characters) <strong>and</strong> several times longer than its siblings. Imbalance is required â four long options is just a long question</td></tr> 113 <tr><td>Questions already in tw-legal-benchmark-v2</td> 114 <td>Matched <strong>item by item</strong>, not by dropping subjects: Taiwan's statutory subjects are examined inside otherwise non-legal categories</td></tr> 115 <tr><td>Republished items with conflicting keys</td> 116 <td>When the official versions disagree the item is <strong>dropped, not guessed</strong></td></tr> 117 </tbody> 118 </table> 119 </div> 120 121 <h2>Deduplication</h2> 122 <p> 123 The same paper is republished under several examination categories. Items are fingerprinted 124 on the stem plus the <em>sorted</em> option set, so a reprint with the options in a different 125 order still matches. 126 </p> 127 <p> 128 The scale is not marginal. <strong>Chinese Language</strong> is a subject every category sits: 129 35,334 questions before deduplication, <strong>4,191</strong> after â an <strong>8Ã</strong> 130 inflation, with one question appearing in <strong>22</strong> different papers. Those 22 131 independently published copies came out of the parser with <strong>identical answer keys</strong>, 132 which is the strongest available evidence that the parsing is correct. 133 </p> 134 135 <h2>Checks before publishing</h2> 136 <ul> 137 <li>Row contract: <code>question</code>, <code>A</code>â<code>D</code>, <code>answer</code> all non-empty strings, the answer among the options.</li> 138 <li><strong>Answer-position skew</strong> â any letter holding more than 40% fails. This is the loudest symptom of a shifted key.</li> 139 <li>Residual duplicates, surviving English items, merged stems.</li> 140 <li><strong><code>benchmark.csv</code> mirrors <code>benchmark.jsonl</code> field by field.</strong> The Hub card points <code>load_dataset</code> at the CSV while every other check reads the JSONL, and 2,645 items carry a quote, comma or newline â a quoting bug there would corrupt what people download with every other check still green.</li> 141 </ul> 142 <p class="note">Anything that fails, <code>push_to_hub</code> refuses to publish.</p> 143 144 <h2>Known properties</h2> 145 <ul> 146 <li><strong>Contamination risk.</strong> These are public past papers, widely discussed online and very likely in pretraining corpora. Treat absolute scores with caution; the suite is built for <em>relative</em> comparison between models.</li> 147 <li><strong>Answer-position skew</strong> exists in the source papers. Shuffle the options when evaluating.</li> 148 <li><strong>Item difficulty is set by the examination committee</strong>, not by us.</li> 149 </ul> 150</div> 151 <div class="only-zh"> 152 <h1>è³æå¦ä½å»ºç«</h1> 153 <p class="lede"> 154 é¡ç®ä¾èªèé¸é¨å ¬éçèç¢è©¦é¡ãéä¸é è¨éçæ¯ä¸éç¼çäºä»éº¼ ââ 155 å çºè©æ¸¬éçæ£ç風éªä¸æ¯å°äºå¹¾é¡ï¼èæ¯<strong>çæ¡ææé¯ä½ä¸æ ¼</strong>èæ²æäººç¼ç¾ã 156 </p> 157 158 <h2>ä¸ä»½è©¦å·æéº¼è®æé¡ç®</h2> 159 <ol class="steps"> 160 <li>æåèé¸é¨å ¬éç試é¡ç´¢å¼ï¼ç¯©åºææ¨æºçæ¡ç測é©é¡è©¦å·ã</li> 161 <li>ä¸è¼è©¦é¡èçæ¡ PDFï¼éé並è½å°å¿«åï¼éè·ä¸æåæä¼ºæå¨ã</li> 162 <li>以 PyMuPDF ååºæå層 ââ PDF æ¯é»åæä»¶ï¼ä¸é OCRã</li> 163 <li>éæ¿¾ãå»éï¼è¼¸åºæ Twinkle Eval MCQ æ ¼å¼ã</li> 164 </ol> 165 166 <h2>è§£æé·é±</h2> 167 <p>
167éäºé½ä¸æè®ç¨å¼å´©æ½°ï¼åªæè®è³æééå°å£æï¼æä»¥éé è¨éã</p> 168 <div class="table-wrap"> 169 <table class="doc-table"> 170 <thead><tr><th>é·é±</th><th>èç</th></tr></thead> 171 <tbody> 172 <tr><td>é¸é æ¨è¨æ¯<strong>é ååç§ç¨ç¢¼</strong>ï¼U+E18CâU+E190ï¼ï¼ä¸æ¯åæ¯ AâD</td> 173 <td>è½å忝ï¼èçæç妿 <code>A.</code> è <code>(A)</code> å ©ç¨®å½¢æ </td></tr> 174 <tr><td>çæ¡ PDF æ¯è¡¨æ ¼ï¼<strong>æå層æ½åºä¾é åºæ¯äºç</strong> ââ 第 13 é¡å¯è½æå¨ç¬¬ 40 é¡ä¹å¾</td> 175 <td>æ¹ç¨<strong>座æ¨é å°</strong>ï¼å®¹å·®ç±æ ¼ç·éè·æ¨å°ï¼çµä¸ä¾é±è®é åº</td></tr> 176 <tr><td>æ¯åç¬¬ä¸æ ¼çæ¡<strong>é»å¨ãçæ¡ãæ¨ç±¤ä¸</strong>ï¼<code>çæ¡ï¼£</code>ï¼</td> 177 <td>ä¸èççè©±è©²æ ¼ææ¶å¤±ï¼æ´åå¾å³é¯ä¸ä½ ââ å ¨ä»½çæ¡çé¯</td></tr> 178 <tr><td>é¡å¹¹ä¸ç¨ç«æè¡çæ¸å被誤èªçºæ°é¡è</td> 179 <td>é¡èå¿ é <strong>1..N é£çºéå¢</strong>ï¼å¦åè¦çºå §æ</td></tr> 180 <tr><td>é¸é ç¨ <strong>U+00A0 / U+3000</strong> 縮æï¼NFC 䏿èç</td> 181 <td>å®ç¨æçéäºç©ºç½åå ï¼NFKC éå¯èçï¼ä½ä¹ææãï¼ãæ¹æåå½¢éè</td></tr> 182 <tr><td>æä¸æ··éç¸å®¹æ¼¢å</td> 183 <td>以 <strong>NFC</strong> æ£è¦åï¼ä¸ç¨ NFKC</td></tr> 184 </tbody> 185 </table> 186 </div> 187 <p class="note"> 188 æ¯ä»½è©¦å·é½æè·<strong>çæ¡å·èªå·±å®£åç顿¸</strong>交åé©èãå°ä¸ä¸å°±æ´ä»½éæï¼ 189 è䏿¯å¯å ¥ä¸ä»½å·²ç¶é¯ä½ççæ¡ã 190 </p> 191 192 <h2>åªäºé¡ç®è¢«æé¤ï¼çºä»éº¼</h2> 193 <p> 194 ä¸åæ¯ä¸æ¢é½æ¯éæ¸¬å¾æå ä¸çï¼èä¸å ¶ä¸å¥½å¹¾æ¢å¨é測å¾<strong>æ¾å¯¬é</strong>ã 195 éåº¦éæ¿¾æ¯æ¯è¼å±éªçæ¹å ââ å®å¨è¼¸åºè£¡çä¸è¦ï¼åªæè®è©æ¸¬éææè®å°ãè®å¾ä¸å ·ä»£è¡¨æ§ã 196 </p> 197 <div class="table-wrap"> 198 <table class="doc-table"> 199 <thead><tr><th>æé¤</th><th>夿º</th></tr></thead> 200 <tbody> 201 <tr><td>è¤é¸é¡ã廢é¡ï¼ä¸å¾çµ¦åï¼</td><td>çæ¡å·æ¬èº«æ¨ç¤º</td></tr> 202 <tr><td>è±æé¡</td> 203 <td>åªæ<strong>é¡å¹¹å®å ¨æ²æä¸æå</strong>æç®ãè¥æé¸é ä¹ç®é²å»ï¼ 204 <em>ä¸åä½è å¯ä»¥æå¶ ribonucleotide reductase çæ´»æ§ï¼</em> é <code>dATP</code> 205 é種é«è¥èé¡æè¢«èª¤åª ââ 飿¯ä¸æé¡</td></tr> 206 <tr><td>éè¦çå表çé¡ç®</td> 207 <td>å¿ é æ¯<strong>æç¤ºæ§å¼ç¨</strong>ï¼å¦ä¸åæç¤ºãåï¼ä¸ï¼ä¸ãæ ¹æä¸è¡¨ï¼ã 208 坬鬿¯å°ãåãæé£<strong>忏</strong>館ã<strong>忏</strong>åé¡ãæ<strong>å</strong>ä¸èµ·ç æ</td></tr> 209 <tr><td>é¡çµçå¾çºé¡</td> 210 <td>éé å¯«ãæ¿ä¸é¡ãï¼æ å¢å¨åä¸é¡ãæ½åºè©¦å·å¾<strong>ä»»ä½äººé½çä¸åºä¾</strong>ãè¨å®é¡æ¬èº«èªè¶³ï¼ä¿ç</td></tr> 211 <tr><td>é¸é åæç¸é°æå</td> 212 <td>æé¸é é è¶ ç¬¬ 99.9 ç¾åä½ï¼95 åï¼<strong>ä¸</strong>æ¯åé¡å ¶ä»é¸é é·æ¸åã 213 å¿ é 失衡 ââ ååé¸é é½é·å°±åªæ¯é¡ç®é·</td></tr> 214 <tr><td>å·²æ¶éæ¼ tw-legal-benchmark-v2 çé¡ç®</td> 215 <td><strong>éé¡</strong>æ¯å°ï¼ä¸æ¯æ´ç§æé¤ï¼å°ç£çæ³è¦ç§ç®æ¯å¤¾å¨éæ³å¾é¡ç§è£¡èç</td></tr> 216 <tr><td>çæ¡é°åäºç¸çç¾çéåé¡</td> 217 <td>宿¹çæ¬ä¸ä¸è´æ<strong>æ´é¡ä¸æ£ï¼ä¸ç</strong></td></tr> 218 </tbody> 219 </table> 220 </div> 221 222 <h2>å»é</h2> 223 <p> 224 åä¸ä»½è©¦å·æå¨å¤åé¡ç§éè¤åç»ãé¡ç®ä»¥ãé¡å¹¹ + <em>æåºå¾</em>çé¸é éåãå»ºç«æç´ï¼ 225 å æ¤éåæé¸é é åºè¢«éæä¹ç §æ¨£æ¯å°å¾å°ã 226 </p> 227 <p> 228 è¦æ¨¡ä¸å®¹å¿½è¦ã<strong>åæ</strong>æ¯ææé¡ç§é½è¦èçå ±åç§ç®ï¼å»éå 35,334 é¡ï¼ 229 å»éå¾ <strong>4,191</strong> é¡ ââ <strong>8 å</strong>è¨è¹ï¼æé«ä¸é¡åºç¾å¨ 230 <strong>22</strong> 份ä¸å試å·ãèé 22 åç¨ç«åç»çæ¬ç¶è§£æå¾<strong>çæ¡å®å ¨ä¸è´</strong>ï¼ 231 éæ¯è§£ææ£ç¢ºæ§æå¼·çæèã 232 </p> 233 234 <h2>ç¼ä½åçæª¢æ¥</h2> 235 <ul> 236 <li>æ¬ä½å¥ç´ï¼<code>question</code>ã<code>A</code>â<code>D</code>ã<code>answer</code> ççºé空å串ï¼çæ¡å¨é¸é å §ã</li> 237 <li><strong>çæ¡ä½ç½®åæ</strong> ââ ä»»ä¸åæ¯ä½æ¯è¶ é 40% 峿ä¸ãéæ¯çæ¡é¯ä½ææé¡¯çççã</li> 238 <li>æ®çéè¤ãæ¼ç¶²è±æé¡ãåä½µé¡å¹¹ã</li> 239 <li><strong><code>benchmark.csv</code> è <code>benchmark.jsonl</code> 鿬ä¸è´ã</strong> 240 Hub ç <code>load_dataset</code> è®çæ¯ CSVï¼èå ¶ä»æª¢æ¥é½è·å¨ JSONL ä¸ï¼ 241 䏿 2,645 é¡å«å¼èï¼éèï¼æè¡ ââ è·³è«ä¸æ¦åºé¯ï¼ä¸è¼å°çè³ææå£æèæææª¢æ¥ä¾ç¶å ¨ç¶ ã</li> 242 </ul> 243 <p class="note">ä»»ä½ä¸é ä¸éï¼<code>push_to_hub</code> ç´æ¥æçµç¼ä½ã</p> 244 245 <h2>å·²ç¥æ§è³ª</h2> 246 <ul> 247 <li><strong>污æé¢¨éªã</strong>éäºæ¯å ¬éèå¤é¡ï¼ç¶²è·¯ä¸å»£æ³è¨è«ï¼æ¥µå¯è½å·²å¨é è¨ç·´èªæä¸ã 248 çµå°åæ¸è«ä¿çæ·çï¼æ¬å¥ä»¶é©åç¨æ¼æ¨¡åä¹éç<em>ç¸å°</em>æ¯è¼ã</li> 249 <li><strong>çæ¡ä½ç½®åæ</strong>å卿¼åå§èå·ï¼è©æ¸¬æè«éåé¸é æ´çã</li> 250 <li><strong>é£åº¦ç±å ¸è©¦å§å¡æ±ºå®</strong>ï¼ä¸æ¯æåã</li> 251 </ul> 252</div> 253</main> 254<footer class="site-footer"> 255 <div class="wrap footer-inner"> 256 <p data-i18n="footer.rights">Each benchmark states its own source and licence on its dataset card â examination questions are Ministry of Examination (èé¸é¨) open data; other benchmarks derive from their respective corpora. Packaging and metadata: Apache-2.0.</p> 257 <div class="footer-links"> 258 <a href="/subjects.html" data-i18n="nav.subjects">Subjects</a> 259 <a href="/methodology.html" data-i18n="nav.methodology">Methodology</a> 260 <a href="https://huggingface.co/OpenTWBench" rel="noopener">Hugging Face</a> 261 <a href="https://github.com/ai-twinkle/Eval" rel="noopener">Twinkle Eval</a> 262 </div> 263 </div> 264</footer>
265<script src="assets/i18n.js?v=d947cd2fba"></script>
vendor: 1 bytes, line 265
265
266<script src="assets/app.js?v=9d81892857"></script>
266 267 268</body> 269</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.