Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Docs/Paraphrase/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ noise is large at four hundred words. "Moved with the rewrite" is what this desi
because of the rewrite" is a stronger claim and an earlier version of the report made it.

The human halves are drawn from the calibration corpus, so every one of them was published before
generative models existed. That remains the only basis for calling writing human, and it is a
2022. That remains the only basis for calling writing human, and it is a
stronger one than any classifier offers about anything.

## The controls, which were not planned
Expand Down
17 changes: 9 additions & 8 deletions Docs/Teaching/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,13 +92,14 @@ estas herramientas. Pídale que hable de su trabajo.
## Por qué este proyecto puede permitirse decir todo esto

Porque publica con qué frecuencia se equivoca, cosa que casi nadie hace en esta categoría:
[`Docs/CALIBRATION.md`](../CALIBRATION.md). Noventa textos publicados antes de que existieran los
modelos generativos, ninguno marcado en el umbral recomendado, y la lectura honesta es el intervalo y
no el cero: por debajo del 4,1%.

Siga leyendo esa página y dice algo menos halagador, que es justo lo que importa aquí: **ni el
español ni el inglés respaldan por sí solos un umbral propio.** El corpus es demasiado delgado por
idioma. Una cifra medida mayoritariamente en un idioma, citada frente a un estudiante que escribe en
otro, es exactamente el error que estos documentos le piden a un comité que no cometa.
[`Docs/CALIBRATION.md`](../CALIBRATION.md). 296 textos publicados antes de 2022, dos de ellos
marcados en el umbral recomendado, y la lectura honesta es el intervalo y no el 0,7 % observado: por
debajo del 2,4 %.

Siga leyendo esa página y dice algo menos halagador, que es justo lo que importa aquí: **el corpus
español son 25 textos y no respalda un umbral propio**, y su mejor cota es del 13,3 %. El inglés sí
lo respalda, con 271 textos, y aun así su cota en ese umbral es del 2,7 %. Una cifra medida
mayoritariamente en un idioma, citada frente a un estudiante que escribe en otro, es exactamente el
error que estos documentos le piden a un comité que no cometa.

