wwewtech/russian-it-community-corpus

Dataset

1

stars

38

commits

1

linked in READMEs

Sep 8, 2026

updated

developer-conversations
dpo
lora
nlp
rag
russian
sft
software-engineering
system-architecture
zero-pii

README

📦 Russian IT Community Corpus (RICC)

License: MIT Total Messages SFT Dialogues RAG Knowledge Chunks Chronology Privacy

Russian IT Community Corpus (RICC) is an open, de-identified conversational dataset collected from 11 engineering community nodes spanning a 9-year timeline (2017–2026). It captures authentic discussions on backend systems, cloud infrastructure, AI/ML deployment, database internals, and software architecture.

The corpus is structured into ready-to-use splits for Instruction Fine-Tuning (SFT), Direct Preference Optimization (DPO), and Vector Retrieval-Augmented Generation (RAG).


⚡ Quick Start

from datasets import load_dataset

# 1. Multi-turn SFT Dialogues (171.5k curated conversations)
sft_ds = load_dataset("wwewtech/russian-it-community-corpus", "sft_dialogues", split="train")
print(f"Loaded SFT dataset: {len(sft_ds):,} dialogues")
print("Sample dialogue:", sft_ds[0]["messages"][:2])

# 2. RAG Technical Knowledge Base (325.7k segmented documents)
rag_ds = load_dataset("wwewtech/russian-it-community-corpus", "rag_knowledge_base", split="train")
print(f"Loaded RAG knowledge base: {len(rag_ds):,} chunks")

# 3. Full Chronological Corpus (2.81M deduplicated messages)
full_ds = load_dataset("wwewtech/russian-it-community-corpus", "full_corpus", split="train")
print(f"Loaded Full corpus: {len(full_ds):,} records")

🏗️ Data Curation Pipeline

RICC Pipeline Architecture
StageProcessing ModuleDescription & Output
1. IngestionMulti-Source Export IngestionMerging 11 community nodes (community_node_01..11) across 2017–2026 into 2.91M unified records.
2. AnonymizationNatasha NER & Case-Aware ScrubberInflection across 6 Russian cases, Telegram handle mapping, and regex scrubbing for phones, crypto, keys.
3. DeduplicationMinHash LSH (128 Permutations)Duplicate and spam removal at 0.80 Jaccard threshold + 8-domain taxonomy classification.
4. DAG ReconstructionThread Builder & ExtractorReconstructing reply trees, extracting 171.5k SFT dialogues ($\ge 3.0$ score) and 325.7k RAG chunks.
5. Multi-Split ExportParquet & JSONL ExportersGenerating zstd Parquet (full, sft, rag) and JSONL splits (ShareGPT, Alpaca, ChatML, DPO).

📊 Key Corpus Metrics

MetricVerified ValueDescription
Clean Messages2,816,434Deduplicated and anonymized messages
Unique Participants210,890Pseudonymized author identifiers (Developer_XXXXX)
Date RangeAug 06, 2017 — Aug 22, 20263,303 continuous days of community history
Total Words37,260,192Technical Russian and mixed English terminology
Estimated BPE Tokens49,085,532BPE token count approximation (~49.09M tokens)
SFT Dialogues171,520Multi-turn threads scored for technical depth ($\ge 3.0$)
RAG Knowledge Chunks325,690Cohesive problem-solving context blocks
DPO Preference Pairs60,899Pairs with chosen answers and heuristic negative baselines

🧠 Domain & Topic Distribution

Domain CategoryMessage CountShare (%)Core Topics
General Tech & Architecture2,683,68695.3%System design, design patterns, tooling debates, engineering culture
Business, FinTech & Compliance44,0171.6%Payment gateways, 152-FZ compliance, billing logic, enterprise SaaS
AI, ML & LLM Engineering29,4111.0%Transformers, fine-tuning, quantization, embeddings, inference infra
Frontend & UI Architecture18,7750.7%React, Vue, SSR, bundle optimization, state management, WebGL
Engineering Management & Career11,9700.4%Hiring, grading, architectural review processes, incident culture
Backend & Distributed DBs11,7070.4%PostgreSQL tuning, Redis caching, ClickHouse analytics, Kafka streams
Sysadmin & DevSecOps9,9700.3%Linux kernel, TLS certificates, vulnerability auditing, network debugging
DevOps & Cloud Infrastructure6,9180.2%Kubernetes, Docker, CI/CD pipelines, Prometheus monitoring

