Skip to content
Showcase/RCV1: Hierarchical Topic Coding
intermediatetext

RCV1: Hierarchical Topic Coding

Hierarchical multi-label Topic coding of newswire stories, based on Reuters Corpus Volume 1 (Lewis, Yang, Rose, and Li, JMLR 2004). Annotators read an English news story and assign all applicable Topic codes from a tree-structured taxonomy spanning CCAT (Corporate/Industrial), ECAT (Economics), GCAT (Government/Social), and MCAT (Markets), following the documented Reuters coding policies: at least one Topic code per story and the most specific appropriate codes. Note that the original RCV1 coding was production editorial work by Reuters editors, partly machine-assisted, under the Reuters Business Briefing coding policies; this task recreates the manual Topic-coding judgment in isolation.

About this dataset

Reuters Corpus Volume 1 (RCV1) is an archive of 806,791 English newswire stories produced by Reuters journalists between August 1996 and August 1997, and remains one of the most influential benchmarks for multi-label text categorization. Each story carries category codes from three sets — Topics, Industries, and Regions — assigned to support retrieval in the Reuters Business Briefing product.

Topic codes capture the major subjects of a story and are organized in four hierarchical groups: CCAT (Corporate/Industrial), ECAT (Economics), GCAT (Government/Social), and MCAT (Markets). Lewis et al. determined that 103 Topic codes were actually available for assignment, alongside 354 valid Industry codes and 366 Region codes. Two documented coding policies governed assignment: the Minimum Code Policy (each story needed at least one Topic code and one Region code) and the Hierarchy Policy (assign the most specific appropriate codes, with ancestors added, usually automatically).

Unlike purpose-built research annotation, RCV1's labels came from a production editorial workflow: stories first passed through a rule-based autocoder (TIS), stories failing the Minimum Code check were routed to human editors, and all stories entered a holding queue that editors reviewed every six hours. The paper documents this pipeline in detail, which is one reason RCV1 is also a case study in how real-world coding practice shapes benchmark data.

This config uses Potato's hierarchical_multiselect scheme to recreate the manual Topic-coding judgment: an expandable code tree with search, no auto-propagation (matching the instruction to select the most specific codes and leave ancestor expansion to downstream processing), and a required-selection constraint reflecting the Minimum Code Policy. The taxonomy is a representative subset of the 103 valid Topic codes; Region and Industry coding are omitted. The sample stories are self-authored newswire-style texts, not Reuters articles.

Documents
806,791 (RCV1-v1); 804,414 (RCV1-v2)
Period
August 1996 - August 1997
Valid Topic codes
103, in 4 hierarchical groups (CCAT, ECAT, GCAT, MCAT)
Valid Industry codes
354
Valid Region codes
366
Coding effort
~12 person-years (one estimate)
Submit

Configuration Fileconfig.yaml

This Potato config reproduces the annotation task. Save it as config.yaml and run potato start config.yaml to try it.

yaml
# RCV1 — Hierarchical Topic Coding of Newswire Stories
# Based on the Reuters Corpus Volume 1 benchmark:
#   David D. Lewis, Yiming Yang, Tony G. Rose, and Fan Li (2004), "RCV1: A New
#   Benchmark Collection for Text Categorization Research." Journal of Machine
#   Learning Research 5:361-397.
#   Paper: https://www.jmlr.org/papers/v5/lewis04a.html (no DOI; JMLR URL canonical)
#   Dataset: https://trec.nist.gov/data/reuters/reuters.html
#
# Task: assign hierarchical Topic codes to an English newswire story. RCV1's
# Topic codes are organized in four hierarchical groups — CCAT (Corporate/
# Industrial), ECAT (Economics), GCAT (Government/Social), and MCAT (Markets) —
# with 103 codes available for assignment. Coding followed two documented
# Reuters policies: the Minimum Code Policy (every story gets at least one Topic
# code and one Region code) and the Hierarchy Policy (assign the most specific
# appropriate codes; ancestors are added, usually automatically).
#
# CAVEAT: the original RCV1 coding was production editorial work by Reuters
# editors, partly machine-assisted (a rule-based autocoder followed by manual
# editing and holding-queue correction), following the Reuters Business Briefing
# coding policies. This config recreates the manual Topic-coding judgment as a
# standalone annotation task.
#
# Deliberate simplifications: (1) only Topic coding is included — the Region
# codes (366) and Industry codes (354) required by the full workflow are
# omitted, so the Minimum Code Policy's Region requirement is not enforced;
# (2) the taxonomy below is a representative subset of the 103 valid Topic
# codes, not the complete set; (3) ancestor codes are not auto-assigned —
# select the most specific codes and let downstream hierarchical expansion add
# ancestors, per the Hierarchy Policy.
#
# The two coding policies in the instructions are reproduced verbatim from
# Section 2.3 of the paper; the surrounding instructions are adapted from
# Sections 2.2-2.4 — the paper does not publish Reuters' full annotator-facing
# coding guidelines.

