事实:半年关键词抽取的两三事

优采云 发布时间: 2022-12-02 11:35

  事实:半年关键词抽取的两三事

  前言:作品太精彩了,我居然把关键词抽取工作作为对话的主要任务做了半年(好像和对话任务完全不兼容)。关键词的任务暂时关闭,我终于可以从长达半年的天天看案例、手动调参数的日子里解脱出来了!!!在此记录下我半年来在关键词抽取过程中的感想。

  时间:2019年7月~2020年3月

  背景:获取文章关键词(或关键词组,以下为统一起见统称为关键词),现有的方法已经很多。一般来说,它可以分为两种类型:生成式和提取式。抽取可以分为有监督(KEA、topicrank、感官序列标注也可以用来标注关键词)和无监督(图形模型和统计模型)两种。生成模型在我的印象中性能惊人,但是也会生成不相关的badcase,需要大量的labeled data,所以一直没有深入研究和理解。监督抽取还需要大量的标注数据,这对没有积累的项目也很不友好。所以,我实验的主要精力放在了无监督的 关键词 提取方法上。根据我跑实验的经验,统计模型的效果远好于图模型。如果有朋友对关键词有什么想法,欢迎与我交流。

  数据特征:我的项目中使用的数据与关键词提取的公共数据集中的数据有很大不同。首先,目前开放的关键词公共数据集大部分都是英文的,在处理上和中文有很大区别,数据不具有普适性(不得不吐槽一下,中文的公共数据集太少了)。其次,几乎所有的数据集要么是新闻数据,要么是科研数据。文章标题要简明扼要(关键词或关键词的近义词几乎都出现在标题中),文章结构要清晰(必须有关键词在段落的开头或结尾),语言要简洁(少量错别字,但句子流畅)。我要处理的文章是口语录音,没有人为命名的标题,没有经过反复打磨的文章结构,也没有清晰可靠的文字(有噪声的ASR识别结果,文章的可读性可想而知)。因此,我不能直接使用大多数论文中使用标题信息的模型。

  关键词提取本身是一项非常困难的任务。第一,关键词没有统一的标准,对关键词的评价是非常主观的(如果有统一的标准,就不会有评分公式,那就没必要继续这个任务了). 二是人工打字的golden关键词和算法提取的很难有很好的匹配评价方法。不同的边界或同义词在机器评分中将被判断为错误。从学术数据集上报的数据来看,能做好的关键词只占golden mark的30%到40%,关键词抽取任务本身就有比较明显的上限.

  接下来,我将一步步简单描述一下我的关键词抽样研究之路:

  (一)算法研究

  打开谷歌,搜索keyphrase extraction或keyword extraction,然后通读之前的文章,寻找开源代码,快速进行实验比较效果。实验效果没有数值评分,靠肉眼观察。测试的算法有tfidf、textrank、yake、KPMiner、firstphrase、singlerank、topicrank、multipartiterank、positionrank、embedrank等(有图算法和统计算法),最后我们发现yake的体感效果最好,最后选择 yake 作为我们的基线。

  yake一共使用了5类特征:大写(中文无效)、词位(词位越高越重要)、tf值、上下文相关性(一个词的上下文词越不固定is,这个词越不重要),这个词出现在多少个不同的句子中(这个词出现的句子越多越好)。yake的优点是:与一些图模型相比,速度更快,可以生成短语。缺点是:phrase的长度是超参数,一次只能产生unigram、biggram或ngram的关键词。unigram的结果并不比tfidf好;停用词输出容易(虽然考虑了上下文相关性的特点),因此需要准备一个比较完整的停用词列表;

  

" />

  因此,我们需要开发一种适合我们文章特点的关键词抽取算法。我给它起名叫tuike(tui,四声,表达我在调试过程中受的委屈)。

  (2)核心评分模块开发

  接下来进入特征工程和特征筛选的过程。首先,根据我阅读论文的经验,我从不同的论文中选择了潜在有效的特征,并将它们添加到特征列表中。然后执行特征选择以选择对从数据集中提取 关键词 最有用的特征。

  常见的特征包括:tf值、提示词、句子在文本中的位置等,大家可以自由发挥自己的想法。

  (3) 从公开数据集中提取的关键词的部分效果展示

  在运行上述实验时,没有使用原创