📁 Dataset Splits & Configurations

1. full_corpus (data/full_clean_messages.parquet)

Full chronological sequence of clean messages with domain labels, sentiment, and structural metadata.

ColumnTypeDescription
msg_idint64Surrogate message identifier
chat_namestringSurrogate community node (community_node_01..11)
timestampstringISO 8601 formatted timestamp
unixtimeint64UNIX epoch timestamp
author_anonstringPseudonymized author label (Developer_XXXXX)
text_cleanstringAnonymized message text
domainstringPrimary classified engineering domain
tagslist[str]Detected technical keyword tags
is_questionboolTrue if the message contains an engineering inquiry
thread_idint64Identified conversation DAG thread ID

2. sft_dialogues (data/sft_dialogues.parquet)

Reconstructed multi-turn conversation threads formatted for supervised instruction fine-tuning.

{
  "thread_id": 42056,
  "chat_name": "community_node_07",
  "topic_domain": "frontend_ui",
  "topic_tags": ["vue", "js", "di_container", "architecture"],
  "quality_score": 12.25,
  "messages": [
    {
      "role": "user",
      "author": "Developer_65546",
      "content": "Как изолировать ядро CMS при использовании Vue на фронтенде?"
    },
    {
      "role": "assistant",
      "author": "Developer_38544",
      "content": "Для изоляции выносите API в независимый сервисный слой..."
    }
  ]
}

3. rag_knowledge_base (data/rag_knowledge_base.parquet)

Chunked technical discussions formatted for dense embedding indexing (Qdrant, ChromaDB, Milvus, FAISS).


📊 SFT Subset — Real Composition & Known Limitations

Computed directly from data/sft_dialogues.parquet (171,520 dialogues):

PropertyValue
Dialogues whose first turn contains an actual question20.6% (35,402)
Dialogues classified as general_tech_chat (no specific domain)97.1% (166,624)
Dialogues in a concrete technical domain2.9% (4,896)
…of those, passing a strict QA filter (question-first opener + every turn ≥100 chars)283
Median heuristic quality_score (≈1 trivial → 4+ substantive)2.36 (p25 1.97 / p75 2.96)

Known limitations — read before training on this subset:

  • This is reconstructed community chat, not curated instruction data. Many "assistant" turns are opinionated chat replies rather than expert answers.
  • The quality_score heuristic rewards length and code markers; it does not measure factual correctness.
  • For serious SFT runs, filter aggressively: exclude general_tech_chat, require question-first openers and multi-turn substantive answers. That leaves ~283–4,900 dialogues depending on strictness — small but much cleaner than the full set.

A representative technical exchange that does pass the filter (thread_id 30449, business_legal_fintech):

{
  "role": "user",
  "content": "От map(filter(...)) уже тошнит? Серьезно, когда вы видите вот это, то хочется плакать:
              result = list(map(lambda x: x * 2, filter(lambda x: x % 2 == 0, arr)))
              А ведь можно проще..."
},
{
  "role": "assistant",
  "content": "В этом месте JS выглядит читаемее чем Python
              users.filter(user => user.gender === gender)
                .map(user => user.age)
                .reduce((acc, age, index, arr) => acc + age / arr.length, 0);"
}

🔬 Empirical Evaluation — Honest Status

🚫 Academic metrics (HumanEval / RuMMLU / PPL / ROUGE) published earlier have been WITHDRAWN. A code audit of the benchmark harness (src/evaluation/official_academic_benchmarks.py) found three defects that produced invalid numbers: substring-based MCQ scoring (inflated RuMMLU to an implausible 100%), PPL computed on empty placeholder strings due to wrong column names (identical base/LoRA values), and silent copying of Base results into LoRA/Hybrid columns when the adapter failed to load. All three are fixed in code with unit tests; the numbers will be republished only after a fresh GPU re-run.

What remains interpretable today — rubric-based heuristic scores on 50 engineering scenarios (concept-overlap + AST-parseability judged programmatically; not execution-verified capability):

