西岳史学 || 张光伟:数字人文编程的历史教学实践
数字人文编程的历史教学实践
张光伟
摘要: 在讨论数字人文领域中计算机编程重要性和人文学者掌握编程技术的必要性之基础上,以历史学编程课程为例介绍了有效进行数字人文编程教育实践的方法。课程对数字人文研究方法进行梳理和分类,分层次构建了课程代码库,实现了历史学编程“支架”和“管道”的搭建,大幅降低了人文学科学生学习编程解决问题的门槛,同时保证了学习效果。在编程课程的基础上,进一步将“支架+管道”模式扩展到人文专业计算思维的培养,并通过数字人文课程实践进行验证,以探索一种能够真正提升人文学者应用计算机解决专业问题的可实践、可操作的方案。
关键词:数字人文;编程;支架式学习;管道;计算思维;新文科
作者简介:张光伟,陕西师范大学历史文化学院。
Email:zhangguangwei@snnu.edu.cn。
0 引言
数字人文的蓬勃发展为人文研究提供了新的可用数据和方法,也对人文学者的数字化研究能力提出了更高的要求,但传统的人文学科高等教育中一直以来普遍欠缺相关技能和素质的培养环节,更不用说与人文专业深度融合的理论、方法和技术等方面的教学。因此,目前能够深度介入数字人文研究的人文学者实际上并不多,有些学科甚至“缺席”。但是,数字人文在任何人文学科的应用和普及都离不开该学科学者的深度参与,一方面,大数据、人工智能等正在为自然科学、人文社会科学研究带来新的研究范式,人文学者应积极介入此过程;另一方面,人文学者将涉及数据分析、计算的工作外包给计算机专家或者仅仅使用一些现成的软件也是不可行的,因为这会给随后的应用留下一些隐患,破坏解决问题中想法的完整性。因此,从时代环境、学者自身能力发展、学科发展趋势、实际科研要求等各方面来看,都需要重视培养未来人文学者使用新的信息技术解决人文专业问题的能力。
但是,人文专业学生相关能力的养成比自然科学,甚至比社会科学学生的难度都大,面临的挑战更多,最突出的矛盾即是将来他们使用计算机要解决的问题抽象层次较高,而其具备的计算机素养和实践能力却较低。幸运的是,数字人文研究为解决这个矛盾提供了大量可供利用的方案,包括新的研究思路、方法和实现手段等。但对多数人文学者来说,将数字人文引入自己的研究就有相当大的困难,例如难以理解案例的理论、无法实现案例的方法,甚至连需要的数据都难以高效处理等。这些问题在很大程度上与计算思维的欠缺有关。计算思维包含四个维度:问题分解、模式识别、抽象、编程实现(如 图 1 所示,详细介绍见后文),各个维度可以在数字人文的不同层面发挥作用,其中编程是计算思维的实践,能够在最具体的层面直接作用于数字人文任务,而且通过编程完成数字人文任务又会反向促进计算思维的提升,从而形成良性循环。
图 1 数字人文、计算思维与编程的关系
我们的历史学编程教学实践证明:(1)编程训练有利于人文专业学生计算思维的培养,助推数字和人文的深度融合;(2)编程课程的设计要与人文专业的教学与研究内容相结合,才能够解决人文领域真正的问题;(3)编程课程的实施要充分考虑人文专业的学生的特点,保障学生对编程的持续兴趣和学习质量。
1、数字人文需要编程
1.1 编程之于数字人文实践的重要性
近年来,国内外数字人文研究发展如火如荼,大量数字人文相关平台(如“中国历代人物传记数据库”CBDB)和软件(MARKUS、DocuSky等)已经投入使用,人文研究可用的结构化数据集规模越来越大。大数据给人文学科带了新的机遇,数字人文成为人文和计算之间的融合媒介和最佳实践,人文和计算的不断深度融合又助推高水平的数字人文研究向前发展,其中,网络分析、计量文献学、文本分析、地理信息系统和数据可视化是当前数字人文主要涉及的数据化研究方法(图 2)。
图 2 人文与计算的关系
人文专业问题的解决往往需要将这些不同的研究方法组合起来使用。有些软件平台已经组装好了工作流程,例如,CBDB能够将查询到的数据输出为Gephi、Pajek以及GIS软件能够处理的数据格式,形成了数据查询、分析与可视化的连贯流程。这样的流程让人文学者甚至可以不具备相关方法的知识背景的情况下完成专业的数据分析。这种模式对推进人文问题的数字化研究有重要意义,但也存在两方面的不足:(1)封装好的流程对人文学者隐藏了方法和技术实现的细节,(2)如果研究需要的数据在CBDB中没有包含或者不全,那么人文学者就难以利用后续的处理流程,甚至会对这种方法产生质疑。从文本数字化到数据化再到分析的整个流程,如果人文学者都能把握,才是更为有意义的数字人文研究的模式。
如图2所示,编程是利用计算机处理能力的主要手段,而且软件也是编程实现的,但在数字人文领域,编程仍然被认为是研究项目的辅助手段,并没有被视为一种探索、研究的方法或者能够引导研究的方法,进而被当作必要技能,甚至很多人文学者并不清楚编程对人文研究的益处。其实,很多数字人文研究路径的实现既可以通过专门的应用软件,也可以借助通用编程语言。以社会网络分析为例,可以使用Gephi、Pajek等软件,也可以使用编程语言Python的NetworkX、Jaal等网络分析包来实现。现成的软件(平台)能解决一些问题,但一般都是针对具体的任务,不同任务之间的“迁移”能力较差,学习成本也并不低,而且软件所采用的理论和方法被封装,虽然可以将其视为“黑盒子”完成任务,但不利于人文学者了解数字化方法背后的原理,因此较难形成或持续数字和人文之间持续的互利合作。相较而言,人文学者掌握编程能让信息技术的利用更加灵活,与人文专业的需求深度融合,而且编程语言“写就”的解决方案(例如开放代码和数据)能够成为比文本更为高效的交流途径。因此,若希望计算机真正成为解决人文问题的工具,让编程成为解决问题过程中的一个强有力的环节是必要的。
1.2编程是训练计算思维的重要手段
人文专业学生学习编程解决专业问题时普遍存在一个矛盾,即信息技术基础相对较差,但其所研究的问题抽象层次却又相对较高。因此,要求其既要具备编程的能力,又要具备将本专业的较为抽象的问题转化为编程可解决的问题,具有较大的难度。这可能是编程在人文学科教育中较难推动和普及的一个重要原因。要解决上述矛盾,培养人文专业学生的计算思维 (Computational Thinking)将起到关键作用,而且这一素养在其将来的学习和研究过程将潜移默化,发挥重要影响。
计算思维是一种解决问题的方法,由时任美国卡内基梅隆大学计算机科学系主任的周以真教授在2006年提出并倡导,主要包括四个核心部分:(1)问题分解(将复杂的问题分解为较小的、较为容易解决的问题);(2)模式识别(在相似的问题、经验之间建立关联);(3)抽象(关注问题重要的信息忽略不相关的细节信息);(4)算法(设计可实现的步骤解决问题)。计算思维也可以概括为3A迭代过程:(1)Abstraction——抽象,问题表示;(2)Automation——自动化,解决方案表达;(3)Analysis——分析,解决方案执行和评估。数字人文研究实际上就是在用计算思维解决人文领域的问题:人负责把实际问题转化为可计算问题,并设计算法让计算机去执行,计算机负责具体的运算任务,从而实现了人机协作。或者从某种程度上可以说计算思维的应用能够让我们将复杂的问题表示为人和计算机都可以理解的形式。“未来的发展若能为计算思维赋予鲜活的人文特色灵魂,必将对日趋复杂的社会经济活动给予更加合理的解释。”
体现计算思维的关键词包括问题解决、问题转化、编程实现等,它们在数字人文研究项目和方法中都有不同程度的体现,但是这些任务对于人文学者来说却有不小的难度,因此我们应该借助新文科的发展机遇,面向未来,吸取数字人文研究中所广泛应用的理论、方法和技术,从而形成培养新一代人文学者的材料,并构建新的教学模式。
当前对数字人文教育模式的调查与研究以宏观层面居多,如祝蕊、刘炜对欧洲数字人文人才培养的教育模式进行了调研;尼克·蒙特福特(Nick Montfort)提出探索式编程能够帮助研究者提出、提炼、推翻问题,或者进一步发展现有的数据表示、计算方法和理论,因此编程有可能成为未来的一项基本素质。我们结合所从事的数字人文研究以及国内外典型的数字人文案例,深入分析中国历史专业学生的特点,在实践中探索出了一套适合历史专业的“支架+管道”编程教学模式,并将之发展为人文专业的计算思维培养的一种框架。
2、基于“支架+管道”的历史学编程课程教学模式
高等教育中编程课程有助于计算思维的培养[9],而现代编程并不需要太多坚实的数学或计算机科学的基础,只要具备基本的逻辑思维能力就可以学习。在教学中用典型的具有前瞻性的人文研究案例来引发人文专业学生持续的兴趣,将其合理分解与分类,科学地帮助学生构建人文编程框架,切实提高学生以编程解决实际专业问题的能力,是真正实现计算与人文融合的有效的实践路径。
2.1 课程设计思路
2.1.1 专门面向人文学科的编程
人文专业的学生需要一种既容易学习又功能强大、能够将多种方法“粘合”起来的工具。Python有“胶水”语言的别称,擅长将不同的功能整合起来,特别是丰富的第三方库让其在各个学科和领域都有大量应用;同时具有接近于英语的高级语言特性,是计算机编程语言中对人文专业最为友好的语言之一。这两个特点让Python特别适合数字人文编程。近些年逐步开始兴起的可视化编程,相较于传统的基于文本的编程,对于数字人文学者以及学生可能更有吸引力,这也是本课程正在探索的内容。
历史学编程课程帮助学生接触并了解Python编程语言,课程内容紧紧围绕历史专业学习和研究,而非一般意义上的Python编程。通过课程提供的典型案例,学生能够很快地利用已有代码或者上手编写代码,解决历史学习和研究中的一些问题。
2.1.2以解决历史专业问题为目标导向
历史学问题应用编程来解决时属于高阶应用,对于历史专业的学生来说,编程水平的要求其实是比较高的,但是学生实际基础往往比较差,甚至是零基础。而且,课程性质决定了课时较短。对此,目标导向的教学方式是比较好的办法,即编程语言的基础教学不能全面铺开,而是根据项目的需要来重点教授。具体而言,根据目标的要求将编程学习分为三阶段:编程基础、基本应用、高阶应用。课程瞄准高阶的历史学习和研究的应用(典型案例),对于其中涉及的基本应用(功能)进行梳理,总结编程基础环节需要着重强调的基本技能、基础知识。
课程详细规划(思路与方法)如下。编程教学要以历史专业应用案例为切入点,通过解决历史专业学习和研究中的真实问题来引起学生的学习兴趣。历史学编程教学案例的选取贴合历史专业学习和研究的内容,主要包括文本操作与分析挖掘、数据分析、网络分析、GIS相关以及数据可视化等。如图 3所示,课程体系包括从Python的语言【基础】到具体方法的实现【基本应用】,最终实现将历史专业学习和研究中的问题分解为一种或多种【基本应用】的组合。因此,学习的过程是由外而内,而实践中解决问题的过程是由内而外。
图 3 目标导向的历史学编程课程规划
2.1.3 课程案例选择原则
课程案例的选择紧紧围绕“编程解决历史专业问题”这一目标,在教学过程中由浅入深地逐步引入具有时效性、代表性的数字人文研究案例。课程所有案例发布在Gitee代码托管平台,下面主要以词云、历史地理分析以及文本分析为例介绍本课程案例选择的原则。
词云是远读(DistantReading)分析中常用的一种结果呈现方式,使用Python实现相对较为容易,主要涉及中文分词、词频统计以及可视化呈现等步骤。以近两年为例,本课程2020年选择的词云生成对象是当年教育部评选的第一批国家一流课程名单,2021年选择的是当年社科基金历史学类项目课题名称。这类分析对象与学生的专业息息相关,分析数千项文本信息既实践了课程所学,也是对自身专业前沿研究的一种宏观了解。
基于文本分析的历史地理空间信息解析、编码和可视化是本课程的高阶综合案例,目标是实现历史文献中地名的提取并在WebGIS中呈现。教师将实现该案例的工作进行了适当简化,例如地名的提取虽然可以使用大规模预训练模型(针对现代汉语和古代汉语),但一方面其性能尚不完善,另一方面使用门槛较高,所以教师利用分词插件结合自定义词典的功能为学生构建了一个可以“积累”的古代地名识别与编码器,其中的地名和经纬度信息来自CBDB的地名表,其功能既可以随着CBDB的升级而提升,也可以通过学生自行增加其中缺少的地名信息而提升。WebGIS的功能接口在课程案例中也提供给学生,他们能够在自己工作的基础上,完成自己需要处理的古籍中的地名在WebGIS平台的可视化。学生将来可以组合利用这个案例的各个环节,实现自己的研究目标。
在所有案例的实现过程中,教师都注意一方面帮助学生巩固已学的编程知识,即尽量基于学生已经具备的Python编程基础,另一方面设置需要学生“跳一跳”才可以达到的目标,这也符合教育部提出的建设“金课”“两性一度”的标准。
2.2 课程实践
本课程为历史学专业二年级本科生在第一学期开设,采用线上线下混合式教学,每周2学时,共36学时。除了课堂授课,课程代码库的使用教程和视频,通过作者维护的微信公众号“智能数字人文”(微信号:AIandHumanities)提供给学生进行线上自主学习。
课程围绕设计的教学内容,构建了历史学编程代码库①(图4),覆盖Python编程语言基础,为学生学习高阶应用如文本分析、数据处理、数据可视化等提供了“支架”代码。课程代码主要采用JupyterNotebook实现,能够方便地实现问题的文本描述与解决方案代码的混合编辑和运行。这些代码一方面能够帮助学生学习掌握相应方法、编程实现,另一方面稍加修改即可完成个人研究项目的数据分析等功能。除了编写代码,Python运行环境的安装和配置对于人文专业学生也有一定难度,因此课程的代码库支持在Binder②代码运行平台在线运行,这进一步减轻了学生的负担。待学生具备一定的Python编程能力之后可以完成本机Python环境的搭建,在本机运行代码。
图 4 历史学编程代码库
课程代码库数字人文方法的代码主要包括社会网络分析(图 5右上)、前述2021年社科基金中古史项目词云构建(图 5右下)及文本分析与GIS综合应用(图 5左)等。这些内容与Python语言基础共同构成了历史学编程课程的“支架+管道”(概念细节见第3部分)。
图 5 课程代码示例
本课程代码库搭建的“支架+管道”不但解决了历史专业学生配置编程环境的困难,还有效地疏通了以下曾有的教学难点:(1)学生课下难以自行实现课堂上讲授的数字人文案例,会给部分学生造成挫败感;(2)学生的编程难以突破课堂教学内容,难以有效应用于专业学习和研究;(3)计算机专业教师与历史学专业学生的编程交流存在障碍。就课程中每周作业完成情况来看,明确使用“支架+管道”模式之后,与早期课程相比,学生完成教学案例的比例大幅度提高,有部分学生能够通过修改代码适配个人研究项目,甚至有些学生能够通过组合课程的多个代码完成新发表的数字人文研究论文中的案例。
3、“支架+管道”的人文专业计算思维培养模式
在历史学编程教学实践的基础上,我们提出了“支架+管道”的人文专业学生计算思维培养模式,在已经进行的相关实践中取得了很好的效果。
目前,“支架式”教学在教育学、语言学、编程等课程中已经得到应用。所谓“支架式”教学,是基于建构主义学习理论的一种以学生为中心,以培养学生问题解决能力为目标的教学方法。教师在了解学生已具备的能力基础上,提供引导,帮助学生搭建“脚手架”,辅助学生实现能力的跨越。在本文中,“支架式”教学主要体现为将一个宏大的问题分解为可操作的若干小问题,这里主要指的是可计算的问题。
“管道”是我们在“支架式”教学基础上提出的一种适合于本课程的教学手段,“管道”随着课程的进行不断铺设(如图 6所示)。“支架”是一种方法论层面上的解决方案,即训练学生将人文问题转换为计算问题的能力,这主要是思维方式的锻炼,但是转换为可计算问题之后,解决方案往往需要复杂的计算理论和软件,这对于人文专业学生也是较大的挑战。因此,“管道”是在操作层面解决问题:课程使用的软件可以互相搭配、连接起来形成一个解决问题的“管道”,其中“流淌”的是数据。教师为学生做好软件之间的接口,可以实现上一环节软件出口流出的数据能够流入下一环节软件的入口,并能够得到正确处理;数据流到最后,学生能够得到需要的结果。这里的软件有些是现成的专业软件(CBDB课上以现成软件为主),有些是教师自己或者同行编写的代码(编程课以学生编写代码为主)。学生能够很快学会搭建“管道”来分析数据,因为学习初期他们无需了解实现的细节,这将让他们从不断完成更高难度的实验过程中逐渐提升自信心。在此基础上,学生在解决具体问题时就会主动“回过头”去学习“管道”所涉及的理论和方法,由此,学生的学习就变被动为主动。
中国历代人物传记数据库(CBDB)课程是我们针对新文科建设所开设的,该课程与历史学编程课程有一些相似之处,因此在教学过程中也采取了“支架+管道”的教学模式,具体如图 6所示。教学过程中,教师以CBDB数据为基础,不断将新的数字人文研究方法引入课程架起“支架”,如社会网络分析、历史地理信息系统等,帮助学生了解使用数字人文方法解决历史专业问题的方法;“管道”是利用各种手段实现“支架”以及关联不同的“支架”来解决实际问题。随着“支架”和“管道”的不断实体化,学生使用计算解决问题的技能也不断扩展和增强,而且不同的管道之间会发生关联,学生有可能在使用过程中找到新的解决问题的办法。
图 6 中国历代人物传记数据库(CBDB)课程“支架”与“管道”示意图
“支架+管道”的教学模式大大纾解了历史专业学生学习较高难度的数字人文技术所面临的困难,特别是通过典型案例复现实验,学生能够较为容易地实现复杂的数据分析任务;在此基础上再引导学生主动分析技术背后的原理、技术与历史专业问题之间的关联以及问题的双向转化。
“支架+管道”支持的数字人文课程的内容和教学方法,能够显著提升人文专业学生自主学习的创新能力,应用编程解决专业问题的能力和积极性。我校历史专业学生参加“挑战杯”“互联网+”等创新比赛的能力明显增强,作品的质量有了显著提升,例如,有2020年历史专业学生参加全国第三届虚拟现实及应用创新大赛获得优秀奖。相关的数字人文课程建设助力我校2021年申报的“深度融合新一代信息技术的历史学教师教学方法创新与实践”入选首批教育部新文科研究与改革实践项目。
总之,“支架+管道”的教学模式极大提高了学生学习的效率和效果,在历史学编程和历史学相关的数字人文课程教学中具有较强的可实践性,因此有可能成为人文专业中培养学生计算思维的一种框架。
4、总结
本文分析了数字人文中编程的重要性,通过历史学编程课程的设计和实现讨论了人文专业学生学习信息技术的特点,设计了一种基于“支架+管道”的符合人文专业特点的课程教学模式。针对此模式,我们搭建了开放式课程代码库和云端运行代码的课程学习框架,最大程度降低了人文专业学生学习编程解决专业问题的门槛,同时能够保证质量。这种模式也可以推广到数字人文的其他课程中,并有可能成为人文专业培养学生计算思维能力且具有可操作性的框架,从而实现数字人文研究的方法的普及,并推动数字人文研究质量的提升。
往期推荐:
斯年已尽,潮生未满 | 《唐潮》杂志公众号2021年推送合辑
2022年江苏省研究生“社会变迁与文明进程:世界史与中国史的对话”学术创新论坛第一轮通知暨征稿启事
文字来源/“数字人文研究”公众号
责任编辑/王子烨
审核/江炜炜