Cristian Cardellino
Notes of a Computer Scientist
Featured
Spanish Billion Words Corpus and Embeddings
So, a year and a half since my last post. Even if I kind of update my page to be a blog from the root, shame on me.
This blog post however is not something related to what I did in the previous ones. I promise someday I will continue with my Python to Scala tutorials, but for now you’ll have to settle with this.
Since I am a PhD Student in Natural Language Processing and a native speaker of the Spanish language, I like to do my research in this language. The problem is that Spanish, unlike English, doesn’t...
Regular
HuggingFace: IA Colaborativa
Esta charla la di 3 veces en el año, pero sólo recientemente pude grabarla. La charla fue originalmente pensada en el marco de la FLISoL Córdoba 2023. Pero por un problema técnico no pudo ser grabada. Luego la volví a dar en el marco del XI CIAI, y en ese evento no se grababan las charlas. Finalmente pude darla la semana pasada en el marco del Mes de la Ciencia 2023, organizada por CEIMAF, en FaMAFyC, y pudimos grabarla y esta vez sí subirla.
En la charla hablo de la librería Hugging Face y explico un poco la tecnología que hay detrás de los modelos de lenguaje que son el motor de tecnologías como ChatGPT. La charla cuenta de slides y un video.
Nuevos Horizontes
Esta semana se hicieron efectivas mis renuncias a ambos trabajos que estaba realizando. Por un lado, mi trabajo full time en Mercado Libre como investigador. Oportunidad brindada por Rafael Carrascosa a fines del año 2019 y que comencé en plena pandemia en Abril del 2020. Por otra parte hice la renuncia oficial a mi cargo como profesor de la Facultad de Matemáticas, Astronomía, Física y Computación de la Universidad Nacional de Córdoba. En los hechos en realidad hacía 6 meses que estaba de licencia (el máximo período permitido por motivos personales). Con esto termina el trabajo que más tiempo llevo haciendo para una misma entidad (en este caso la UNC), prácticamente 10 años desde que empecé siendo ayudante de alumnos en 2011.
La razón por la cuál renuncié a estos trabajos tiene que ver con el título de este artículo. El primero de Septiembre del 2023 arrancaré un nuevo desafío personal y profesional al aceptar un postdoc en Europa. En la Université Côte d’Azur ubicada en la Riviera Francesa, en la zona de Sophia Antipolis. Y si bien, quizás le estoy dando más jerarquía que lo que realmente es (un postdoc no es un título, es un trabajo en la academia después de todo), lo veo como el primer paso a una nueva vida en el viejo continente, algo que me debo a mi yo mismo desde los 12 años.
Visidata: Un CLI para un spreadsheet
En este post haré una recomendación de una herramienta para visualizar datos usando directamente la consola: VisiData es un CLI open source para poder visualizar datos mediante un spreadsheet.
A la hora de leer archivos csv (u otros tipos de archivos de datos si vamos al
caso) es muy común usar librerías como pandas
, o
a veces tener que recurrir a scripts con comandos de bash
(como sed
, awk
,
sort
, uniq
etc.) para hacer summaries y demás. Visidata viene a dar una
interfaz ligera por terminal para esto.
Para abrir un csv basta con instalar visidata (pip install visidata
) y usar el
comando: vd path/to/file.csv
(lee otros archivos también, incluso lee
directamente archivos comprimidos via gzip).
El spreadsheet es por consola, se puede mover con las flechas de dirección o con
h
, j
, k
, l
(i.e. Vim style). Se sale con gq
(o Ctrl+Q
para hacer
force quit). Y se puede acceder al help con Ctrl+H
. Con Alt+<letra
subrayada>
se accede al menu superior.
Con [
y ]
(seleccionando una columna) se hace un ordenamiento de esa columna
(por defecto las columnas son de texto, se las puede convertir en numéricas con
#
o en flotantes con %
).
Seleccionando una columna y haciendo Shift+F
se hace una agrupación de dicha
columna y un conteo de valores únicos, devolviendo un histograma y un
porcentaje.
Con Shift+I
se puede hacer un summary de todas las columnas (similar al
describe()
de un dataframe de Pandas.
Con Shift+S
se muestra un listado de todas las hojas (y/o subhojas creadas por
comandos como el Shift+F
) abiertas, para moverse entre estas. Para volver a la
hoja anterior es con Ctrl+^
.
Estos son algunos de los casos para que uso visidata. Existen muchas más opciones para hacer incluso cosas más complejas, pero en esos casos ya derivo a pandas directamente. Sin embargo, para un scan rápido, visidata probó ser muy efectivo.
Python: Herramientas útiles
En este post haré un listado de herramientas útiles para Python. Pensado especialmente para Jr. (o incluso Ssrs) que estén por hacer una entrevista en Python. Estos son sin ningún orden en particular, simplemente son algunas de las herramientas que más suelo utilizar:
collections
: Una librería con estructuras de datos de colecciones, más allá de
diccionarios o listas, super útil para muchas cosas (diccionarios ordenados,
diccionarios con valores por defecto, Counter
).
itertools
: Una de las “desventajas” de Python (por algo como C o Java) es
que es “más lento”. Y es verdad, no vas a tener el mismo poder de optimización.
Pero a la hora de iterar, itertools ofrece varias cosas mucho más optimizadas
que hacerla “a mano” en puro código Python.
operator
: Módulo con varias funciones y operadores para trabajar de manera
más eficiente (un ejemplo clásico es itemgetter para obtener valores de un
diccionario u algún otro tipo de colección).
functools
: Higher order programming en Python (funciones parciales, reduce
y varias cosas más para lidiar c*on funciones en alto orden).
contextlib
: Una librería para trabajar con “Context Managers” (i.e. los
bloques with
), si no saben lo que es un Context Manager, les recomiendo que lo
averigüen.
requests
: Una librería
simple para trabajar con requests HTTP (muy útil para construir e interactuar
con APIs).
iPython: Una consola interactiva para hacer más ameno el REPL de Python. En general viene mucho de la mano de Jupyter
joblib
: Para realizar
“Embarrassingly parallel for loops”. Si bien Python cuenta con su módulo para
hacer multiprocesamiento, en lo personal prefiero joblib por su simpleza.
lxml
/
BeautifulSoup:
Un par de librerías eficientes para el manejo de XML/HMTL (en lo personal
prefiero lxml para XML y BeautifulSoup para HMTL, pero son intercambiables en
muchos aspectos).
pytest
: Una librería excelente y muy completa
para la escritura de tests unitarios.
BASH: 10 (+1) comandos útiles
En este post haré un listado de los 10 (+1 mención especial) comandos más útiles, a mi criterio, que BASH tiene para ofrecer. El orden es completamente arbitrario y depende de mis preferencias, no tiene nada que ver con que tan usado o no sea el comando (muchos de los comandos más comunes no están). Empezamos:
Mención especial: awk
, no lo uso tanto como antes (suelo directamente usar
combinaciones de cut
y otros comandos más simples), pero awk
es
extremadamente poderoso a la hora de manejar flujos de texto.
10. pkill
: Un comando muy útil (sobre todo con la opción -f
) para matar
procesos que se colgaron sin tener que andar buscando el PID.
9. xclip
: Copy/Paste desde la línea de comandos. Inspirados de
pbcopy
/pbpaste
de OSX. De echo, tengo los alias: pbcopy=xclip -selection
clipboard
y pbpaste=xclip -out -selection clipboard
.
8. xargs
: Convertir inputs desde el STDIN en comandos. Muy útil junto con uno
comando que presentaré más adelante en la lista.
7. grep
: No creo que este necesite presentación. Quizás uno de los comandos
más útiles del entorno linux cuando se trabaja con texto.
6. sed
: Otro viejo conocido de linux, para edición de texto en flujo
(“stream”). Herramienta excelente para todo tipo de ediciones en pipeline.
5. curl
: Si bien hay opciones mucho más modernas, como http
(https://httpie.io) hay algo en la simplicidad de curl
de mandar directamente
al STDOUT cualquier response de HTTP que lo hace super versátil.
4. zcat
: Algo que empecé a utilizar, muy a mi pesar, hace relativamente poco.
La simplicidad de poder lanzar directamente al STDOUT sin tener que esperar que
se descomprima el archivo por completo es maravillosa.
3. jq
(https://stedolan.github.io/jq/): Un sed
para JSON
, muy poderoso y
versátil, en especial cuando se usa junto con zcat
y head
para inspeccionar
archivos de “JSONLines” o JSON APIs que provengan de curl
/http
.
2. rsync
: Una “Swiss Army Knife” a la hora de mantener sincronicidad entre
directorios (incluso remotos), probablemente mejor definida como una “Double
Edge Swiss Army Knife” porque si no aprendés a usarlo bien podés hacer desastre.
1. find
: Probablemente el mejor comando. Super versátil, hace de todo (y
tiene su learning curve también), pero a la hora de manejar archivos (no sólo
buscar sino también manipular) este comando mágico (sumado a xargs
) tiene un
sinfin de usos.