テキスト分類の概要

PyTorch で学ぶテキストの Deep Learning

Shubham Jain

Instructor

テキスト分類とは

  • テキストへのラベル付与
  • 単語や文に意味を与える

 

 

機械学習における分類の種類

  • 非構造化データに構造を与える
  • 利用例:

    • レビューの顧客感情を分析
    • メールのスパム検知
    • ニュース記事に関連トピックのタグ付け
  • 種類:二値、多クラス、マルチラベル

PyTorch で学ぶテキストの Deep Learning

二値分類

  • 2 つのカテゴリへ分類
  • 例:メールのスパム検知
  • メールは「スパム」または「非スパム」に分類

二値分類

1 https://storage.googleapis.com/gweb-cloudblog-publish/images/image4_v2LFcq0.max-1200x1200.png
PyTorch で学ぶテキストの Deep Learning

多クラス分類

ニュース分類

  • 複数カテゴリへの分類
  • 例:ニュース記事は次のように分類可能
    1. 政治
    2. スポーツ
    3. テクノロジー
PyTorch で学ぶテキストの Deep Learning

マルチラベル分類

  • 各テキストに複数ラベルを付与可能
  • 例:は複数のジャンルを持つ
    • アクション
    • アドベンチャー
    • ファンタジー
PyTorch で学ぶテキストの Deep Learning

単語埋め込みとは

単語埋め込みのパイプライン

単語埋め込みの例

  • 既存のエンコーディングは第一歩として有効
    • ただし特徴量が多すぎ、類似語を捉えにくい
  • 単語埋め込みは単語を数値ベクトルに写像
  • 意味関係の例:
    • King と queen
    • Man と woman
PyTorch で学ぶテキストの Deep Learning

単語からインデックスへの対応付け

  • 例:
    • "King" -> 1
    • "Queen" -> 2
  • コンパクトで計算効率が高い
  • パイプラインではトークナイズの後に実施
PyTorch で学ぶテキストの Deep Learning

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 で学ぶテキストの Deep Learning

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 で学ぶテキストの Deep Learning

パイプラインでの埋め込みの利用

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 で学ぶテキストの Deep Learning

Let's practice!

PyTorch で学ぶテキストの Deep Learning

Preparing Video For Download...