Prezados, bom momento!
Estou com um problema na resolução do último desafio do curso. Notei que a quantidade de avaliações contadas está diferente da quantidade de avaliações do arquivo txt. Para contextualizar melhor, segue abaixo a forma como abordei o problema:
- Etapa 01: Subir o TXT
import pandas as pd
colunas = ["user_id", "username", "resenha"]
df_desafio_final = pd.read_csv("Resenhas_App_ChatGPT.txt", sep='$', header=None, names=colunas, encoding='utf-8')
- Print diagnóstico para checar quantidade de linhas do dataframe
print(f"Linhas lidas do arquivo: {len(df_desafio_final)}")
- Etapa 02: Chamar o LLM para traduzir e subir uma avaliação
from openai import OpenAI
import json
- Configurar cliente
client_openai = OpenAI(
base_url="http://127.0.0.1:1234/v1",
api_key="lm-studio"
)
resposta_do_llm = client_openai.responses.create(
model="google/gemma-3-1b",
input=f"""Você é uma analista de dados. Vou te passar um dataframe contendo uma lista de resenhas de um aplicativo.
Você deverá criar uma lista em texto em formato JSON, seguindo o modelo abaixo, sendo que cada objeto na lista deve conter as seguintes quatro chaves:
- 'username': o valor da coluna 'username' do dataframe
- 'resenha-ori': o valor da coluna 'resenha' do dataframe
- 'resenha-pt': o valor da coluna 'resenha' do dataframe, traduzido para o português;
- 'avaliacao': a avaliação atribuída à resenha, que pode ser 'Positiva', 'Neutra' ou 'Negativa' (apenas uma das opções)
Segue abaixo exemplo de uma resenha fictícia, para que você entenda o formato do JSON que deverá ser gerado:
{{'username': 'ftsdan',
'resenha-ori': 'I did not find anything noteworthy about the app.',
'resenha-pt': 'Não encontrei nada de notável sobre o app.',
'avaliacao': 'Neutra'}}
Importante, retornar APENAS a lista em texto em formato JSON.
Aqui estão as resenhas do dataframe:
{df_desafio_final.to_dict(orient='records')}
"""
)
- Etapa 03: Transformar resposta em lista de dicionários Python
json_resposta = (resposta_do_llm.output_text)
json_resposta_limpo = json_resposta.replace("```json", "").replace("```", "")
dicionario_resposta = json.loads(json_resposta_limpo)
- Etapa 04: Contar avaliações através de função
def contar_avaliacoes(dicionario_resposta):
contagem = {"Positiva": 0, "Neutra": 0, "Negativa": 0}
for resenha in dicionario_resposta:
avaliacao = resenha.get("avaliacao")
if avaliacao in contagem:
contagem[avaliacao] += 1
return contagem
contagem_avaliacoes = contar_avaliacoes(dicionario_resposta)
print(contagem_avaliacoes)
print(f"Linhas lidas de resposta: {len(dicionario_resposta)}")
print(json_resposta_limpo)
O resultado final deste código é o seguinte:
Linhas lidas do arquivo: 24 (Check inicial do dataframe)
{'Positiva': 7, 'Neutra': 9, 'Negativa': 3} (Contagem das avaliações)
Linhas lidas de resposta: 20 (Contagem de linhas lidas do dicionário de respostas)
Notem que por algum motivo, o prompt não está fazendo a varredura completa nas resenhas presentes no dataframe.
Preciso de uma ajuda para garantir que todo o arquivo seja avaliado pelo LLM (a IA do VSCode sugeriu segmentar as avaliações em batches, mas me parece uma solução complexa demais para este problema, por isso vim recorrer à vocês).