-
1 # 易學智慧
-
2 # 人民郵電出版社
非科班出身,自學擼出中文分詞庫HanLP,在GitHub標星1.5萬,成為最受歡迎的自然語言處理專案。他將學習經驗總結成書《自然語言處理入門》,幫助小白快速入門NLP。
針對題主的提問,HanLP自然語言處理類庫的開發者何晗的經驗很值得借鑑。
截至 2019 年 11月初,HanLP專案在 GitHub Star 數達到了 15.6 K,超過了賓夕法尼亞大學的 NLTK、斯坦福大學的 CoreNLP。
貼上GitHub地址:https://github.com/hankcs/HanLP
何晗在開發這款 NLP 工具包時,還是上海外國語大學一名日語專業的大二學生,HanLP專案脫胎他大學時接的一份兼職,何晗也因緣從一個非科班專業的小白逐步成長為NLP領域的專家。如今,正在攻讀CS博士的他(研究方向:句法分析、語義分析與問答系統),結合自己的學習歷程和HanLP的開發經驗創作出版了《自然語言處理入門》一書,得到了周明、劉群、王斌等業內頂級 NLP 專家的推薦。
一、初學者,請避開自學NLP的常見誤區有的初學者排斥基礎理論——認為學校教的都是沒用的,公司裡都用不到;有的初學者對基礎理論敬而遠之——認為理論太高深了,自己基礎不好,學了也白學;有的初學者,特別是已經工作的程式設計師,基本方向正確但學習路徑錯誤,比較容易走極端:在工作很忙的情況下,只是抱著經典書籍苦啃,直到筋疲力盡專案也毫無進展,從而喪失了學習NLP的興趣;或者,俗稱調庫小能手,跟風潮流,缺少理論基礎,缺乏獨立思考能力(比如,認為深度學習最牛,其他的基礎理論都是垃圾;認為CNN/RNN/BERT會調參就行了)。而實際上,自然語言處理是計算機科學、人工智慧和語言學學科的交集,這三方面的學科知識都是需要儲備的,基礎理論的學習必不可少。但很多初學者都是在工作之後才入坑NLP,既難以靜下心來啃書啃課,又缺少很好的老師傳授知識經驗。所以,有效可行的入門方式就是從工程切入,遵循這樣的邏輯:延遲載入,只在使用的時候才去載入必要的資料:
你首先看到的是一個摸得著的實際問題,為了解決該問題才去接觸一個具體的方案;為了理解這個方案,才會引入必要的背景知識;為了實現這個方案,才會引入相關細節;為了克服這個方案的問題,才會過渡到新的方案。二、想快速入門NLP,邊學邊做療效好何晗入門NLP,讀過的經典書有:《統計自然語言處理》(宗成慶 著)(對應語言學知識)、《統計學習方法》(李航 著)(對應人工智慧知識),《挑戰程式設計競賽》(秋葉拓哉、鹽田陽一、北川宜稔 著)(對應計算機演算法知識)。
不過,在看經典書籍的過程中,他發現,學習自然語言處理並不需要完全把這幾本書看透,最好是可以邊看書邊做專案。這些書都是非常牛的好書,然而可惜的是,看完書中的章節,不知該如何應用其中的知識點,即使實現了文章中提到的模型,也很難直接將其運用於工程專案。
想必很多初學者都面臨類似的學習困惑。為了解決這個問題,何晗動手寫了《自然語言處理入門》,目的就是希望學習者看完一章後,便可以將知識點直接用於專案,適合NLP初學者入門並快速佈置到生產環境中。成效快,痛苦小,疑問少。
何晗在《自然語言處理入門》一書中,以自己的HanLP開源專案為案例,程式碼對照公式講解每一個演算法每一個模型,讓入門者帶著工程思維理解NLP的知識要點,試圖在目前市面上艱深晦澀的教科書和簡單的入門書之間作出平衡。
《自然語言處理入門》帶領學習者從基本概念入手。逐步介紹中文分詞、詞性標註、命名實體識別、資訊抽取、文字聚類、文字分類、句法分析這幾個熱門問題的演算法原理和工程實現。透過對多種演算法的講解和實現,比較各自的優缺點和適用場景。這些實現並非教學專用,而是生產級別的成熟程式碼,可以直接用於實際專案。
在理解這些熱門問題的演算法後,這本書會引導學習者根據自己的專案需求拓展新功能,最終達到理論和實踐上的同步入門。
何晗認為,NLP的學習路徑,應該尊重一般人的認知規律,而不是學術上的綱目順序,以此為宗旨來編排圖書的內容。因此,面向普通程式設計師,這本書內容分為以下三大部分:
第一部分介紹一些字串演算法,讓普通程式設計師從演算法的角度思考中文資訊處理。
第二部分由易到難地講解一些常用的機器學習模型,讓演算法工程師晉級為機器學習工程師。由中文分詞貫穿始終,構成一種探索式的遞進學習。這些模型也並非侷限於中文分詞,會在第三部分應用到更多的自然語言處理問題上去。
第三部分新增了許多與文字處理緊密相關的演算法,讓機器學習工程師進化到自然語言處理工程師。特別地,最後一章介紹了當前流行的深度學習方法,起到擴充套件視野、承上啟下的作用。學習者可根據自身情況,靈活跳過部分章節。
何晗在自學過程中走過不少彎路,深知數學語言的艱深晦澀,並且痛恨羅列公式故作高深的文章,所以他在書中只保留了必不可少的公式和推導,並且公式與程式碼相互印證。配套程式碼由Java和Python雙語言寫成,與GitHub上最新程式碼同步更新,所以你只要具備基本的程式設計經驗,就可以跟隨書本零起點入門。
此外,何晗還總結出一份最為詳盡的NLP+ML“雙生樹”思維導圖,導圖中的關聯知識點不僅涵蓋NLP領域的核心知識,甚至涉及許多前沿研究和應用,印刷尺寸寬60cm,高74cm,隨書附贈供學習者參考。
三、進階NLP的學習資料和工具推薦推薦讀這些經典書籍:多讀論文,推薦用Google Scholar和Papers檢索:克服語言障礙,推薦用歐路詞典:追蹤前沿動態,推薦NLP-progress,在各項NLP任務上的排行榜網址:https://nlpprogress.com/
一箇中肯的建議:NLP沒有通用的解法,演算法不夠,語料來補演算法不是萬能的。(想想:一兩個百分點對實際業務有多少幫助,又增加了多少成本?)不要完全相信論文。(a. 不要相信不公開原始碼的論文; b. 不要相信公開原始碼但資料預處理作假的論文; c. 即使能跑出作者宣稱的分數,請考慮:模型是否能泛化到你的行業領域? 又增加了多少成本?)語料極其重要。(a. 語料幾乎可以把準確率提升到你期望的任何水準,只要數量質量足夠; b. 目前通用語料幾乎都是新聞,誰能標註出行業語料,誰就是大王; c. 深度學習時代,無標註的純文字語料也大有用場; d. 軟體工程2.0:用資料程式設計。) -
3 # TD905
第8章 自然語言處理8.1 Jieba分詞基礎8.1.1 Jieba中文分詞8.1.2 Jieba分詞的3種模式8.1.3 標註詞性與新增定義詞8.2 關鍵詞提取8.2.1 TF-IDF關鍵詞提取8.2.2 TextRank關鍵詞提取8.3 word2vec介紹8.3.1 word2vec基礎原理簡介8.3.2 word2vec訓練模型8.3.3 基於gensim的word2vec實戰
其他章節如下:
第 1章 從數學建模到人工智慧
1.1 數學建模1.1.1 數學建模與人工智慧1.1.2 數學建模中的常見問題1.2 人工智慧下的數學1.2.1 統計量1.2.2 矩陣概念及運算1.2.3 機率論與數理統計1.2.4 高等數學——導數、微分、不定積分、定積分第2章 Python快速入門2.1 安裝Python2.1.1 Python安裝步驟2.1.2 IDE的選擇2.2 Python基本操作2.2.1 第 一個小程式2.2.2 註釋與格式化輸出2.2.3 列表、元組、字典2.2.4 條件語句與迴圈語句2.2.5 break、continue、pass2.3 Python高階操作2.3.1 lambda2.3.2 map2.3.3 filter第3章 Python科學計算庫NumPy3.1 NumPy簡介與安裝3.1.1 NumPy簡介3.1.2 NumPy安裝3.2 基本操作3.2.1 初識NumPy3.2.2 NumPy陣列型別3.2.3 NumPy建立陣列3.2.4 索引與切片3.2.5 矩陣合併與分割3.2.6 矩陣運算與線性代數3.2.7 NumPy的廣播機制3.2.8 NumPy統計函式3.2.9 NumPy排序、搜尋3.2.10 NumPy資料的儲存第4章 常用科學計算模組快速入門4.1 Pandas科學計算庫4.1.1 初識Pandas4.1.2 Pandas基本操作4.2 Matplotlib視覺化相簿4.2.1 初識Matplotlib4.2.2 Matplotlib基本操作4.2.3 Matplotlib繪圖案例4.3 SciPy科學計算庫4.3.1 初識SciPy4.3.2 SciPy基本操作4.3.3 SciPy影象處理案例第5章 Python網路爬蟲5.1 爬蟲基礎5.1.1 初識爬蟲5.1.2 網路爬蟲的演算法5.2 爬蟲入門實戰5.2.1 呼叫API5.2.2 爬蟲實戰5.3 爬蟲進階—高效率爬蟲5.3.1 多程序5.3.2 多執行緒5.3.3 協程5.3.4 小結第6章 Python資料儲存6.1 關係型資料庫MySQL6.1.1 初識MySQL6.1.2 Python操作MySQL6.2 NoSQL之MongoDB6.2.1 初識NoSQL6.2.2 Python操作MongoDB6.3 本章小結6.3.1 資料庫基本理論6.3.2 資料庫結合6.3.3 結束語第7章 Python資料分析7.1 資料獲取7.1.1 從鍵盤獲取資料7.1.2 檔案的讀取與寫入7.1.3 Pandas讀寫操作7.2 資料分析案例7.2.1 普查資料統計分析案例7.2.2 小結第8章 自然語言處理8.1 Jieba分詞基礎8.1.1 Jieba中文分詞8.1.2 Jieba分詞的3種模式8.1.3 標註詞性與新增定義詞8.2 關鍵詞提取8.2.1 TF-IDF關鍵詞提取8.2.2 TextRank關鍵詞提取8.3 word2vec介紹8.3.1 word2vec基礎原理簡介8.3.2 word2vec訓練模型8.3.3 基於gensim的word2vec實戰第9章 從迴歸分析到演算法基礎9.1 迴歸分析簡介9.1.1 “迴歸”一詞的來源9.1.2 迴歸與相關9.1.3 迴歸模型的劃分與應用9.2 線性迴歸分析實戰9.2.1 線性迴歸的建立與求解9.2.2 Python求解迴歸模型案例9.2.3 檢驗、預測與控制第10章 從K-Means聚類看演算法調參10.1 K-Means基本概述10.1.1 K-Means簡介10.1.2 目標函式10.1.3 演算法流程10.1.4 演算法優缺點分析10.2 K-Means實戰第11章 從決策樹看演算法升級11.1 決策樹基本簡介11.2 經典演算法介紹11.2.1 資訊熵11.2.2 資訊增益11.2.3 資訊增益率11.2.4 基尼係數11.2.5 小結11.3 決策樹實戰11.3.1 決策樹迴歸11.3.2 決策樹的分類第12章 從樸素貝葉斯看演算法多變 19312.1 樸素貝葉斯簡介12.1.1 認識樸素貝葉斯12.1.2 樸素貝葉斯分類的工作過程12.1.3 樸素貝葉斯演算法的優缺點12.2 3種樸素貝葉斯實戰第13章 從推薦系統看演算法場景13.1 推薦系統簡介13.1.1 推薦系統的發展13.1.2 協同過濾13.2 基於文字的推薦13.2.1 標籤與知識圖譜推薦案例13.2.2 小結第14章 從TensorFlow開啟深度學習之旅14.1 初識TensorFlow14.1.1 什麼是TensorFlow14.1.2 安裝TensorFlow14.1.3 TensorFlow基本概念與原理14.2 TensorFlow資料結構14.2.1 階14.2.2 形狀14.2.3 資料型別14.3 生成資料十二法14.3.1 生成Tensor14.3.2 生成序列14.3.3 生成隨機數14.4 TensorFlow實戰希望對你有幫助!!!
回覆列表
在計算機視覺領域,我們知道有很多預訓練權重,例如vgg、resnet、densenet、mobilenet、shufflenet等等。在NLP領域,這方面的預訓練模型目前並不是很多,不過很多NLP領域的開發人員也正在嘗試完善該方向。目前也取得了一些成果,例如ELMo、ULMFiT 和 OpenAI Transformer,它們透過預訓練語言模型在很多NLP的任務中取得了很不錯的效果。下面依次介紹這幾個模型。
ELMoELMo是一種深度語境化的詞彙表徵模型,它既對詞所使用的複雜特徵(例如語法和語義)進行建模,也建模了當這些詞使用在不同的上下文(即模型一詞多義)時的情形。這些詞向量是深度雙向語言模型(biLM)內部狀態的學習函式,該模型在大型文字語料庫上進行預訓練。它們可以很容易地新增到現有的模型中,並且顯著地提高了NLP在實際中的效果,包括問題回答、文字蘊含和文字情感分析。
ELMo github地址:https://github.com/allenai/allennlp
OpenAI Transformer在OpenAI Transformer中也用到了預訓練模型,他們透過無監督學習提高語言理解能力,已經在一系列不同的語言任務中獲得了很不錯的結果。方法是兩種現有思想的結合:transformers和無監督的預訓練。研究人員在大量資料上訓練一個transformer模型,利用語言建模作為訓練訊號,然後在稍小的監督資料集上對模型進行微調,以幫助解決特殊任務。
OpenAI Transformer github地址:
https://github.com/openai/finetune-transformer-lm
OpenAI Transformer論文介紹地址:
https://blog.openai.com/language-unsupervised/#content
ULMFiTULMFiT認為可以在大型的語料庫上預訓練語言模型(例如維基百科),然後建立分類器。但是我們的文字資料可能跟模型訓練的文字資料有著一些差異,所以我們需要對其中的引數進行一些微調,將這些差異能夠加入到模型中。然後,在語言模型的頂層新增一個分類圖層,並且只訓練這個圖層。
專案地址:
http://nlp.fast.ai/category/classification.html
論文介紹地址:
http://nlp.fast.ai/classification/2018/05/15/introducting-ulmfit.html