All skills
davila7 avatar

/data-processing-nemo-curator

@d9d759e

GPU-accelerated data curation for LLM training. Supports text/image/video/audio. Features fuzzy deduplication (16× faster), quality filtering (30+ heuristics), semantic deduplication, PII redaction, NSFW detection. Scales across GPUs with RAPIDS. Use for preparing high-quality training datasets, cleaning web data, or deduplicating large corpora.

  • 3 files
  • 13.5 KB
  • MIT
  • Updated 9 months ago
  • GitHub

Use this Skill: https://skilld.dev/gh/davila7/claude-code-templates/data-processing-nemo-curator

This session only. Nothing lands on disk.

referencesfiltering.md

≈588 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Quality Filtering Guide

Complete guide to NeMo Curator's 30+ quality filters.

Text-based filters

Word count

from nemo_curator.filters import WordCountFilter

# Filter by word count
dataset = dataset.filter(WordCountFilter(min_words=50, max_words=100000))

Repeated content

from nemo_curator.filters import RepeatedLinesFilter

# Remove documents with >30% repeated lines
dataset = dataset.filter(RepeatedLinesFilter(max_repeated_line_fraction=0.3))

Symbol ratio

from nemo_curator.filters import SymbolToWordRatioFilter

# Remove documents with too many symbols
dataset = dataset.filter(SymbolToWordRatioFilter(max_symbol_to_word_ratio=0.3))

URL ratio

from nemo_curator.filters import UrlRatioFilter

# Remove documents with many URLs
dataset = dataset.filter(UrlRatioFilter(max_url_ratio=0.2))

Language filtering

from nemo_curator.filters import LanguageIdentificationFilter

# Keep only English documents
dataset = dataset.filter(LanguageIdentificationFilter(target_languages=["en"]))

# Multiple languages
dataset = dataset.filter(LanguageIdentificationFilter(target_languages=["en", "es", "fr"]))

Classifier-based filtering

Quality classifier

from nemo_curator.classifiers import QualityClassifier

quality_clf = QualityClassifier(
    model_path="nvidia/quality-classifier-deberta",
    batch_size=256,
    device="cuda"
)

# Filter low-quality (threshold > 0.5 = high quality)
dataset = dataset.filter(lambda doc: quality_clf(doc["text"]) > 0.5)

NSFW classifier

from nemo_curator.classifiers import NSFWClassifier

nsfw_clf = NSFWClassifier(threshold=0.9, device="cuda")

# Remove NSFW content
dataset = dataset.filter(lambda doc: nsfw_clf(doc["text"]) < 0.9)

Heuristic filters

Full list of 30+ filters:

  • WordCountFilter
  • RepeatedLinesFilter
  • UrlRatioFilter
  • SymbolToWordRatioFilter
  • NonAlphaNumericFilter
  • BulletsFilter
  • WhiteSpaceFilter
  • ParenthesesFilter
  • LongWordFilter
  • And 20+ more...

Best practices

  1. Apply cheap filters first - Word count before GPU classifiers
  2. Tune thresholds on sample - Test on 10k docs before full run
  3. Use GPU classifiers sparingly - Expensive but effective
  4. Chain filters efficiently - Order by cost (cheap → expensive)

Source: SKILL.md on GitHub

No third-party reports yet.

Signed by skilld at d9d759e. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 18 hours ago.

Activeupdated 9 months ago
version
1.0.0
author
Orchestra Research
dependencies
[
  "nemo-curator",
  "cudf",
  "dask",
  "rapids"
]
Other metadata
tags
[
  "Data Processing",
  "NeMo Curator",
  "Data Curation",
  "GPU Acceleration",
  "Deduplication",
  "Quality Filtering",
  "NVIDIA",
  "RAPIDS",
  "PII Redaction",
  "Multimodal",
  "LLM Training Data"
]

README badge

README badge for davila7/claude-code-templates/data-processing-nemo-curator