ساخت و آموزش یک مدل تنها بخشی از گردش کار است. درک ویژگی های داده های خود از قبل به شما امکان می دهد مدل بهتری بسازید. این به سادگی می تواند به معنای دستیابی به دقت بالاتر باشد. همچنین می تواند به معنای نیاز به داده کمتر برای آموزش یا منابع محاسباتی کمتر باشد.
مجموعه داده را بارگیری کنید
ابتدا بیایید مجموعه داده را در پایتون بارگذاری کنیم.
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 انتخاب کردیم: «داستان ده دقیقه ای در بخش بهتری از دو ساعت طول کشید. وقتی هیچ اتفاق مهمی در نیمه راه رخ نداده بود، باید می رفتم.» احساس مورد انتظار (منفی) با برچسب نمونه مطابقت دارد.
معیارهای کلیدی را جمع آوری کنید
هنگامی که داده ها را تأیید کردید، معیارهای مهم زیر را جمع آوری کنید که می تواند به شناسایی مشکل طبقه بندی متن شما کمک کند:
تعداد نمونه : تعداد کل نمونه هایی که در داده ها دارید.
تعداد کلاسها : تعداد کل موضوعات یا دستهها در دادهها.
تعداد نمونه در هر کلاس : تعداد نمونه در هر کلاس (موضوع/دسته). در یک مجموعه داده متعادل، همه کلاسها دارای تعداد مشابهی از نمونهها خواهند بود. در یک مجموعه داده نامتعادل، تعداد نمونه ها در هر کلاس به طور گسترده ای متفاوت خواهد بود.
تعداد کلمات در هر نمونه : میانه تعداد کلمات در یک نمونه.
توزیع فراوانی کلمات : توزیعی که فراوانی (تعداد وقوع) هر کلمه در مجموعه داده را نشان می دهد.
توزیع طول نمونه : توزیعی که تعداد کلمات هر نمونه در مجموعه داده را نشان می دهد.
بیایید ببینیم که مقادیر این معیارها برای مجموعه داده بررسی های 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()
شکل 3: توزیع فراوانی کلمات برای IMDb
شکل 4: توزیع طول نمونه برای IMDb