Todo funciona sin conexión. Ningún documento, ni fragmento de él, sale del equipo donde está.
14 changes: 7 additions & 7 deletions src/SignsOfAI.Core/Rules/PackMessages.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,15 +132,15 @@ public static class PackMessages
[EmDashSuggestion] = "Replace most with a period, comma, or parentheses; keep em-dashes rare and deliberate.",
[EmDashEvidence] = "Human prose averages well under one em-dash per 100 words.",
[CatalogLexical] = "Overused AI vocabulary.",
[ArtifactInvisible] = "{1} ({0}) a character that occupies no space when the text is displayed.",
[ArtifactBidi] = "{1} ({0}) a control character that can make the displayed text differ from the stored text.",
[ArtifactInvisible] = "{1} ({0}): a character that occupies no space when the text is displayed.",
[ArtifactBidi] = "{1} ({0}): a control character that can make the displayed text differ from the stored text.",
[ArtifactLookalike] = "“{3}” contains {1} ({0}) where the Latin letter “{2}” belongs. " +
"The two are indistinguishable on screen.",
[ArtifactSpace] = "{1} ({0}) in place of an ordinary space.",
[ArtifactSoftHyphen] = "{1} ({0}) an invisible hyphenation point, routine in text copied out of a PDF.",
[ArtifactVariationSelector] = "{1} ({0}) a rendering modifier attached to something that is not an emoji.",
[ArtifactPrivateUse] = "{1} ({0}) a codepoint with no meaning outside the font that defined it.",
[ArtifactTag] = "{1} ({0}) an invisible character of the kind used to carry hidden text alongside visible text.",
[ArtifactSoftHyphen] = "{1} ({0}): an invisible hyphenation point, routine in text copied out of a PDF.",
[ArtifactVariationSelector] = "{1} ({0}): a rendering modifier attached to something that is not an emoji.",
[ArtifactPrivateUse] = "{1} ({0}): a codepoint with no meaning outside the font that defined it.",
[ArtifactTag] = "{1} ({0}): an invisible character of the kind used to carry hidden text alongside visible text.",
[ArtifactSummaryIncidental] = "{0} unusual characters, not spread through the document. " +
"Copying from a web page or a PDF produces these.",
[ArtifactSummarySystematic] = "{0} characters that typing does not produce, spread across {1} of {2} " +
Expand Down Expand Up @@ -177,7 +177,7 @@ public static class PackMessages
"weak — check that they are all by the same person and of a similar kind.",
[StyleAdvice] = "Style moves with the assignment, the genre, the deadline, and with a person simply " +
"getting better. A text outside the range is a reason to ask what changed, never a " +
"conclusion about who wrote it — and a text inside the range is the more useful " +
"conclusion about who wrote it. And a text inside the range is the more useful " +
"result, because it is the one that settles a suspicion.",
[StyleNeedBaseline] = "Not enough of this writer’s own work to measure against: {0} words, and this " +
"needs at least {1}.",
Expand Down
68 changes: 34 additions & 34 deletions src/SignsOfAI.Core/Rules/Packs/rules.en.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@
"emdash.suggestion": "Replace most with a period, comma, or parentheses; keep em-dashes rare and deliberate.",
"emdash.evidence": "Human prose averages well under one em-dash per 100 words.",
"catalog.lexical": "Overused AI vocabulary.",
"artifact.invisible": "{1} ({0}) a character that occupies no space when the text is displayed.",
"artifact.bidi": "{1} ({0}) a control character that can make the displayed text differ from the stored text.",
"artifact.invisible": "{1} ({0}): a character that occupies no space when the text is displayed.",
"artifact.bidi": "{1} ({0}): a control character that can make the displayed text differ from the stored text.",
"artifact.lookalike": "“{3}” contains {1} ({0}) where the Latin letter “{2}” belongs. The two are indistinguishable on screen.",
"artifact.space": "{1} ({0}) in place of an ordinary space.",
"artifact.soft-hyphen": "{1} ({0}) an invisible hyphenation point, routine in text copied out of a PDF.",
"artifact.variation-selector": "{1} ({0}) a rendering modifier attached to something that is not an emoji.",
"artifact.private-use": "{1} ({0}) a codepoint with no meaning outside the font that defined it.",
"artifact.tag": "{1} ({0}) an invisible character of the kind used to carry hidden text alongside visible text.",
"artifact.soft-hyphen": "{1} ({0}): an invisible hyphenation point, routine in text copied out of a PDF.",
"artifact.variation-selector": "{1} ({0}): a rendering modifier attached to something that is not an emoji.",
"artifact.private-use": "{1} ({0}): a codepoint with no meaning outside the font that defined it.",
"artifact.tag": "{1} ({0}): an invisible character of the kind used to carry hidden text alongside visible text.",
"artifact.summary.incidental": "{0} unusual characters, not spread through the document. Copying from a web page or a PDF produces these.",
"artifact.summary.systematic": "{0} characters that typing does not produce, spread across {1} of {2} sections of the document. That distribution is what a tool leaves behind when it processes a whole text.",
"artifact.advice": "This says nothing about who wrote the text, and it is not evidence of dishonesty. It is a question about where the file has been: ask the writer to open the document and describe how it was produced.",
Expand All @@ -35,8 +35,8 @@
"style.summary.within": "Distance {0}. This writer’s own pieces sit up to {1} from their centre, so this one is inside the range they already cover.",
"style.summary.edge": "Distance {0}, a little past the {1} that this writer’s own pieces cover between themselves.",
"style.summary.beyond": "Distance {0}, against {1} for the widest gap between this writer’s own pieces. This one sits outside the range they cover.",
"style.note.broad": "Those samples also disagree with each other a lot, which makes any comparison weak check that they are all by the same person and of a similar kind.",
"style.advice": "Style moves with the assignment, the genre, the deadline, and with a person simply getting better. A text outside the range is a reason to ask what changed, never a conclusion about who wrote it — and a text inside the range is the more useful result, because it is the one that settles a suspicion.",
"style.note.broad": "Those samples also disagree with each other a lot, which makes any comparison weak: check that they are all by the same person and of a similar kind.",
"style.advice": "Style moves with the assignment, the genre, the deadline, and with a person simply getting better. A text outside the range is a reason to ask what changed, never a conclusion about who wrote it. And a text inside the range is the more useful result, because it is the one that settles a suspicion.",
"style.need.baseline": "Not enough of this writer’s own work to measure against: {0} words, and this needs at least {1}.",
"style.need.questioned": "The text being checked is too short: {0} words, and this needs at least {1}.",
"style.need.samples": "Not enough separate pieces to measure the writer’s own variation: {0} usable, and this needs at least {1}.",
Expand Down Expand Up @@ -71,7 +71,7 @@
],
"weight": 5.5,
"severity": "High",
"suggestion": "mix, blend, range or just name the thing",
"suggestion": "mix, blend, range, or just name the thing",
"replacements": [
"mix",
"blend",
Expand Down Expand Up @@ -100,7 +100,7 @@
],
"weight": 4.0,
"severity": "Medium",
"suggestion": "subtle, detailed or state the specific distinction",
"suggestion": "subtle, detailed, or state the specific distinction",
"replacements": [
"subtle",
"detailed"
Expand Down Expand Up @@ -197,7 +197,7 @@
],
"weight": 4.5,
"severity": "High",
"suggestion": "proof, evidence, sign or drop the flourish",
"suggestion": "proof, evidence, sign, or drop the flourish",
"replacements": [
"proof",
"evidence",
Expand Down Expand Up @@ -280,7 +280,7 @@
],
"weight": 3.5,
"severity": "Medium",
"suggestion": "smooth, smoothly or show it, don't claim it",
"suggestion": "smooth, smoothly, or show it, don't claim it",
"replacements": [
"smooth",
"smoothly"
Expand Down Expand Up @@ -308,7 +308,7 @@
],
"weight": 3.5,
"severity": "Medium",
"suggestion": "many, countless or give the number",
"suggestion": "many, countless, or give the number",
"replacements": [
"many",
"countless"
Expand All @@ -335,7 +335,7 @@
],
"weight": 3.5,
"severity": "Medium",
"suggestion": "major, far-reaching or show the change",
"suggestion": "major, far-reaching, or show the change",
"replacements": [
"major",
"far-reaching"
Expand All @@ -348,7 +348,7 @@
],
"weight": 3.0,
"severity": "Low",
"suggestion": "lively, colorful or a concrete detail",
"suggestion": "lively, colorful, or a concrete detail",
"replacements": [
"lively",
"colorful"
Expand All @@ -361,7 +361,7 @@
],
"weight": 3.5,
"severity": "Medium",
"suggestion": "busy, crowded or describe the scene",
"suggestion": "busy, crowded, or describe the scene",
"replacements": [
"busy",
"crowded"
Expand Down Expand Up @@ -497,7 +497,7 @@
],
"weight": 3.5,
"severity": "Medium",
"suggestion": "changing or say how it changes",
"suggestion": "changing, or say how it changes",
"replacements": [
"changing"
]
Expand All @@ -523,7 +523,7 @@
],
"weight": 3.0,
"severity": "Low",
"suggestion": "major shift or state the actual impact",
"suggestion": "major shift, or state the actual impact",
"replacements": [
"major shift"
]
Expand Down Expand Up @@ -645,7 +645,7 @@
],
"weight": 3.5,
"severity": "Medium",
"suggestion": "example, model or drop the metaphor",
"suggestion": "example, model, or drop the metaphor",
"replacements": [
"example",
"model"
Expand Down Expand Up @@ -675,7 +675,7 @@
],
"weight": 1.0,
"severity": "Info",
"suggestion": "empty intensifier usually deletable",
"suggestion": "empty intensifier: usually deletable",
"delete": true
},
{
Expand All @@ -686,7 +686,7 @@
],
"weight": 1.0,
"severity": "Info",
"suggestion": "empty intensifier usually deletable",
"suggestion": "empty intensifier: usually deletable",
"delete": true
},
{
Expand All @@ -697,7 +697,7 @@
],
"weight": 1.0,
"severity": "Info",
"suggestion": "empty intensifier usually deletable",
"suggestion": "empty intensifier: usually deletable",
"delete": true
},
{
Expand All @@ -707,7 +707,7 @@
],
"weight": 1.5,
"severity": "Info",
"suggestion": "empty intensifier cut unless it's meant literally",
"suggestion": "empty intensifier: cut unless it's meant literally",
"delete": true
},
{
Expand All @@ -717,7 +717,7 @@
],
"weight": 1.5,
"severity": "Info",
"suggestion": "empty intensifier cut it",
"suggestion": "empty intensifier: cut it",
"delete": true
},
{
Expand All @@ -727,7 +727,7 @@
],
"weight": 1.5,
"severity": "Info",
"suggestion": "empty intensifier cut it",
"suggestion": "empty intensifier: cut it",
"delete": true
},
{
Expand All @@ -748,7 +748,7 @@
],
"weight": 2.0,
"severity": "Low",
"suggestion": "empty intensifier cut it",
"suggestion": "empty intensifier: cut it",
"delete": true
},
{
Expand All @@ -758,7 +758,7 @@
],
"weight": 2.0,
"severity": "Low",
"suggestion": "empty intensifier cut it",
"suggestion": "empty intensifier: cut it",
"delete": true
},
{
Expand All @@ -768,7 +768,7 @@
],
"weight": 2.0,
"severity": "Low",
"suggestion": "empty intensifier cut it",
"suggestion": "empty intensifier: cut it",
"delete": true
},
{
Expand All @@ -778,7 +778,7 @@
],
"weight": 2.0,
"severity": "Low",
"suggestion": "empty intensifier cut it",
"suggestion": "empty intensifier: cut it",
"delete": true
}
],
Expand All @@ -789,7 +789,7 @@
"regex": "\\bit'?s not (just|only|merely|about)\\b[^.?!\\n]{1,60}?,\\s*it'?s\\b",
"weight": 6.0,
"severity": "High",
"message": "Negative parallelism (“it's not just X, it's Y”) feigns depth.",
"message": "Negative parallelism (“it's not just X, it's Y”): feigns depth.",
"suggestion": "State the claim directly. Cut the “not just… it's…” frame."
},
{
Expand Down Expand Up @@ -862,7 +862,7 @@
"regex": "\\bon (the )?one hand\\b",
"weight": 3.0,
"severity": "Medium",
"message": "Symmetrical framing (“on one hand… on the other”) false balance.",
"message": "Symmetrical framing (“on one hand… on the other”): false balance.",
"suggestion": "If the evidence favors one side, say so. Don't force a two-sided frame."
},
{
Expand Down Expand Up @@ -891,7 +891,7 @@
"regex": "\\b(\\w+), (\\w+),? and (\\w+)[.,;]",
"weight": 1.2,
"severity": "Info",
"message": "Possible “rule of three” AI defaults to tricolons.",
"message": "Possible “rule of three”: AI defaults to tricolons.",
"suggestion": "Fine occasionally; if every list is three items, vary the count."
},
{
Expand Down Expand Up @@ -1103,7 +1103,7 @@
"regex": "(?m)^\\s{0,3}#{1,6}\\s+[^\\n]*[\\u2190-\\u21FF\\u2300-\\u27BF\\u2600-\\u26FF\\u2B00-\\u2BFF\\uD83C-\\uDBFF]",
"weight": 3.0,
"severity": "Low",
"message": "Emoji in a heading formatting slop.",
"message": "Emoji in a heading: formatting slop.",
"suggestion": "Headings don't need emoji."
},
{
Expand All @@ -1112,7 +1112,7 @@
"regex": "(?m)(?<=[a-z,;])\\s\\*\\*[^\\n*]{1,60}\\*\\*",
"weight": 2.0,
"severity": "Info",
"message": "Mid-sentence bold formatting slop.",
"message": "Mid-sentence bold: formatting slop.",
"suggestion": "Emphasis rarely helps prose; cut the bold."
},
{
Expand Down
Loading
Loading