Langkah 2: Pelajari Data Anda

Membangun dan melatih model hanyalah salah satu bagian dari alur kerja. Memahami karakteristik data sebelumnya akan memungkinkan Anda untuk membangun model transformer. Hal ini bisa berarti mendapatkan akurasi yang lebih tinggi. Hal itu juga bisa berarti membutuhkan lebih sedikit data untuk pelatihan, atau lebih sedikit sumber daya komputasi.

Memuat Set Data

Pertama, mari kita muat set data ke Python.

def load_imdb_sentiment_analysis_dataset(data_path, seed=123):
    """Loads the IMDb movie reviews sentiment analysis dataset.

    # Arguments
        data_path: string, path to the data directory.
        seed: int, seed for randomizer.

    # Returns
        A tuple of training and validation data.
        Number of training samples: 25000
        Number of test samples: 25000
        Number of categories: 2 (0 - negative, 1 - positive)

    # References
        Mass et al., http://www.aclweb.org/anthology/P11-1015

        Download and uncompress archive from:
        http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz
    """
    imdb_data_path = os.path.join(data_path, 'aclImdb')

    # Load the training data
    train_texts = []
    train_labels = []
    for category in ['pos', 'neg']:
        train_path = os.path.join(imdb_data_path, 'train', category)
        for fname in sorted(os.listdir(train_path)):
            if fname.endswith('.txt'):
                with open(os.path.join(train_path, fname)) as f:
                    train_texts.append(f.read())
                train_labels.append(0 if category == 'neg' else 1)

    # Load the validation data.
    test_texts = []
    test_labels = []
    for category in ['pos', 'neg']:
        test_path = os.path.join(imdb_data_path, 'test', category)
        for fname in sorted(os.listdir(test_path)):
            if fname.endswith('.txt'):
                with open(os.path.join(test_path, fname)) as f:
                    test_texts.append(f.read())
                test_labels.append(0 if category == 'neg' else 1)

    # Shuffle the training data and labels.
    random.seed(seed)
    random.shuffle(train_texts)
    random.seed(seed)
    random.shuffle(train_labels)

    return ((train_texts, np.array(train_labels)),
            (test_texts, np.array(test_labels)))

Periksa Datanya

Setelah memuat data, sebaiknya jalankan beberapa pemeriksaan terhadap data tersebut: pilih sedikit sampel dan memeriksa secara manual apakah sesuai dengan harapan Anda. Misalnya, cetak beberapa sampel acak untuk melihat apakah label sentimen sesuai dengan sentimen ulasan. Berikut ulasan yang kami pilih secara acak dari kumpulan data IMDb: “Kisah selama sepuluh menit membentang ke dua jam yang lebih baik. Ketika tidak terjadi apa pun yang signifikan pada titik tengah saya seharusnya sudah pergi.” Sentimen yang diharapkan (negatif) cocok pada label sampel.

Kumpulkan Metrik Utama

Setelah Anda memverifikasi data, kumpulkan metrik penting berikut yang dapat membantu menandakan masalah klasifikasi teks Anda:

  1. Jumlah sampel: Jumlah total contoh yang Anda miliki dalam data.

  2. Jumlah kelas: Jumlah total topik atau kategori dalam data.

  3. Jumlah sampel per kelas: Jumlah sampel per kelas (topik/kategori). Dalam {i>dataset<i} yang seimbang, semua class akan memiliki sampel; dalam set data yang tidak seimbang, jumlah sampel di setiap kelas akan sangat bervariasi.

  4. Jumlah kata per sampel: Jumlah kata median dalam satu sampel.

  5. Distribusi frekuensi kata: Distribusi yang menunjukkan frekuensi (jumlah kejadian) setiap kata dalam {i>dataset<i}.

  6. Distribusi panjang sampel: Distribusi yang menunjukkan jumlah kata per sampel dalam set data.

Mari kita lihat nilai metrik ini dalam {i>dataset<i} ulasan IMDb (Lihat Gambar 3 dan 4 untuk mengetahui plot frekuensi kata dan panjang sampel distribusi).

Nama metrik Nilai metrik
Jumlah sampel 25000
Jumlah kelas 2
Jumlah sampel per kelas 12500
Jumlah kata per sampel 174

Tabel 1: IMDb meninjau metrik set data

explore_data.py berisi fungsi untuk menghitung dan menganalisis metrik tersebut. Berikut beberapa contohnya:

import numpy as np
import matplotlib.pyplot as plt

def get_num_words_per_sample(sample_texts):
    """Returns the median number of words per sample given corpus.

    # Arguments
        sample_texts: list, sample texts.

    # Returns
        int, median number of words per sample.
    """
    num_words = [len(s.split()) for s in sample_texts]
    return np.median(num_words)

def plot_sample_length_distribution(sample_texts):
    """Plots the sample length distribution.

    # Arguments
        samples_texts: list, sample texts.
    """
    plt.hist([len(s) for s in sample_texts], 50)
    plt.xlabel('Length of a sample')
    plt.ylabel('Number of samples')
    plt.title('Sample length distribution')
    plt.show()

Distribusi frekuensi kata untuk IMDb

Gambar 3: Distribusi frekuensi kata untuk IMDb

Distribusi panjang sampel untuk IMDb

Gambar 4: Distribusi panjang sampel untuk IMDb