Retokenizando con spaCy

Para los que no están en contexto, spaCy es una librería de Python que provee funciones de PLN (procesamiento de lenguage natural, “NLP” en inglés) de una forma por demás fácil en comparación con, por ejemplo, NLTK.

Aunque conocía de su existencia, no había trabajado con spaCy hasta ahora que lo probé en el proyecto que tengo entre manos en el trabajo. Me era más familiar NLTK a pesar de haberlo usando en su mayoría en la versión 1 (van en la 3.5 al momento de escribir esto), pero para varias tareas spaCy es mucho más “directo”. Digamos que NLTK te da mucho poder, pero hay que ser mucho más específico al momento de manejarlo. En cambio, spaCy realiza muchas más acciones con menos interacción, lo cual puede ser bueno o extremo dependiendo del objetivo.

Lo interesante aquí para mí es nlp.pipeline. Una simple función, que por lo general la llaman nlp (pero uno puede definir el nombre),  aplica una serie de algoritmos de análisis y reconocimiento, pero antes realiza el proceso de “tokenizar” el texto, es decir, dividirlo en entidades llamadas “tokens”, que son secuencias de caracteres agrupados en unidades semánticas. Es fácil irse con la finta de que todos los tokens son palabras, pero no es así. Existen además diferentes maneras de tokenizar, y dependiendo de la usada es el resultado que se tendrá. Por ejemplo, una de las maneras más fácil de tokenizar es agrupando caracteres en un texto separado por espacios, como este post, por ejemplo. Obviamente una tokenización así no serviría en idiomas como el japonés, donde las palabras no están separadas por espacios, pero ésa es otra historia. También es necesario destacar que separar por espacios tampoco es una forma ideal de tokenizar, incluso lenguajes como inglés, pero en sí no se puede dar una respuesta correcta sin saber cuál es el objetivo final. De eso depende la forma de crear tokens.

En el caso del análisis que estaba realizando (en inglés), requería manejar palabras como “well-known”, “state-of-the-art”, es decir, palabras compuestas por múltiples otras palabras, unidas por un guión (entre otros casos que no necesito nombrar), como un token. El problema es que el tokenizer de spaCy separa las palabras también por guiones, y estos a su vez forman tokens. Por ejemplo:

“well-known”

es tokenizado como

“well”, “-“, “known”

Cada elemento es un token, así que contiene más que el simple texto: su función gramatical, su forma base, entre otras cosas, todo gracias a que spaCy ejecuta las funciones de reconocimiento y análisis después de la tokenización, pero todo sucede dentro del mismo pipeline. Además, como cada token es identificado por separado, casos como el de “state-of-the-art” deben ser tratados ya que la palabra completa es un adjetivo, pero “art” por sí mismo es correctamente identificado como sustantivo. Algo se tiene que hacer.

Continue reading “Retokenizando con spaCy”




La vida continúa

Vayamos al grano: ya estoy viejo. Pero eso no es noticia nueva. ¿Crisis de los 40? Creo que llevo ya 2 años con ella. ¿Problemas dentro y fuera del trabajo? Claro, como todos los demás (dichosos aquellos que no los tengan, claro).

Y sin embargo, aquí sigo.

Últimamente he tenido esos ratos melancólicos que te hacen pensar si todo realmente vale la pena, y si hay algo en el futuro que amerite tener que pasar por tantas cosas. Nah, nada de pensamientos suicidas; eso fue cosa de mis años pubertos. Más bien ratos de reflexión, en los que piensas si tu ideología de siempre tener un sueño que perseguir dará frutos a largo plazo. Y la respuesta es obvia: ¡claro que sí!

No obstante, eso no quiere decir que no haya ratos de debilidad, desesperación, e incluso histeria… y la situación con el coronavirus de plano no ayuda.

Mi jefe actual me platicaba hace ya muchos meses: “Cuando tienes a tu segundo hijo, te conviertes en un superhombre”. Y tiene razón. Sí, ya veo venir a quienes tienen 3 o más a decirme “novato”, pero cada familia y cada situación es difícil. No, no estoy llorando porque mi situación sea pesada, pero la verdad no sé de dónde salen fuerzas para levantarme diario a enfrentar al mundo. De ahí que, como he comentado en repetidas ocasiones, mis respetos a todos y cada uno(a) de los(las) padres(madres) de familia que a diario le echan los kilos para sacar a los chilpayates adelante, y todavía se hacen tiempo para tener tiempo de calidad con ellos. A todos, sin importar su clase social, raza, chamba, creencia religiosa, etc. Neta: dense palmaditas en la espalda porque están haciendo una labor titánica, que rara vez es reconocida (imaginen a sus hijos contestándoles de mala gana, gritándoles, rezongando, etc., etc.). Yo no sé cómo mi madre me aguantó cuando era niño.

Veo la situación en Japón:

  • Familias “típicas” donde el hombre promedio no es nada más que un proveedor y que rara vez pasa tiempo con los hijos, la esposa es ama de casa que no pela al marido más que cuando necesita más dinero (recordar que en Japón se acostumbra que el marido le dé todo el sueldo a la esposa y ella es la que administra todo el dinero) y que los niños no vean al papá más que unas contadas veces a la semana.
  • Familias en donde ambos padres trabajan (lo que se conoce como 共働き, “tomo bataraki”, mientras que los niños están en guarderías.
  • Familias en donde el padre o la madre simplemente “fue por cigarros” y nunca regresó, y es uno solo el que tiene que sacar adelante a la familia.
  • “Familias” que se hicieron por la fuerza (léase, se “embarazaron”) y de plano no se aguantaron y se separaron, o aquellas a los que el niño les molestaba tanto que terminaron abandonándolo, o peor aún, matándolo (sí, hay muchos casos así). O incluso aquellos padres de familia que pecan de irresponsabilidad y eso cuesta vidas inocentes.

Probablemente no suene tan diferente a otros países. Y sin embargo una vez que eres parte de esta sociedad se siente la diferencia cultural en cada uno de los casos anteriores. Diría un buen amigo mexicano que “el ojo que todo lo ve en Japón” (o sea, el “qué dirán”) pesa un montón por acá

Me he puesto a pensar mucho en cuál era la situación en mi familia cuando yo era chico, digamos que cuando tenía entre 5 y 10 años, y cuál es mi situación actual con mi hijo mayor teniendo exactamente 5 años ahora. Dejen de lado cómo ha cambiado el mundo (que sí tiene que ver); la experiencia que uno tiene y quiere aprovechar para criar a sus hijos y la falta de pericia que se hace evidente cuando lo que creías que funcionaba para reforzar los lazos padre-hijo no da frutos o termina con un resultado totalmente contrario al esperado.

Continue reading “La vida continúa”