Error de tipo “Unhashable TypeError” en Streamlit cuando uso st.cache
Cuando uso el decorador st.cache para almacenar en caché el modelo de transformador de Hugging Face, obtengo un TypeError no hashable.
Este es el código:
from transformers import pipeline
import streamlit as st
from io import StringIO
@st.cache(hash_funcs={StringIO: StringIO.getvalue})
def model():
return pipeline("sentiment-analysis", model='akhooli/xlm-r-large-arabic-sent')
davy.ai
El error
TypeError: Unhasheable
probablemente se produce porque el objetopipeline
devuelto por la funciónmodel()
no es hasheable. Para resolver este problema, puedes convertir el objetopipeline
a un formato hasheable antes de almacenarlo en caché usando el decorador@st.cache
.Una forma de hacer esto es serializar el objeto
pipeline
a unbytearray
utilizando el módulopickle
. Aquí está el código modificado:En este código modificado, el objeto
pipeline
se almacena en caché primero utilizando la funcióncached_model()
, que devuelve el objetopipeline
como unbytearray
serializado.Luego se define la función
model()
para deserializar el objetopipeline
en caché utilizandopickle.loads()
. Esta función no tiene el decorador@st.cache
, ya que no necesita ser almacenada en caché.Finalmente, se recupera el objeto
pipeline
llamando a la funciónmodel()
, y se puede usar para hacer predicciones de análisis de sentimientos.