wikillm

Paper · 2022-01-17 · cs.CL

Towards a Cleaner Document-Oriented Multilingual Crawled Corpus

Rebuilds the OSCAR multilingual web corpus from one Common Crawl dump so that each document gets one language label instead of one per line. It adds length-based head/tail and short-line filters plus non-destructive quality annotations. Author-reported: mid- and high-resource corpus sizes stay near OSCAR 21.09, several low-resource ones shrink.

Dataset curationLanguage model pretrainingpretraining-dataweb-corpuslanguage-identificationdata-filtering

arXivPDFCodeMarkdown17 min read

AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Large language models learn from huge amounts of web text. OSCAR is a public collection of such text, built from Common Crawl, a large snapshot of the web. Its earlier versions decided the language of each line on its own. A page that mixed languages was therefore cut into pieces that no longer read as one document.

This paper rebuilds that pipeline so that each whole document gets one language label, and the rules for keeping a document look at the document as a whole. It also trims short lines at the start and end of a page, and drops pages that are mostly short lines. Where it can, it adds tags such as "tiny", "noisy" or "adult" to a document rather than deleting it, so users can filter later. The result is a new corpus, OSCAR 22.01. The authors caution that they cannot yet state its quality.

TL;DR

Rebuilds the OSCAR multilingual web corpus from one Common Crawl dump (November/December 2021) at document level instead of line level §1 §6. Each document gets one language label, multilingual pages go to a separate group, and length-based filters plus non-destructive annotations (tiny, short_sentences, header, footer, noisy, UT1 categories) are added §3 §4 §5. Author-reported: mid- and high-resource sizes stay close to OSCAR 21.09 while several low-resource corpora shrink §6.1. Relevant if you build or filter pretraining web text, but the paper's rules and the released code differ in several thresholds (see Paper vs code).

Problem

  • Line-level language classification, used by the earlier OSCAR pipelines and by Ungoliant, destroys the integrity of multilingual documents, because the "documents" are just runs of consecutive lines that share a language §2.
  • Crawled web text is noisy, with boilerplate from headers, footers and sidebars that appears in Common Crawl dumps §7.2. The authors argue that line-level processing breaks document integrity and readability, as in their case against line-level deduplication §6.1.4.
  • Earlier OSCAR releases carried no per-document annotations or line identifications §6.1.1, so users could not easily judge quality.
  • Document-level similarity deduplication is costly in compute and time §6.1.4.
  • The method assumes the full Common Crawl dump is already downloaded; the carbon estimate is for generating OSCAR 22.01 from that dump app. A.

Method

Processing order in the paper follows the section order: head/tail trimming and the short-line proportion filter §3, then document language identification §4, then annotations §5. Section numbers below count the LaTeX sections, so the bibliography is §8 and the appendices are A and B. Equations in the source are unnumbered, so they are cited by section. The released code applies the steps in a slightly different order (see Paper vs code).

  1. Split. A line is a string separated by a newline character. Documents are sets of lines §4.
  2. Head/tail trim. Remove contiguous short lines at the start and the end of the document. A line counts as long when it is longer than 100 characters §3.1 §6.2.5.
  3. Short-line proportion filter. Compare the short-line bin with the long-line bin. Discard the document if the short bin is bigger §3.2.
  4. Line identification. Each remaining line gets its most likely language from a FastText classifier, with its confidence and its size in bytes. A line whose confidence is below 0.8 gets the "no identification" label g0 §4.
  5. Multilingual test. A document is multilingual when every identified language covers at least a fixed share of the document and the unidentified share stays below the same bound. The paper uses the share 1/(n+1), with n the number of lines §4.1. It needs at least 5 lines and 2 to 5 languages §4.1 §6.2.2.
  6. Monolingual label. Otherwise take the language with the most bytes and its byte-weighted confidence P_j. Keep the document if P_j is at least 0.6 §4.2.
  7. Annotations. Add these to the document metadata without removing it: tiny (5 lines or fewer), short_sentences (at least half the lines short), header and footer (short lines at the start or the end), noisy (too few letters or marks) §5.1 §5.2, and adult from the UT1 blocklist by URL §5.3.
  8. Write. Output the document with its language label and annotations, grouped by language §4 §5. The corpus is generated from the November/December 2021 Common Crawl dump §6.
