SnowNLP:一个强大的python中文文本处理库

SnowNLP:一个强大的python中文文本处理库,第1张

笔野拿者由于最近做一个监控应用评论内容的项目,为满足需求,需要对抓取下来的应用评论做中文语义识别,结果搜出来的大部分都是仅限英文语义识别的库,搜好久才找到这个国人开发的中文文本处理库(包含语义识别功能),特此介绍给大家。

跟其他python类库一样,使用pip安装就行了

用的时候,有时候可御弯能会觉得有些语句分析出来的结果会不太准确,这时候你就需要更新语料库,再进行训练,这样下次分析出来的结果就更加准确了。下面介绍一下如何进行训练

首先准备两份语料文本,neg.txt(负面语料文本) pos.txt(积极语料文本)

再次把生成好的sentiment.marshal放入类库的/sentiment 就可以了

试用效果如下,分析各渠道应用市场评论内容的情感:

目前笔者也仅仅试用了情感分析的功能而已,其他功能欢迎读者自行试用,总之就是相当颂拆搭强大

由于语料缺乏,前期若使用到情感分析,建议暂时粗颂游使用SnowNLP(此模块主要使用淘宝评论语料)做情感挖掘,但不仅仅为单纯调用,需要优化,下面是一些实践思考:

可在此基础上优化,比如文本需要特别处理,除了平常的去停用词外,还可以需要对输入的文本结合词性等进行处理。

下面是一些常识:

一)无情感的词语(如去停用词,去掉语气词,无词性标签的词语)

二)对于文本过长,则可以考虑提取关键词或抽取文本摘要后再提取关键词

对于后者实践结果差异明显:

以"发布了头条文章: 《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显 "为例子, 显然该文本为“积极****”文本。

1)s = SnowNLP("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")

得分为0.5,明显不岩销符合

2)s = SnowNLP(“ ”.join(jieba.analyse.textrank("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")))

而对于文本特别长的,则可以先抽取摘要,再对摘要提取关键词。

这主要由于此SnowNLP主要用贝叶斯机器学习方法进行训练文本,机器学习在语料覆盖上不够,特征上工程处理不当会减分,也没考虑语义等。

为何要考虑语义层面:

以“ 苏宁易购,是谁给你们下架OV的勇气****” 中的“ 下架”其实才是中心词(为樱派表达愤怒的文本),但“ 勇气 ”为下架的宾语(其为积极的文本),此句应该结果小于0.5,但实际为0.88,去掉“苏宁易购”则为0.6>

现状

人与之间通过声音来直接沟通交流,人与机器之间的交流也渐渐脱离了传统的沟通模式盯戚激,进入了语音交流时代。语音交流更是拉近了人和机器之间情感,现在的语音技术就是为了使机器更好的识别人声、并合成接近人类的声音以达到更好的交流。

目前国内研究语音相关的团队主要包括科研院所、语音技术公司以及互联网公司三部分:

科研院所主要包括高校和科学院,比如科学院里有声学所、自动化所,高校里面研究比较多的清华、北大、西工大、科大、上海交大等,这些都是在语音圈里占有较高位置的老牌队伍。

语音技术公司包括我们比较熟悉的科大讯飞、云知声、思必驰、极限元等。

互联网公司包括BAT、搜狗等拥有强大的语音技术团队来支撑着其本身的很多业务。

测试方案

接触语音识别、语音合成项目的测试将近一年,认识还非常浅薄,大家有更好的想法或者技术方案可以多多沟通凯袜交流。下面分别从语音识别、语音合成谈谈一些我在项目中用的测试方案。

语音识别

语音识别的整体流程如上,站在测试角度思考,测试最简单的切入点就是最终生成文本内容的校验上。

目前的测试方案是事先标注一批语音的文本内容,与识别出的文本内容做对比,获取识别的准确率。但是这种准确率统计脱离了实际使用场景,比如车载模式下的噪音、与麦克风的距离都会影响识别准确率。

另外,从上图流程可以看出,识别准确率还会受声学模型、解码器的影响。语音信号经过特征提取得到声学特征,再通过声学特征训练得到声学模型,声学模型结合语言模型以及发音辞典构建声码器以后进行解码来输出文本,所以声学模型的训练结果一定是正确的吗?这也是测试的一个切入点。

语音合成

测试考虑从以下两方面入手:

服务端的文本分析

合成效果的评测

文本分析

语音合成的测试前期工作主要放在前端文本分析上,用python中的Snownlp及pypinyin将文本进行分分词及注音后输出注音及音调,服务端的前端模块输出注音及音调,将脚本输出的结果和服务端输出的结果做对比。这种方式可以对比出音调、多音字的差异。

frompypinyin import pinyin#pinyin将汉字转为拼音。可以用于汉字注音、排序、检索fromsnownlp importnormal#snownlp 转换成拼音,繁体转简体,提取文本关键词fromsnownlp import seg#分词text_normal =normal.zh2hans(text_path)sent_normal =normal.get_sentences(text_normal)words= seg.seg(sent_normal.decode('utf-8'))#匹配多音字word= SnowNLP(words_list)word=word.sim(sim_word.decode('utf-8'))#注音txt_zhuyin = pinyin(word, style=pypinyin.TONE3)

合成效果评测

成功效果评测的方式也有两种:一种方式众包评测,这种方式是靠人的主管感受去评测合成的语音是否流畅、自然、发音正确等,这种方式的结果更有说服力,但是人力成本较大。

另一种方式是对比语音的波形图,python中的wave模块支持将语音转为波形图,python中还有其他模块如eyeD3,PyAudio,Audacity等等可以处理语音暂且不介绍这些模块。先介绍wave中的一些方法:

getparams()

获取wav文件的参数(以tuple形式输出),依次为(声道数,采样精度,采样率,帧数等)

readframes()

得到每一帧的声音数据,返回仔哗的值是二进制数据,在python中用字符串表示二进制数据。

步骤如下:

通过wav库获得night.wav的头文件中的信息,如采样率/声道数等等.

提取出DATA区域的信息,用numpy将string格式数据转化为数组

通过判定声道数将DATA区域数据进行处理(对数组矩阵进行转换)

得到每个绘制点的时间(x坐标)

用matplotlib库提供的方法绘制出波形图

对波形的信息进行对比分析,可以从中得到很多有效信息,但是这些信息是否能有效过滤掉不同的口音、情绪、呼吸等的差异,去提取自己想要的信息如音调差异、错别字的差异还在探索中。

原文链接


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8226045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存