開源的學習資源:《NLP 新手入門指南》,專案作者為北京大學 TANGENT 實驗室成員。 該指南主要提供了 NLP 學習入門引導、常見任務的開發實現、各大技術教學與文獻的相關推薦等內容,是一份非常全的適合新手小白初學入門的權威指南。 值得mark!
以下正文:
本教學供新加入 TANGENT 實驗室的同學入門 NLP 使用
相信大家經過幾年的學習,已經擁有了以下的技能:
我們預設大家已經完成了計算機專業本科一年級和二年級的相關課程,擁有一定的數學和程式設計基礎
雖然目前是深度學習的時代,我們也很少使用傳統機器學習的演演算法來解決問題,但是一方面一些基礎概念仍然是相通的,另一方面經典機器學習演演算法的思想,如 EM、LDA 等,在深度學習時代往往能夠歷久彌新,以另一種方式煥發出新的光彩。 對於想要快速入門的初學者來說,建議先熟悉機器學習基礎概念(什麼是機器學習,機器學習用來幹什麼,什麼是資料集,如何對機器學習演演算法進行評測等),瞭解幾種具體的經典機器學習演演算法。
對於初學者可以學習:
如果想更深地瞭解:
深度學習的發展為我們的世界帶來了巨大的改變,2018的圖靈獎也頒給了對深度學習有卓越貢獻的 Yoshua Bengio、Yann LeCun、Geoffrey Hinton。
書:Deep Learning(GoodFellow, Bengio, Courville),神經網路與深度學習(邱錫鵬)
對於初學者來說,僅僅瞭解深度學習的基本概念、基本演演算法是不夠的,更應當到程式碼當中去獲得更為直觀和深入的認識。大家可能也聽說過 TensorFlow、PyTorch 這樣的深度學習框架,目前學術界通常使用 PyTorch。
PyTorch 對初學者也提供了快速入門指南和 tutorial,對於 tutorial,建議從簡單的影象分類演演算法學起,然後再進一步學習簡單的文字分類、簡單的文字生成等自然語言處理相關教學。
PyTorch 提供了非常詳細的檔案,遇到不明白的函數、概念都可以在檔案中進行查詢和學習
我們實驗室的名稱為計算語言學研究所,通常意義上計算語言學(Computational Linguistics,CL)屬於語言學的一個分支,而自然語言處理(Natural Language Processing,NLP),在現代意義上兩者往往會混為一談。
什麼是自然語言處理或者計算語言學?這裡摘抄一段 The Association for Computational Linguistics (ACL) 的介紹: "Computational linguistics is the scientific study of language from a computational perspective. Computational linguists are interested in providing computational models of various kinds of linguistic phenomena. These models may be "knowledge-based" ("hand-crafted") or "data-driven" ("statistical" or "empirical"). Work in computational linguistics is in some cases motivated from a scientific perspective in that one is trying to provide a computational explanation for a particular linguistic or psycholinguistic phenomenon; and in other cases the motivation may be more purely technological in that one wants to provide a working component of a speech or natural language system. Indeed, the work of computational linguists is incorporated into many working systems today, including speech recognition systems, text-to-speech synthesizers, automated voice response systems, web search engines, text editors, language instruction materials, to name just a few."
NLP 包含哪些 topic 呢?同樣是摘抄自 60th Annual Meeting of the Association for Computational Linguistics 的 Submissions Topics:
可以看到 NLP 這個語言學和電腦科學的交叉學科實在是包含了太多的研究方向,而其中除了機器翻譯(MT)、摘要、QA 這些大家早有耳聞的應用,剩下的相信初學者大多從未聽說過,即使是一位 NLP 研究者或從業人員也只能對這個列表中的某一個或幾個方面有深入的研究。
想要對 NLP 是研究什麼的有個大致的瞭解,首先我們可以快速瞭解深度學習時代 NLP 發展歷史:A Review of the Neural History of Natural Language Processing,然後我們可以通過課程或書籍進行系統的學習:
Google Scholar 可以理解為學術界的 Google
我們主要閱讀國際會議論文,相關的會議有:
其中,ACL 系會議提供 anthology (https://aclweb.org/anthology/)
如果想了解某一個領域的前沿進展,通常會關注 arXiv(預印本),部分作者會選擇在發表前將論文上傳至 arXiv。arXiv 在工作日每日更新,便於及時追蹤前沿動態
經典論文往往在 CSDN、知乎等平臺有中文讀後感,可以輔助閱讀
文獻分類整理是一個好習慣,建議根據個人喜好選擇諸如 Zotero(介面簡潔、跨平臺、免費、擴充套件豐富), Endnote, Mendeley, Papers 等文獻管理軟體
初學時做好論文筆記,可以使用 Markdown,也可以使用 Notion、Obsidian、OneNote 等筆記軟體
作為電腦科學的一個分支,NLP 同樣離不開程式碼,請有志加入 TANGENT 的同學完成以下練習任務。
在完成這些任務之前,還是需要一些說明。
一個深度學習專案的流程通常是這樣的:
通常我們也會按照上述流程和流程中出現的各個模組組織專案檔案,一個專案往往會包含這些檔案:主函數(入口,負責以上流程的控制),資料讀取和預處理,模型,Metric。
我們針對任務二,給出了一個 ChineseNER 完整專案的原始碼。需注意,下面部分任務參考程式碼是以 Notebook 的形式組織的,在完成任務時,請參考 ChineseNER 重新組織程式碼。
文字分類是入門 NLP 的一個好的開始,同時 NLU(自然語言理解)任務本質上來說都可以歸類為文字分類。請使用 CNN 或 RNN(LSTM) 完成 Kaggle 上一個簡單的文字分類任務。
任務描述 & 資料集:https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews/
參考文獻: Convolutional Neural Networks for Sentence Classification (https://aclanthology.org/D14-1181/) Recurrent Convolutional Neural Networks for Text Classification (https://www.deeplearningitalia.com/wp-content/uploads/2018/03/Recurrent-Convolutional-Neural-Networks-for-Text-Classification.pdf)
在 NLP 中,結構預測(Structured Prediction)是指輸出空間為結構化物件的一類任務,包括命名實體識別、關係抽取、共指消解等子任務,命名實體識別又屬於序列標註問題。請實現簡單的基於 LSTM-CRF 的命名實體識別
任務描述:https://www.clips.uantwerpen.be/conll2003/ner/
資料集:本倉庫 CoNLL03 資料夾下
參考文獻: Neural Architectures for Named Entity Recognition (https://arxiv.org/pdf/1603.01360.pdf)
為了簡化任務難度,我們給出了基於 LSTM 的中文命名實體識別的程式碼,可參考該程式碼將其遷移至 CoNLL03 英文資料集上,進行實驗觀察初步結果,後續再增加 CRF 層。
摘要和翻譯是文字生成中比較主流的兩大任務,在這裡我們選取 PyTorch tutorial 中的文字翻譯作為入門專案。
請按照 PyTorch 文字翻譯教學,一步步實現一個簡單的文字翻譯模型,注意請參考 ChineseNER 的組織方式重構程式碼。
生成任務涉及到的細節較多,如 encoder-decoder,teacher forcing,beam search 等,tutorial 中給出了深入淺出的介紹,請仔細閱讀並理解。
以 BERT、GPT 為代表的預訓練語言模型(Pretrain Language Model,PLM)的出現使 NLP 翻開了新的一頁,目前的預訓練語言模型大多基於 Transformer,因此想要追蹤前沿 NLP 技術,我們不得不對 Transformer 有深入的理解。
請結合 Attention Is All You Need 原論文,讀懂 The Annotated Transformer
建議繼續閱讀: encoder-decoder 結構 視覺化 Transformer 關於 decode
關於預訓練語言模型,請閱讀 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 並做閱讀筆記,重點關注 BERT 是如何訓練出來的,以及如何將 BERT 應用於下游任務。
我們在實踐中通常會使用 HuggingFace