首页 >> 手游攻略

n0601

大家好,今天来为大家分享n0601的一些知识点,和自然语言处理N天-Day0601基于ML的中文短文本分类的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

说明:本文依据《中文自然语言处理入门实战》完成。目前网上有不少转载的课程,我是从GitChat上购买。

这两节课分别是分类和聚类问题,刚才突然大脑短路,在想分类和聚类的区别。

分类就是根据文本的特征或属性,划分到已有的类别中。也就是说,这些类别是已知的,通过对已知分类的数据进行训练和学习,找到这些不同类的特征,再对未分类的数据进行分类。聚类就是你压根不知道数据会分为几类,通过聚类分析将数据或者说用户聚合成几个群体,那就是聚类了。聚类不需要对数据进行训练和学习。

分类属于监督学习,聚类属于无监督学习。

第六课基于ML的中文短文本分类

教程中使用的数据是作者曾经做过的一份司法数据,需求是对每一条输入数据,判断事情的主体是谁,比如报警人被老公打,报警人被老婆打,报警人被儿子打,报警人被女儿打等来进行文本有监督的分类操作。

教程又没有数据,应该是和响应的保密守则有关,真是服了,然后让读者去上他的chat?

看了一下输出的部分数据,是一个简要记录和出警记录,另外有一个标签,出警为0,未出警为1,我们可以手动生成一个。

我把生成的数据放在github中了,大家可以去下载,也可以自己做一个。

importrandomnimportjiebanimportpandasaspdnstopwords=pd.read_csv(r'C://Users//01//Desktop//stopwords.txt',index_col=False,quoting=3,sep="\t",names=['stopword'],encoding='utf-8')nstopwords=stopwords['stopword'].valuesnprint(stopwords)nerzi_data=pd.read_excel(r'C://Users//01//Desktop//randomdata.xlsx',sheet_name=0)nlinju_data=pd.read_excel(r'C://Users//01//Desktop//randomdata.xlsx',sheet_name=1)nlaogong_data=pd.read_excel(r'C://Users//01//Desktop//randomdata.xlsx',sheet_name=2)nlaopo_data=pd.read_excel(r'C://Users//01//Desktop//randomdata.xlsx',sheet_name=3)nprint(laopo_data)nerzi=erzi_data.values.tolist()nlinju=linju_data.values.tolist()nlaogong=laogong_data.values.tolist()nlaopo=laopo_data.values.tolist()n#定义分词和打标签函数preprocess_textn#参数content_lines即为上面转换的listn#参数sentences是定义的空list,用来储存打标签之后的数据n#参数category是类型标签ndefpreprocess_text(content_lines,sentences,category):nforlineincontent_lines:nline="".join(line)ntry:nsegs=jieba.lcut(line)nsegs=[vforvinsegsifnotstr(v).isdigit()]#去数字nsegs=list(filter(lambdax:x.strip(),segs))#去左右空格nsegs=list(filter(lambdax:len(x)>1,segs))#长度为1的字符nsegs=list(filter(lambdax:xnotinstopwords,segs))#去掉停用词nsentences.append(("".join(segs),category))#打标签nexceptException:nprint(line)ncontinuensentences=[]npreprocess_text(laogong,sentences,0)npreprocess_text(laopo,sentences,1)npreprocess_text(erzi,sentences,2)npreprocess_text(linju,sentences,3)nprint(sentences)nrandom.shuffle(sentences)nforsentenceinsentences:nprint(sentence)n

抽取词向量特征

fromsklearn.feature_extraction.textimportCountVectorizernfromsklearn.model_selectionimporttrain_test_splitn#CountVectorizer生成的是词频向量。nvec=CountVectorizer(analyzer='word',max_features=4000)nx,y=zip(*sentences)nx_train,x_test,y_train,y_test=train_test_split(x,y,random_state=42)n#训练数据转为词袋模型BOWnvec.fit(x_train)n

使用贝叶斯和SVM进行训练

#使用朴素贝叶斯进行训练nfromsklearn.naive_bayesimportMultinomialNBnclassifier=MultinomialNB()nclassifier.fit(vec.transform(x_train),y_train)nprint(classifier.score(vec.transform(x_test),y_test))n#使用支持向量机SVM进行训练nfromsklearn.svmimportSVCnsvm=SVC(kernel='linear')nsvm.fit(vec.transform(x_train),y_train)nprint(classifier.score(vec.transform(x_test),y_test))n

两次训练结果都不高,一个是0.59,一个是0.83原因可能是输入的文本处理方面的问题。

现在回顾一下整个流程,整个分类流程包括以下几部分

文本读取的处理,一般使用pandas结合jieba进行分词。在分词过程中打好标签,因为分类是监督学习,必须有标签。分词后的文本统一纳入一个list中。抽取词向量特征,使用sklearn中的文本分类函数将list进行特征抽取生成词袋模型对词袋模型进行随机拆分,一个训练集和一个测试集,导入训练模型中进行训练。评估训练结果。

n0601的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于自然语言处理N天-Day0601基于ML的中文短文本分类、n0601的信息别忘了在本站进行查找哦。



本文由欣欣吧手游攻略栏目发布,感谢您对欣欣吧的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人站长或者朋友圈,但转载请说明文章出处“n0601

标签:
my牢记10个地址永不失联
« 上一篇 2023-10-17