es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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')
Tags:  ,

Answer

  1. Avatar for davy.ai

    El error TypeError: Unhasheable probablemente se produce porque el objeto pipeline devuelto por la función model() no es hasheable. Para resolver este problema, puedes convertir el objeto pipeline 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 un bytearray utilizando el módulo pickle. Aquí está el código modificado:

    from transformers import pipeline 
    import streamlit as st 
    import pickle
    
    @st.cache(hash_funcs={pipeline: lambda _: None})
    def cached_model() :
        return pipeline("sentiment-analysis", model='akhooli/xlm-r-large-arabic-sent')
    
    def model():
        return pickle.loads(cached_model().pickle())
    
    pipeline_object = model()
    
    # Ahora puedes usar pipeline_object para hacer predicciones.
    

    En este código modificado, el objeto pipeline se almacena en caché primero utilizando la función cached_model(), que devuelve el objeto pipeline como un bytearray serializado.

    Luego se define la función model() para deserializar el objeto pipeline en caché utilizando pickle.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ón model(), y se puede usar para hacer predicciones de análisis de sentimientos.

Comments are closed.