Pseudocode
# Document labelling as printed in the paper  [§3] [§4] [§5]
# Input:  lines of one document (text split on newlines)
# Output: (label, confidence), or None when the document is dropped
def label_document(lines):
    # Step 2: keep the lines from the first to the last long line  [§3.1]
    lines = trim_short_head_and_tail(lines, min_chars=100)
    if not lines:
        return None
    # Step 3: drop the document if short lines dominate  [§3.2]
    if short_lines_dominate(lines):
        return None
    # Step 4: per-line language and confidence; below 0.8 is unknown  [§4]
    line_labels = [identify_line(line, threshold=0.8) for line in lines]
    # Size of each line in bytes  [§4]
    line_sizes = [len(line.encode("utf-8")) for line in lines]
    # Step 5: multilingual test on the whole document  [§4.1]
    if is_multilingual(line_labels, line_sizes):
        return ("multi", 0.5)  # fixed value used by the released code
    # Step 6: largest language by bytes, with confidence P_j  [§4.2]
    language, confidence = largest_language(line_labels, line_sizes)
    # Keep only when P_j reaches 0.6  [§4.2]
    if language is None or confidence < 0.6:
        return None
    return (language, confidence)
Pseudocode
# Multilingual test as printed  [§4.1]
# Input:  per-line labels (None = unknown) and sizes in bytes
# Output: True when the document is multilingual
def is_multilingual(line_labels, line_sizes):
    # At least 5 lines in the paper (the released code uses 10)  [§4.1]
    if len(line_labels) < 5:
        return False
    languages = {label for label in line_labels if label is not None}
    # Between 2 and 5 languages  [§4.1] [§6.2.2]
    if not 2 <= len(languages) <= 5:
        return False
    # Threshold |D|/(n+1), n = number of lines  [§4.1]
    threshold = sum(line_sizes) / (len(line_labels) + 1)
    for language in languages:
        # Every identified language reaches the threshold  [§4.1]
        if size_of(language, line_labels, line_sizes) < threshold:
            return False
    # Unknown lines do not exceed the threshold  [§4.1]
    if size_of(None, line_labels, line_sizes) > threshold:
        return False
    return True

Key equations, as printed (they are unnumbered in the source). The byte-weighted confidence is written here with the paper's typos corrected (the printed form uses |P_j| and s_j p_j); see Pitfalls.

Document as a pair of lines and labels, with size in bytes §4:

\mathcal{D} = (\mathcal{L}, \mathscr{L}), \qquad |\mathcal{D}| = \sum_{i} s_i

Byte-weighted confidence of language j over a document §4:

P_j = \frac{1}{|\mathcal{D}|} \sum_{i:\; g_i = g_j} s_i \, p_i

Multilingual condition, for all identified languages j and the unknown label g_0 §4.1:

|g_j| \ge \frac{|\mathcal{D}|}{n+1} \quad \forall\, g_j \ne g_0, \qquad |g_0| \le \frac{|\mathcal{D}|}{n+1}

Hyperparameters

NameValueWhereNotes
line language-ID threshold (FastText, top-1)0.8§4 pipeline.rsbelow it, the line gets the no-identification label
document confidence P_j0.6§4.2 pipeline.rsthe code uses the same value
multilingual: minimum lines5§4.1the released code uses 10 multilingual.rs
multilingual: number of languages2 to 5§4.1 §6.2.2code maximum 5 multilingual.rs
multilingual: line confidence gatenot statednot statedcode: 0.8 per line and more than 80% of lines confident multilingual.rs
multilingual document label and confidencenot statednot statedcode: label "multi" with fixed confidence 0.5 pipeline.rs
head/tail length bound100 characters§6.2.5code: 100 Unicode codepoints sentence.rs; the header check counts bytes header.rs
head/tail windownot stated; all lines before the first and after the last long line are dropped§3.1sentence_filter.rs
short-line proportion filterdiscard when the short bin is bigger (implies a 50% share)§3.2code keeps a document only when long lines hold at least 60% of characters record.rs
tiny5 lines or fewer§5.1code flags fewer than 5 lines tiny.rs tiny.rs
short_sentencesat least 50% short lines§5.1code flags when short lines exceed floor(0.5 × lines) sentence_filter.rs
header and footer windownot stated§5.1code: first and last 20% of lines header.rs
header and footer sharenot stated ("a high number")§5.1code: more than 50% of that window is short header.rs header.rs
noisyratio threshold 0.5§5.2code: non-letter characters above floor(0.5 × characters) noisy.rs noisy.rs
adult listUT1 blocklist, roughly 3.7M adult records§5.3code keeps the UT1 categories per URL content_detector.rs
FastText model filenot statednot statedthe code takes the model path as an input pipeline.rs
source dumpNovember/December 2021 Common Crawl§6
line-level deduplication of main corpusnot applied§6.1.4English deduplicated version is distributed separately

