H2KG-华育知识图谱项目报告(1)

Hello, 欢迎登录 or 注册!

/ 1评 / 1

本文作者:  本文分类:H2KG企划 计算机技术  浏览:188
阅读时间:3926字, 约4.5-6.5分钟

H2KG-华育知识图谱项目报告 第一期

本文中所有数据截止2022年7月9日晚上10点。

H2KG项目地址: https://hywiki.xyz

现在是2022年7月9日深夜(写好已经是7月10日凌晨了)。想起刚过去的7月5号,我十分兴奋。这一天,经过一天多讨论的华育知识图谱项目正式开放内测。在此之前,它只是一个腾讯文档,当然初期的网站也好不到哪去,没有写任何css样式,且只有添加数据的功能,连查看都是稍后几小时才有了的。但显然我与21159同学并未达成一致,在朋友圈、QQ天气等渠道进行了多方宣传。可惜的是,当时我的代码还没有经过严格的测试,由于把判断用户输入是否为空放在了获取用户输入之前,大量同学尝试使用却发现我给出了一个“Illegal input”的报错。这让我懊悔不已,并在第二天起床后迅速修改了该问题,当然这也许已经错失了一大部分有创造性的数据。哎,这只能怪罪php这种语言的弱类型等特性了,当然倒过来讲这也增加了程序编写的便捷性。在修改该问题的过程中又引入了一个小错误,但很快被修复,这个程序从此开始正常运转。

7月6日,该项目已经在一定范围内有所传播,数据量也开始快速上涨,这时,反对的声音出现了——最先提出的是21103,之后也有许多同学和校友对部分条目表示异议。迫于压力以及避免项目第二日即出乱子,我紧急下线了“现有数据”功能,留下一句话:“瞎表白的人太多了,先下线此功能。”同时,也加紧研制“举报”功能。在群友的讨论下,我决定将“举报”定为:先立即将该条目在列表中去除,并增设一个“后台管理”功能,其账号密码仅有“H2KG——华育知识图谱计划权限组”群聊的用户可以获得,可以决定对用户的举报是“删除”,还是“驳回”,同学们的意见也逐渐减少,大家也接受了这个项目并参与其中。事实证明“举报”功能在本项目中还是起到了十分积极的作用,虽然也出现了有人对前60条数据进行了无差别举报的闹剧,但后来也不再上演。

早期数据充斥着大量的“A喜欢B”,这完全在我意料之中的,这很好反应了同学们对于传绯闻的孜孜不倦,但也有些背离了本项目的初衷——构建华育的知识体系,转而变成了“实名表白墙”(231直呼内行)。随着此类数据已经被添加得差不多以及举报功能的上线,这种现象有所缓解,新添加的数据也逐步走上正轨。

2022年7月8日,安倍晋三遇刺。在各个社交平台激烈讨论这一重大事件的同时,依然有大量同学在为本项目的数据添砖加瓦并策划新功能,侧面体现了该项目已经具有了一定影响力,这也让我十分兴奋。有趣的是,数据库中也出现了一系列与该事件有关的内容,最典型的包括“24885”“内射”“安倍晋三”等内容,当然一些十分离谱的(包括这条)一出现即被举报或删除。有趣的是,正确的“山上徹也”“刺杀”“安倍晋三”直到9日下午才出现,即便该条消息在8日即广为流传。

这天这个项目也有了许多新的进展。首先是“可视化”功能的上线,把这个项目推上了一个新的高度,图片的各个角落在许多同学的朋友圈中频繁出现,大家都热衷于在图中找到自己所在的位置以及与周边用户的关系。很多原本对枯燥的图表提不起兴趣的同学也开始关注起了这个项目,也很好推广了本项目。图表采用ECharts实现,应当说这属于现在比较好的一个网页图表解决方案了,相比HighCharts可以说并不落后。当然,迫于学习成本过高以及时间有限,我并没有采用更自由、更复杂的D3.js,这虽然使后续开发遇到了一些可自定义程度低的问题,但其实可以接受,真要解决也并不困难。知识图谱其实就是一种力导向图,而这在绝大多数图表库中都有实现,所以我的选项其实很丰富。当然现在碰到的一个问题是性能问题,现在的数据已经越来越丰富,有着约500的节点与约1400的边数,这对于电脑渲染是一个巨大的挑战,在一台配有m3-7y30的低配置上网本中,可以明显发觉缩放、移动等操作极为卡顿,之后非常严重。在更高一些的配置(i5-8250u)中,该问题仍然存在但有所缓解。当然,使用M1 iPad配上Safari浏览器,这样的问题不再出现,但并不能得知在面对之后更为庞大的数据时是否有能力处理,因此可视化图表的性能问题目前亟待解决,我也在研究各类方案,但进展十分缓慢。也许可以随机隐藏一些边?也许可以给予用户更多的筛选选项?或者继续寻找可以驾驭更大型数据集的解决方案?我也正在思考如何给这个问题一个合理的解决方案。现在几千条的数据,仅作简单的数据库处理对于服务器其实毫无压力,只要不添加搜索功能,我认为处理上万条数据应该也不会对服务器有很大困难,实在不行就筹钱买云数据库!

