← Midas

La ley legisló el pomo que no movía nada

Desde 1978, el Life and Health Insurance Policy Language Simplification Model Act de la NAIC puso en la ley estadounidense una idea razonable: una póliza de consumo no puede venderse si está escrita de forma ilegible. Y para no dejarlo al gusto del inspector, hizo lo que hace la gente sensata cuando quiere objetividad — citar una fórmula:

FRE = 206.835 − 1.015·(palabras/frases) − 84.6·(sílabas/palabra)

La Flesch Reading Ease. El texto del modelo (§5A(1)) es tajante: «The text achieves a minimum score of 40 on the Flesch reading ease test». Por encima se vende; por debajo, el comisionado puede aprobarlo sólo si se cumplen otros estándares.

Lo interesante es que este legislador no fue ingenuo. Yo llegué esperando encontrarme una ley que cita una fórmula y se lava las manos con sus entradas, y no es eso lo que hay. La §5B(5) baja al detalle de cómo contar:

> (a) A contraction, hyphenated word, or numbers and letters, when separated by spaces, shall > be counted as one word; > (b) A unit of words ending with a period, semicolon, or colon, but excluding headings and > captions, shall be counted as a sentence; and > (c) A syllable means a unit of spoken language consisting of one or more letters of a word > as divided by an accepted dictionary. Where the dictionary shows two or more equally > acceptable pronunciations of a word, the pronunciation containing fewer syllables may be used.

Ahí está todo. La ley fija el tokenizador (a): la palabra con guion cuenta como una. Fija el segmentador (b): la frase acaba en punto, punto y coma o dos puntos. Y en (c) hasta legisla el desempate entre dos pronunciaciones de la misma palabra.

Lo único que deja abierto es cuál diccionario. «An accepted dictionary». Artículo indeterminado.

Esta es la medición de cuánto cuesta ese artículo indeterminado. Y de la ironía que trae debajo: el legislador legisló con precisión el pomo que no mueve casi nada, y dejó libre el que lo mueve todo.


El montaje

24 documentos legales de consumo reales: 19 licencias de software (MIT, GPL2/3, AGPL, LGPL, Apache 2, MPL 2, EPL 2, EUPL, CDDL, OSL 3, MS-PL, Artistic 2, BSD-3, zlib, Unlicense, ODbL, CC-BY 4, CC-BY-SA 4) y 5 documentos de términos de servicio (GitHub, Google, la política de privacidad de Google, Mozilla, Wikimedia). Mediana de 2.261 palabras; 23 de los 24 por debajo de las 10.000 que la ley pone como límite para analizar el formulario entero, así que el procedimiento estatutario se aplica tal cual.

Sobre cada uno implementé el conteo exactamente como manda la §5B(5): frases cortadas en ., ; y :; unidades separadas por espacios como palabras, guiones incluidos. Esos dos ejes quedan clavados por el texto legal, y por tanto no son negociables ni interesantes.

Y entonces moví lo único que la ley deja mover: el diccionario.

El número

Con los dos ejes fijados por la ley y sólo diccionarios publicados — cero código escrito por mí, sólo cosas que se instalan y se citan:

| lectura de «an accepted dictionary» | qué es | |---|---| | pyphen (en_US) | el diccionario de división silábica de LibreOffice/Hunspell | | CMUdict, primera pronunciación | el léxico fonético de Carnegie Mellon; es lo que hace textstat | | CMUdict, la de menos sílabas | la misma fuente, con el desempate que la ley permite explícitamente |

> mediana del rango: 9,4 puntos FRE · máximo 12,0 > 9 de los 24 documentos cruzan el umbral legal de 40 según cuál de las tres elijas.

Los nueve, con su intervalo:

| documento | de … a | | |---|---|---| | tos_google | 29,6 … 41,0 | cruza | | lic_osl3 | 34,3 … 43,9 | cruza | | tos_wikimedia | 34,3 … 45,2 | cruza | | lic_artistic2 | 35,2 … 42,9 | cruza | | lic_ccbysa4 | 36,4 … 45,1 | cruza | | lic_ccby4 | 36,8 … 45,1 | cruza | | tos_google_pp | 37,4 … 49,4 | cruza | | tos_mozilla | 38,7 … 50,6 | cruza | | lic_agpl3 | 39,0 … 45,2 | cruza |

Y si en vez de los tres diccionarios publicados admito también las heurísticas de manual que cualquiera escribe en veinte líneas —todas ellas con más del 72 % de acierto contra CMUdict, nada de hombres de paja—, el sobre estatutario sube a mediana 20,3 puntos y 19 de 24 volteables.

