傅迎華,李 江,付東翔
(上海理工大學 光電信息與計算機工程學院,上海 200093)
自然語言處理是計算機、自動化等本科專業(yè)的核心專業(yè)課程之一,其內(nèi)容是建立在線性代數(shù)、概率論、數(shù)據(jù)挖掘等課程內(nèi)容基礎上,具有更高一層次的知識。該課程一般在本科高年級階段開設,需要在掌握上述前修課程基礎上才能選修該門課程,是一門具有較高專業(yè)技能的基礎課程。
自然語言處理同時也是一門應用相當廣的課程。自然語言處理相關技術在文本分類、信息抽取、語音識別、信息檢索和機器翻譯等領域有著廣泛應用,是一門與現(xiàn)代技術聯(lián)系緊密的專業(yè)課程。隨著信息技術的飛速發(fā)展,數(shù)據(jù)的海量出現(xiàn)為自然語言處理提供了大量的需求驅(qū)動,機器學習技術精度不斷提高和深度學習的普及推動著自然語言處理處理技術和應用技術不斷演化和推進,也增加了社會對智能信息處理人才的需求。
作為一門本科生課程,怎樣在教學中將學生的認識能力與教學目標和任務有效結(jié)合,使學生能在一個學期的學習過程中,既能理解語言處理的基本方法和算法過程,又能結(jié)合實際問題進行分析,是自然語言處理教學中的重點和難點之一。筆者對教學目標定位進行梳理,對教學內(nèi)容進行篩選,給出理論教學和實踐教學的內(nèi)容框架,使學生在學習過程中,既能對理論有一定的分析把握,又能解決和分析一些實際問題,做到“知其然并知其所以然”。
自然語言處理是用計算機通過可計算的方法對自然語言的各級語言單位進行轉(zhuǎn)換、傳輸、存貯、分析等加工處理的科學,是一門與語言學、計算機科學、數(shù)學、心理學、信息論、聲學相聯(lián)系的交叉性學科。通過課程的學習,使學生掌握自然語言處理技術(特別是基于統(tǒng)計的語言處理技術)的基本概念、基本原理和主要方法,了解當前語言處理技術的發(fā)展概貌,接觸語言處理技術的前沿課題,具備運用基本原理和主要方法解決實際問題的能力。
根據(jù)計算機學科和智能專業(yè)培養(yǎng)目標,自然語言處理的教學內(nèi)容和實驗安排圍繞以掌握智能檢測和識別系統(tǒng)的關鍵技術、算法結(jié)構設計功能、系統(tǒng)軟件組成和應用軟件設計為目標展開[1-2]。
自然語言處理是在本科生高年級階段開設的為期一個學期的課程。在短短一個學期內(nèi),需要學生掌握有一定理論深度和相關實踐這兩方面的內(nèi)容是十分困難的。在教學中,有些課程注重理論學習而排除了練習時間,這使學生缺乏理論聯(lián)系實際的機會,減少了學生在學習解決自動處理語言問題帶來的挑戰(zhàn)性和成就感,使課程枯燥乏味,從而失去興趣。此外,還有一些課程只講授語言學編程問題而不講自然語言處理的相關算法和原理,這也會給學生造成知其然不知其所以然的狀況,不利于學生更進一步發(fā)展。
根據(jù)本科生知識層次特征和課程安排,本課程在理論教學中應精心篩選教材,避開專業(yè)理論性很強的書籍,選用容易理解且實現(xiàn)動手較快的入門級參考書做教材[3-4]。此外,本課程應避免過分強調(diào)算法的理論分析,注重理論與實際例子的結(jié)合,將所涉及內(nèi)容進行有針對性地區(qū)分,最大程度幫助學生減少對編程的畏懼心理,用程序來分析書面語言。
教學內(nèi)容的安排應遵循循序漸進、由易到難的過程。課程內(nèi)容主要包含三個基本塊:第一部分主要介紹語言處理及如何使用小的Python程序分析感興趣的文本信息,再通過結(jié)構化程序設計鞏固編程要點;第二部分講述語言處理的基本原理及方法(如標注、分類和信息提取等),探索句子解析、句法結(jié)構識別和句意表達構建;第三部分簡單講述如何管理語言數(shù)據(jù)。
目前,Python在國內(nèi)高校還不是一種很普及的程序設計語言,但課程中選用Python作為程序開發(fā)語言的原因主要基于以下幾點:①Python可以免費下載,并能在各種平臺上安裝運行,且自帶的函數(shù)非常適合于處理語言數(shù)據(jù);②Python具有強大的字符串處理功能,文法和語義易懂;③自然語言工具箱(NLTK)使用Python進行NLP編程實現(xiàn),它提供了與自然語言處理相關的數(shù)據(jù)表示基類、詞性標注、文法分析和文本分類等任務的標準接口及標準實現(xiàn),可以組合起來解決復雜問題;④Python在國際上工業(yè)、科研、教育領域應用廣泛,軟件的生產(chǎn)效率、質(zhì)量和可維護性好。自然語言處理課程理論教學課時分配見表1。
理論教學主要包含Python程序設計和NLTK、自然語言處理的基本原理及方法兩大內(nèi)容。
表1 理論教學課時分配
1)Python程序設計和NLTK。
Python是一門強大的程序語言,學生可以在比較短的時間內(nèi)完成一些高級的任務。目前,Python語言的發(fā)展主要包含Python2.X和Python3.X,這兩個版本各有特點[5-6]。Python 3.X引入了一些與Python 2.X不兼容的關鍵字和特性,在Python 2.X中,可以通過內(nèi)置的__future__模塊導入這些新內(nèi)容。在Python 2.X環(huán)境下寫的代碼為方便在Python 3.X中運行,可以使用__future__模塊。目前,Python最新版本分別為Python2.7和Python3.5。自然語言工具箱NLTK的代碼示例適用的是Python2.X版本,因此本課程教學采用的是最新的Python2.7版本。
Python在自然語言處理中的廣泛應用依賴于其強大的串處理功能[7]。本課程的Python程序設計主要包括Python基礎知識、列表和元組、適用字符串、字典、條件、循環(huán)和其他語句:Python基礎知識包括安裝Python、數(shù)字和表達式、變量、語句、函數(shù)、模塊和字符串等;列表和元組包括序列的通用操作如分塊和乘法及最大最小值等,列表的list函數(shù)和列表方法,元組的tuple函數(shù)和基本元組操作等;適用字符串包括字符串基本操作和字符串方法等;字典包括創(chuàng)建和使用字典等;條件、循環(huán)和其他語句包括基本賦值方式、語句塊、條件語句、基本循環(huán)操作和列表推導式等。
NLTK提供直觀的框架和大量模塊,使用戶獲取自然語言知識而不陷入與標注語言類似的繁瑣事務中,還提供一種結(jié)構,使新的軟件模塊易于添加,可以獨立使用與工具包其他部分無關的組件。
2)自然語言處理的基本原理及方法。
這一部分主要包括句法語義分析、文本分析和模式識別的基本方法。
句法語義分析主要用于對給定的句子進行分詞、詞性標記、命名實體識別和鏈接、句法分析、語義角色識別和多義詞消歧。在統(tǒng)計自然語言處理領域,詞性標注、句法分析、語義識別和多義詞消歧等通過大量樣本和監(jiān)督分類方法來實現(xiàn)。句法分析樹是一種常用的分析方法,通過算法實現(xiàn)將一句話按照句法邏輯組織成一棵樹。句法分析通過大量的訓練數(shù)據(jù),把樹庫中的句法規(guī)則提取出來生成符合自然語言的結(jié)構形式,從而進行合并、歸納等處理。
文本分析包括文本信息提取和文本挖掘。圖1描述了一個信息提取系統(tǒng)的簡單流程。首先,使用句子分割器將該文檔的原始文本分割成句,使用分詞器將每個句子進一步細分為詞。然后,對每個句子進行詞性標注,在下一步命名實體識別中將證明這是非常有益的。在這一步,我們尋找每個句子中提到的潛在的有趣的實體。最后,我們使用關系識別搜索文本中不同實體間的可能關系。文本挖掘包括文本聚類、分類、情感分析以及對挖掘的信息和知識的可視化、交互式的表達界面。文本挖掘涉及目前一些主流的機器學習方法。
圖1 信息提取系統(tǒng)的簡單流程
模式識別是自然語言處理的一個核心部分。自然語言處理通常會應用一些重要的機器學習核心技術,如決策樹、樸素貝葉斯分類器、最大熵分類器、K近鄰分類器、感知器算法和SVM分類器等。在本科生培養(yǎng)方案中,決策樹方法在先修課程數(shù)據(jù)挖掘中已詳細介紹,包括分類器的評價方法。本課程將著重介紹貝葉斯分類器、K近鄰分類器和SVM分類器的基本原理及其分析方法,使學生能理解不同機器學習方法的區(qū)別和應用范圍,以便學生在以后實踐中能根據(jù)實際應用選擇合適的處理方法。
實驗教學是理論教學內(nèi)容的實踐,讓學生認識和動手實踐理論的內(nèi)容。課程實踐內(nèi)容主要包括Python程序語言設計和用NLTK實現(xiàn)句法分析和文本分類,實驗教學內(nèi)容安排見表2。
表2 實驗教學內(nèi)容安排
實驗教學內(nèi)容圍繞怎樣利用自然語言工具箱NLTK進行文本分析、特征提取和文本分類等,主要包括:語料庫的調(diào)用和創(chuàng)建自己的語料庫,文本抽取和特征過濾,創(chuàng)建字典以及用最近鄰、樸素貝葉斯、決策樹和SVM等分類方法對文本進行分類。
NLTK提供了交互式圖形用戶界面,無需用戶任何數(shù)據(jù)就能執(zhí)行有趣的任務,減輕了學生的編程壓力,使學生在學習理論的同時可以通過交互式重現(xiàn)示例,還可以通過Python會話控制臺,嘗試修改算法和理論、探索經(jīng)驗性問題和理論性問題。與自然語言處理任務相關的NLTK模塊主要有語料庫模塊、字符串處理模塊、搭配模塊、詞性標注模塊、分類模塊、分塊模塊、解析模塊、語義解釋模塊、指標測評模塊、概率與估計模塊和應用模塊等。課程中的章節(jié)和實踐練習與NLTK緊密結(jié)合,為學生提供一個實用的自然語言處理入門指南[8]。
如何提升自然語言處理的教學效果,使學生能夠掌握基本數(shù)據(jù)分析工具,并能應用這些工具分析和解決具體的應用問題;如何使課程教學內(nèi)容與當前自然語言處理技術的發(fā)展與應用水平保持一致,主流技術能體現(xiàn)在課程教學中,教學內(nèi)容不落伍等。針對這些問題,上海理工大學智能科學與技術本科專業(yè)的自然語言處理教學和實踐,與人工智能技術發(fā)展、大學生創(chuàng)新實踐等緊密聯(lián)系,從教學內(nèi)容、理論與實驗內(nèi)容的安排上進行了分析和探索。
通過該課程的學習,學生掌握自然語言處理基本過程、原理和框架結(jié)構,能使用和編寫簡單程序分析和處理語言數(shù)據(jù)、理解NLP與語言學的關鍵概念是怎樣用來描述和分析語言、了解數(shù)據(jù)結(jié)構和算法在NLP種的應用以及語言數(shù)據(jù)如何存儲為標準格式等,很好地提升了學生的專業(yè)能力[9]。智能專業(yè)學生近兩年多次在大學生創(chuàng)新項目(如基于深度學習的文字轉(zhuǎn)換圖像技術和各種智能設計比賽)獲得佳績,2017年摘取了“華為杯”中國大學生智能設計競賽的全國二等獎和華為專項獎。
實踐證明,該課程的教學與實踐培養(yǎng)了本科學生自然語言處理系統(tǒng)設計和開發(fā)的能力,為以后綜合運用知識解決實際問題奠定了基礎,符合并達到了應用型智能科學與技術專業(yè)人才的培養(yǎng)目標。
參考文獻:
[1]張昊, 李擎. 談智能科學與技術專業(yè)及相關學科的發(fā)展[J]. 計算機教育, 2013(19): 16-18.
[2]孫紅, 蔣念平, 陳瑋,等. 智能科學與技術專業(yè)理論教學與工程實踐的融合[J]. 計算機教育, 2012(18): 17-21.
[3]Bird S, Ewan K, Loper E.Python自然語言處理[M]. 陳濤, 張旭, 崔楊, 等, 譯. 北京: 人民郵電出版社, 2014.
[4]Bird S, Ewan K, Loper E. Natural Language Processing with Python[M]. 南京: 東南大學出版社, 2010.
[5]Lutz M .Learning Python[M]. 南京: 東南大學出版社, 2014.
[6]Lutz M .Python編程[M]. 鄒曉, 瞿喬, 任發(fā)科, 等, 譯. 北京: 中國電力出版社, 2015.
[7]Hetland M L. Python基礎教程[M].司維, 曾軍崴, 譚穎華, 譯. 北京: 人民郵電出版社, 2014.
[8]王萬森. 適應智能化應用發(fā)展趨勢, 培養(yǎng)創(chuàng)新型智能科技人才[J]. 計算機教育, 2013(19): 1.
[9]張俊, 陳飛, 馮士剛. 大連海事大學“智能科學與技術”本科專業(yè)建設實踐[J]. 計算機教育, 2012(18): 22-27.