隨著在線社交媒體和評論平臺的激增,大量的意見數(shù)據(jù)被記錄下來,具有支持決策過程的巨大潛力。情感分析研究人們在其生成的文本中的情感,例如產(chǎn)品評論、博客評論和論壇討論。它在政治(例如,公眾對政策的情緒分析)、金融(例如,市場情緒分析)和市場營銷(例如,產(chǎn)品研究和品牌管理)等領(lǐng)域有著廣泛的應(yīng)用。
由于情緒可以被分類為離散的極性或尺度(例如,積極和消極),我們可以將情緒分析視為文本分類任務(wù),它將可變長度的文本序列轉(zhuǎn)換為固定長度的文本類別。在本章中,我們將使用斯坦福的大型電影評論數(shù)據(jù)集進(jìn)行情感分析。它由一個(gè)訓(xùn)練集和一個(gè)測試集組成,其中包含從 IMDb 下載的 25000 條電影評論。在這兩個(gè)數(shù)據(jù)集中,“正面”和“負(fù)面”標(biāo)簽的數(shù)量相等,表明不同的情緒極性。
16.1.1。讀取數(shù)據(jù)集
首先,在路徑中下載并解壓這個(gè) IMDb 評論數(shù)據(jù)集 ../data/aclImdb
。
#@save
d2l.DATA_HUB['aclImdb'] = (d2l.DATA_URL + 'aclImdb_v1.tar.gz',
'01ada507287d82875905620988597833ad4e0903')
data_dir = d2l.download_extract('aclImdb', 'aclImdb')
接下來,閱讀訓(xùn)練和測試數(shù)據(jù)集。每個(gè)示例都是評論及其標(biāo)簽:1 表示“正面”,0 表示“負(fù)面”。
#@save
def read_imdb(data_dir, is_train):
"""Read the IMDb review dataset text sequences and labels."""
data, labels = [], []
for label in ('pos', 'neg'):
folder_name = os.path.join(data_dir, 'train' if is_train else 'test',
label)
for file in os.listdir(folder_name):
with open(os.path.join(folder_name, file), 'rb') as f:
review = f.read().decode('utf-8').replace('\n', '')
data.append(review)
labels.append(1 if label == 'pos' else 0)
return data, labels
train_data = read_imdb(data_dir, is_train=True)
print('# trainings:', len(train_data[0]))
for x, y in zip(train_data[0][:3], train_data[1][:3]):
print('label:', y, 'review:', x[:60])
#@save
def read_imdb(data_dir, is_train):
"""Read the IMDb review dataset text sequences and labels."""
data, labels = [], []
for label in ('pos', 'neg'):
folder_name = os.path.join(data_dir, 'train' if is_train else 'test',
label)
for file in os.listdir(folder_name):
with open(os.path.join(folder_name, file), 'rb') as f:
review = f.read().decode('utf-8').replace('\n', '')
data.append(review)
labels.append(1 if label == 'pos' else 0)
return data, labels
train_data = read_imdb(data_dir, is_train=True)
print('# trainings:', len(train_data[0]))
for x, y in zip(train_data[0][:3], train_data[1][:3]):
print('label:', y, 'review:', x[:60])
# trainings: 25000
label: 1 review: Henry Hathaway was daring, as well as enthusiastic, for his
label: 1 review: An unassuming, subtle and lean film, "The Man in the White S
label: 1 review: Eddie Murphy really made me laugh my ass off on this HBO sta
16.1.2。預(yù)處理數(shù)據(jù)集
將每個(gè)單詞視為一個(gè)標(biāo)記并過濾掉出現(xiàn)次數(shù)少于 5 次的單詞,我們從訓(xùn)練數(shù)據(jù)集中創(chuàng)建了一個(gè)詞匯表。
標(biāo)記化后,讓我們繪制以標(biāo)記為單位的評論長度直方圖。
正如我們所料,評論的長度各不相同。為了每次處理一小批此類評論,我們將每個(gè)評論的長度設(shè)置為 500,并進(jìn)行截?cái)嗪吞畛洌@類似于第 10.5 節(jié)中機(jī)器翻譯數(shù)據(jù)集的預(yù)處理 步驟。
torch.Size([25000, 500])
16.1.3。創(chuàng)建數(shù)據(jù)迭代器
現(xiàn)在我們可以創(chuàng)建數(shù)據(jù)迭代器。在每次迭代中,返回一小批示例。
X: torch.Size([64, 500]) , y: torch.Size([64])
# batches: 391
評論