Results

Author-reported. Setup: OSCAR 22.01 generated from the November/December 2021 Common Crawl dump; compared with OSCAR 21.09 from the February 2021 dump §6 §6.1.3. Generation ran on one machine with 192 GB RAM and two Intel Xeon Gold 5218 processors, in 42.6 hours app. A. The paper reports no benchmark scores for models trained on the corpus.

SettingMetricBaseline (OSCAR 21.09)This paper (OSCAR 22.01)Source
Mid- and high-resource languages, size distributionsizesimilar distributionsimilar, described qualitatively§6.1.1 fig. 1 fig. 2
Alemannic Germansize7 MB360 KB; about 30 MB of Alemannic lines sit inside the German corpus§6.1.2
News terms, sample of 100 CC shards (Arabic: Beirut port explosion)occurrences3113tab. 1
News terms (Burmese: Min Aung Hlaing)occurrences34392736tab. 1
News terms (English: Obama)occurrences276398697tab. 1
News terms (English: Biden)occurrences192998232tab. 1
News terms (English: Omicron)occurrences131417tab. 1
News terms (French: Yellow Vests)occurrences9673tab. 1
News terms (Spanish: Aborto)occurrences1504572tab. 1
Adult documents, first 100 French adult documents, hand-checkedtrue positivesnot applicable77 true positives; 2 false positives on LGBTQI+ sites; 21 other false positives§6.2.4
Carbon footprint of generationenergy; CO2enot applicable0.4266 kWh; 16.48 g CO2e (see Pitfalls)app. A

Other reported observations:

  • The low-resource corpora show more variance in the lower end of the size distribution §6.1.1 fig. 1. Content sizes of the selected languages are similar for mid- and high-resource languages and slightly lower overall §6.1.1 fig. 2.
  • In the low-resource group, the tiny annotation is frequent and short_sentences is rare, which the authors read as long lines inside short documents §6.2.1 fig. 3 fig. 4.
  • Multilingual documents hold between 2 and 5 languages. English is present in many of them, which the authors suggest may come from boilerplate such as menus or footers §6.2.2 fig. 5.
  • On an English sample of 183,497 documents (1.3 GB), clean (unannotated) documents have a mean length of 6537 and standard deviation 14983, versus 8606 and 49874 for annotated documents. After trimming the top and bottom 5%, the values are 3582 (sd 3202) and 3686 (sd 4047). Units are not stated. The authors say these results do not establish intrinsic quality §6.2.3 fig. 6.
  • Adult annotation: 32,870 of 52,037,098 French documents are annotated adult. 1063 documents from one LGBTQI+ news site are labelled adult, about 3.2% of the adult set; the authors read this as a sign that more LGBTQI+ sites are on the blocklist §6.2.4.

Per-language size of OSCAR 22.01 tab. 2

Reproduced in full from the paper's appendix (Size of the OSCAR corpus by language; sizes in bytes, words as space-separated tokens) app. B tab. 2. Source table names are kept as printed.

