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 en tiempo de ejecución: El tamaño ampliado del tensor (585) debe coincidir con el tamaño existente (514) en la dimensión no singular 1.

Quiero predecir el sentimiento de miles de oraciones utilizando Huggingface.

from transformers import pipeline
model_path = "cardiffnlp/twitter-xlm-roberta-base-sentiment"
pipe = pipeline("sentiment-analysis", model=model_path, tokenizer=model_path)

from datasets import load_dataset

data_files = {
    "train": "/content/data/customer.csv"
}

dataset = load_dataset("csv", data_files=data_files)

dataset = dataset.map(lambda examples: dict(pipe(examples['text'])))

# but I am getting the following error.
# RuntimeError: The expanded size of the tensor (585) must match the existing size (514) at non-singleton dimension 1.  Target sizes: [1, 585].  Tensor sizes: [1, 514]

Esta publicación sugiere una forma de solucionar el problema, pero no dice cómo solucionarlo en el pipeline.
https://stackoverflow.com/questions/64320883/the-size-of-tensor-a-707-must-match-the-size-of-tensor-b-512-at-non-singleto

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el tamaño del tensor pasado al modelo no coincide con el tamaño esperado. En este caso, el tamaño esperado es [1, 585], pero el tamaño del tensor es [1, 514]. Esto significa que el texto de entrada es demasiado largo para que el modelo lo maneje.

    Una forma de solucionar este problema es dividir el texto de entrada en fragmentos más pequeños y procesarlos por separado. Puedes hacer esto agregando una función que divida el texto de entrada en fragmentos más pequeños y los procese utilizando la canalización.

    Aquí tienes un ejemplo de cómo hacerlo:

    from transformers import pipeline
    from datasets import load_dataset
    
    model_path = "cardiffnlp/twitter-xlm-roberta-base-sentiment"
    pipe = pipeline("sentiment-analysis", model=model_path, tokenizer=model_path)
    
    def process_text(text):
        chunks = [text[i:i+512] for i in range(0, len(text), 512)]
        results = []
        for chunk in chunks:
            result = pipe(chunk)[0]
            results.append(result)
        return results
    
    data_files = {
        "train": "/content/data_customer.csv"
    }
    
    dataset = load_dataset("csv", data_files=data_files)
    
    dataset = dataset.map(lambda examples: {"sentiment": process_text(examples["text"])})
    
    

    Este código define una función process_text que divide el texto de entrada en fragmentos de 512 caracteres y los procesa utilizando la canalización. Luego, asigna esta función al campo text del conjunto de datos y almacena los resultados en un nuevo campo llamado sentiment. Cada campo de sentiment contiene una lista de resultados de sentimiento para cada fragmento de texto.

Comments are closed.