Architecture SetupHeuristic ScoreAST Parse Rate
Base Model (Qwen 2.5 1.5B)32.969.0%
Base Model + RAG (325k chunks)44.071.0%
Domain LoRA (171.5k dialogues)34.572.2%
Hybrid (LoRA + RAG)48.673.0%

(AST rates recomputed as means over all 50 per-scenario ast_score values in reports/heuristic_benchmark_eval.json; an earlier version of this card quoted different numbers that did not match the machine-readable data.)

Pre-trained adapters for 58 base models are available in the LoRA Model Zoo (published as pilot domain-adaptation checkpoints on sampled domain subsets).


🛡️ Privacy, Anonymization & Ethical Use

  1. Morphological Name Scrubbing: Author display names are extracted and declined across all 6 Russian grammatical cases (Им., Род., Дат., Вин., Твор., Предл.) to remove conversational references in text.
  2. Community Node Anonymization: All 11 channel titles and supergroup IDs are strictly anonymized as surrogate nodes (community_node_01..11).
  3. Deterministic Pattern Scrubbing: Removes phone numbers, personal emails, crypto wallet addresses (BTC, ETH, TRON, TON, SOL), API keys (sk-proj-..., ghp_...), JWT tokens, and database credentials.
  4. Terminology Whitelist: 276 standard programming keywords, frameworks, and tools are protected against accidental redaction (see src/pii/ner_scrubber.pyTECH_WHITELIST).
  5. Notice and Takedown Policy: Intended strictly for educational, academic, and non-commercial research. If you identify any inadvertent personal identifier, please open a takedown issue or submit a removal request. Requests are processed within 48 hours.

📖 Citation

@misc{ricc2026,
  author = {Russian IT Community Open Research Group},
  title = {Russian IT Community Corpus (RICC): A Curated Multi-Domain Conversational Dataset for LLM SFT, DPO, and RAG},
  year = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/datasets/wwewtech/russian-it-community-corpus}}
}

Contributors

wwewtech

38 commits

wwewtech/russian-it-community-corpus

Dataset

1

stars

38

commits

1

linked in READMEs

Sep 8, 2026

updated

developer-conversations
dpo
lora
nlp
rag
russian
sft
software-engineering
system-architecture
zero-pii

README

📦 Russian IT Community Corpus (RICC)

License: MIT Total Messages SFT Dialogues RAG Knowledge Chunks Chronology Privacy

Russian IT Community Corpus (RICC) is an open, de-identified conversational dataset collected from 11 engineering community nodes spanning a 9-year timeline (2017–2026). It captures authentic discussions on backend systems, cloud infrastructure, AI/ML deployment, database internals, and software architecture.

The corpus is structured into ready-to-use splits for Instruction Fine-Tuning (SFT), Direct Preference Optimization (DPO), and Vector Retrieval-Augmented Generation (RAG).


⚡ Quick Start

from datasets import load_dataset

# 1. Multi-turn SFT Dialogues (171.5k curated conversations)
sft_ds = load_dataset("wwewtech/russian-it-community-corpus", "sft_dialogues", split="train")
print(f"Loaded SFT dataset: {len(sft_ds):,} dialogues")
print("Sample dialogue:", sft_ds[0]["messages"][:2])

# 2. RAG Technical Knowledge Base (325.7k segmented documents)
rag_ds = load_dataset("wwewtech/russian-it-community-corpus", "rag_knowledge_base", split="train")
print(f"Loaded RAG knowledge base: {len(rag_ds):,} chunks")

# 3. Full Chronological Corpus (2.81M deduplicated messages)
full_ds = load_dataset("wwewtech/russian-it-community-corpus", "full_corpus", split="train")
print(f"Loaded Full corpus: {len(full_ds):,} records")

🏗️ Data Curation Pipeline

