赞
踩
前面几篇写了相似度计算和话题模型,都是怎么找到相似的文章。2篇文章用各种方法向量化,然后余弦计算相似度,或者同在一个话题的2篇文章,把一整篇文章切成很多很多的词,有的模型或算法还要尽量在词多的情况下计算才准确。
人类有归纳总结的能力,看了一篇英超曼城对曼联比赛的报道,会总结几个出几个关键词,英超 曼联 曼城 得比,看了关键词就能知道这篇文章大概的内容,如果机器也能做到,那该多好啊!!!能,当然能,就是今天要介绍的关键词提取。
关键词提取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。在文献检索领域,依然可以在论文中看到关键词这一项。
关键词还可以在文本聚类、分类、自动摘要等领域中有着重要的作用。比如在聚类时将关键词相似的几篇文档看成一个团簇,可以大大提高聚类算法的收敛速度;从某天所有的新闻中提取出这些新闻的关键词,就可以大致了解那天发生了什么事情;或者将某段时间内几个人的微博拼成一篇长文本,然后抽取关键词就可以知道他们主要在讨论什么话题。
算法上分为2种,有监督和无监督,有监督算法需要标注数据,人工成本很大,今天我主要说的是无监督算法。
无监督提取关键词算法有很多,今天讲TF-IDF,TEXTRANK提取关键词。
前面我介绍过TF-IDF模型,怎么提取关键词呢?取整篇文章切词后TF-IDF值最高的N个词做为这篇文章的关键词!很简单吧,就是这么简单!。
- 1. 预处理,首先进行分词和词性标注,去掉停用词,将满足指定词性的词作为候选词;
- 2. 分别计算每个词的TF-IDF值;
- 3. 根据每个词的TF-IDF值降序排列,并输出指定个数的词汇作为可能的关键词;
TextRank算法是由google的PageRank算法转化而来的。PR(PageRank简称,下同)算法简单点说2句话,一个网页被很多网页链接时,排名就好;排名高的网页权重更高。一个网页的排名是由链接这个网页的数量及质量(排名的高低)决定的。
PR公式
TextRank公式
TextRank中没有链接的概念,用窗口来代替链接的概念,窗口就是词距,一般取5,表示与某个词的词距不大于5的集合。
TF-IDF和TextRank算法原理都不难,也有很多实现,我这次主要用jieba来实现这2种算法。
代码见https://github.com/worry1613/csdn-blog-recommend/blob/master/code/keyword.py ,jupyter上也有,在jupyter目录下。我说一下最后的结论吧:
1.和文章作者人工写的标签相比,不管是TF-IDF,还是TEXTRANK提取关键词的效果都不好,达到我个人认为还行的标准的比例也就在10%左右,100篇也就有10篇左右用算法提取的关键词还行,如果是100W篇的话,能不能达到10%还未知。
2.算法提取的关键词中,有很少的词有意义,剩下的几个大部分都无意义。
3.英文词,甚至代码中的关键词被提取出来。
下面我取出了其中的一小部分,用户标签|| TF-IDF标签 || TEXTRANK标签。
internet 产品 apple blackberry nokia 服务器 ||PC Internet 2003 PDA Apple Intel 产品 iPod||市场 产品 领域 技术 应用 没有 设备 计算
读书 出版 教育 设计模式 语言 java ||教材 书籍 教学 技术 课堂 学生 教科书 习题||教材 技术 书籍 学生 教学 方法 知识 市场
report ||设置 LaTeX 0pt fancyhead renewcommand 页眉 字号 1ex||设置 显示 缩进 页脚 包来 纸张 习惯 字号
工作 企业应用 算法 申诉 微软 浏览器 ||项目 软件 队伍 领导 油田 分数 系统 考核||项目 队伍 领导 软件 油田 系统 企业 公司
腾讯 创业 qq 互联网 网络 游戏 ||腾讯 QQ OICQ MIH 移动梦网 马化腾 SP 服务||服务 业务 互联网 用户 注册 收入 移动梦网 游戏
医疗 服务器 技术人 网络 产品 internet ||医院 信息系统 服务器 信息化 建设 医疗 系统 PC||医院 信息系统 系统 建设 信息化 医疗 服务器 网络
华为 工作 生活 报表 数据库 制造 ||干部 改进 流程 批判 自我 人均 管理 一定||干部 公司 管理 不能 流程 批判 改进 没有
创业 工作 生活 融资 平台 ||创业 软件产业 软件 软件业 几百万 成功 不是 一个||创业 软件 发展 过程 速度 产业 收入 政策
java j2me 嵌入式 平台 j2se linux ||Java com http 嵌入式 java 程序 类别 sun||程序 平台 类别 执行 函式 装置 审核 预先
工作 审查 体育 招聘 活动 ||工作 职员 待遇 老板 了解 简历 能力 变动||工作 能力 实际 公司 没有 可能 变动 获得
constructor os class c++ reference library ||Complex operator real imaginary const return ostream os||应该 函数 风格 成员 操作 内容 说明 翻译
function class iostream string struct dependencies ||include std class ostream 头文件 list private public||头文件 需要 代码 使用 程序 函数 成员 类型
c++ microsoft 游戏 语言 borland pascal ||50 C++ Kingofark PV Learning Points View kingofark||编程 观点 学习 简称
汇编 c++ 语言 工作 c ||kingofark 五评 推荐 学过 com impossible 一点点 本文||推荐 团体 技术 条款 初学者 个人 喜爱 学院
asp.net web服务 button textbox asp 脚本编程语言 ||控件 Greeter Web NET aspx 页面 ASP Button||控件 页面 服务器端 生成 应用程序 文件 验证 数据
设计模式 java 出版 uml 读书 工具 ||乐趣 模式 读者 这本 设计模式 或许 入门 2003||模式 读者 设计模式 教材 作品 入门 没有 标题
applet java jdk 程序开发 网络 sun ||保护 许可 线程 应用程序 一个 调用 系统 访问||保护 系统 访问 应用程序 线程 调用 可能 方法
url applet solaris windows java 扩展 ||java 许可 security FilePermission 文件 com home 策略||文件 策略 代码 属性 指定 密钥 入口 系统
classloader applet java jdk 虚拟机 语言 ||装载 一个 Java 授权 子类 类时 AppletClassLoader 虚拟机||授权 使用 创建 可能 原始 提供 用户 运行
工具 jdk java applet solaris windows ||storetype keystore 管理器 security Djava keytool storepass SecurityManager||工具 策略 使用 文件 管理器 证书 调用 用户
algorithm 算法 object java 存储 string ||GuardedObject 签字 Guard 对象 线程 访问控制 一个 SignedObject||对象 签字 线程 访问控制 消费者 方法 资源 获得
applet jar jdk 文档 java 加密 ||签字 子域 许可 一个 代码 密钥 com JAR||签字 使用 子域 保护 代码 概念 资源 认证
编程 语言 加密 工作 产品 c ||程序员 程序 修养 编程 函数 我要 语句 一个||程序员 程序 修养 函数 进行 语句 编程 没有
语言 pascal fortran unix scheme c++ ||GDB 调试 language 命令 set 程序 Use 函数||命令 调试 程序 语言 函数 环境 执行 功能
就这样了?还能再提高一些成功率吗?我个人认为还是有可能的,那怎么做呢?
1.专业领域要有专业的关键词表,这样就不会把专业词分成几个普通词了。
2.停用词,太重要了,必须下功夫好好整理整理。
3.预处理太重要了,文章内包括有代码的,是不是要把代码分离出去,有英文翻译的,是不是要把英文分离出去,要保证语料库的质量,质量,质量!!!!
当然,提取关键词还有很多其它的算法,可以试试其它算法,或者是其它算法和以上2种算法的混合。
今天2种算法的测试都不成功,等以后有时间了,我再做更深一步的测试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。