数据集的头部信息。

  (4) 实验结果分析

  

" />

  严格匹配是指:只有预测出的词与金字完全相同时,才认为正确。

  模糊匹配的意思是:只要预测的词和黄金词重叠覆盖,就认为是正确的。

  除了机器打分,我们还进行了人工并排盲测打分。我们检查了两个方面:算法的获胜率和不可接受案例的比例。

  PS:这里解释一下我们测试集的标注原则。因为关键词的标注标准很难解释清楚,所以我们使用多个labeler独立标注,将所有被标注的词都认为是合理的golden关键词。

  (6) 不良案例分析

  在 关键词 小节中,经过分句处理后,大约 65% 的段落严格收录

golden关键词。模糊匹配可以召回的golden关键词可以占到97.47%。未能严格召回的关键词大部分是由于缺乏重要的内部和外部PMI统计数据造成的,因此无法合并两个连续的段。分句部分的效果暂时可以接受。

  在没有被召回的badcase中,超过三分之二的golden关键词没有被召回,因为它们在文本中只出现过一次,而且单词附近没有强烈的提示信息。由于我们的模型依赖于统计信息,因此它无法识别此类统计信息不明显的情况。有必要构思用于提取的新特征。

  在预测的关键词中,12.44%属于泛概念词(“精神”、“文化”等抽象词)。其中,4.8%的案例属于完全提取错误的坏案例。

  (7) 上线项目效果(整体流水线,包括切分、关键词抽取、关键句抽取)

  平均在线访问时间为21.4s。在单向测试中,一篇10000字的文章所需时间为3.5s。在五路并发的情况下,一篇10000字的文章需要的时间是62s。

  背后的故事:花一年时间,给爬虫Hawk再讲个故事

  一直没打算更新Hawk,直到去年10月的一个晚上,逛完B站发呆的时候,接到了盛哥的投诉,远程修复了他电脑的bug。一开始觉得侥幸,用得太烂,数据清洗的交互超乎想象,然后界面太丑了,一股无形的力量推着我,一发不可收拾。十几个周末,再加上晚上10:00下班就冲进屋子,晚上11:00睡觉,就这样熬了大半年。

  记得Hawk3发布的那天是在杭州。解决了最后几个问题,上传了压缩包,发了公众号,感觉自己病入膏肓了。跑了一圈西湖,吃饱了,脚也修好了。心里的石头慢慢落了地。

  这篇文章应该算是发表两个月后的一个总结,说说背后的经历和思考。是这部《》的延伸,也是时隔两年的回顾。

  从优化细节到做减法

  有朋友问这次更新了哪些新功能?不好意思说,优化细节。

  细节是如此重要,细节让无数人卡在了最基本的操作上。如果你抱怨Hawk3界面丑陋,交互难用,bug多,那是因为你没用过前面的1和2。我还在想别人怎么用,bug多,“反人类”之前的设计。一个小问题的修复可能没有明显的区别,但是数百次的迭代实现会产生大量的积累。量变导致质变。出生时从来没有完美的事物。想想2002年到2018年QQ的变化,我也有同感。

  在花了很多时间分析用户大部分时间花在什么地方,如何理解如何使用,以及犯错误的原因后,我发现 80% 的用户最多只使用 Hawk 中 20% 的功能。一个清理模块,不知道其余 80% 功能的存在。所以我们把80%的改进投入到打磨细节,增加稳定性和易用性上,追求大而全意义不大。

  更新日志

  在界面设计上,我们绘制了大量的交互草图,将关键功能重新整理列出,减少鼠标移动距离,并反复推敲核心功能的呈现方式,使其更符合用户的想法(例如,数据清理模仿播放浏览器设计,网络抓取器真正模仿浏览器)。在采集器上搜索关键词时,会自动跳转并高亮显示,大大提高了效率。

  着陆时,我们需要充分注意细节;但在营销和讲故事的时候,一定要抓大放小,抓住重点,忽略细节。市面上的爬虫软件很多,实现它们的技术手段不胜枚举。你的Hawk有什么能力让用户只用一句话就愿意使用它?

  这是一个核心问题,我之前的回答是:即使不会编程的用户也可以低成本获取数据。还想出了一个“小芳用开源租房分析工具勇敢对抗二房东”的营销故事:用Hawk抓取实时租房数据,识别虚假房源,一键导出Excel可视化分析,有段子也有干货,再加上微博和微信的病毒式传播,讲述了一个依然吸引人又能体现Hawk特点的故事。

  但这不是本质。网上也有很多不需要编程的爬虫工具。Hawk还需要进一步升级细化,在交互和功能方面还需要做减法。哎,做减法是需要勇气的。这让我想起了老板的一个问题:如何用一页PPT,用尽可能少的文字,把自己这几年所做的工作讲清楚给别人听?一度认为不可能,但经过多次优化,一页PPT绰绰有余。越是高端高档的广告,字如金;越是农村式的宣传,一张红纸上密密麻麻写满了字。

  软件心智模型

  Hawk是一个易用又难用的软件,但它的问题是它的学习曲线非常陡峭。一开始,你会对界面完全无所适从,但当你理解了它的思维模式,突破了临界点,你的内心就会浮现。原来如此”,所以一马平川。

  任何严肃的软件都有它的主轴和心智模型:

  Hawk的主轴是流(迭代器,或者一行数据),所有的功能都是围绕它来服务的。它的心智模型是不同模块的拼接,然后组合成更复杂的模块和任务。真正理解了这个概念之后,Hawk的用途就豁然开朗了。但是,这种模式对于程序员来说很容易理解,但是对于普通用户来说却提出了相当大的挑战。因此,Hawk在思维模型和交互的优化上也需要一场革命。

  如何在不破坏模型的情况下在易用性上取得平衡?VSCode作为一款非常受欢迎的编辑器,给了我们很多有价值的借鉴:一方面非常容易上手,保持核心简单,按需扩展插件,避免不必要的复杂性。另一方面,它的“互动演练场”非常有趣:给用户一组简单的任务,从而快速学会操作。而这一项,Hawk需要优化的地方太多了。

  Hawk的启动页学习了VSCode

  Hawk当然不能像Photoshop和Excel那么强大和稳定,但也不像美图秀秀或者那些怪怪的页游傻瓜式UI:一个大大的按钮:“一开始只有一只狗,一把刀9999等级!” 它破坏了应有的美,就像长在树上的大蘑菇。

  但是,想想那些使用 Hawk 的用户。他们可能是程序员,也可能是白领、数据爱好者。他们应该很少玩“温暖”的换装养成游戏吧?既然如此,那我们还是继续直男风格的界面吧!

  桌面或 Web,重要吗?

  

