rvian
Merge branch 'main' of https://huggingface.co/spaces/rvian/traduzir-dataset
8f49090
import streamlit as st
from transformers import pipeline
import pandas as pd
modelos_opcao =[
"Narrativa/mbart-large-50-finetuned-opus-en-pt-translation",
# "unicamp-dl/translation-en-pt-t5" # desempenho inferior ao MBART (porém, mais rápido)
]
# Carrega o modelo
def carregar_modelo_e_tokenizador_mbart(modelo):
# https://huggingface.co/Narrativa/mbart-large-50-finetuned-opus-en-pt-translation
from transformers import MBart50TokenizerFast, MBartForConditionalGeneration
st.write(f'Carregando modelo {modelo}')
tokenizer = MBart50TokenizerFast.from_pretrained(modelo)
model = MBartForConditionalGeneration.from_pretrained(modelo)
tokenizer.src_lang = 'en_XX'
return model, tokenizer
# TODO:batch?
def traduzir_en_pt(text, modelo, tokenizador):
inputs = tokenizador(text, return_tensors='pt')
input_ids = inputs.input_ids
attention_mask = inputs.attention_mask
output = modelo.generate(input_ids, attention_mask=attention_mask, forced_bos_token_id=tokenizador.lang_code_to_id['pt_XX'])
return tokenizador.decode(output[0], skip_special_tokens=True)
## streamlit ##
def carregar_dataset():
dataset = st.file_uploader("(coluna a ser traduzida deve ser nomeada como 'texto')",type="csv")
if dataset is not None:
return pd.read_csv(dataset)
def mostrar_dataset():
if dataset is not None:
st.write('🎲 Dataset carregado com sucesso!')
with st.expander("Dataset:"):
st.table(dataset)
def carregar_modelo(modelos_opcao):
modelo_selecionado = st.selectbox('Escolha um modelo', modelos_opcao)
if modelo_selecionado is not None:
model, tokenizer = carregar_modelo_e_tokenizador_mbart(modelo_selecionado)
st.write(f"🎰 Modelo {modelo_selecionado} carregado com sucesso! 🔥")
return model, tokenizer
def traduzir_dataset(dataset, _modelo, _tokenizador):
qtde_linhas_traduzir = st.slider('Quantidade de linhas a serem traduzidas', 1, len(dataset), 50)
if st.button(f"Traduzir {qtde_linhas_traduzir} linhas"):
for i in range(qtde_linhas_traduzir):
st.write(f'🔡 Traduzindo linha {i+1}...')
st.write(f'Texto: {dataset.iloc[i]["texto"]}')
texto_traduzido= traduzir_en_pt(dataset.iloc[i]["texto"], _modelo, _tokenizador)
st.write(f'Tradução: {texto_traduzido}')
# adiciona traducao em nova coluna dataset
dataset["traduzido"][i]= texto_traduzido
st.write("Traduzido 👍")
def resultado():
with st.expander():
st.write(dataset)
st.download_button(label='Baixar dataset', data=dataset.to_csv(index=False))
st.write("Fim 👍")
###################
#### interface ####
###################
# Cabeçalho
st.title('Tradutor de datasets (inglês para português)')
# Carrega dataset
dataset = carregar_dataset()
if dataset is not None:
mostrar_dataset()
if st.button("Carregar modelo"):
_modelo, _tokenizador = carregar_modelo(modelos_opcao)
print(f"{_modelo.name_or_path} carregado")
if st.button("Traduzir dataset") and _modelo is not None:
traduzir_dataset(dataset, _modelo, _tokenizador)
resultado()