IMDB影評數據集預處理(使用word2vec)


數據集下載:https://github.com/jiangxinyang227/textClassifier/blob/master/data/rawData/labeledTrainData.tsv

打開看下labeledTrainData.tsv數據的樣子:

第一列是id標識符,第二列是情感評價,包含正面和負面的,第三列是相關語句。

讀取數據集:

import pandas as pd
from bs4 import BeautifulSSoup
path="/content/drive/My Drive/textClassifier/data/rawData/"
with open(path+"unlabeledTrainData.tsv","r") as fp:
  unlabeledTrain=[line.strip().split("\t") for line in fp.readlines() if len(line.strip().split("\t"))==2]
with open(path+"labeledTrainData.tsv","r") as fp:
  labeledTrain=[line.strip().split("\t") for line in fp.readlines() if len(line.strip().split("\t"))==3]

將數據放入到pands的DataFrame中,需要注意的是數據中的第一行是列的名稱

unlabel = pd.DataFrame(unlabeledTrain[1: ], columns=unlabeledTrain[0])
label = pd.DataFrame(labeledTrain[1: ], columns=labeledTrain[0])

將影評中的所有特殊字符替換為“ ”,並且全部轉換為小寫

def cleanReview(subject):
   # 數據處理函數
    beau = BeautifulSoup(subject)
    newSubject = beau.get_text()
    newSubject = newSubject.replace("\\", "").replace("\'", "").replace('/', '').replace('"', '').replace(',', '').replace('.', '').replace('?', '').replace('(', '').replace(')', '')
    newSubject = newSubject.strip().split(" ")
    newSubject = [word.lower() for word in newSubject]
    newSubject = " ".join(newSubject)
    
    return newSubject
    
unlabel["review"] = unlabel["review"].apply(cleanReview)
label["review"] = label["review"].apply(cleanReview)

# 將有標簽的數據和無標簽的數據合並
newDf = pd.concat([unlabel["review"], label["review"]], axis=0) 
# 保存成txt文件
newDf.to_csv("/content/drive/My Drive/textClassifier/data/preProcess/wordEmbdiing.txt", index=False)

使用gensim中的word2vec API來訓練模型。

class gensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=<built-in function hash>, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), max_final_vocab=None)
主要參數介紹如下:

    1) sentences:我們要分析的語料,可以是一個列表,或者從文件中遍歷讀出(word2vec.LineSentence(filename) )。

    2) size:詞向量的維度,默認值是100。這個維度的取值一般與我們的語料的大小相關,如果是不大的語料,比如小於100M的文本語料,則使用默認值一般就可以了。如果是超大的語料,建議增大維度。

    3) window:即詞向量上下文最大距離,window越大,則和某一詞較遠的詞也會產生上下文關系。默認值為5,在實際使用中,可以根據實際的需求來動態調整這個window的大小。

     如果是小語料則這個值可以設的更小。對於一般的語料這個值推薦在[5;10]之間。

    4) sg:即我們的word2vec兩個模型的選擇了。如果是0, 則是CBOW模型;是1則是Skip-Gram模型;默認是0即CBOW模型。

    5) hs:即我們的word2vec兩個解法的選擇了。如果是0, 則是Negative Sampling;是1的話並且負采樣個數negative大於0, 則是Hierarchical Softmax。默認是0即Negative Sampling。

    6) negative:即使用Negative Sampling時負采樣的個數,默認是5。推薦在[3,10]之間。這個參數在我們的算法原理篇中標記為neg。

    7) cbow_mean:僅用於CBOW在做投影的時候,為0,則算法中的xw為上下文的詞向量之和,為1則為上下文的詞向量的平均值。在我們的原理篇中,是按照詞向量的平均值來描述的。個人比較喜歡用平均值來表示xw,默認值也是1,不推薦修改默認值。

    8) min_count:需要計算詞向量的最小詞頻。這個值可以去掉一些很生僻的低頻詞,默認是5。如果是小語料,可以調低這個值。

    9) iter:隨機梯度下降法中迭代的最大次數,默認是5。對於大語料,可以增大這個值。

    10) alpha:在隨機梯度下降法中迭代的初始步長。算法原理篇中標記為η,默認是0.025。

    11) min_alpha: 由於算法支持在迭代的過程中逐漸減小步長,min_alpha給出了最小的迭代步。
運行結果:

 

參考:https://www.cnblogs.com/jiangxinyang/p/10207273.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM