IMDB影评数据集预处理(使用word2vec)

2020-08-26 14:15:41 浏览数 (1)

数据集下载:https://github.com/jiangxinyang227/textClassifier/blob/master/data/rawData/labeledTrainData.tsv

打开看下labeledTrainData.tsv数据的样子:

第一列是id标识符,第二列是情感评价,包含正面和负面的,第三列是相关语句。

读取数据集:

代码语言:javascript复制
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中,需要注意的是数据中的第一行是列的名称

代码语言:javascript复制
unlabel = pd.DataFrame(unlabeledTrain[1: ], columns=unlabeledTrain[0])
label = pd.DataFrame(labeledTrain[1: ], columns=labeledTrain[0])

将影评中的所有特殊字符替换为“ ”,并且全部转换为小写

代码语言:javascript复制
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)
代码语言:javascript复制
# 将有标签的数据和无标签的数据合并
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来训练模型。

代码语言:javascript复制
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

0 人点赞