" />

  去年最困扰我的是Hawk的部署和使用:应该是基于web的。用户可以使用任意浏览器登录网站,在服务器上配置数据任务,实现爬虫。灵活性是不言而喻的。

  为此,学习了很多React前端知识,也开发了用Python写的etlpy,它是一个函数库,而不是像Hawk那样的集成环境。虽然它有一些重要的概念和创新,但极度缺乏手感和反馈:流量这个概念太抽象,不好用,我自己也不愿意用。一定要靠强大的前端,而我的前端水平至少需要1年才能做出这个产品。工作忙,只能作罢。

  一年后,面对这个问题,我有了新的认识。

  首先从技术层面考虑,网页版的开发需要重写代码、设计前端、租用服务器和IP地址,带来巨大的维护成本,在当前条件下难以接受;而且浏览器有沙盒限制,很*敏*感*词*很难实现,桌面版就容易多了。桌面程序真的是恶魔吗?

  如果网络化是绝对趋势,那么为什么 Photoshop 和各种工具仍然是客户端?如果全球化是普世价值,那特朗普为何在英国脱欧后上台?Hawk是桌面版还是web版根本不重要,用什么语言开发的也不重要,重要的是它为用户解决了什么问题。

  我们再考虑一下。2000年,桌面程序开始流行,然后是网站,然后是应用程序,然后是小程序。但在 2017 年,一位企业家表示他已经开发了一款应用程序。投资者会感兴趣吗??人们关注的不再是产品的形式,甚至背后的服务,而是理念:比如人工智能、热门文章,甚至虚拟货币。很多人甚至不知道什么是虚拟货币,只是为了疯狂。经济早已由实转虚,人们的注意力甚至达到了一定程度的“虚”。

  更深层次上,它的想象空间在哪里?但是,作为爬虫,Hawk在这个环节已经输了。你说你做了一个超级牛逼的爬虫,投资人点点头,然后淡淡的跟你说“保持联系”。我们可以看到一个明确的上限:成立一个几十人的公司,年收入几千万是不成问题的。然而,它最终会成为一家出售数据的灰色公司。标榜大数据却终日面对监管:这离我的梦想太远了 你说,再用js重写一遍,tmd那又怎样?

  霍克的批评

  我更喜欢听批评,因为比听赞美更能提高对问题本质的认识。公司一位大神说,一个产品被人诟病是好事,没人批评才可怕:差到根本没人用。

  虽然我花了很多时间修复错误,但仍有至少五六个用户报告的严重问题。我也确定Hawk3有十几个严重的bug,谁知道代码的角落里藏着一个大魔王?我们公司的一位师傅说,看一套软件,尤其是分布式软件做的怎么样,只需要看单元测试的覆盖率就可以了。“测试驱动开发”已经被多次提及,但是对于这种个人项目,从一开始就是懒惰胜过原则。那么什么是 Hawk 的单元测试呢?0

  作为一个爬虫,Hawk 有太多的技术难题没有解决,比如代理和禁止、复杂 HTML 的细粒度分析、验证码识别……四年前 Hawk 刚开发的时候,简单的爬虫技术就可以遍历整个站点,现在,重要数据全部掌握在几家巨头手中,反爬虫技术是这些系统设计的首要考虑因素,爬虫成本呈指数级上升。如果不解决这些问题,你说的是什么爬虫?其实这些问题不是不能解决,而是成本和风险,这跟Hawk自身的盈利模式和设计目的有关,这个我们后面再说。

  其他严重的问题包括:文档不完整,示例项目少;视频不完整,讲解太快,简单听一听难以消化。由于精力有限,只能先保证软件的质量。如果文档不好,可以随时更改。但是,作为一款桌面软件,每次更新都要升级客户端,对于所有客户来说成本太高了。

  其实Hawk的关键问题根本不在桌面端,也不在web端,只是表现形式而已,就是太封闭了。开源只是开放的第一步,但作为设计师,只能听取少数用户的意见,问了几个问题后大部分就消失在人群中;用户在自己的项目中是独立的,contribution 和 Designs 无法共享,问题难以讨论,没有形成良好的社区环境。

  人们需要一个好的社区来分享他们的设计和想法。然而,在中国很难找到这样的产品。博客不适合。GitHub和stackoverflow都做得很好,但是纯英文的环境在国内不太水土不服。连Hawk下载链接都不能翻墙打开。但是微信和QQ太碎片化了,没有论坛那样的对话环境。说到论坛,还有多少人在论坛上?而且论坛的维护成本也很高。说实话,要找到一个稳定且可更新的软件上传下载容器是非常困难的。

  再回到“客户埋点”的问题上,采集

