#huggingface-transformers #streamlit
#huggingface-трансформеры #потоковая
Вопрос:
когда я использую декоратор st.cache для обналичивания модели трансформатора с обнимающимся лицом, я получаю
Ошибка, не вызывающая хэширования
это код
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')
Ответ №1:
Это сработало для меня:
from transformers import pipeline
import tokenizers
import streamlit as st
import copy
@st.cache(hash_funcs={tokenizers.Tokenizer: lambda _: None, tokenizers.AddedToken: lambda _: None})
def get_model() :
return pipeline("sentiment-analysis", model='akhooli/xlm-r-large-arabic-sent')
input = st.text_input('Text')
bt = st.button("Get Sentiment Analysis")
if bt and input:
model = copy.deepcopy(get_model())
st.write(model(input))
Примечание 1:
вызов конвейера с вводом model(input)
изменяет модель, и мы не должны изменять кэшированное значение, поэтому нам нужно скопировать модель и запустить ее в копии.
Примечание 2: при первом запуске модель будет загружена с помощью get_model
функции, при следующем запуске будет использоваться chace.
Примечание 3: Вы можете прочитать больше о расширенном кэшировании в stremlit в их документации.
Примеры вывода:
Комментарии:
1. это тоже сработало, я попробовал allow_output_mutation = True, и это тоже сработало
Ответ №2:
после поиска в разделе проблем в потоковом репозитории
я обнаружил, что аргумент хеширования не требуется, просто нужно передать этот аргумент
allow_output_mutation = True