今天总结

xiaoxiao2021-02-28  32

第一个大坑 – word2vec

在使用现成的API或者package,一定要先弄清楚其属性。不然就会像最近两天,跌进大坑,爬都爬不出来。

import gensim sentences = word2vec.Text8Corpus(u'corpus.txt') # 加载语料 model = word2vec.Word2Vec(sentences, min_count=8) # 训练skip-gram模型,默认window=5 model.save(u'txt.model')#训练好了存起来,之后可以直接加载 print(model.wv.vocab)#获取训练的词

我测试的时候,总是会报错: 错误提示,在训练模型之前,要先构建词库(you must first build vocabulary before using the model)。 查看corpus.txt,里面有词呀。 是我的词不够多?可是一句话也能用啊。 是我的数据没有用nltk处理?直接处理一个string也行啊。 到底发生了什么?这里面有啥问题? 女大学生退学未遂,原因竟然是它!

model = word2vec.Word2Vec(sentences, min_count=8) # 训练skip-gram模型,默认

最开始我的语料是用nltk处理的,在去停用词、分词、取词干之后的字符串,作为了训练语料,这是没问题的。后来我将进一步处理后(删掉了低频词)的字符串,作为输入,就报错了。 前者的字符串,有重复的字符串,后者的字符串,没有重复的字符串,相当于每一个词的词频都是1了,所以,全都被过滤掉了。 是的,就是这样愚蠢的错误。

Keng 2–nltk

相信很多盆友都用过nltk做数据预处理。

disease_List = nltk.word_tokenize(str(all_words).lower())#转为小写,分词 filtered_txt = [w for w in disease_List if (w not in english_stopwords)]#去停用词 filtered_txt = [w for w in filtered_txt if (w not in english_punctuations)] #del punctuations去标点符号和一些特殊字符 stemmed_txt = [stemmer.stem(w) for w in filtered_txt]#取词干 all_words_freq = collections.Counter(stemmed_txt).most_common()#统计词频

最后的输出里会有

'occasionally\\\\controversi' '\\\\which' 'dwindling\\\\band' '29' '2005'

是的,你没有看错,就这样阵容强大的预处理,也无法阻挡花样百出的文本。 后来查才知道原来python里有可以判断是不是字符,是不是数字,是不是数字字母组合的函数

stemmed_txt = [w for w in stemmed_txt if (w.isalpha())]#判断是不是字符

加上这一句就可以完全过滤上述的文本了。

另外值得注意的是

stemmed_txt = [w for w in stemmed_txt if (w.isalpha())]

nltk.stem.PorterStemmer() 取词干之后,不是普通那种wanted 变成want的形式,而是service变成servic,以及company变为compan。

Keng 3

sklearn 对数据预处理很有帮助 比如:sklearn.model_selection 里的 train_test_split,可以分数据集。(妈妈再也不用担心我手动分数据集啦) (之后有空再详说)

转载请注明原文地址: https://www.6miu.com/read-1700288.html

最新回复(0)