RICC Pipeline Architecture
StageProcessing ModuleDescription & Output
1. IngestionMulti-Source Export IngestionMerging 11 community nodes (community_node_01..11) across 2017–2026 into 2.91M unified records.
2. AnonymizationNatasha NER & Case-Aware ScrubberInflection across 6 Russian cases, Telegram handle mapping, and regex scrubbing for phones, crypto, keys.
3. DeduplicationMinHash LSH (128 Permutations)Duplicate and spam removal at 0.80 Jaccard threshold + 8-domain taxonomy classification.
4. DAG ReconstructionThread Builder & ExtractorReconstructing reply trees, extracting 171.5k SFT dialogues ($\ge 3.0$ score) and 325.7k RAG chunks.
5. Multi-Split ExportParquet & JSONL ExportersGenerating zstd Parquet (full, sft, rag) and JSONL splits (ShareGPT, Alpaca, ChatML, DPO).

📊 Key Corpus Metrics

MetricVerified ValueDescription
Clean Messages2,816,434Deduplicated and anonymized messages
Unique Participants210,890Pseudonymized author identifiers (Developer_XXXXX)
Date RangeAug 06, 2017 — Aug 22, 20263,303 continuous days of community history
Total Words37,260,192Technical Russian and mixed English terminology
Estimated BPE Tokens49,085,532BPE token count approximation (~49.09M tokens)
SFT Dialogues171,520Multi-turn threads scored for technical depth ($\ge 3.0$)
RAG Knowledge Chunks325,690Cohesive problem-solving context blocks
DPO Preference Pairs60,899Pairs with chosen answers and heuristic negative baselines

🧠 Domain & Topic Distribution

Domain CategoryMessage CountShare (%)Core Topics
General Tech & Architecture2,683,68695.3%System design, design patterns, tooling debates, engineering culture
Business, FinTech & Compliance44,0171.6%Payment gateways, 152-FZ compliance, billing logic, enterprise SaaS
AI, ML & LLM Engineering29,4111.0%Transformers, fine-tuning, quantization, embeddings, inference infra
Frontend & UI Architecture18,7750.7%React, Vue, SSR, bundle optimization, state management, WebGL
Engineering Management & Career11,9700.4%Hiring, grading, architectural review processes, incident culture
Backend & Distributed DBs11,7070.4%PostgreSQL tuning, Redis caching, ClickHouse analytics, Kafka streams
Sysadmin & DevSecOps9,9700.3%Linux kernel, TLS certificates, vulnerability auditing, network debugging
DevOps & Cloud Infrastructure6,9180.2%Kubernetes, Docker, CI/CD pipelines, Prometheus monitoring

📁 Dataset Splits & Configurations

1. full_corpus (data/full_clean_messages.parquet)

Full chronological sequence of clean messages with domain labels, sentiment, and structural metadata.

ColumnTypeDescription
msg_idint64Surrogate message identifier
chat_namestringSurrogate community node (community_node_01..11)
timestampstringISO 8601 formatted timestamp
unixtimeint64UNIX epoch timestamp
author_anonstringPseudonymized author label (Developer_XXXXX)
text_cleanstringAnonymized message text
domainstringPrimary classified engineering domain
tagslist[str]Detected technical keyword tags
is_questionboolTrue if the message contains an engineering inquiry
thread_idint64Identified conversation DAG thread ID

2. sft_dialogues (data/sft_dialogues.parquet)

Reconstructed multi-turn conversation threads formatted for supervised instruction fine-tuning.

{
  "thread_id": 42056,
  "chat_name": "community_node_07",
  "topic_domain": "frontend_ui",
  "topic_tags": ["vue", "js", "di_container", "architecture"],
  "quality_score": 12.25,
  "messages": [
    {
      "role": "user",
      "author": "Developer_65546",
      "content": "Как изолировать ядро CMS при использовании Vue на фронтенде?"
    },
    {
      "role": "assistant",
      "author": "Developer_38544",
      "content": "Для изоляции выносите API в независимый сервисный слой..."
    }
  ]
}

3. rag_knowledge_base (data/rag_knowledge_base.parquet)

Chunked technical discussions formatted for dense embedding indexing (Qdrant, ChromaDB, Milvus, FAISS).


📊 SFT Subset — Real Composition & Known Limitations

Computed directly from data/sft_dialogues.parquet (171,520 dialogues):