LanguageSizeDocumentsWords
Afrikaans47.0 MB12,3936,227,310
Tosk Albanian363.6 kB13937,381
Amharic461.0 MB37,51330,481,153
Aragonese10.6 kB1251
Arabic84.2 GB8,718,9296,103,711,887
Egyptian Arabic2.8 MB1,256176,096
Assamese221.2 MB17,08411,109,557
Asturian73.6 kB773,919
Avaric18.6 kB14582
Azerbaijani3.5 GB491,847291,927,692
South Azerbaijani14.1 MB5,381693,746
Bashkir95.5 MB11,1985,418,474
Belarusian1.8 GB180,046107,227,860
Bulgarian35.1 GB2,887,1152,405,981,285
Bihari languages24.2 kB27569
Bangla15.1 GB1,171,501751,877,226
Tibetan234.5 MB18,6832,286,269
Bishnupriya2.0 MB27198,419
Breton33.7 MB16,1193,111,619
Bosnian10.3 kB10422
Russia Buriat32.9 kB39785
Catalan13.9 GB2,627,3071,508,919,864
Chechen14.0 MB4,086798,766
Cebuano44.6 MB5,7425,253,785
Central Kurdish716.4 MB84,95043,913,025
Czech58.6 GB10,381,9165,452,724,456
Chuvash41.8 MB4,7502,465,782
Welsh409.3 MB90,37849,488,495
Danish12.6 GB2,265,4791,454,439,292
German496.7 GB70,075,42446,826,676,844
Dimli (individual language)706 Bytes119
Lower Sorbian707 Bytes117
Divehi217.2 MB24,06710,112,205
Greek78.3 GB6,738,5465,031,242,803
Emiliano-Romagnolo.901 Bytes153
English3.2 TB431,992,659377,376,402,775
Esperanto558.3 MB111,93258,416,628
Spanish381.9 GB51,386,24742,829,835,316
Estonian9.2 GB1,362,524820,975,443
Basque1.1 GB233,65897,092,942
Persian77.4 GB7,665,8716,430,164,396
Finnish37.8 GB4,948,9612,900,615,928
French382.2 GB52,037,09841,713,990,658
Western Frisian75.3 MB21,9466,357,929
Irish45.6 MB12,2334,877,850
Scottish Gaelic137.7 kB1367,769
Galician255.2 MB88,80327,051,212
Guarani9.0 kB10374
Goan Konkani787.2 kB4638,831
Gujarati4.8 GB136,467301,170,777
Hebrew30.3 GB3,132,3962,249,377,984
Hindi23.3 GB1,529,9071,534,799,198
Croatian11.2 MB11,462505,369
Upper Sorbian132.8 kB1108,825
Hungarian53.9 GB6,866,0624,598,787,907
Armenian4.7 GB379,267268,031,270
Interlingua40.2 kB610,125
Indonesian17.4 GB2,244,6221,984,195,207
Iloko97.9 kB758,592
Ido77.3 kB1052,690
Icelandic2.0 GB396,183210,365,124
Italian229.3 GB28,502,09224,294,684,830
Japanese258.7 GB36,328,9315,592,948,356
Lojban1.9 MB570260,542
Javanese152.7 kB7010,441
Georgian7.1 GB488,588281,430,479
Kazakh2.9 GB261,085157,267,307
Khmer1.9 GB121,91030,564,131
Kannada2.6 GB150,850108,450,571
Korean51.8 GB5,881,4813,854,968,649
Karachay-Balkar119.6 kB914,089
Kurdish150.3 MB29,90617,390,759
Komi119.9 kB1273,335
Cornish1.4 kB255
Kyrgyz518.6 MB62,24428,028,986
Latin4.1 MB4,397187,446
Luxembourgish15.8 MB5,1081,545,946
Lezghian375.5 kB12419,250
Limburgish1.4 kB241
Lombard2.6 kB2225
Lao337.1 MB28,9146,682,982
Lithuanian20.0 GB2,303,0701,712,802,056
Latvian8.2 GB1,032,987707,361,898
Maithili21.6 kB23483
Malagasy57.3 MB3,0287,279,056
Eastern Mari11.3 MB1,612641,525
Minangkabau6.0 MB585614,613
Macedonian3.6 GB341,775244,058,579
Malayalam4.1 GB250,972137,831,247
Mongolian2.8 GB237,719176,405,432
Marathi3.3 GB250,376160,179,233
Western Mari743.5 kB15543,916
Malay5.3 MB5,228217,818
Maltese2.5 MB2,208118,190
Multilingual12.1 GB1,210,685936,187,711
Burmese1.9 GB158,73344,835,970
Mazanderani128.2 kB767,337
Nahuatl languages8.7 kB12179
Low German9.0 MB1,9381,012,561
Nepali3.7 GB391,947177,885,116
Newari5.7 MB1,134273,837
Dutch114.0 GB20,206,53212,329,127,151
Norwegian Nynorsk6.8 MB5,835459,183
Norwegian2.8 GB973,188279,182,902
Occitan2.1 MB37331,061
Odia487.9 MB52,94223,755,902
Ossetic13.9 MB3,560800,430
Punjabi1.1 GB68,09470,068,604
Polish139.0 GB19,301,13712,584,498,906
Piedmontese1.7 MB698188,270
Western Panjabi46.7 MB6,7904,060,419
Pashto490.3 MB50,31246,293,249
Portuguese170.3 GB23,735,70718,441,864,893
Quechua744 Bytes114
Romanian49.2 GB4,624,7645,261,803,995
Russian1.1 TB76,060,84462,811,122,663
Sanskrit136.0 MB4,4725,671,369
Sakha65.6 MB6,2843,473,813
Sicilian1.5 kB250
Sindhi117.1 MB15,51610,685,611
Serbian (Latin)931.8 kB73892,875
Sinhala2.0 GB108,593113,179,741
Slovak16.5 GB2,409,5551,619,121,944
Slovenian1.2 GB351,894118,400,246
Somali2.1 kB3109
Albanian3.0 GB437,287326,325,149
Serbian6.9 GB577,472482,932,670
Sundanese5.0 MB263547,145
Swedish48.0 GB7,541,2785,078,331,128
Swahili1.3 MB462123,050
Tamil11.4 GB556,772452,343,748
Telugu3.4 GB249,756137,752,065
Tajik870.9 MB46,36656,627,727
Thai66.1 GB5,030,2541,626,779,846
Turkmen4.4 MB2,485276,632
Filipino646.5 MB70,39481,881,278
Turkish75.1 GB10,826,0316,421,221,358
Tatar915.3 MB76,39851,875,265
Uyghur201.9 MB18,55611,240,889
Ukrainian48.8 GB4,558,2142,879,585,992
Urdu3.4 GB336,994332,816,354
Uzbek19.9 MB9,5261,370,842
Vietnamese98.9 GB9,587,23312,283,185,482
Volapük825.9 kB66157,039
Walloon105.7 kB1384,386
Waray7.6 MB933830,872
Wu Chinese137.2 kB883,056
Kalmyk9.3 kB9250
Mingrelian7.6 MB2,550253,333
Yiddish232.5 MB23,41815,809,780
Yoruba24.7 kB261,042
Chinese900.9 GB56,524,51823,149,203,886

