开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:文本特征提取3】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15503
文本特征提取3
下面我们继续做文本特征提取与向量化的实验,现在开始用TFIDF来进行特征提取,前面已经把词都拆分好了,拆分好的文本不能直接扔进去建模,还需要把文本转化成稀疏矩阵,矩阵单元格里面的特征值即是特征词的权重。
现在来看此图,将数据框这一列转换成一个列表。大家注意,本来它是在数据框里面一列,然后通过一个函数叫tolist把它转成一个列表terms。接下来看一下terms里面的第一条,它是一个列表,中间的元素就是用空格隔开的一个个词。
然后再用sklearn的特征提取模块里面的一个类叫TFIV,然后下面就要用TFIV这个类来做处理。这个类里面有很多参数,需要同学们去看一些帮助来了解这个操作的含义,min_df=3是最小的文档频率等于三,就是最少要在三个记录里面出现,然后才能做一个特征的要求;ngram算法就是一个统计语言模型,n如果取(1,2),那么一串中文可能就取(1,2)(2,3)(3,4)这样两个曲交错的。我们先把这个函数(类)实例化做一个对象,实例化以后用这个对象来处理刚刚的文本数据,刚刚转成列表的terms给它fit一下,相当于理合训练,再通过transform转换成我们需要的权重TFIDF的格式,当然我们可以用一部函数来做,用里面带的函数叫fit_transform,把fit和transform结合在一起的。
执行完之后,那个粉色的是一个warning,不需要管,结果放在X_all里面,从里面取一条记录来转换成list看一下,它还是一个内存的对象,不方便看里面的内容,所以我们下面用一个列表解析式,这也是Python最重要的一个特点——列表解析式。
其中中括号代表一个列表,i.data是一个表达式,后面是一个循环迭代,就是在X_all[1],第一条里面把它拿出来显示一下,i是迭代的元素,我们不直接显示这个元素,我们用表达式元素里面的一个数据属性来显示。
显示完以后,这就是一条评论里面每个词的权重,就是TFIDF值。这就是一个特征提取,我们提取了特征词的量化表示,这是用TFIDF,我们用的是sklearn包里面的。
下面也可以用gensim包里带的一个模块来做TFIDF,它里面有一个模块,有TfidfModel这个类,这个我们用语料简单一点,主要是演示一下。
现在我们自己做一下语料,就是列表里面放几句话再加载停用词,然后我们再来把停用词从文件里面读下来,下面做分词,这个分词我们用jieba.cut,分完词以后我们再把里面的结果再处理一下,就是这个结果本来放在seg_list里面,不在停用词表里面,因此就是下面的分词结。“我在北京天安门”,其‘在’没有分出来,因为它在停用词表里面。
我们再来做词袋模型,用gensim。在它里面有一个corpora语料,语料里面有一个语料词典dictionary,然后把刚刚分好词的放到语料词典里面,放在这个变量里面;语料词典功能很强大,它里面有个属性叫token2id,就是把分好的每一个词,给它一个编号,现在显示一下分行的每一个词对应的编号,‘北京’:0;‘天安门’:1,后面的数字是它的编号。
就是那几句话等于整体语料,然后里面的每一个词都给它一个编号。整个相当于把所有文档里面的词放在一起,每个词都有自己的编号,这就是词袋模型。
然后来再来计算tfidf,这个用gensim里面models模块,models模块里面有TfidfModel这个类,现在就创建一个对象把语料放进去,再把这个模型保存下来,保存完以后可以通过它里面的load加载进来;那么我们做一个列表来看里面做好的权重,然后做一个循环,它里面的就是做好的权重,现在显示一下,下面显示的它已经是词的编号了,词袋模型的编号对应的tfidf值,运行一下看看结果。
接下来是特征提取用词向量word2vec,这是一种著名的词嵌入方式,它可以计算每个单词在其给定语料库环境下的分布式词向量,词向量表示可以在一定程度上刻画每个单词的语义。
训练词向量也是gensim.models里面的一个class,它里面有Word2Vec大写的函数,后面括号里有很多参数。
给大家列了一些比较重要的和网上的博客,大家可以参考。
下面看看word2vec怎么用,我们在gensim.models里面加载几个模块,在data目录下有一个训练数据,然后用word2vec里面的LineSentence(file_path)把文件读进来,用Word2Vec处理一下,参数很多,但是几个重要参数要知道一下:sentences—要处理的文本,要做词向量的文本;hs=1是采用方式(Hierarchical Softmax模型),参数为1表示使用,0表示不使用。然后可以设一些参数,比如窗口的大小,还有个关键就是自己做的词向量的大小,每一个词用128词向量表示,代表一个向量里面有128个词来表示一个词,模型做完以后保存一下,用的时候可以加载。现在运行一下,因为语料不多所以做词向量很快的,词向量做好了以后来看看它的值。
获取单词word2vec值,大家看里面有一个‘apple’,显示一下,它是128个数字构成的向量,这就是词向量。Tfidf每一个词只有一个权重值,而在词向量里面一个词有128位值。Word2vec综合考虑到上下文的语意,所以它的词向量表达语义能力更强,从文本里面利用这个权重去挖掘文本、词和词之间的关系、词的特征词就更准确了。
接下来看词向量非常直接的一个应用,就是计算两个单词的语义相似度。
做好的词向量模型里面有similarity,可以把两个词放进去,它就告诉我们它们相似度的值,运行看一下相似度的值,它应该基于两个向量计算,因为每个词都有128个向量,所以完全基于词向量计算相似度,word2vector的简单实验就到这里。
最后还有一些资料留在这里,大家有兴趣的可以去看一下。