用户的实际操作和完成的任务,了解用户的真实想法,明确改进目标。只是因为成本略高,直到Hawk3才实现有意义的埋点功能。另外,当你期待直接向用户询问他们对Hawk的需求和反馈时,你会发现这种采集

方式也很困难。使用Hawk的用户一定是高性能的。他们的时间很宝贵,任务也很多。他们对 Hawk 的看法在使用它之前 5 分钟就已经决定了:无论它在幕后的好坏,很多人都不喜欢它。会有一个完整的观点。因此,不要指望用户为你定义“好的需求”。用户是懒惰的,

  *敏*感*词*错刀》主编一针见血地指出,只有收费才能产生粘性。

  开源:打国容易,守国难

  您使用开源和免费来吸引用户的注意力。但是,作为一个爬虫应用,用户仍然需要大量的学习和劳动才能让Hawk产生价值。他们满怀希望地打开软件,期待一份开箱即用的甜点,没想到一大盒零件让他们失望不难想象,更难以找到像样的维护和支持。我曾经对这个问题一笑置之,但现在我又认真起来了,这是问题的核心。

  一个软件的成本,除了开发之外,主要来自维护和支持。在江山打仗,将军身在沙场,热血沸腾,情怀能让一众将士冲锋陷阵。半年时间我自己可以完成这个软件,付出很多努力。然守国难,耗时甚久。用户*敏*感*词*求教,如何支持?这个时候光谈感情已经不行了。就算弟兄们能坚持三个月甚至半年,后续的支援又将如何进行呢?

  在上一篇文章中,我们谈到了开源的意义和价值。但是,当时没有讨论的问题是开源和商业的关系。中国传统文化讲究情怀和贡献;忽视商业和服务:很多人认为物质的东西是有价值的,服务应该是免费的,所以盗版软件猖獗;你可以接受餐厅的高价,但如果服务员在要求小费时,一定是一脸茫然。

  一年多来,我看了很多商业书籍,深刻体会到商业和开源从来都不是矛盾的。即使我们要造福于用户,做好霍克的情感牌,而不是低俗的“赚钱”,合理的商业模式也是必要的:支付可以促进双赢:用户得到更好的产品和服务通过支付,产生更强的粘性;开发人员有更多的激励和资金支持来优化它。货币重新分配用户和开发者的注意力,优化资源配置,直接量化服务的价值。说白了就是“穷则独利己,富则利天下”。当财富自由还远未实现时,

  任何一个产品,都需要明确它的受众,讲好故事,明确它的思维模式和商业模式。那么什么是 Hawk 合理的商业模式呢?我可以确定的是,就像文章开头的故事一样,除了通用的功能外,还必须进行定制,为房地产或金融等行业提供专业便捷的数据采集和分析服务。尽管模式如此重要,但我们仍在探索,我们仍然无法弄清楚这个问题。

  那么为什么要不断改进呢?

  对于一个工作压力很大的算法工程师来说,花大量时间更新Hawk是一件极其奢侈的事情。能压缩的,只能是可怜的个人时间。那为什么还要更新呢?

  