annotation_task_name: "RCV1: Hierarchical Topic Coding"
task_dir: "."

data_files:
  - sample-data.json

item_properties:
  id_key: "id"
  text_key: "text"

output_annotation_dir: "annotation_output/"
output_annotation_format: "json"

port: 8000
server_name: localhost

annotation_schemes:
  - annotation_type: hierarchical_multiselect
    name: topic_codes
    description: "Select all Topic codes that capture the major subjects of this story. Assign the most specific appropriate codes; do not add ancestor codes yourself."
    auto_select_children: false
    auto_select_parent: false
    show_search: true
    max_selections: null
    expand_depth: 1
    taxonomy:
      "CCAT (Corporate/Industrial)":
        "C15 Performance":
          - "C151 Accounts/Earnings"
          - "C152 Comment/Forecasts"
        "C17 Funding/Capital":
          - "C171 Share Capital"
          - "C172 Bonds/Debt Issues"
          - "C173 Loans/Credits"
          - "C174 Credit Ratings"
        "C18 Ownership Changes":
          - "C181 Mergers/Acquisitions"
          - "C182 Asset Transfers"
          - "C183 Privatisations"
        "C41 Management":
          - "C411 Management Moves"
      "ECAT (Economics)":
        "E12 Monetary/Economic":
          - "E121 Money Supply"
        "E13 Inflation/Prices":
          - "E131 Consumer Prices"
          - "E132 Wholesale Prices"
        "E21 Government Finance":
          - "E211 Expenditure/Revenue"
          - "E212 Government Borrowing"
        "E51 Trade/Reserves":
          - "E511 Balance of Payments"
          - "E512 Merchandise Trade"
          - "E513 Reserves"
      "GCAT (Government/Social)":
        - "GCRIM Crime, Law Enforcement"
        - "GDEF Defence"
        - "GDIP International Relations"
        - "GDIS Disasters and Accidents"
        - "GENV Environment and Natural World"
        - "GHEA Health"
        - "GPOL Domestic Politics"
        - "GSCI Science and Technology"
        - "GSPO Sports"
        - "GVIO War, Civil War"
        - "GVOTE Elections"
        - "GWEA Weather"
      "MCAT (Markets)":
        "M13 Money Markets":
          - "M131 Interbank Markets"
          - "M132 Forex Markets"
        "M14 Commodity Markets":
          - "M141 Soft Commodities"
          - "M142 Metals Trading"
          - "M143 Energy Markets"
    label_requirement:
      required: true

annotation_instructions: |
  You are coding an English newswire story with Topic codes from the Reuters
  category scheme. Topic codes capture the major subjects of a story and are
  organized in four hierarchical groups: CCAT (Corporate/Industrial), ECAT
  (Economics), GCAT (Government/Social), and MCAT (Markets).

  Reuters' guidance for coding included two broad policies (reproduced verbatim
  from Section 2.3 of Lewis et al., 2004):

  1. **Minimum Code Policy:** "Each story was required to have at least one
     Topic code and one Region code."
  2. **Hierarchy Policy:** "Coding was to assign the most specific appropriate
     codes from the Topic and Industry sets, as well as (usually automatically)
     all ancestors of those codes. In contrast to some coding systems, there was
     no limit on the number of codes with the same parent that could be applied."

  Applying these policies in this task:

  - Assign **at least one Topic code** to every story. (Region coding is not part
    of this task.)
  - Select the **most specific** appropriate codes in the tree. Do not add
    ancestor codes yourself; ancestors are added automatically downstream.
  - You may assign as many codes as apply, including several codes with the same
    parent.
  - Code the major subjects of the story, not passing mentions. For example, a
    story about a company's quarterly results belongs under C15 Performance
    (most specifically C151 Accounts/Earnings), while a story about a merger
    belongs under C181 Mergers/Acquisitions.

