python结巴分词词库_Python数据科学实践 | 文本分析1

3fea9ebf5042eaa1638f5d31c267402d.gif f3d9f549c72526986d45bc95e5856544.png 大家好,基于Python的数据科学实践课程又到来了,大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。 本次将会学习利用Python处理文本数据。在正式开始之前, 需要明确一点:计算机无法真正意义上理解像人一样理解自然语言。事实上,直到上个世纪70年代,主流研究者希望以规则(语法)的形式帮助计算机理解自然语言。然而,有限的规则无法处理无限的语言。因此,之后的研究重心转向了利用统计模型来处理自然语言。自此,文字和数字,最后殊途同归。 为什么要说这些历史呢,是因为不少同学一开始接触文本的时候会产生不小的恐惧:计算机不是只认识数字吗? 文本怎么处理啊? 这怎么扔进去.... 其实,大可不必惊慌,文本分析的流程和分析数字大概是差不多的。只是多了一步而已:把文本类型的数据转换成合适的数字类型即可,之后的流程几乎是一样的。 文本分析的流程大致分为:分词,生成相应feature,根据不同需求扔到模型里跑。 036b67d2e2ab8e6e22e86cee7394b1f8.gif

注意: 文本分析涉及到的方向有很多,比如: 分词 、 特征提取、实体提取 、 意图判断 、 多轮对话(建立在前两个基础之上) 、 知识图谱 、 情感分析 等等。由于篇幅限制, 我们在这里只讲共有部分, 即分词和基本的特征提取的基本原理和使用,无论做什么工作(毕竟文本分析的本质只是在算概率大小而已),这两部分都是必须的。入门之后, 请感兴趣的读者自行展开。

准备: 理解文本分析流程 8247a38c3087fc02a45b4200dff3d239.png 接下来,我们通过一个小例子来具体熟悉一下。现在的场景为:政委对一家火锅的评论是: 036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店真好吃,环境优雅,菜品新鲜。

第一步是分词, 只有分了词才能进行向量化。而分词的前提是必须得有一个词库, 这是为什么? 巧妇难为无米之炊啊!计算机再机灵, 也得你告诉它你的喜好嘛!词库的作用就规定了:哪些词才辨识为有用的词,哪些词可以扔掉。 假设词库里只有以下词: 这家,店,真,不好吃,好吃,环境优雅,菜品新鲜,下次,再来,不来了。 在最简单情况下,直接采用字符串匹配来进行分词, 结果是: 036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家 | 店 | 真 | 好吃 | 环境优雅 | 菜品新鲜.

既然我们最终的目的是文本数据转换为数字,采用最简单的词频来表示特征,所以以上最终词频为:

0083724b715e4757ba704379d5c9f8e6.png

这样,我们就得到了最简单的文本向量。政委的评价的文本向量为: [1 1 1 0 1 1 1 0 0 0]。 假设,这家火锅店有N个顾客进行了评价, 我们就得到了多条评论。向量化后就应该类似如下

3d394129207a448d2eb78e00231bdc81.png

这样,只需以"评价情感"这列作为y,所有的评价向量作为x,扔进模型训练即可。 总结一下: 文本分析和数字类型的分析并没有多大区别, 只需将文本数据先进行向量化即可。例如:一条文本数据的特征可理解为其所包含的词在整体词库所包出现的词频、概率等等。 1.分词 2b5fd19f9bbc95c722f2f1f266e79754.gif 为什么需要分词呢? 还是用上面政委的那句话: 036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店真好吃,环境优雅,菜品新鲜。

来解释。这里,我们使用了逗号进行分割,消除了存在歧义的可能性。为了说明问题,这时候我们把标点符号换个位置,变成: 036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店真,好吃环境,优雅菜,品新鲜。

这句话理解起来可不是这么轻松了。可见,逗号的位置影响了对语句的理解。逗号是给人看的,计算机可不认识逗号。这时候, 就需要分词了。分词的作用也是为了消除歧义, 即让计算机理解。 中文分词的基本思路是: 使得切分后这个句子出现的概率最大的切分方式就认为是最优的。这里怎么理解出现的概率最大的切分方式呢?翻译过来等价于:说人话的句子!正常人常用的能理解的语言!这种切分在人类使用的语言中出现的概率足够大。例如上面的例子中,第一句话出现的概率是: P(这家店, 真, 好吃, 环境优雅, 菜品新鲜) = 0.8;第二句话出现的概率是: P(这家店真, 好吃环境, 优雅菜, 品新鲜) = 0.1。那么, 合理的分词就应该是第一句话的分词。这样, 我们就解决了词语歧义的问题。为了高效找到最优分词的结果, 往往会用"动态规划"的思路以及Viterbi算法。感兴趣的读者可以自行查阅。 036b67d2e2ab8e6e22e86cee7394b1f8.gif