" />

  GitHub的更新记录,每个绿点是一个更新

  Hawk的更新升级伴随着工作后岁月的风风雨雨。Hawk1是低谷期的自我认证,2代是状态提升后的包容世界。2017年到2018年的第三代,情况就复杂多了,工作很忙,凡事都要取舍,心情起伏不定。它是沉淀和反思的产物,以至于从本文的文体上就能看出来。

  一方面,Hawk的开发具有极高的迭代效率:在大公司,个人很难推动一个决策,90%的环境是失控的,一个接口要沟通很多次,这是非常低效的。像 Hawk 这样的工具由 10 人的不协调团队开发一两年也不是不可能。

  更重要的是,它实现了远程社交协作:以我和盛哥为核心,五六个热心的朋友献计献策,但我们从未见过面。比起在公司面对面的重量级协作,基于微信和碎片化时间的轻交互充满了力量:一个困扰我很久的问题,一个朋友三言两语就能恍然大悟:没有来自上下级的职业压力和顾忌,创意碰撞如泉涌。

  曾经我很敬佩一个人挺身而出的个人英雄主义,后来这些经历让我意识到了协作的美德。在最近的一次Hawk线下聚会上,我提出公众号写文章的时间不够,导致产出极低。有从事HR行业十年的朋友问:软件可以协同,为什么文章不能协同?是一篇充满思想碰撞和干货的好文章更重要,还是苦心完成却不尽如人意的纯原创更重要?

  今天,曾经一切以技术为中心的我,已经走出了当时的怪圈。多关注产品、合作、商业和人性,这些是最困难和不确定的因素,技术只是实现它们的手段。《》一文总结道:基于兴趣的开源软件,可以有机会在技术、产品甚至运营方面进行思考和锻炼。我觉得这是它对我最大的价值:难得有机会以更低的成本实现灵活的社会协作,在一个小的实践领域实现和实施想法:比起满天飞的虚拟概念,能够做真正落地的事情很重要。

  霍克的终极形态

  Hawk 是一个用 C# 实现的流媒体系统。第一步是解决这些技术问题:

  解决这些问题并不太难:如果你是程序员,你应该听说过flink,它是流式算法的行业标准,实现了任务恢复、异步流控、自动负载均衡等多种功能。秉承着不重新发明轮子的理念,Hawk的底层执行引擎可以轻松替换为flink。

  第二步是将人工智能引入Hawk。我们有幸实现了网页采集的智能化,但是数据清洗仍然完全依赖于人工。通过对大量用户任务的自动学习和模拟,AI可以自动推断出最合理的工作流程,从而简化给定一个URL来完成所有任务。这项工作实际上是AutoML(自动机器学习)的一部分,它依赖于采集