Paper vs code

Code: the repository linked in the paper's introduction, oscar-corpus/ungoliant at commit b26f11d9b28e25ab72999356b9a91d38a6535e04 (Apache-2.0) §1. The paper does not name the code version used for OSCAR 22.01, and this commit is later than the paper, so it may not be the code that produced that release. The line-level threshold of 0.8 §4 and the document threshold of 0.6 §4.2 match the paper pipeline.rs pipeline.rs. Other differences:

  • Multilingual test, unit and denominator. The paper weights by bytes and divides by n+1 with n the number of lines §4.1. Its worked example divides by the number of languages plus one instead. The code counts lines and divides by the number of distinct labels, which includes the unknown label only when present multilingual.rs.
  • Multilingual minimum size. The paper says 5 lines §4.1; the code requires 10 multilingual.rs multilingual.rs.
  • Multilingual confidence gate. The code requires that more than 80% of lines have confidence at least 0.8 before the language test runs multilingual.rs multilingual.rs. The paper has no such gate §4.1.
  • Multilingual label and confidence. The paper does not name the label §4.1. The code stores "multi" with a fixed confidence of 0.5 and returns before the 0.6 check pipeline.rs.
  • Unknown as largest bin. The paper takes the largest represented language §4.2. The code takes the largest bin by bytes including the unknown bin, and drops the document when the unknown bin is the largest pipeline.rs.
  • Head/tail trim. The paper removes contiguous short lines at the head and tail §3.1. The code removes every line before the first long line and after the last long line, and drops a record with no long line sentence_filter.rs sentence_filter.rs pipeline.rs. A windowed variant (window 5) exists but the pipeline does not call it sentence_filter.rs.
  • Order of filters. The code trims the head and tail first, so the proportion filter sees the trimmed record pipeline.rs. The paper does not state an order.
  • Short-line proportion filter. The paper counts short and long lines and discards the document when the short bin is bigger §3.2. The code sums characters, not lines, and keeps a document only when long lines hold at least 60% of characters record.rs record.rs.
  • Short-line boundary. The proportion filter counts exactly 100 characters as long record.rs. The sentence filter treats a line as long only when it has more than 100 characters sentence.rs. The header check counts bytes, not characters header.rs.
  • tiny. The paper flags 5 lines or fewer §5.1. The code flags fewer than 5 lines tiny.rs tiny.rs.
  • short_sentences. The paper flags at least 50% short lines §5.1. The code flags when short lines are strictly more than floor(0.5 × lines) sentence_filter.rs. For example, 2 short lines out of 4 is 50% but is not flagged.
  • header and footer. The paper gives no window §5.1. The code checks the first and last 20% of lines and flags when more than half of that window is short, where short means fewer than 100 bytes header.rs header.rs header.rs.
  • noisy. The paper's footnote lists "Ms" as the spacing-mark category, but the category list uses Mc; the code counts letters and all marks (Mn, Mc, Me) as letters §5.2 noisy.rs. The code flags when non-letter characters exceed floor(0.5 × characters) noisy.rs noisy.rs.
  • Removal of noisy and tiny documents. The paper treats annotations as non-destructive §5. The code drops documents whose annotation list is exactly ["noisy", "tiny"] pipeline.rs. Tiny is added before noisy pipeline.rs, so the order may not match. The annotation store is in the external oscar-io crate, which is not in this repository, so whether the removal ever fires is not verified.
  • Adult annotation. The paper names an "adult" annotation §5.3. The code stores the UT1 categories for the URL in the metadata categories field, and the category names are not limited to "adult" content_detector.rs.
  • Hashing. The paper does not describe a per-document hash §6.1.4. The code computes a TLSH hash and stores it in metadata but does not remove any documents on that basis lsh.rs pipeline.rs.
  • Perplexity annotation. The code adds an optional KenLM perplexity annotation behind a feature flag, which the paper does not describe. With the feature on and no KenLM path, the code panics pipeline.rs pipeline.rs.
  • Language identification model. The paper does not name the FastText model file. The code takes its path as an input pipeline.rs.

