Обзор классификации текста

Глубокое обучение для работы с текстом на PyTorch

Shubham Jain

Instructor

Что такое классификация текста

  • Присвоение меток тексту
  • Придание смысла словам и предложениям

 

 

Типы классификации в машинном обучении

  • Структурирует неструктурированные данные
  • Применения:

    • Анализ тональности отзывов клиентов
    • Фильтрация спама в электронной почте
    • Разметка новостных статей по темам
  • Типы: бинарная, многоклассовая, многолабельная

Глубокое обучение для работы с текстом на PyTorch

Бинарная классификация

  • Разбиение на два класса
  • Пример: фильтрация спама
  • Письма классифицируются как «спам» или «не спам»

Бинарная классификация

1 https://storage.googleapis.com/gweb-cloudblog-publish/images/image4_v2LFcq0.max-1200x1200.png
Глубокое обучение для работы с текстом на PyTorch

Многоклассовая классификация

Классификация новостей

  • Разбиение на несколько классов
  • Пример: новостные статьи можно разнести по категориям
    1. Политика
    2. Спорт
    3. Технологии
Глубокое обучение для работы с текстом на PyTorch

Многолабельная классификация

  • Одному тексту можно присвоить несколько меток
  • Пример: книги могут относиться к нескольким жанрам
    • Боевик
    • Приключения
    • Фэнтези
Глубокое обучение для работы с текстом на PyTorch

Что такое векторные представления слов

Пайплайн векторных представлений слов

Пример векторного представления слов

  • Прежние методы кодирования — хороший первый шаг
    • Они порождают слишком много признаков и не улавливают схожесть слов
  • Векторные представления слов отображают слова в числовые векторы
  • Пример семантической связи:
    • «Король» и «королева»
    • «Мужчина» и «женщина»
Глубокое обучение для работы с текстом на PyTorch

Отображение слов в индексы

  • Пример:
    • «King» -> 1
    • «Queen» -> 2
  • Компактный и эффективный по вычислениям
  • Следует за токенизацией в пайплайне
Глубокое обучение для работы с текстом на PyTorch

Векторные представления слов в PyTorch

  • torch.nn.Embedding:
    • Создаёт векторы слов по индексам

 

  • Вход: индексы для ['The', 'cat', 'sat', 'on', 'the', 'mat']
Embedding for 'the': tensor([-0.4689,  0.3164, -0.2971, -0.1291,  0.4064])
Embedding for 'cat': tensor([-0.0978, -0.4764,  0.0476,  0.1044, -0.3976])
Embedding for 'sat': tensor([ 0.2731,  0.4431,  0.1275,  0.1434, -0.4721])
Глубокое обучение для работы с текстом на PyTorch

Использование torch.nn.Embedding

import torch
from torch import nn

words = ["The", "cat", "sat", "on", "the", "mat"] word_to_idx = {word: i for i, word in enumerate(words)}
inputs = torch.LongTensor([word_to_idx[w] for w in words])
embedding = nn.Embedding(num_embeddings=len(words), embedding_dim=10)
output = embedding(inputs)
print(output)
tensor([[ 1.0624,  0.6792,  0.0459,  ... -1.0828, -0.4475,  0.4868],
         ...
         [1.5766,  0.0106,  0.1161,  ...,,  -0.0859, 1.3160,  1.3621])
Глубокое обучение для работы с текстом на PyTorch

Использование векторных представлений в пайплайне

def preprocess_sentences(text):
  # Tokenization
  # Stemming
  ...

# Word to index mapping
class TextDataset(Dataset): def __init__(self, encoded_sentences): self.data = encoded_sentences def __len__(self): return len(self.data) def __getitem__(self, index): return self.data[index]
def text_processing_pipeline(text):
    tokens = preprocess_sentences(text)
    dataset = TextDataset(tokens)
    dataloader = DataLoader(dataset, batch_size=2, 
                            shuffle=True)
    return dataloader, vectorizer

text = "Your sample text here." dataloader, vectorizer = text_processing_pipeline(text)
embedding = nn.Embedding(num_embeddings=10, embedding_dim=50) for batch in dataloader: output = embedding(batch) print(output)
Глубокое обучение для работы с текстом на PyTorch

Давайте потренируемся!

Глубокое обучение для работы с текстом на PyTorch

Preparing Video For Download...