2. Adım: Verilerinizi Keşfedin

Model oluşturmak ve eğitmek, iş akışının yalnızca bir parçasıdır. Anlama önceden sahip olduğunuz veriler daha iyi bir gelecek geliştirmenize modeli. Bu yalnızca daha yüksek bir doğruluk elde etmek anlamına gelebilir. Bunun yanı sıra Bu durumda eğitim için daha az veri veya daha az işlem kaynağı gerekir.

Veri Kümesini Yükle

Öncelikle veri kümesini Python'a yükleyelim.

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)))

Verileri kontrol edin

Verileri yükledikten sonra üzerinde bazı kontroller gerçekleştirmek iyi bir uygulamadır: ve beklentilerinizi karşılayıp karşılamadıklarını manuel olarak kontrol edin. Örneğin, yaklaşım etiketinin bir tutuma sahip olması gerekir. Rastgele seçtiğimiz bir yorumu aşağıda bulabilirsiniz "Sonsuza kadar 10 dakikalık bir hikayeyi bölümünü oluşturur. O tarihte hiçbir önemli şeyin olmamasından sonra, yarı yarıya bulmam gerekiyor." Beklenen duyarlılık (negatif) eşleşmeler örneğin etiketi.

Önemli Metrikleri Toplama

Verileri doğruladıktan sonra aşağıdaki önemli metrikleri toplayın: metin sınıflandırma sorununuzu karakterize etmenize yardımcı olur:

  1. Örnek sayısı: Verilerde bulunan toplam örnek sayısı.

  2. Sınıf sayısı: Verilerdeki toplam konu veya kategori sayısı.

  3. Sınıf başına örnek sayısı: Sınıf başına örnek sayısı (konu/kategori). Dengeli bir veri kümesinde tüm sınıflar benzer sayıda olacaktır örneklemler; bir veri kümesinde her bir sınıftaki örnek sayısı değişiklik gösterir.

  4. Örnek başına kelime sayısı: Bir örneklemdeki kelime sayısının ortanca değeri.

  5. Kelimelerin sıklık dağılımı: Sıklığı gösteren dağılım (tekrar sayısı) gösterilir.

  6. Örnek uzunluğunun dağılımı: Kelime sayısını gösteren dağılım başına örnek başına gösterilir.

Şimdi bu metriklerin IMDb inceleme veri kümesi için değerlerini inceleyelim (Kelime frekansının ve örnek uzunluğunun grafikleri için Şekil 3 ve 4'e bakın. dağıtımları) ekleyebilirsiniz.

Metrik adı Metrik değeri
Örnek sayısı 25000
Sınıf sayısı 2
Sınıf başına örnek sayısı 12500
Örnek başına kelime sayısı 174

Tablo 1: IMDb, veri kümesi metriklerini inceliyor

explore_data.py. , hesaplayıp analiz edebilirsiniz. Aşağıda birkaç örnek verilmiştir:

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()

IMDb için kelimelerin sıklık dağılımı

Şekil 3: IMDb için kelimelerin sıklık dağılımı

IMDb için örnek uzunluğunun dağılımı

Şekil 4: IMDb için örnek uzunluğunun dağılımı