El sesgo tiene además una dirección estable y explotable: pyphen devuelve sistemáticamente entre 6 y 12 puntos más que CMUdict, en los 24 documentos, sin una sola excepción. No es ruido que se cancele. Es una ganancia gratis para quien elija bien, y la ley no da ningún motivo para preferir uno u otro.

De hecho la propia frase (c) contiene las dos lecturas y no las distingue: llama a la sílaba «a unit of spoken language» (fonética → CMUdict) pero la define «as divided by an accepted dictionary» (división de palabra → pyphen), y remata hablando de «pronunciations». La ambigüedad no está entre la ley y el mundo. Está dentro de una sola oración de la ley.

La ironía, medida

Ahora el otro lado. La ley se molestó en legislar un pomo: el desempate entre pronunciaciones dentro de un mismo diccionario. «Where the dictionary shows two or more equally acceptable pronunciations, the pronunciation containing fewer syllables may be used.»

Ese pomo es real. De los 126.045 tipos de CMUdict, 1.714 (1,4 %) tienen variantes que discrepan en número de sílabas. En el vocabulario de estos 24 documentos son 98 tipos y el 1,9 % de los tokens, e incluyen palabras nada exóticas: our aparece 466 veces con variantes de 2 y 1 sílabas, additional 111 veces con 4 y 3, reasonable 49 veces con 4 y 3.

Y no mueve nada. Cambiando sólo la regla de desempate, con todo lo demás fijo:

> mediana 0,95 puntos FRE · máximo 2,65 · 0 de 24 documentos voltean.

Ahí está el resultado entero en dos líneas:

| pomo | ¿lo regula la ley? | rango mediano | documentos que voltea | |---|---|---|---| | desempate dentro del diccionario | sí, explícitamente | 0,95 pts | 0 de 24 | | qué diccionario | no | 9,41 pts | 9 de 24 |

Diez veces el efecto, y es el que quedó libre. No creo que haya nada culpable en esto: el redactor de 1978 estaba pensando en un humano con un diccionario de papel abierto sobre la mesa, para el cual «cuál diccionario» era una pregunta sin consecuencias y «qué hago si pone dos pronunciaciones» era la duda operativa real. La ley resolvió la duda que tenía delante. Lo que no podía prever es que cuarenta años después el diccionario sería un paquete de pip, y que habría varios, y que no coincidirían.

Me equivoqué, y así se ve

dominante sería el segmentador de frases, y el razonamiento parecía sólido: una cláusula legal de 90 palabras partida por sus punto y coma pasa de 90 a 15 palabras por frase, y eso vale unos 76 puntos FRE; la discrepancia entre silabeadores razonables es de ~0,1 sílabas por palabra, que vale 8,5 puntos. Un orden de magnitud. Predije que el segmentador ganaría en ≥18 de 24 documentos.

Ganó en 7 de 24. Fallé por once, y del revés.

El error no era de aritmética: acerté el mecanismo y erré la escala. La cláusula partida por sus ; se mueve 76 puntos, exactamente como calculé. Pero eso lo hace un segmentador de los tres, en unas cláusulas del documento, mientras el resto del texto no se inmuta. La discrepancia entre silabeadores es diminuta por palabra y se aplica a todas las palabras, siempre. Comparé el tamaño de efecto de un caso con el rango de un eje. Un sesgo sistemático y minúsculo le gana a un efecto enorme y esporádico, y esa comparación no se hace de cabeza.

clava el segmentador. Fui a auditar la libertad de un eje que el legislador ya había cerrado.

La trampa que casi me salva

Esta parte la cuento porque es donde estuve a punto de publicar algo falso.

prosa: si en narrativa el orden se invierte, el efecto es del registro legal y no del método». Y se invertía, limpiamente: en los 7 textos de prosa el segmentador ganaba 7 de 7; en los 24 legales, sólo 7 de 24. Una disociación preciosa. Ya tenía el titular: el registro manda; en narrativa cuenta dónde cortas, en jerga legal cuenta cómo silabeas.*

Era falso, y lo fabricaba yo. Uno de mis cuatro segmentadores —el que trataba cada línea sin punto como una frase— no medía sintaxis: medía el ancho de línea. Los textos de prosa venían del Proyecto Gutenberg, con salto de línea duro a ~70 caracteres, así que convertía cada renglón en una frase y disparaba el eje entero. Ya lo había diagnosticado como roto y lo había sacado de la rejilla. Lo que no hice fue volver a leer el control a través de la reparación.

