artifex / data /docs /label_taxonomy.html
SuckSome's picture
Claude Opus 5.5
Deploy Artifex in-browser edition (model artifex-0.1-765e3b9a93, dataset 0.1+ac3dc1df9214)
a23acdf verified
Raw History Blame Contribute Delete
7.78 kB
<p>Artifex uses two label families: <strong>period</strong> (ordered date bins) and <strong>region</strong> (a hierarchical cultural-geographic
taxonomy). Both are versioned through configuration files; changing them changes the dataset version.</p>
<h2>Dates</h2>
<h3>Internal convention</h3>
<ul>
<li>Years are integers on the <strong>astronomical</strong> scale: 1 CE = 1, 1 BCE = 0, 2 BCE = −1, <em>n</em> BCE = 1 − <em>n</em>.
This is the only scale on which subtraction across the era boundary is correct (there is no historical year 0:
from 50 BCE to 50 CE is 99 years).</li>
<li>The Met and Cleveland APIs give BCE years as negative <em>historical</em> years (500 BCE = −500). They are converted with
<code>historical_to_astronomical</code> (<code>src/artifex/dates.py</code>).</li>
<li>Every date is a closed range <code>[date_start, date_end]</code>. A single year is a range of length zero.</li>
<li>The museum's own date text is preserved in <code>original_date_text</code>; flags <code>date_approximate</code> ("c.", "about", "late …")
and <code>date_uncertain</code> ("?", "probably", "or", …) are derived from it.</li>
<li>Unusable values are kept as unknown with a reason in <code>date_issue</code>: <code>missing</code>, <code>zero-placeholder</code> (the Met's 0/0 for
undated objects), <code>out-of-range</code>, or <code>reversed-range</code> (start and end swapped and fixed).</li>
</ul>
<h3>Display</h3>
<p>User-facing dates show the museum's text where available. Normalised ranges are formatted with explicit eras where
needed: "500–100 BCE", "50 BCE–50 CE", "800 CE", "1600–1650".</p>
<h3>Period bins</h3>
<p>Defined in <code>configs/dataset.yaml</code> (<code>period.bins</code>); contiguous, half-open intervals <code>[start, end)</code>:</p>
<table>
<thead>
<tr>
<th>id</th>
<th>label</th>
<th>covers</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>pre-500</code></td>
<td>Before 500 CE</td>
<td>everything before 500 CE</td>
</tr>
<tr>
<td><code>500-1299</code></td>
<td>500–1299</td>
<td></td>
</tr>
<tr>
<td><code>1300-1449</code></td>
<td>1300–1449</td>
<td></td>
</tr>
<tr>
<td><code>1450-1549</code></td>
<td>1450–1549</td>
<td></td>
</tr>
<tr>
<td><code>1550-1649</code></td>
<td>1550–1649</td>
<td></td>
</tr>
<tr>
<td><code>1650-1749</code></td>
<td>1650–1749</td>
<td></td>
</tr>
<tr>
<td><code>1750-1849</code></td>
<td>1750–1849</td>
<td></td>
</tr>
<tr>
<td><code>1850-1899</code></td>
<td>1850–1899</td>
<td></td>
</tr>
<tr>
<td><code>1900-</code></td>
<td>1900 and later</td>
<td></td>
</tr>
</tbody>
</table>
<p>Bins are deliberately <strong>neutral date ranges</strong>, not style periods ("Renaissance", "Edo"), because the collection spans
traditions whose periodisations do not align. Bins are narrower where the collection is dense and wider where it is
sparse; a bin with fewer than <code>min_records_per_class</code> labelled works in the modelling subset is not a classifier target
(its works remain in the collection and the retrieval index).</p>
<p><strong>Assignment rule.</strong> A work is labelled with a bin only if at least <strong>75 %</strong> of its documented range lies inside that
bin (<code>assign_period</code> in <code>src/artifex/labels.py</code>). Otherwise <code>period_status</code> is <code>spans-bins</code> and the work has no period
label. It is still evaluated with range-aware metrics. The rule avoids forcing "16th–17th century" into one bin.</p>
<h2>Regions</h2>
<h3>Principle</h3>
<p>A region label describes the <strong>cultural-geographic attribution recorded by the holding museum for the artwork</strong> (its
culture or place of production). It is not the place depicted and, where avoidable, not the artist's birthplace.
Regions are historical-geographic zones, not modern states; modern country names in museum records only point into
these zones.</p>
<h3>Hierarchy (<code>configs/region_mapping.yaml</code>)</h3>
<table>
<thead>
<tr>
<th>Broad region</th>
<th>Narrower traditions (sub-regions)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Europe</td>
<td>Italian peninsula · Low Countries · France · Iberian peninsula · German-speaking lands &amp; Central Europe · British Isles · Nordic countries · Eastern Europe · Greek &amp; Byzantine world</td>
</tr>
<tr>
<td>North America</td>
<td>—</td>
</tr>
<tr>
<td>Latin America &amp; Caribbean</td>
<td>—</td>
</tr>
<tr>
<td>East Asia</td>
<td>China · Japan · Korea</td>
</tr>
<tr>
<td>South Asia</td>
<td>Mughal &amp; North Indian courts · Rajasthan &amp; Central India · Punjab Hills (Pahari) · Deccan · Eastern India · Sri Lanka</td>
</tr>
<tr>
<td>Himalayan region (Tibet, Nepal, Bhutan)</td>
<td>—</td>
</tr>
<tr>
<td>Southeast Asia</td>
<td>—</td>
</tr>
<tr>
<td>West &amp; Central Asia</td>
<td>Iran · Anatolia &amp; Ottoman lands · Arab lands of West Asia · Central Asia · Ancient Near East</td>
</tr>
<tr>
<td>Nile Valley &amp; North Africa</td>
<td>Egypt · Maghreb</td>
</tr>
<tr>
<td>Sub-Saharan Africa</td>
<td>—</td>
</tr>
<tr>
<td>Oceania</td>
<td>—</td>
</tr>
</tbody>
</table>
<p>Only broad regions (and traditions) with enough labelled works become classifier targets; the deployed list is shown on
the Methodology page under <em>Current configuration</em> and with every analysis.</p>
<h3>Mapping procedure</h3>
<ol>
<li>Fields are consulted in order: <code>object_culture</code> → <code>object_geography</code> → <code>artist_nationality</code> → <code>department_hint</code>
(the last is used only for the Met's Egyptian Art department, which is itself a geographic attribution).</li>
<li>All rules are tested against the string. If rules from <strong>two different broad regions</strong> match, the record is
<code>ambiguous</code> and stays unlabelled — the search does not fall back to a weaker field. Examples: "United States or
England", "Western Tibet [or Kashmir (?)]".</li>
<li><code>override</code> rules handle compound terms whose meaning is not the union of their words ("Roman Egypt" → Nile Valley;
"British India" → South Asia; "Sino-Tibetan" → Himalayan region).</li>
<li>When a culture string names the place of the <strong>painting</strong> explicitly ("…Vikramashila Monastery. Painting: Nepal,
Kathmandu"; "Herat (text); Mughal India (paintings)"), only that clause is mapped.</li>
<li>A sub-region is set only if exactly one tradition matches.</li>
<li>Strings matching nothing are <code>unmapped</code>. All distinct strings, their counts and mappings are written to
<code>data/manifests/region_mapping_report.csv</code> for review.</li>
</ol>
<p>Every record keeps <code>culture_original</code>, <code>region_original</code>, <code>region_basis</code>, <code>region_status</code> and <code>region_matched_text</code>.</p>
<h3>Known tensions</h3>
<ul>
<li><strong>Artist nationality</strong> is used for many European paintings because the museums record no culture for them. It is a
conventional "school" attribution, not a place of production (a Dutch artist working in Paris is labelled Low
Countries).</li>
<li><strong>Dynastic or courtly labels</strong> (Mughal, Safavid) are mapped to the region of the court; works made for one court by
artists from elsewhere follow the museum's attribution.</li>
<li><strong>Himalayan and Indian Buddhist painting</strong> overlap culturally; strings naming both are left ambiguous.</li>
<li><strong>Modern borders</strong> (Pakistan, Afghanistan) appear in museum records for historical regions; they are mapped into the
broad zones above, which are intentionally coarse.</li>
</ul>