注意,只有中文(其实应该说是亚洲语言)才需要分词。英文(其实应该说是罗马体系的语言)由于天然有空格作为分割,就不需要中文这样较为复杂的分词方式。当然以上说法其实并不完全准确,只是为了说明问题。分词与否还需要看具体的应用场景,比如英文手写字体也需要用到分词的思路, 这里就不深究了。

另一个值得注意的地方是, 在分词前最好能够先过滤停用词。 还是上面政委说的话: 036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店好吃的很,环境优雅的很,菜品新鲜的很。

"的很"是个"虚词"(学语言的少年请绕道...), 通常情况下没什么意义, 我们更希望把冗余信息去掉, 这时候就需要在分词前过滤停用词。 036b67d2e2ab8e6e22e86cee7394b1f8.gif

停用词, 简单理解是人为认为不重要的词, 过滤对结果不影响或有提升作用的词。

换言之, 停用词是"数据噪音", 过滤停用词可以理解为数据清洗的过程。  2.特征提取 2b5fd19f9bbc95c722f2f1f266e79754.gif ●  词频

1.思路

最简单粗暴的办法:不管什么词库,分词完后,某个单词出现一次就加1,计数完成后直接放入所需要的模型中训练。 设想两个人说的话: 政委一号: 036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店真好吃, 环境优雅, 菜品新鲜。

政委二号:

036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店真好吃,环境真优雅,菜品真新鲜。

最终:

83f68444051923ad7bb8367427055877.png

2.优缺点

优点: 不用考虑维护什么词库, 只以训练样本出现的词作为词库。

缺点: 只考虑了出现词作为文本特征, 但是并未考虑未出现的词。未出现也是一种特征啊!而且大量的词必然是未出现的(词库这么大, 怎能一句话全塞下)。当然应该纳入考量因素中。为了克服这个缺点, 可以考虑下面的词袋模型。

●  词袋模型

1.思路

词袋模型的思路是:该模型忽略掉文本的语法和语序等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的。为词库中所有词准备一个坑,一段文本中,每个词都去词库中找。 现在, 词库有7个词, 那就准备7个坑. 这家: [1 0 0 0 0 0 0] 店: [0 1 0 0 0 0 0] 真: [0 0 1 0 0 0 0] 环境优雅: [0 0 0 1 0 0 0] 下次: [0 0 0 0 1 0 0] 再来:[0 0 0 0 0 1 0] 不来了: [0 0 0 0 0 0 1] 然后再扔进模型里跑即可。

2.优缺点

这样做的优点: 将文本数据很方便就转换成向量进行表示, 看起来也比较直观. 这样做的缺点: 由于忽略了文本的语法和语序,这部分信息就被很大程度上忽略了, 对于一些依赖上下文的文本而言, 这样处理可能并不合适.

比如:

政委一号:

036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店真好吃,环境优雅,菜品新鲜,态度差。

政委三号:

036b67d2e2ab8e6e22e86cee7394b1f8.gif

这家店真好吃,环境优雅,菜品新鲜。但是态度差。

如果用词袋模型表示, 由于忽略了文本之间的语序, "真好吃"中的"真"字可以形容"好吃", 也可以形容"差", 即会出现"真好吃"和"真差"两种可能。如果只考虑情感的正负性, 那影响可能不会很大, 但是, 如果考虑到情感的程度, 这影响可就大了。"差"和"真差", "好吃"和"真好吃", 差别可不小!因此, 用词袋模型编码就损失了一部分信息。

f8bcc9877a5ce908d2a8c0a93fbb6706.png

为了进一步减少编码过程中信息的损失,可以考虑使用TF-IDF进行编码。 ●  TF-IDF

1.思路

TF-IDF是两个合成词的缩写: TF代表 词频(Term Frequencey), 即某个词在该文档中出现的频率;IDF代表逆文档频率(Inverse Document Frequency), 用于衡量某个词在所有词库中的重要程度。 TF = 当前词在该文档中出现的次数 / 文档中词的总数 IDF = log(总文档个数+1 / (当前词出现的文档个数+1)) 注意, 在分母中+1是为了防止出现分母为0的情况。在分子中+1是为了IDF始终≥0。本章出现的log默认以e为底。 TF-IDF = TF * IDF 现在1 2 3号政委一起出场了.(铺垫了很久, 垫了很久,  很久, 久) 036b67d2e2ab8e6e22e86cee7394b1f8.gif

