guicybercode's picture
Upload app.py
7e35e16 verified
Raw History Blame Contribute Delete
3.27 kB
import spaces
@spaces.GPU
def _zerogpu_noop():
# ZeroGPU exige uma função decorada; o app roda todo em CPU.
return None
"""Explorador da amostra rotulada de nl2bash-pt (200 linhas, seed 42)."""
from pathlib import Path
import gradio as gr
import pandas as pd
DADOS = Path(__file__).parent / "dados"
FONTES = ["nl2bash", "nl2sh-alfa"]
CLASSES = ["OK", "ERRO_LEVE", "ERRO_GRAVE"]
COLUNAS = {
"en": "Original (inglês)",
"pt": "Tradução",
"comando": "Comando",
"classe": "Classe",
}
def carregar():
return pd.read_csv(DADOS / "amostra_rotulada.csv", dtype=str, keep_default_na=False)
def numeros_do_arquivo():
"""Linhas de resultados.txt até antes das colunas de validação, sem alteração."""
linhas = (DADOS / "resultados.txt").read_text(encoding="utf-8").splitlines()
fim = next(i for i, l in enumerate(linhas) if l.startswith("is_valid="))
return "\n".join(linhas[:fim])
def filtrar(fontes, classes, df=None):
d = carregar() if df is None else df
d = d[d["fonte"].isin(fontes) & d["classe"].isin(classes)]
return d[list(COLUNAS)].rename(columns=COLUNAS).reset_index(drop=True)
def contagem(fontes, classes):
return f"{len(filtrar(fontes, classes))} de 200 linhas"
TOPO = """
# nl2bash-pt: explorador da medição de erro de tradução
Abaixo, o texto de `resultados.txt` exatamente como saiu da análise. Os percentuais e os
intervalos de Wilson (IC 95%) usam ponto decimal, como no arquivo. Em resumo: 52 de 200 linhas
(26,0%) com erro grave, IC 95% Wilson de 20,4% a 32,5%.
"""
METODO = """
## Como a medição foi feita
- A amostra tem 200 linhas aleatórias do split train, com seed 42 (`random_state=42`).
- Os rótulos (OK, ERRO_LEVE, ERRO_GRAVE) são automatizados, sem revisão linha a linha.
- A fronteira entre erro leve e erro grave é subjetiva. Traduzir literais de arquivo, caminho,
string ou flag foi contado como grave, e um critério mais brando reduziria a taxa de grave.
- A amostra não diz nada sobre cada linha individual: o rótulo de uma linha pode estar errado.
## Licença e créditos
Licença do dataset: cc-by-4.0 (linhas de tldr-pages). Avisos MIT de NL2Bash e NL2SH-ALFA mantidos.
- NL2Bash (Lin et al., LREC 2018): https://github.com/TellinaTool/nl2bash. Dados em MIT.
- NL2SH-ALFA (MIT-ALFA, NAACL 2025): https://huggingface.co/datasets/westenfelder/NL2SH-ALFA.
Licença MIT declarada. O NL2SH-ALFA agrega fontes com licenças diversas, entre elas
tldr-pages (CC BY 4.0, com atribuição obrigatória) e fontes sem licença declarada. Não foi
possível determinar quais linhas vieram de qual fonte.
"""
with gr.Blocks(title="nl2bash-pt: explorador") as demo:
gr.Markdown(TOPO)
gr.Code(value=numeros_do_arquivo(), language=None, interactive=False, label="resultados.txt")
gr.Markdown(METODO)
with gr.Row():
f = gr.CheckboxGroup(FONTES, value=FONTES, label="Fonte")
c = gr.CheckboxGroup(CLASSES, value=CLASSES, label="Classe")
n = gr.Markdown(contagem(FONTES, CLASSES))
t = gr.Dataframe(value=filtrar(FONTES, CLASSES), interactive=False, wrap=True)
for comp in (f, c):
comp.change(filtrar, [f, c], t)
comp.change(contagem, [f, c], n)
if __name__ == "__main__":
demo.launch()