human es un linter que cuenta patrones típicos de texto escrito por IA. Funciona con reglas, sin ningún modelo.

Quise saber si mejoraba combinándolo con Jev, un modelo de TypeSafe que responde preguntas de sí o no con una probabilidad.

No mejoró. Le pasé 1.779 marcas de human y le pregunté si cada una era un caso real. Dijo que sí en el 37% de las marcas en texto humano y en el 38% de las marcas en texto de modelo, así que no distingue unas de otras.

Cómo lo medí

Si un texto se escribió antes de que existiera ChatGPT, cualquier marca de human en ese texto es una falsa alarma.

Junté texto de antes de 2022: posts de blogs técnicos, artículos guardados en el Internet Archive, comentarios de Hacker News y Wikipedia. Y le pedí a Claude (Sonnet, Haiku y Opus) que escribiera sobre temas parecidos.

Después conté cuántas veces salta cada regla en cada lado.

Lo que salió

Algunas reglas marcaban sobre todo a personas. La que repite la misma palabra varias veces saltaba 53 veces cada 10.000 palabras en texto humano, el triple que en el de Claude. Y "utilizar", que tenía vetado, aparece en más de 200 frases humanas y en 6 de modelo. Es español normal.

Otras salen más en Claude, pero no lo delatan. Hablar de una multitud sin nombre ("lo que casi nadie revisa") o poner dos puntos a mitad de frase salen 2 o 3 veces más en Claude. También aparecen en texto humano, así que una marca sola no prueba nada.

Lo que cambié en human

Hazlo con tus datos

human es open source, con licencia MIT, y se instala con npm:

npm install -g @e1i0/human

Junta dos carpetas. En una, texto escrito antes de 2022: tu blog, la documentación de tu equipo, lo que tengas. En la otra, texto que escribió un modelo sobre temas parecidos. Después corre:

human-calibrate --human viejo/ --ai modelo/

Te dice, regla por regla, cuántas veces salta cada 10.000 palabras en cada carpeta. Esto es parte de lo que salió en mi caso:

Regla Personas IA Diferencia Veredicto
mid-sentence-colon 17,3 63,0 3,6× sirve
unnamed-crowd 1,9 7,4 3,2× sirve
aphorism-closer 17,7 23,8 1,3× no hay diferencia real
semicolon 11,1 5,8 0,5× marca a personas
polyptoton 5,1 0,5 0,2× marca a personas

Veces cada 10.000 palabras.

La fila de polyptoton ya es con el ajuste nuevo. Marca mucho menos que antes, pero sigue saliendo más en texto humano.

Con tus textos pueden salir otros números.

Lo que no sé

Solo medí modelos de Claude. GPT o Gemini pueden escribir distinto. Y el texto humano es técnico, así que para otros tipos de texto los números pueden cambiar.

La primera vez, el texto de IA salió contaminado. Tengo un hook que le pasa human a cada archivo que escribe Claude, y Claude corregía sus propios patrones solo, sin que yo validara nada a mano.

Si lo pruebas con otro modelo, me cuentas qué te sale en un issue.