回覆列表
  • 1 # 技術宅老夏

    建議1:如何在NLP領域快速學會第一個技能?

    我的建議是:找到一個開源專案,比如機器翻譯或者深度學習的專案。理解開源專案的任務,編譯透過該專案釋出的示範程式,得到與專案示範程式一致的結果。然後再深入理解開源專案示範程式的演算法。自己程式設計實現一下這個示範程式的演算法。再按照專案提供的標準測試集測試自己實現的程式。如果輸出的結果與專案中出現的結果不一致,就要仔細查驗自己的程式,反覆修改,直到結果與示範程式基本一致。如果還是不行,就大膽給專案的作者寫信請教。在此基礎上,再看看自己能否進一步完善演算法或者實現,取得比示範程式更好的結果。

    建議2:如何選擇第一個好題目?

    工程型研究生,選題很多都是老師給定的。需要採取比較實用的方法,紮紮實實地動手實現。可能不需要多少理論創新,但是需要較強的實現能力和綜合創新能力。而學術型研究生需要取得一流的研究成果,因此選題需要有一定的創新。我這裡給出如下的幾點建議。

    先找到自己喜歡的研究領域。你找到一本最近的ACL會議論文集, 從中找到一個你比較喜歡的領域。在選題的時候,多注意選擇藍海的領域。這是因為藍海的領域,相對比較新,容易出成果。

    充分調研這個領域目前的發展狀況。包括如下幾個方面的調研:方法方面,是否有一套比較清晰的數學體系和機器學習體系;資料方面,有沒有一個大家公認的標準訓練集和測試集;研究團隊,是否有著名團隊和人士參加。如果以上幾個方面的調研結論不是太清晰,作為初學者可能不要輕易進入。

    在確認進入一個領域之後,按照建議一所述,需要找到本領域的開源專案或者工具,仔細研究一遍現有的主要流派和方法,先入門。

    反覆閱讀本領域最新發表的文章,多閱讀本領域牛人發表的文章。在深入瞭解已有工作的基礎上,探討還有沒有一些地方可以推翻、改進、綜合、遷移。注意做實驗的時候,不要貪多,每次實驗只需要驗證一個想法。每次實驗之後,必須要進行分析存在的錯誤,找出原因。

    對成功的實驗,進一步探討如何改進演算法。注意實驗資料必須是業界公認的資料。

    與已有的演算法進行比較,體會能夠得出比較一般性的結論。如果有,則去寫一篇文章,否則,應該換一個新的選題。

    建議3:如何寫出第一篇論文?

    接上一個問題,如果想法不錯,且被實驗所證明,就可開始寫第一篇論文了。

    確定論文的題目。在定題目的時候,一般不要“…系統”、“…研究與實踐”,要避免太長的題目,因為不好體現要點。題目要具體,有深度,突出演算法。

    寫論文摘要。要突出本文針對什麼重要問題,提出了什麼方法,跟已有工作相比,具有什麼優勢。實驗結果表明,達到了什麼水準,解決了什麼問題。

    寫引言。首先講出本項工作的背景,這個問題的定義,它具有什麼重要性。然後介紹對這個問題,現有的方法是什麼,有什麼優點。但是(注意但是)現有的方法仍然有很多缺陷或者挑戰。比如(注意比如),有什麼問題。本文針對這個問題,受什麼方法(誰的工作)之啟發,提出了什麼新的方法並做了如下幾個方面的研究。然後對每個方面分門別類加以敘述,最後說明實驗的結論。再說本文有幾條貢獻,一般寫三條足矣。然後說說文章的章節組織,以及本文的重點。有的時候東西太多,篇幅有限,只能介紹最重要的部分,不需要面面俱到。

    相關工作。對相關工作做一個梳理,按照流派劃分,對主要的最多三個流派做一個簡單介紹。介紹其原理,然後說明其侷限性。

    然後可設立兩個章節介紹自己的工作。第一個章節是演算法描述。包括問題定義,數學符號,演算法描述。文章的主要公式基本都在這裡。有時候要給出簡明的推導過程。如果借鑑了別人的理論和演算法,要給出清晰的引文資訊。在此基礎上,由於一般是基於機器學習或者深度學習的方法,要介紹你的模型訓練方法和解碼方法。第二章就是實驗環節。一般要給出實驗的目的,要檢驗什麼,實驗的方法,資料從哪裡來,多大規模。最好資料是用公開評測資料,便於別人重複你的工作。然後對每個實驗給出所需的技術引數,並報告實驗結果。同時為了與已有工作比較,需要引用已有工作的結果,必要的時候需要重現重要的工作並報告結果。用實驗資料說話,說明你比人家的方法要好。要對實驗結果好好分析你的工作與別人的工作的不同及各自利弊,並說明其原因。對於目前尚不太好的地方,要分析問題之所在,並將其列為未來的工作。

    結論。對本文的貢獻再一次總結。既要從理論、方法上加以總結和提煉,也要說明在實驗上的貢獻和結論。所做的結論,要讓讀者感到信服,同時指出未來的研究方向。

    參考文獻。給出所有重要相關工作的論文。記住,漏掉了一篇重要的參考文獻(或者牛人的工作),基本上就沒有被錄取的希望了。

    寫完第一稿,然後就是再改三遍。

    把文章交給同一個專案組的人士,請他們從演算法新穎度、創新性和實驗規模和結論方面,以挑剔的眼光,稽核你的文章。自己針對薄弱環節,進一步改進,重點加強演算法深度和工作創新性。

    然後請不同專案組的人士審閱。如果他們看不明白,說明文章的可讀性不夠。你需要修改篇章結構、進行文字潤色,增加文章可讀性。

    如投ACL等國際會議,最好再請英文專業或者母語人士提煉文字。

  • 2 # djdbupt

    首先,專案導向,透過做一個專案積累相關經驗!舉個例子,針對文字分類專案,首先做資料預處理,然後分詞,然後用bow或者word2vec抽取特徵,然後用相關模型暈分類或者聚類!如果深入下去,相關的主題模型之類也可以套!在專案深入過程中,會遇到各種問題,遇到問題後,再去解決問題,很快就會入門!然後多讀頂會論文,瞭解最新動向,像ACL,emnlp這些都可以深入去讀!還有一些經典的模型也要去調研!隨著時間積累,一定會更好

  • 3 # 人民郵電出版社

    非科班出身,自學擼出中文分詞庫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:用資料程式設計。)

  • 中秋節和大豐收的關聯?
  • 聽說喪文案很火?有具體的靠喪文案火起來的商品案例嗎?