ধাপ 2: আপনার ডেটা অন্বেষণ করুন

একটি মডেল তৈরি এবং প্রশিক্ষণ কর্মপ্রবাহের শুধুমাত্র একটি অংশ। আপনার ডেটার বৈশিষ্ট্যগুলি আগে থেকে বোঝা আপনাকে আরও ভাল মডেল তৈরি করতে সক্ষম করবে৷ এটি কেবল উচ্চ নির্ভুলতা অর্জনের অর্থ হতে পারে। এর অর্থ প্রশিক্ষণের জন্য কম ডেটা বা কম গণনামূলক সংস্থান প্রয়োজন হতে পারে।

ডেটাসেট লোড করুন

প্রথমে পাইথনে ডেটাসেট লোড করা যাক।

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

ডেটা চেক করুন

ডেটা লোড করার পরে, এটিতে কিছু পরীক্ষা চালানো ভাল অভ্যাস: কয়েকটি নমুনা বাছাই করুন এবং ম্যানুয়ালি পরীক্ষা করুন যে সেগুলি আপনার প্রত্যাশার সাথে সামঞ্জস্যপূর্ণ কিনা। উদাহরণ স্বরূপ, সেন্টিমেন্ট লেবেল পর্যালোচনার অনুভূতির সাথে মিলে যায় কিনা তা দেখতে কয়েকটি এলোমেলো নমুনা প্রিন্ট করুন। এখানে একটি পর্যালোচনা রয়েছে যা আমরা IMDb ডেটাসেট থেকে এলোমেলোভাবে বেছে নিয়েছি: “দশ মিনিটের গল্প দুই ঘন্টার আরও ভাল অংশে প্রসারিত। হাফওয়ে পয়েন্টে যখন কোনো তাৎপর্যপূর্ণ কিছুই ঘটেনি তখন আমার চলে যাওয়া উচিত ছিল।” প্রত্যাশিত সেন্টিমেন্ট (নেতিবাচক) নমুনার লেবেলের সাথে মেলে।

কী মেট্রিক্স সংগ্রহ করুন

একবার আপনি ডেটা যাচাই করার পরে, নিম্নলিখিত গুরুত্বপূর্ণ মেট্রিকগুলি সংগ্রহ করুন যা আপনার পাঠ্য শ্রেণিবিন্যাসের সমস্যা চিহ্নিত করতে সহায়তা করতে পারে:

  1. নমুনার সংখ্যা : আপনার ডেটাতে থাকা মোট উদাহরণের সংখ্যা।

  2. ক্লাসের সংখ্যা : ডেটাতে মোট বিষয় বা বিভাগের সংখ্যা।

  3. প্রতি শ্রেণীতে নমুনার সংখ্যা : প্রতি শ্রেণীতে নমুনার সংখ্যা (বিষয়/বিভাগ)। একটি ভারসাম্যপূর্ণ ডেটাসেটে, সমস্ত ক্লাসে একই সংখ্যক নমুনা থাকবে; একটি ভারসাম্যহীন ডেটাসেটে, প্রতিটি শ্রেণিতে নমুনার সংখ্যা ব্যাপকভাবে পরিবর্তিত হবে।

  4. প্রতি নমুনা শব্দের সংখ্যা : একটি নমুনায় শব্দের মধ্যম সংখ্যা।

  5. শব্দের ফ্রিকোয়েন্সি ডিস্ট্রিবিউশন : ডেটাসেটের প্রতিটি শব্দের ফ্রিকোয়েন্সি (সংঘটনের সংখ্যা) দেখানো বন্টন।

  6. নমুনার দৈর্ঘ্যের বন্টন : ডেটাসেটে নমুনা প্রতি শব্দের সংখ্যা দেখানো বন্টন।

আসুন দেখি IMDb রিভিউ ডেটাসেটের জন্য এই মেট্রিক্সের মানগুলি কী (শব্দ-ফ্রিকোয়েন্সি এবং নমুনা-দৈর্ঘ্য বিতরণের প্লটের জন্য চিত্র 3 এবং 4 দেখুন)।

মেট্রিক নাম মেট্রিক মান
নমুনার সংখ্যা 25000
ক্লাসের সংখ্যা 2
প্রতি শ্রেণীতে নমুনার সংখ্যা 12500
প্রতি নমুনা শব্দের সংখ্যা 174

সারণি 1: IMDb ডেটাসেট মেট্রিক্স পর্যালোচনা করে

explore_data.py এ এই মেট্রিকগুলি গণনা এবং বিশ্লেষণ করার ফাংশন রয়েছে৷ এখানে উদাহরণ তুলে ধরা হলো:

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-এর জন্য শব্দের ফ্রিকোয়েন্সি ডিস্ট্রিবিউশন

চিত্র 3: IMDb-এর জন্য শব্দের ফ্রিকোয়েন্সি বিতরণ

IMDb-এর জন্য নমুনা দৈর্ঘ্যের বিতরণ

চিত্র 4: IMDb-এর জন্য নমুনা দৈর্ঘ্যের বিতরণ