PropertyValue
Dialogues whose first turn contains an actual question20.6% (35,402)
Dialogues classified as general_tech_chat (no specific domain)97.1% (166,624)
Dialogues in a concrete technical domain2.9% (4,896)
…of those, passing a strict QA filter (question-first opener + every turn ≥100 chars)283
Median heuristic quality_score (≈1 trivial → 4+ substantive)2.36 (p25 1.97 / p75 2.96)

Known limitations — read before training on this subset:

  • This is reconstructed community chat, not curated instruction data. Many "assistant" turns are opinionated chat replies rather than expert answers.
  • The quality_score heuristic rewards length and code markers; it does not measure factual correctness.
  • For serious SFT runs, filter aggressively: exclude general_tech_chat, require question-first openers and multi-turn substantive answers. That leaves ~283–4,900 dialogues depending on strictness — small but much cleaner than the full set.

A representative technical exchange that does pass the filter (thread_id 30449, business_legal_fintech):

{
  "role": "user",
  "content": "От map(filter(...)) уже тошнит? Серьезно, когда вы видите вот это, то хочется плакать:
              result = list(map(lambda x: x * 2, filter(lambda x: x % 2 == 0, arr)))
              А ведь можно проще..."
},
{
  "role": "assistant",
  "content": "В этом месте JS выглядит читаемее чем Python
              users.filter(user => user.gender === gender)
                .map(user => user.age)
                .reduce((acc, age, index, arr) => acc + age / arr.length, 0);"
}

🔬 Empirical Evaluation — Honest Status

🚫 Academic metrics (HumanEval / RuMMLU / PPL / ROUGE) published earlier have been WITHDRAWN. A code audit of the benchmark harness (src/evaluation/official_academic_benchmarks.py) found three defects that produced invalid numbers: substring-based MCQ scoring (inflated RuMMLU to an implausible 100%), PPL computed on empty placeholder strings due to wrong column names (identical base/LoRA values), and silent copying of Base results into LoRA/Hybrid columns when the adapter failed to load. All three are fixed in code with unit tests; the numbers will be republished only after a fresh GPU re-run.

What remains interpretable today — rubric-based heuristic scores on 50 engineering scenarios (concept-overlap + AST-parseability judged programmatically; not execution-verified capability):

Architecture SetupHeuristic ScoreAST Parse Rate
Base Model (Qwen 2.5 1.5B)32.969.0%
Base Model + RAG (325k chunks)44.071.0%
Domain LoRA (171.5k dialogues)34.572.2%
Hybrid (LoRA + RAG)48.673.0%

(AST rates recomputed as means over all 50 per-scenario ast_score values in reports/heuristic_benchmark_eval.json; an earlier version of this card quoted different numbers that did not match the machine-readable data.)

Pre-trained adapters for 58 base models are available in the LoRA Model Zoo (published as pilot domain-adaptation checkpoints on sampled domain subsets).


🛡️ Privacy, Anonymization & Ethical Use

  1. Morphological Name Scrubbing: Author display names are extracted and declined across all 6 Russian grammatical cases (Им., Род., Дат., Вин., Твор., Предл.) to remove conversational references in text.
  2. Community Node Anonymization: All 11 channel titles and supergroup IDs are strictly anonymized as surrogate nodes (community_node_01..11).
  3. Deterministic Pattern Scrubbing: Removes phone numbers, personal emails, crypto wallet addresses (BTC, ETH, TRON, TON, SOL), API keys (sk-proj-..., ghp_...), JWT tokens, and database credentials.
  4. Terminology Whitelist: 276 standard programming keywords, frameworks, and tools are protected against accidental redaction (see src/pii/ner_scrubber.pyTECH_WHITELIST).
  5. Notice and Takedown Policy: Intended strictly for educational, academic, and non-commercial research. If you identify any inadvertent personal identifier, please open a takedown issue or submit a removal request. Requests are processed within 48 hours.

📖 Citation

@misc{ricc2026,
  author = {Russian IT Community Open Research Group},
  title = {Russian IT Community Corpus (RICC): A Curated Multi-Domain Conversational Dataset for LLM SFT, DPO, and RAG},
  year = {2026},
  publisher = {Hugging Face},
  howpublished = {\url{https://huggingface.co/datasets/wwewtech/russian-it-community-corpus}}
}

Contributors

wwewtech

38 commits