大量的用户行为和任务。

  第三步彻底解决被封号的问题,靠代理切换?那太低了。让我们敞开心扉,想象一下Hawk背后的概念:数据和计算。Hawk 最终将成为去中心化系统的一部分:

  自来水和电是按需供应的,但想想人们获得哪怕是公开数据的艰难过程:去各种网站探索,然后花大量时间进行后期处理和分析。Hawk将数据完全变成了可复用的公共资源,大大提高了工作效率。例如,一些用户针对不同的租赁网站开发了任务(流水线),我们可以很容易地在上层将它们组合成一个全局的租赁数据流。系统自动去重归一化后,可随时对数据进行分析得出结论。其他用户也可以调用您的租赁数据流来更*敏*感*词*地讨论城市和经济的未来。未来的数据来源远不止网络,还可以来自各种传感器、API 和服务提供商。最终可以实现基于实时流的分布式数据系统。数据和信息像空气一样被大家共享,从而实现价值最大化。

  过去,我们对虚拟这个概念重视不够,甚至嗤之以鼻。但这个让人目瞪口呆的新概念,从无到有的开创性工作,不正是无数技术人向往的真正价值和方向吗?

  给妻子的礼物

  我知道你在抱怨什么。《全链路思考》一文中提到“辛苦的开源软件,发布不维护,无人问津,发布根本不是终点”。而在发布后的两个月内,这种令人担忧的现象竟然成真了。将近一个月的时间,Hawk被我降级到垫底,没有更新任何功能,几乎没有任何问题得到解答。以至于这篇文章花了我四个周末的时间来写。

  提升霍克的时间真的很艰难。春节前几周,从周五晚上到周日晚上,出门后眼睛就开始模糊,担心视力会直线下降。通常,周末的工作流程是这样的:早上8:00起床去电脑前,中午花一个小时吃饭休息,然后直接工作到晚上11:00。只有这样,我们才能获得足够稳定的输出。工作上的事情不能出错,很多时间都是在纠结中度过的。不过转念一想,还是把我最喜欢的游戏猿啼5(PS4上的游戏)通关吧,游戏机从此就尘埃落定了。

  我只能专注于几件事。一方面,工作不能失败,否则代价巨大,另一方面,还有更重要的事情:结婚。我大概能理解为什么老外写书写程序,他们会感谢家人,因为如果不能耽误工作,就只能挤出时间陪家人。

  婚礼的大部分细节都交给了她和我的父母。我真的去“参加我自己的婚礼”了。在过去的六个月左右的时间里,除了一半以上的时间在出差之外,我花在提升Hawk上的时间也极为有限。这么多周末,在家头顶大油头,穿大裤衩,光着膀子,改码。我儿媳妇没有任何怨言。她做了一顿饭,把热腾腾的饭菜端给我。她也支持和鼓励我。非常感谢她,Hawk 是我送给她的礼物。

  我也感谢我老板的支持,他很欣赏我;感谢盛哥和很多朋友的支持,是他们给了我继续完善Hawk的动力。这真的很尴尬。提升Hawk就好比大姨妈,一个月用整整一个月的时间,才有一些像样的进步。生活是艰难的,只有经历过才能知道,我对此心存敬畏。

  如果您对Hawk有什么想法和建议,欢迎给我留言。

  还没有结束,才刚刚开始。霍克如此,在生活和工作中更是如此。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线