在欣赏完可视化图表美观又高级的页面后,回去看首页,真的是没眼看了。对于美的不懈追求使得我迫不及待地想去美化这个页面。然而自己从头写css显然我是懒得弄的,于是我就思考用哪个UI库比较合适。思来想去,我还是使用了比较方便使用又简洁优雅的Semantic-UI,再加上我对一些元素的小改,页面呈现的效果立刻上了一个档次。对了,看这个UI库的名字就知道它是十分有特点的——它是语义化的,用这个真的是一种特别的体验,编辑class就像是在堆砌形容词。我们之前部署的SYZOJ用的也是这个库,所以一些同学对其界面可能感到熟悉。但是好归好,这个库有一个问题就在于它运行性能其实不太好,21159同学反应页面加载时间要增加两至三秒我不清楚是否就由于这个原因,当然,比起庞大的可视化图表那就是小巫见大巫了。

7月9日晚上,我进行了一个熬夜,这段时间又发生了许多事情。比如说22888李雪同学突然情绪崩溃,利用管理员的职务之便将QQ天气、华育语项目的群聊人员全部清除。虽然之后用群恢复功能还是把出去的群员拉回来了,但当时还是因为这件事烦了挺久。为了防止这位同学进行恶意举报,“举报”功能暂时下线,取而代之的一句话是“防火防盗防李雪”,当然第二天见他情绪有所好转便恢复了举报。前两天21159同学一直催促我实现pagerank算法,我便在熬夜期间改了改他发来的Python代码实现了pagerank并放进了“节点列表”中,这个计算会消耗大量服务器资源,甚至会卡住,虽然其实一般来说只要3秒左右即可算完,但每次新添加数据就算显然不现实,于是我用crontab定时每小时进行一次计算,解决了这个问题。但似乎同学们并没有对这个结果感到兴趣,因为最终pr值最高的都是一些抽象的、概括性的词,如“课代表”,而同学们的学号和班级则大多在末尾且并列很多,这并不符合我们的初衷。究其原因,是因为同学们的学号等节点,以流出,即指向别的事物居多。比如说“23564”“担任”“数学课代表”,而“数学课代表”又“属于”“课代表”,与我类似情况的同学很多,因此“课代表”节点的被指向就会很多,其pr值也随之飙升。这样“事物”们的pr值很高也就很好理解了,当然pagerank算法最早使用于搜索引擎对网页进行排名,在我们这里出现这种情况也完全可以理解。显然我们对这个结果并不满意,于是我们想是否可以直接忽略箭头指向,直接将关系都改成双向关系,我写完文章就去试试看。

以上就是关于本项目并不丰富的历史,更多的内容,只能等待尊敬的21159贾知白同学更新他的报告时再补充了。对了,他说到了1000条时就要出分析的,我在此进行一个催更。

关于源代码,我使用的是PHP,毕竟用它写网站是十分便捷的。为了防止当时LandChat出现的一堆漏洞(它们甚至很容易在无意间被触发),我在一开始就做了MySQL预处理查询和html实体字符转义,以防止可能的SQL注入和XSS漏洞。Pagerank计算使用的是Python,我最终还是没有让Python直接操作MySQL,而是直接让PHP调用它并返回结果。肯定有人问为什么没用最爱的C++,显然用C++写网页用到cgicc库,而这是我懒得搞的,且它本身也并不适合。稍后我会上传源码至本文的附件,各位有需要的可以自行下载阅读。

说说关于本项目的展望吧。搜索功能我觉得可以有,但应该只能是精确搜索,模糊搜索在数据太大的情况下对MySQL的压力太大了;在用户输入数据达到更大的数量以后我觉得就要对“已收集数据”页面分页了。还有创建一个自动替换清单,规范化词语的使用,方便分析。一些有趣的功能,比如通过最短路径算法实现“速通”。我们应该也会提升可视化图的观感,气泡大小根据节点的pr值或者出入度决定。性能优化,尤其是可视化页面的,我们一直在想着做,但实在能力有限,可能做不好。实在不行我觉得甚至可以考虑在服务器端进行渲染?当然,pjax也是要做的,这样切换页面就能很流畅啦!

最后,我决定把现在的H2KG公厕公测版上升到RC版(即候选版本),等收集到2000条数据且基本不再发现Bug时,可以正式改为稳定版并大规模推广。本项目还有远期规划,会新增人物档案功能,避免大量不必要的“A担任B”的边出现,淹没一些真正有趣、有价值的数据。更长远的也许会集成21159的Huayu2Vec项目的部分功能,比如常见的“最相关人物分析”,方便电脑上没有Python环境的同学使用,等等。甚至可以不止H2V,与一些别的企划进行联动,真正打造得符合我们的域名——“hywiki.xyz”。我们也热切欢迎各位好的想法。还有一个需要顾虑的点是老师,他们可能会对我们直呼姓名、传播绯闻、在可视化图中被归类为“事物”等事情表示反对,那即使我能顶住压力也会是一个很大的阻碍。在这里我只能恳求各位守口如瓶,先别跟老师分享了。

啊,全文三千多字,感谢你能看到这里。我稍后会增加一些图片以提升阅读体验。对了,本项目还没有logo,需要设计一个。各位辛苦了!

关于作者

本作品采用 知识共享署名-非商业性使用 3.0 (CC BY-NC 3.0) 许可协议进行许可。
  1. Aegleseeker说道:

    李雪那是啥事 讲讲

发表评论

您的电子邮箱地址不会被公开。