德国红十字会(DRK)有19个州级协会、450多个县级协会,服务从食品银行到老年护理再到冬季救助,全德遍地开花。但有个尴尬事实:总部其实不清楚具体哪儿在提供什么服务。各协会高度自治,信息孤岛成了常态。

过去靠两种笨办法:一是手动录入服务数据库(DLDB),二是发问卷回收。前者耗人耗时,后者回收率惨淡,数据到手往往已经过期。一个覆盖千万级潜在受益者的组织,居然靠Excel和邮件打听自家家底。

爬虫+自然语言处理:把官网当数据库用

爬虫+自然语言处理:把官网当数据库用

2022年夏天到2024年夏天,一个纯志愿项目改变了这个局面。Data Science for Social Good Berlin与DRK数据科学中心合作,没等任何人填表,直接爬取各协会公开网站。工具链很务实:Scrapy(网页抓取框架)负责扫荡页面,Dask(分布式计算库)并行处理海量文本,自然语言处理(NLP)从非结构化描述里提取服务类型、地点、目标人群。

最终成果:3万多条结构化服务记录,覆盖全国网络的大部分角落。

这个数字什么概念?之前DLDB靠人工积累多年,条目数量级与此相当,但更新频率和覆盖完整度被甩开几条街。爬虫每周能跑一轮,问卷一年能发几轮?

技术选型的务实一面

技术选型的务实一面

项目没追新。Scrapy是2010年代就成熟的工具,Dask解决的是"单机内存不够"的工程问题,而非炫技。NLP部分也没上巨型语言模型——协会官网的文字相对规范,传统文本分类加规则引擎足够应付,成本可控,解释性还好。

一个细节:DRK网站架构并不统一,有的协会用WordPress,有的自建系统,还有的直接套模板。爬虫要适配几十种页面结构,维护成本不低。团队的做法是先抓大协会覆盖人口多的区域,再逐步补全长尾。

公益数据科学的典型困境

公益数据科学的典型困境

项目2024年夏季结束,代码和文档移交DRK。但挑战没消失:爬虫需要持续维护(网站改版就失效),NLP模型需要随业务演进重新标注,数据质量需要人工校验。志愿团队可以启动项目,长期运营还得靠机构化投入。

DRK数据科学中心的反馈是,这套系统已成为内部规划的重要参考,尤其在灾害响应和资源调配场景。但"重要参考"和"唯一真相源"之间,还隔着组织变革的距离。

3万条记录躺在数据库里,下一个问题是:有多少一线社工知道怎么用它?又有多少决策者愿意让数据替代经验直觉?