html_layout: |
  <div style="padding: 15px; max-width: 820px; margin: auto;">
    <div style="background: #f1f5f9; border: 1px solid #cbd5e1; border-radius: 8px; padding: 6px 12px; margin-bottom: 8px; font-size: 13px; color: #475569;">
      <strong>Dateline:</strong> {{dateline}}
    </div>
    <div style="background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; padding: 16px;">
      <h3 style="font-size: 18px; margin: 0 0 10px 0; color: #111827;">{{title}}</h3>
      <p style="font-size: 15px; line-height: 1.7; margin: 0; color: #374151;">{{text}}</p>
    </div>
  </div>

allow_all_users: true
instances_per_annotator: 40
annotation_per_instance: 2
allow_skip: true

Sample Datasample-data.json

json
[
  {
    "id": "rcv1_001",
    "dateline": "FRANKFURT",
    "title": "German engineering group posts higher first-half profit, raises outlook",
    "text": "A German industrial engineering group on Tuesday reported a 12 percent rise in first-half operating profit, citing strong demand for its turbine components in Asia. The company raised its full-year earnings forecast and said order books were at their highest level in five years. Analysts said the results beat consensus expectations and several brokerages lifted their price targets."
  },
  {
    "id": "rcv1_002",
    "dateline": "LONDON",
    "title": "Sterling firms against dollar as rate expectations shift",
    "text": "Sterling rose against the dollar in early European trading on Thursday as dealers priced in a growing likelihood of a rise in British interest rates before year-end. The pound touched a three-month high before easing back slightly. Money market rates also edged higher, while gilts were little changed in thin trade."
  }
]

// ... and 8 more items

Get This Design

View on GitHub

Clone or download from the repository

Quick start:

git clone https://github.com/davidjurgens/potato-showcase.git
cd potato-showcase/text/topic-classification/rcv1-hierarchical-topic-coding
potato start config.yaml

Dataset & paper

David D. Lewis, Yiming Yang, Tony G. Rose, and Fan Li. 2004. RCV1: A New Benchmark Collection for Text Categorization Research. Journal of Machine Learning Research 5:361-397.

Citation (BibTeX)

bibtex
@article{lewis2004rcv1,
    title = {{RCV1}: A New Benchmark Collection for Text Categorization Research},
    author = {Lewis, David D. and Yang, Yiming and Rose, Tony G. and Li, Fan},
    journal = {Journal of Machine Learning Research},
    volume = {5},
    pages = {361--397},
    year = {2004},
    url = {https://www.jmlr.org/papers/v5/lewis04a.html}
}

Details

Annotation Types

hierarchical_multiselect

Domain

NLPText CategorizationNews

Use Cases

Hierarchical ClassificationMulti-Label AnnotationEditorial Coding

Tags

rcv1reuterstopic-classificationhierarchical-labelsmulti-labelnewswire

Found an issue or want to improve this design?

Open an Issue

Related Designs

DWIE Document-Level Entity Annotation and Linking

Document-level entity mention annotation with knowledge-base linking based on DWIE (Zaporojets, Deleu, Develder, and Demeester, Information Processing & Management 2021). Annotators mark every entity mention in a full news article, assign an entity type, and link mentions to Wikipedia/Wikidata entries, leaving NIL entities unlinked. Complements the mention-level AIDA CoNLL-YAGO task (text/entity-linking/aida-conll-entity-disambiguation): AIDA presents one pre-marked mention at a time for disambiguation, whereas DWIE is entity-centric and document-level — annotators find all mentions themselves and keep links consistent across each entity's coreferent mentions.

span

ECB+ Cross-Document Event Coreference

Cross-document event coreference annotation based on the ECB+ corpus (Cybulska and Vossen, LREC 2014). Annotators mark event mentions — actions with their times, locations, and human and non-human participants — across multiple news documents describing similar but distinct event instances, and build shared event records that link coreferent event descriptions across documents by citing evidence spans. Complements the within-document MAVEN-ERE task (text/coreference/maven-ere-event-coreference): MAVEN-ERE links event mentions inside a single document, whereas ECB+ requires deciding whether descriptions in different documents refer to the same real-world event instance or merely to the same event type.

multi_document_event

News Headline Emotion Roles (GoodNewsEveryone)

Annotate emotions in news headlines with semantic roles. Based on Bostan et al., LREC 2020. Identify emotion, experiencer, cause, target, and textual cue.

likertradio