Обучение setfit с использованием фрейма данных pandas

Я хотел бы обучить классификатор нулевого выстрела на аннотированном выборочном наборе данных.

Я следую некоторым руководствам, но, поскольку все они используют свои собственные данные и одну и ту же заранее подготовленную модель, я пытаюсь подтвердить: это лучший подход?

      Data example: 

import pandas as pd
from datasets import Dataset
    
# Sample feedback data, it will have 8 samples per label
feedback_dict = [
    {'text': 'The product is great and works well.', 'label': 'Product Performance'},
    {'text': 'I love the design of the product.', 'label': 'Product Design'},
    {'text': 'The product is difficult to use.', 'label': 'Usability'},
    {'text': 'The customer service was very helpful.', 'label': 'Customer Service'},
    {'text': 'The product was delivered on time.', 'label': 'Delivery Time'}
]

# Create a DataFrame with the feedback data
df = pd.DataFrame(feedback_dict)

# convert to Dataset format
df = Dataset.from_pandas(df)

Имея предыдущий формат данных, это подход для точной настройки модели:

      from setfit import SetFitModel, SetFitTrainer

# Select a model
model = SetFitModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")

# training with Setfit
trainer = SetFitTrainer(
    model=model,
    train_dataset=df, # to keep the code simple I do not create the df_train
    eval_dataset=df, # to keep the code simple I do not create the df_eval
    column_mapping={"text": "text", "label": "label"} 
)

trainer.train()

Проблема здесь в том, что процесс никогда не заканчивается после более чем 500 часов работы на ноутбуке, а набор данных состоит всего из 88 записей с 11 метками.

2 ответа

Я попытался запустить пример, который вы разместили в Google Colab, на запуск обучения ушло 37 секунд.

Вот ваш код с некоторыми изменениями, чтобы он работал на Colab:

      ### Install libraries
%%capture
!pip install datasets setfit

После установки библиотек запустите следующий код:

      ### Import dataset
import pandas as pd
from datasets import Dataset
# Sample feedback data, it will have 8 samples per label
feedback_dict = [
    {'text': 'The product is great and works well.', 'label': 'Product Performance'},
    {'text': 'I love the design of the product.', 'label': 'Product Design'},
    {'text': 'The product is difficult to use.', 'label': 'Usability'},
    {'text': 'The customer service was very helpful.', 'label': 'Customer Service'},
    {'text': 'The product was delivered on time.', 'label': 'Delivery Time'}
]
# Create a DataFrame with the feedback data
df = pd.DataFrame(feedback_dict)
# convert to Dataset format
df = Dataset.from_pandas(df)

### Run training
from setfit import SetFitModel, SetFitTrainer
# Select a model
model = SetFitModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")
# training with Setfit
trainer = SetFitTrainer(
    model=model,
    train_dataset=df, # to keep the code simple I do not create the df_train
    eval_dataset=df, # to keep the code simple I do not create the df_eval
    column_mapping={"text": "text", "label": "label"} 
)
trainer.train()

И, наконец, вы можете загрузить обученную модель на диск, а затем вручную загрузить ее на свой компьютер.

      ### Download model to drive
from google.colab import drive
drive.mount('/content/drive')
trainer.model._save_pretrained('/content/drive/path/to/target/folder')

Если ваша главная проблема — время тренировки, это должно решить проблему.

В вашем коде все в порядке, но вам нужна более мощная машина, возможно, с графическим процессором для обучения Трансформеров. Они не для бедных :-) Попробуйте Colab, Kaggle бесплатно или на частной виртуальной машине, если у вас есть возможность. Чтобы создать несколько эпох, требуется несколько секунд .

Я делюсь блокнотом Colab здесь , и вот как выглядят производительность и ресурсы:

Я бы посоветовал использовать бесплатные ноутбуки Kaggle с графическим процессором , которые медленнее, чем Colab (по моему опыту, примерно в 4 раза), но более щедры с точки зрения доступности и ограничений по времени. Вот также блокнот Kaggle для сравнения и игры.

Удачных тренировок на графическом процессоре!

Другие вопросы по тегам