/ Модель

Характеристики

Контекст
514 токенов
Параметры
138 млн
Лицензия
Apache 2.0
Архитектура
roberta · dense
Опубликована
22 июн 2023

roberta_with_kornli

Классификация текстаТекст → label5 профессий

Дообученная на KorNLI модель RoBERTa для zero-shot-классификации корейских текстов по заданным категориям.

216скачиваний за 30 дней7лайковвеса обновлены22 июн 2023

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

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

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

pongjin/roberta_with_kornli — модель классификации последовательностей на архитектуре RoBERTa, дообученная автором на основе klue/roberta-base на данных KorNLI с использованием MNLI и XNLI. Она предназначена для zero-shot-классификации корейских текстов: пользователь задаёт возможные категории, а модель оценивает, насколько текст соответствует каждой из них. В карточке приведён результат обучения: accuracy 0,811 после трёх эпох.

Модель содержит 137,8 млн параметров, принимает текст с контекстом до 514 токенов и распространяется в формате PyTorch под лицензией Apache-2.0. Для запуска zero-shot pipeline в описанной автором версии Transformers требуется дополнительный обработчик аргументов, поскольку модель RoBERTa не использует token_type_ids.

Сценарии применения

  • отнесение корейского текста к категориям, заданным пользователем
  • классификация корейских отзывов по темам без отдельного обучения на этих темах
  • распределение корейских обращений по пользовательским категориям

Ограничения

Для работы zero-shot pipeline автор указывает на необходимость специального обработчика аргументов в Transformers 4.7.0. В карточке приведена accuracy 0,811 на валидации; качество на других данных не охарактеризовано.

Для каких профессий подходит5

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Также подходит для

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

This model has been referred to the following link : https://github.com/Huffon/klue-transformers-tutorial.git

해당 모델은 위 깃허브를 참고하여 klue/roberta-base 모델을 kor_nli 의 mnli, xnli로 파인튜닝한 모델입니다.

train_lossval_lossaccepochbatchlr
0.3260.5380.8113322e-5

RoBERTa와 같이 token_type_ids를 사용하지 않는 모델의 경우, zero-shot pipeline을 바로 적용할 수 없습니다(transformers==4.7.0 기준)
따라서 다음과 같이 변환하는 코드를 넣어줘야 합니다. 해당 코드 또한 위 깃허브의 코드를 수정하였습니다.

class ArgumentHandler(ABC):
    """
    Base interface for handling arguments for each :class:`~transformers.pipelines.Pipeline`.
    """

    @abstractmethod
    def __call__(self, *args, **kwargs):
        raise NotImplementedError()


class CustomZeroShotClassificationArgumentHandler(ArgumentHandler):
    """
    Handles arguments for zero-shot for text classification by turning each possible label into an NLI
    premise/hypothesis pair.
    """

    def _parse_labels(self, labels):
        if isinstance(labels, str):
            labels = [label.strip() for label in labels.split(",")]
        return labels

    def __call__(self, sequences, labels, hypothesis_template):
        if len(labels) == 0 or len(sequences) == 0:
            raise ValueError("You must include at least one label and at least one sequence.")
        if hypothesis_template.format(labels[0]) == hypothesis_template:
            raise ValueError(
                (
                    'The provided hypothesis_template "{}" was not able to be formatted with the target labels. '
                    "Make sure the passed template includes formatting syntax such as {{}} where the label should go."
                ).format(hypothesis_template)
            )

        if isinstance(sequences, str):
            sequences = [sequences]
        labels = self._parse_labels(labels)

        sequence_pairs = []
        for label in labels:
            # 수정부: 두 문장을 페어로 입력했을 때, `token_type_ids`가 자동으로 붙는 문제를 방지하기 위해 미리 두 문장을 `sep_token` 기준으로 이어주도록 함
            sequence_pairs.append(f"{sequences} {tokenizer.sep_token} {hypothesis_template.format(label)}")

        return sequence_pairs, sequences

이후 classifier를 정의할 때 이를 적용해야 됩니다.

classifier = pipeline(
    "zero-shot-classification",
    args_parser=CustomZeroShotClassificationArgumentHandler(),
    model="pongjin/roberta_with_kornli"
)

results

sequence = "배당락 D-1 코스피, 2330선 상승세...외인·기관 사자"	
candidate_labels =["외환",'환율', "경제", "금융", "부동산","주식"]

classifier(
    sequence,
    candidate_labels,
    hypothesis_template='이는 {}에 관한 것이다.',
)

>>{'sequence': '배당락 D-1 코스피, 2330선 상승세...외인·기관 사자',
 'labels': ['주식', '금융', '경제', '외환', '환율', '부동산'],
 'scores': [0.5052872896194458,
  0.17972524464130402,
  0.13852974772453308,
  0.09460823982954025,
  0.042949128895998,
  0.038900360465049744]}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · text-classification

Можно запустить

Подбираем GPU…

Класс архитектуры
RobertaForSequenceClassification
Ревизия весов
138378c

0 моделей