मॉडल बनाना और उसे ट्रेनिंग देना, वर्कफ़्लो का सिर्फ़ एक हिस्सा है. समझना पहले से मौजूद विशेषताओं से, आपको बेहतर बनाने में मदद मिलेगी मॉडल. इसका मतलब यह हो सकता है कि ज़्यादा सटीक जानकारी पाना. इसका यह मतलब भी हो सकता है ट्रेनिंग के लिए कम डेटा या कम कंप्यूटेशनल रिसॉर्स की ज़रूरत होती है.
डेटासेट लोड करें
सबसे पहले, डेटासेट को 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)))
डेटा की जांच करें
डेटा लोड होने के बाद, उस पर कुछ जांच करना बेहतर होगा: कुछ सैंपल देखें और मैन्युअल तौर पर देखें कि वे आपकी उम्मीदों के मुताबिक़ हैं या नहीं. उदाहरण के लिए, बिना किसी क्रम के कुछ सैंपल प्रिंट करके देखें कि भावनाओं वाला लेबल है या नहीं समीक्षा की भावना से मेल खाता हो. यहां वह समीक्षा दी गई है जिसे हमने बिना किसी क्रम के चुना है IMDb डेटासेट से लिया गया है: “दस मिनट की कहानी करीब दो घंटे का समय हो जाता है. जब इवेंट में कोई भी अहम योगदान नहीं हुआ मुझे बीच में ही छोड़ देना चाहिए था.” उम्मीद के मुताबिक भावना (नेगेटिव) मेल खाती है पर लेबल लगाएं.
अहम मेट्रिक इकट्ठा करें
डेटा की पुष्टि करने के बाद, नीचे दी गई अहम मेट्रिक इकट्ठा करें. इनसे आपको टेक्स्ट की कैटगरी तय करने से जुड़ी समस्या की कैटगरी तय करने में मदद करें:
सैंपल की संख्या: डेटा में मौजूद उदाहरणों की कुल संख्या.
क्लास की संख्या: डेटा में मौजूद विषयों या कैटगरी की कुल संख्या.
हर क्लास में सैंपल की संख्या: हर क्लास में सैंपल की संख्या (विषय/कैटगरी). एक संतुलित डेटासेट में, सभी क्लास की संख्या समान होगी सैंपल; असंतुलित डेटासेट में, हर क्लास में सैंपल की संख्या काफ़ी अलग-अलग हो सकते हैं.
हर सैंपल में शामिल शब्दों की संख्या: एक सैंपल में शब्दों की मीडियन संख्या.
शब्दों का फ़्रीक्वेंसी डिस्ट्रिब्यूशन: फ़्रीक्वेंसी दिखाने वाला डिस्ट्रिब्यूशन डेटासेट में हर शब्द के दोबारा इस्तेमाल होने की संख्या (दोहराव की संख्या).
सैंपल की लंबाई का डिस्ट्रिब्यूशन: शब्दों की संख्या दिखाने वाला डिस्ट्रिब्यूशन डेटासेट में हर सैंपल के लिए.
आइए, देखते हैं कि IMDb समीक्षाओं के डेटासेट के लिए इन मेट्रिक की वैल्यू क्या हैं (शब्द-फ़्रीक्वेंसी और सैंपल-length के प्लॉट के लिए 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()
तीसरी इमेज: आईएमडीबी के लिए शब्दों का फ़्रीक्वेंसी डिस्ट्रिब्यूशन
इमेज 4: आईएमडीबी के लिए सैंपल की लंबाई का डिस्ट्रिब्यूशन