政委一号: 这家店真好吃,环境优雅。

政委二号: 这家店真好吃,环境优雅,菜品新鲜。态度真不错。

政委三号: 这家店真好吃。环境优雅,菜品新鲜。但是态度真差。

这3位政委对这家店的评价就当做是3篇文档, 这3篇文档就是我们的总文档个数。总词库里的词有: 真好吃, 环境优雅, 菜品新鲜, 态度, 真差, 真。TF1, IDF1分别代表第一篇文档的TF和IDF。

以第一篇文档为例

036b67d2e2ab8e6e22e86cee7394b1f8.gif

政委一号: 这家店真好吃,环境优雅,菜品新鲜。

c19f5fff722da98c9568c22656c8bcb4.png

未出现的词有: "态度"和"真差", 这些TF*IDF都为0. "真", "真好吃", "环境优雅"在每篇文档都出现过, TF都是1/6, 经过IDF的调整后, 最终TF*IDF都为0。也就是说, 在越多篇文章都出现过的词的权重更低, 这也很符合常理, 比如一篇文章中出现次数最多的词一定是"的"。通过比较TF-IDF的大小,我们就找到了哪些属于文章特有的"关键词"。 通过上面的例子, TF*IDF的基本思路也不难理解了: 认为出现次数多的词更不重要, 出现次数少的词更重要。这种思路也非常符合日常生活: 日常对话中, 出现最多的词是"的"这类虚词, 这对模型并没有什么帮助。TF-IDF的处理能把这类词的-IDF降到很低。

2.优缺点

优点: TF-IDF能有效度量哪些词更加重要. 缺点: 虽然TF-IDF非常有效, 但是, 仍然无法有效解决上下文依赖的问题。比如"真好吃"中的"真"字也可能出现在"态度真差"中。 要想深入了解如何进一步改进TF-IDF,读者可以仔细去搜索word2vec。由于其原理相对复杂,本书先不做介绍。偷偷告诉大家狗熊会的其它丛书会仔细讲解哦。 好了,今天就讲到这里。大家应该感觉到无比轻松,那是因为没有一行代码哈哈哈。下次将进入实践环节。本次无作业。▼往期精彩回顾▼初步搭建数据科学工作环境

Conda的使用

Spyder入门

Jupyter入门

Markdown

简单读写数据

数据类型

数据结构

控制流

函数与模块

Numpy

pandas1

pandas2

pandas3

pandas4

绘图模块1

绘图模块2

绘图模块3

绘图模块4

统计建模1

统计建模2

统计建模3

统计建模4

机器学习模块1

机器学习模块2

09988b28f9e96252d9bf3999c5fd233f.png

00071d516e8400781c687c35cb5dd20a.png

下载本系列相关数据
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大学生参加学科竞赛有着诸多好处,不仅有助于个人综合素质的提升,还能为未来职业发展奠定良好基础。以下是一些析: 首先,学科竞赛是提高专业知识和技能水平的有效途径。通过参与竞赛,学生不仅能够深入学习相关专业知识,还能够接触到最新的科研成果和技术发展趋势。这有助于拓展学生的学科视野,使其对专业领域有更深刻的理解。在竞赛过程中,学生通常需要解决实际问题,这锻炼了他们独立思考和解决问题的能力。 其次,学科竞赛培养了学生的团队合作精神。许多竞赛项目需要团队协作来完成,这促使学生学会有效地与他人合作、协调工。在团队合作中,学生们能够学到如何有效沟通、共同制定目标和工合作,这对于日后进入职场具有重要意义。 此外,学科竞赛是提高学生综合能力的一种途径。竞赛项目通常会涉及到理论知识、实际操作和创新思维等多个方面,要求参赛者具备全面的素质。在竞赛过程中,学生不仅需要展现自己的专业知识,还需要具备创新意识和解决问题的能力。这种全面的综合能力培养对于未来从事各类职业都具有积极作用。 此外,学科竞赛可以为学生提供展示自我、树立信心的机会。通过比赛的舞台,学生有机会展现自己在专业领域的优势,得到他人的认可和赞誉。这对于培养学生的自信心和自我价值感非常重要,有助于他们更加积极主动地投入学习和未来的职业生涯。 最后,学科竞赛对于个人职业发展具有积极的助推作用。在竞赛中脱颖而出的学生通常能够引起企业、研究机构等用人单位的关注。获得竞赛奖项不仅可以作为个人履历的亮点,还可以为进入理想的工作岗位提供有力的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值