dataset

weibo sociolinguistics corpus

2026 July 15

maikurokosmos_socioling_weibo_dataset is a Chinese-language corpus of real Weibo (微博) discourse, sampled from daily hot-search topics and annotated for sociolinguistic research. It is built to grow: most days a new hot-search topic is added, and topics are deliberately spread across different domains, so the corpus steadily accumulates posts across many subjects, registers, and communities, with a standing interest in fandom (饭圈) language and online-community slang.

view the dataset on hugging face ↗

1. at a glance

  • Source: public posts from Weibo, sampled per daily hot-search topic (话题/热搜).
  • Cadence: roughly one new topic per day, ~200 top posts collected each time. The corpus keeps growing.
  • Size: 1,000+ rows so far, and counting.
  • Language: Chinese (Mandarin; includes internet slang, fandom jargon, and code-mixing).
  • Unit of analysis: one row = one Weibo post.
  • Model: background extraction and labeling currently use Qwen3.7-Max (the latest at time of writing); model changes will be noted here.
  • Annotations: two layers, an AI-generated first pass plus a human-reviewed subset (see the review layer).
  • Format: CSV on Hugging Face (auto-converted to Parquet); single train split.
  • License: CC BY-NC 4.0, for non-commercial academic research (see license).

2. how the corpus is built

Each day’s batch goes through the same pipeline:

  1. Pick a topic. Select one Weibo hot-search topic that has meaningful volume / traction, aiming day to day for a topic from a different domain than recent ones.
  2. Collect posts. Gather roughly 200 popular posts under that topic.
  3. Ground the topic (AI, pass 1). The model (currently Qwen3.7-Max) reads the topic and produces a background brief: what the event is, plus a list of the key entities and terms involved. This context matters, because much of Weibo discourse is unintelligible without knowing who and what is being referred to.
  4. Label the posts (AI, pass 2). A second pass by the same model, conditioned on that background brief, assigns the annotation labels to each post.
  5. Human review. Each day a sample of up to 50 posts is drawn (partly at random, partly by rules that flag labels likely to be wrong) and checked by hand. The reviewer confirms or corrects each label, and the result is stored separately in the reviewed_* fields. Comparing the initial labels against this reviewed subset is how accuracy / F1 for the labeling is computed.
  6. Publish. The batch is appended to the dataset.

3. what’s in each row

Every post carries some metadata, the raw text, an initial (AI) label set, and a parallel reviewed (human) label set.

fieldwhat it holds
hf_public_record_keyStable per-row identifier.
dateThe date the topic/batch was collected.
keywordThe hot-search keyword / topic this post was sampled under.
textThe Weibo post text.
validity(initial label) whether the post is usable, and if not, why.
target_type(initial label) what the post is mainly about, or directed at.
stance(initial label) the post’s stance toward that target.
emotion_category(initial label) the dominant emotion.
emotion_subtype(initial label) a finer-grained emotion within the category.
mf_main(initial label) the moral foundation invoked, if any.
mf_direction(initial label) which pole of that foundation.
satire(initial label) whether the post is satirical / ironic.
review_selectedwhether this row was drawn into the daily human-review sample.
reviewed_validityreviewed_satirethe human-checked version of each label above.

4. annotation scheme (the codebook)

The full label set is below. Every dimension also has a reviewed_* counterpart (see the review layer). A couple of values carry non-standard spellings, e.g. outfit_or_appearence and idol_doration; these are the literal field values, kept as-is.

validity

Whether the post is usable, and if not, why.

valuemeaning
generala normal, on-topic post that carries interpretable content.
noiseoff-topic or content-free noise (ads, spam, gibberish, unrelated chatter).
stanning_and_other_spammingstan-style bulk posting, i.e. fan control-comment / vote-farming (饭圈控评、打投) and similar spam.

target_type

What the post is mainly about, or directed at.

valuemeaning
persona specific person.
outfit_or_appearencesomeone’s outfit, looks, or appearance.
actionan action, behavior, or event.
opiniona stated opinion or viewpoint.
group_or_organizationa group or organization.
works_or_creationsa work or creation (a song, show, artwork, product…).
sceneryscenery or a scene.
othersanything else.

stance

The post’s stance toward its target.

valuemeaning
supportsupportive / approving.
opposeopposed / critical.
neutralbalanced or objective.
no_clear_stanceno discernible stance.
irrelevantnot actually about the target.

emotion_category & emotion_subtype

The dominant emotion (emotion_category) and a finer emotion within it (emotion_subtype).

emotion_categoryemotion_subtype
angerpersonal_anger, moral_outrage, fury
disgustphysical_disgust, moral_contemp, rejection
annoyanceannoyance
likeidol_doration, simple_liking, admiration, solidarity
sadnessdisappointed, empathy, grieve, hopeless
happinesssimple_happy, pride, gloat, looking_forward_and_hope
fearanxious, fear, concerned
surpriseastounded, happily_surprised, shock
nonegeneral
uncertainuncertain

mf_main & mf_direction (moral framing)

mf_main is the moral foundation a post invokes (from Moral Foundations Theory); mf_direction is which pole of that foundation is expressed, so its allowed values depend on mf_main.

mf_mainmf_direction
care_vs_harmcare · harm
fairness_vs_cheatingfairness · cheating
loyalty_vs_betrayalloyalty · betrayal
authority_vs_subversionauthority · subversion
sanctity_vs_degradationsanctity · degradation
liberty_vs_oppressionliberty · oppression
nonenone

mf_direction also allows uncertain as a standalone value.

satire

valuemeaning
yesuses irony, sarcasm, or satire, so surface wording may invert the intended meaning.
noliteral / sincere.

the review layer

Every field above has a reviewed_* twin, plus a review_selected flag.

  • review_selected: whether the row was pulled for human review. Selection is partly random, partly rule-based, so rows whose labels look likely to be wrong are flagged for a closer look.
  • reviewed_*: the human verdict. If it matches the initial label, the original was judged correct; if it differs, it has been corrected.
  • Comparing the initial labels against reviewed_* over the reviewed subset is exactly how the labeling’s accuracy / F1 is measured.

5. what you can study with it

Because topics are deliberately spread across different domains, and because some labels specifically flag fandom (饭圈) stanning and similar spam, this corpus is aimed at:

  • Community & subculture language: how particular communities and subcultures actually talk; the stanning_and_other_spamming validity value and fandom-flavored emotions like idol_doration are built in on purpose.
  • Comparing communities: whether different communities show different linguistic habits, framing, and emotional registers around comparable events.
  • Tracking internet slang: following buzzwords and memes as they surface, spread, and fade across topics and days.
  • Language change, sociolinguistically: how usage shifts over time, tracked across a steadily growing, dated corpus.
  • Stance, emotion & moral framing in the wild: Chinese-language stance / emotion / moral-foundation classification on messy real text.
  • AI-vs-human labeling: the initial vs. reviewed_* split is a ready-made benchmark, and the basis for the reported accuracy / F1.

6. limitations & responsible use

7. license & attribution

8. help audit, or send feedback