Антон Гордон — архитектор ИИ

Введение

Во вселенной обработки естественного языка (NLP) главенствует BERT (представление двунаправленного кодировщика от трансформеров). Его инновационная архитектура и превосходные возможности распознавания текста изменили способ обработки языковых данных. В этой статье вы узнаете, как создать приложение для анализа настроений с помощью BERT, а также пошагово развернете приложение на AWS с помощью Docker.

Прежде чем погрузиться в техническую часть, давайте убедимся, что вы готовы следовать этому руководству. Вам потребуется базовое понимание Python и его библиотек, некоторое знакомство с PyTorch и HuggingFace Transformers, а также понимание сервисов AWS и Docker. Кроме того, убедитесь, что на вашем компьютере установлены и настроены все необходимые инструменты.

BERT для анализа настроений

Для приложения мы будем использовать BERT для прогнозирования настроений в обзорах фильмов. Наш набор данных будет состоять из обзоров фильмов, помеченных как положительные или отрицательные. Основные шаги включают в себя токенизацию наших текстовых данных, передачу их в предварительно обученную модель BERT и обучение окончательного уровня классификации для прогнозирования тональности.

Начнем с токенизации с помощью python:

from transformers import BertTokenizer

# Load pre-trained model tokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

def tokenize_reviews(text):
    # Add special tokens takes care of adding [CLS], [SEP], <s>... tokens in the right way for each model.
    marked_text = "[CLS] " + text + " [SEP]"
    tokenized_text = tokenizer.tokenize(marked_text)
    return tokenized_text

После токенизации мы можем передать эти входные токены предварительно обученной модели BERT, например:

import torch
from torch import nn
from transformers import BertModel

# Load pre-trained model
model = BertModel.from_pretrained('bert-base-uncased')

def encode_reviews(tokenized_text):
    indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
    segments_ids = [1] * len(tokenized_text)

    # Convert inputs to PyTorch tensors
    tokens_tensor = torch.tensor([[indexed_tokens]])
    segments_tensors = torch.tensor([[segments_ids]])

    # Predict hidden states features for each layer
    with torch.no_grad():
        encoded_layers, _ = model(tokens_tensor…