Pitfalls

  • Printed equations have typos. The paper writes |P_j| and s_j p_j for the byte-weighted confidence §4.2. The intended form, which the code also uses, is the sum of s_i p_i over the lines labelled j, divided by the total bytes model.rs.
  • Multilingual denominator is ambiguous. The formula has n+1 with n lines, while the worked example has m+1 with m languages §4.1. The code uses the number of distinct labels. Pick one and test it on a sample before you rely on the counts.
  • Unnumbered equations. None of the display equations has a number in the source, so this card cites them by section.
  • Strict and non-strict comparisons. short_sentences uses "at least 50%" in the paper and a strict "more than floor(0.5 × lines)" in the code. tiny uses "5 lines or fewer" in the paper and "fewer than 5" in the code. Both differ at the boundary.
  • Units. The paper uses characters for the length bound §6.2.5 and the code uses codepoints in the sentence filter and bytes in the header check. For non-ASCII text the two differ, and the boundary of exactly 100 is treated differently by the two filters.
  • Hard bounds. Many documents sit exactly at the minimum size, because the first filter removes short lines §6.2.5. Thresholds on line counts and lengths therefore put documents on either side of a cliff.
  • Carbon numbers do not match the formula. With t = 42.6 hours, c = 2 CPUs at 125 W each and 20 W of DRAM app. A, the printed formula gives about 18.2 kWh. The reported 0.4266 kWh equals 1.58 × 270 / 1000, so the time factor t seems to be missing. The reported 16.48 g CO2e follows from 0.4266 kWh. Treat both figures as unverified.
  • Quality is not established. The authors say their results are not enough to state the intrinsic quality of the clean documents §6.2.3. "Clean" means "carries no annotation", not "high quality".
  • Adult annotation is weak. Of the first 100 French adult documents, 21 were false positives and 2 were LGBTQI+ sites §6.2.4. The authors suggest model-based annotation instead §7.2.
  • Multilingual documents are one group. They sit in the "Multilingual" group in the per-language table, not in the per-language groups tab. 2.
  • Boilerplate survives filtering. Headers, footers and sidebars remain in many documents; the authors note this as a source of English in multilingual documents §6.2.2 §7.2.
  • Deduplication. The main corpus is not deduplicated. A line-level deduplicated English version is distributed separately §6.1.4.
  • Figure numbers are counted from the source order and should be checked against the PDF.

Lineage

  • Builds on: the OSCAR 2019 pipeline (goclassy, from Ortiz Suarez et al.) and Ungoliant, which produced OSCAR 21.09 (Abadji et al.) §2. The paper gives these as author-year references without arXiv ids.
  • Compared against: CCNet and mC4, which classify Common Crawl at document level §2. The paper gives no arXiv ids for them.
  • Superseded by: not known from content already in this wiki.

Source and license

Adapted from “Towards a Cleaner Document-Oriented Multilingual Crawled Corpus” by Julien Abadji, Pedro Ortiz Suarez, Laurent Romary, Benoît Sagot (arXiv:2201.06642), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors. Code citations refer to https://github.com/oscar-corpus/ungoliant at commit b26f11d9b28e (Apache-2.0). Any quoted code is shown under that license.