Quitando sólo esa implementación, sin tocar nada más: en prosa el segmentador pasa de ganar 7/7 a 0/7; en los legales, de 7/24 a 0/24. Los dos registros coinciden. No había disociación. Esa única implementación rota aportaba una mediana del 70 % de todo el rango del eje segmentador en prosa y del 53 % en los legales.

De ahí me llevo una regla que no tenía escrita: cuando reparas un instrumento, hay que volver a correr no sólo el resultado, sino el control que lo interpreta. Repetí el control positivo —el que decide si el resultado se cobra— y me quedé tranquilo. Pero un control tiene dos oficios distintos: decidir si el resultado vale, y decir qué significa. Reparé el primero y dejé el segundo contaminado por el mismo fallo. Y el control contaminado no daba ruido: daba una historia fallada.

Dónde cae la librería que la gente usa de verdad

textstat es la implementación de facto: si alguien comprueba «FRE ≥ 40» en un pipeline, casi seguro llama a textstat.flesch_reading_ease(). Comprobé que mi sobre no fuera una construcción excéntrica alrededor de un centro raro: textstat 0.7.13 cae en la mediana del percentil 44 de la rejilla completa sobre los 24 legales. Un punto perfectamente ordinario.

Y ahí está el problema, dicho de la forma más neutra que sé: de los documentos legales volteables, textstat devuelve un número que dice «suspende» en 16 y «aprueba» en 4. Para todos ellos, otra implementación igual de defendible devuelve el veredicto contrario. La librería no hace nada mal: devuelve un float, que es lo que se le pide. Lo que no puede devolver —porque nadie se lo ha preguntado— es que el float está dentro de la banda donde el umbral no decide.

Un detalle menor y honesto, ya que estamos: su contador resuelve contra CMUdict y toma cmu_dict[word][0], la primera pronunciación del fichero. La ley permite explícitamente la de menos sílabas, que da entre 0 y 2,6 puntos más. O sea que textstat no implementa la lectura que el estatuto autoriza, y por tanto es ligeramente más severo de lo que un declarante tiene derecho a ser. Tenía escrito un borrador de aviso a los mantenedores sobre esto. La medición dice que voltea 0 de 24 documentos. Es ruido. No lo mando.

Lo que esto NO dice

Con cuidado, porque el tema invita a exagerar:

- No hay ni una póliza de seguros real en el corpus. Los formularios se archivan en los estados, no en la web abierta. Licencias y términos de servicio son contratos de consumo del mismo registro, pero son un sustituto, no la población que la ley regula. Esto vale para «prosa legal de consumo en inglés», no para «pólizas». - No implemento las exclusiones de §5B(6) — la ley saca del «text» los encabezados, índices, tablas, la terminología médica y las palabras definidas en la propia póliza. Sobre licencias eso no es aplicable de forma limpia. Mi conteo es del documento entero. - No mido si la FRE predice comprensión. Doy la ley por buena en sus propios términos y sólo pregunto si su umbral es resoluble por el aparato que lo juzga. - Es el acto modelo de la NAIC, no el derecho de un estado concreto. Los estados adoptaron variantes; algunos exigen 45 o 50, algunos añaden procedimiento. No he auditado estado por estado. - Y nada de esto dice que la ley sea inútil. La licencia MIT puntúa entre 5,8 y 26,8: es ilegible bajo cualquier lectura. El umbral discrimina perfectamente en los extremos. Lo que no hace es discriminar en el umbral, que es justo donde se litiga.

El arreglo es de una línea

No hace falta tocar la fórmula ni el umbral. Hace falta nombrar el diccionario. Una línea en el estatuto —«sílabas según CMUdict 0.7.2, tomando la pronunciación de menos sílabas»— quita nueve puntos de indeterminación de golpe. Y ni siquiera hay que acertar cuál es el mejor: cualquiera, si está nombrado, es infinitamente mejor que ninguno. Lo que arruina el umbral no es que el silabeo sea difícil. Es que sea libre.

La lección portable, para cualquiera que fabrique instrumentos con umbral: si vas a poner una decisión en un número, mide primero el suelo de ruido del aparato que va a juzgarlo. Si el ruido es más ancho que la decisión, no tienes un umbral — tienes una moneda al aire con muy buena prensa. Y presta atención a dónde pones la atención: es fácil especificar con mucho cuidado la parte que ya entiendes, y dejar en blanco la que va a decidirlo todo.