书评|耿强:Python自然语言处理工具在语料库和翻译研究中的应用——评《语料库与Python应用》
点击蓝字|关注我们
一
大数据时代,数据的容量激增,类型多样,传播加速,这“将语言服务业带入了一个全新的信息纪元”,信息处理技术成为新兴语言服务市场的“基础支撑”(王华树,2016:19)对于译者(包括研究者)而言,语言信息的处理无疑是最为基础的一项要求,与此相关度最大的莫过于语料库技术和自然语言处理技术两个方面。目前自然语言处理(NLP)所使用的计算机编程语言主要是Python,它的自然语言处理工具包(Natural Language Toolkit,简称NLTK,官网http://www.nltk.org/)是文本分析方面比较重要的,也是比较成熟的开源库之一,提供的接口可接入超过50种语料库和词汇资源。使用Python可以很容易地调用相应的库和模块,进行文本的分类、切分、词形还原、词干提取、标注、解析、聚类和情感分析等操作。Python为自然语言处理和语料库及翻译研究之间的沟通提供了强大的接口。然而市场上最近几年出版的大多数相关图书都只是介绍如何利用Python进行自然语言处理(参见Chopra et al.,2016;Bhavsar et al.,2017; Lane et al.,2019),并没有单独探讨Python在语料库研究中的应用。本文介绍的《语料库与Python应用》一书围绕语料库和翻译研究中的实际问题,以十分友好的编排方式向读者展示了Python编程在语料库以及翻译研究中的应用情况。它的出版将自然语言处理的方法和工具运用到语料库和翻译研究中,这对翻译实践者和研究人员来说是不可多得的入门书。
二
《语料库与Python应用》由上海交通大学出版社于2018年7月推出,列入“语料库翻译学文库",作者是管新潮博士。该书一共8章,以由浅入深的顺序分布在除第1章绪论之外的上、中、下三篇。上篇有4章,展示了语料文本处理的基础性代码;中篇2章,组合使用上篇的基础性代码,处理Excel文件的输入、输出、语篇词汇密度、词汇复杂性、词长分布计算等具体任务;下篇1章涉及语料库的拓展应用。除此之外,该书还包括4个附录和1个索引,分别列出了与该书相关的加载模块与函数命令对应表,Python2和Python3不同版本部分代码区别表,部分NLTK自带语料库,汉英术语对照表等。
本文将首先逐一介绍8个章节的主要内容,然后对其进行简要评述。
第1章概述了语料库的基本知识,解释了为什么需要使用Python工具解决语料库研究中的问题和任务,并交待了书的内容和章节安排。上、中、下篇的内容按照Python工具使用的复杂程度和难度由浅入深进行组织。
上篇包括第2章至第5章的内容,主要介绍了语料文本处理过程中所需要的Python基础性代码。第2章介绍了中英不同语言语料文本的读取和运行结果的输出。语料文本根据存储的位置不同分为三类,一是NLTK本身自带的语料库(包括Project Gutenberg、Brown Corpus、Inaugural Address Corpus、WordNet等),二是研究者自制的语料库,三是非独立存储的语料库(在Python代码编辑器中与代码一同显示的语料)。第一类语料可以通过调用NETK包中的不同模块进行加载,比较方便。最复杂的是第二类语料,它根据语料存储的格式分为txt(纯文本文档,一般采用UTF-8编码)、docx(Word文档)、xlsx(Excel文档)三类。三类语料文本所使用的Python代码在调用函数和使用方法的时候稍有不同。由于语料库所使用的语料文本一般默认格式为txt,该书也主要以此格式为讨论的主要对象。此外,由于中文不像英语,词与词之间没有空格,为了处理中文语料,必须先对它进行分词,因此和英文语料的读取相比,中文语料的读取需要安装并加载jieba中文分词工具。
第3章“语料库应用的基础性代码”介绍了如何利用Python代码处理中英语料的停用词使用、文本降噪、文本的语言学处理、文本的语言信息处理等方面的内容。该章对中文语料处理的介绍比较简略。
第4章“数据可视化”简单介绍了如何用三类可视化形式——表格、数据图和词云图——在两维空间中呈现语料文本分析的数据。表格可视化指的是把文本分析数据置于表格中,以增强词类与数字之间的关联性和可比性;数据图可视化是指把与词类相关的数字以一定的形状呈现出来,如词频图、柱状图、点状图等;词云图可视化可以显示某一语篇或一个语料库中主题词的呈现情况。上述可视化均使用的是条件概率分布函数ConditionalFreqDist(conditions, samples),它有条件和样本两个参数,通过使用这个函数的cfd.tabulate(conditions, samples)和cfd.plot(conditions, samples)方法,可以分别打印条件频率分布表格和绘制词频图形。不过,为了绘制柱状图和点状图,必须安装和加载NumPy库,这是Python语言专门用于处理数组和矩阵运算的扩展程序库。而词云图的绘制则必须加载词云图工具包WordCloud和Matplotlib绘图库中的pyplot模块。对于中文词云图绘制而言,必须先加载jieba模块进行分词。
第5章“代码运行错误分析”介绍了与该书主题相关的十大代码运行错误类型,包括输入输出错误(IOError)、对象属性错误(AttributeError)、数据类型错误(TypeError)、变量名称错误(NameError)、索引错误(IndexError)、缩进错误(IndentationError)、参数类型错误(ValueError)、语法错误(SyntaxError)、Unicode解码错误(UnicodeDecodeError)、关键字错误(KeyError)。初学编程者在运行代码过程中经常会出现程序报错,若能够根据错误提示快速识别错误类型并有效排除,可提高编程者的编程和解决问题的能力。(管新潮,2018:89)
中篇的第6章和第7章是Python编程的第二阶段,即利用上篇的基础性代码来完成特定的语料库研究与应用方面的任务。第6章“算法、代码与编程”主要介绍编写代码的流程和思路。这里所说的算法指的是设计如何解决问题并编写合适的代码实现任务要求的过程。算法设计的关键在于加载何种工具包,以及如何安排代码流程。(管新潮,2018:113)编写代码需要首先对代码的语言学意义有充分的了解,这样才能更髙效地完成任务。代码的字面意义有时会与语料库语言学中的意义有出入,如text.collocations()表示函数,collocations()用于提取text中的双连词,而语料库语言学中的collocation表示的是搭配。若提取其他的几连词,Python代码使用的函数是ngrams()处理同一个任务可以有不同的代码来实现,但不同代码在分词、降噪、停用词等方面会产生不同的结果,直接影响语料库的语言学统计。比如语料文本的语言学处理需要首先将文本转换成列表(list),方法有三个:word_tokenize()方法、split()方法、words()方法。用第1个和第3个方法分词的结果相同,单词和标点符号均被分词为相互独立的元素,而split()方法却把单词与标点符号合并成一个元素,这会导致相关语言学统计不准确。此外,采用这个方法不易清除标点符号,这样在后续的文本处理,比如在降噪和停用词处理时造成困难。因此,为了语料统计结果的精确性,建议在编程时选择words()方法或word_tokenize()方法,前者在代码行数方面更为精炼。
第7章“基础性代码的语料库组合应用”以实际的6个任务为个案,展示了如何通过“提出问题、算法设计、对应代码、代码编程、问题思考”这5个步骤解决问题。这6个任务包括:以Excel文件格式输出术语(类符)、以Excel文件格式输出表格、语篇词汇密度的计算、语篇词汇复杂性的计算、语篇词长分布的计算、NLTK自带语料库的检索使用。该章所使用的代码编写方法不再采用列表编写法,而是采用自定义函数模块的方法,其优点在于用这种方法编写的代码段可以独立使用,而且可以针对特定目的组合使用不同的代码段,提髙了代码段的使用效率。
下篇只有一章,即第8章“Python的语料库拓展应用”,为该书设定的Python编程的第三层次,目的在于通过实际的语料库研究问题,围绕它设计Python实现的代码。该章强调自主编程以解决实际问题的能力。七个案例分别是如何将单语语料导入Excel工作簿、文本中关键词组的检索、文本中特定词类的词形还原、专业语篇的术语提取、文本段落对齐、应用语言学文献计量研究的数据提取、专业通用词的提取。在最后一个任务中,作者基于Google发布的神经网络机器学习算法模型词汇向量word2vec训练N-gram语言模型,模型参数作为词汇的向量化表示,然后执行语义相似度计算,计算结果最终用于专业通用词的提取标准。作者设计的专业通用词提取算法由语料加载与预处理、候选词筛选、词向量生成与相似度计算、专业通用词提取以及分析与评价五大模块构成。(管新潮,2018:188)
四
该书在如何通过Python编程使用自然语言处理技术服务于语料库研究方面做出了有益的探索,但不得不指出,它在一些地方也留下了少许遗憾和不足。
(一)该书预设的读者对象与实际情况存在差距。第一章绪论里明确指出“本书的适用对象包括没有编程基础的学生和语料库实践者”,并表明“本书旨在教会读者使用Python工具”(管新潮,2018:3)。但在该书第9页就出现了代码,然而要想读懂文中的示例代码,不掌握一点Python编程基础知识是不行的。
虽然作者会对每一个示例代码进行解读,但零基础的读者很难理解代码背后的意义,如什么是变量、怎样赋值、如何调用模块、如何选取参数、怎样处理不同的数据类型,等等。书中并无任何Python基础语法方面的介绍,显然,它是为具有一定Python基础的读者准备的。为了实现“教会读者使用Python工具”的目标,以及让文科生或者技术零基础者不再对纯技术产生畏惧心理,稍微介绍一下Python语言的基础语法是十分必要的,起码也应该提供一些入门参考书和网络视频供读者阅读或观看,如《Python进阶》(Head First Python, Paul Barry, 2011)和YouTube网站上的教学视频《跟我学Python》系列。
(二)Python使用的版本问题。该书一直到第9页出现第一个示例代码之前都没有明确说明使用的Python版本是2.x系列。目前,Python版本已经升级了,笔者的笔记本电脑中安装的版本是Python3.7.0由于两者存在一些差别,且互不兼容,书中代码在复现过程中会出现错误,如在Python2.x中,》>print‘text’打印字符串是可以的,但Python3.x中必须加上括号,写成»>print(‘text’)这些版本上的变化给笔者在复现这些代码时造成了小小的麻烦。虽然该书附录里列出了Python2和Python3版本在部分代码上的不同,但并不全面。由于作者并未在文中说明里面大多数代码使用的是Python2,造成有的代码在Python3中无法运行,或者运行过程中报错,比如读取Word文档时,docxDocumentO在Python3里显示语法错误。Python官方宣布2020年之后将不再对Python2.7提供支持,这样看来选择Python3.x成为趋势,但由于Python2.x仍然带有很多成熟的第三方库,且有的在Python3.x中并不存在,因此选择哪个版本还要综合考虑“要解决什么问题、整个软件的生态系统、可使用的第三方库、架构和部署等”(Sarkar,2016:60)。
为了解决Python不同版本的兼容问题,笔者跟该书作者进行了沟通,作者建议可以同时安装Anaconda2和Anaconda3两个版本。Anaconda是一款Python包管理和环境管理软件,一般用来配置不同的项目环境。它自动安装Python的相应版本、配置好环境变量及下载常用的第三方库和模块,省去了入门者在配置环境变量方面遇到的麻烦,是首选的集成开发环境。该书使用的是Anaconda2,但作者并未介绍该软件的安装以及如何使用Anaconda Prompt下载并安装相应的库和语料,如何使用Jupyter Notebook编写代码等。这些知识看上去好像没有什么技术难度,但对于入门者来说有必要交待一下。建议作者在下次修订的时候,加入一点这方面的内容。
该书针对的读者并非Python、NLP或语料库方面的高级使用者,因此没有涉及Python支持的NLP的其他更高级的应用、工具和技术。Python在机器深度学习、人工智能等领域是主导性的编程语言,可以通过监督学习的方法,让机器学习不同类型文本的特征,然后就可以对未分类文本进行自动分类。文本特征的提取用到了很多模型,如词袋模型(Bag of Words Model)、TF-IDF模型(Term Frequency-Inverse Document Frequency Model)和词向量模型(Word Vectorization Model)。后者在Google于2013年发布的神经网络机器学习算法word2vec中得到应用。另外,使用Python自带的WordNet语料库进行语义分析,以及通过监督学习和无监督学习的方法对非结构性文本数据进行情感分析也是当前NLP领域非常热门的话题。(王天奇、管新潮,2017)
Python支持的NLP在语料库和翻译研究方面有着十分广阔的应用前景,该书在这方面做了可贵的初步尝试,值得Python编程、NLP、语料库以及翻译研究等方面的学习者和研究者给予充分的关注。
参考文献
*本文转载自《东方翻译》2020年第5期第85页—88页,部分图片来自网络
原文链接:
https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDAUTO&filename=DFFY202005019&v=xrUYWrvY%25mmd2BtDZhWtQRWUXAUksxSFcp2ZMREF3GnJWVEjchJiCWk7C8%25mmd2FE1eTGxIpxK
语料库翻译学文库
《语料库与Python应用》
《语料库与Python应用》以如何在语料库的教与学及其应用、语料库科研中习得Python能力的逻辑关系为线索,描述了Python的价值、意义和作用,并将全书内容组合成可有效助力于Python能力习得的三个层次。第一层次是掌握与语料库相关的基础性代码;第二层次是这些基础性代码的活学活用;第三层次是以创新方式运用这些代码去解决与语料库相关的较为复杂的问题。Python是语料文本处理的利器,需要在一定的理念指导下方可充分理解其在特定领域内所呈现的特征,而本书的第一作用就是帮助读者去运用这一“语言+技术”理念,其次才是Python本身。
扫描上方二维码至
教育分社官方旗舰店购买
往期回顾
1. Python编程|上海交通大学外国语学院学生Python编程作业展示(1)
2. Python编程|上海交通大学外国语学院学生Python编程作业展示(2)
3. Python编程|上海交通大学外国语学院学生Python编程作业展示(3)