1. 程式人生 > >自然語言處理怎麽最快入門?

自然語言處理怎麽最快入門?

改進 一個 問答系統 好的 必須 開源 都在 程序 得出

自然語言處理(簡稱NLP),是研究計算機處理人類語言的一門技術,包括:

1.句法語義分析:對於給定的句子,進行分詞、詞性標記、命名實體識別和鏈接、句法分析、語義角色識別和多義詞消歧。

2.信息抽取:從給定文本中抽取重要的信息,比如,時間、地點、人物、事件、原因、結果、數字、日期、貨幣、專有名詞等等。通俗說來,就是要了解誰在什麽時候、什麽原因、對誰、做了什麽事、有什麽結果。涉及到實體識別、時間抽取、因果關系抽取等關鍵技術。

3.文本挖掘(或者文本數據挖掘):包括文本聚類、分類、信息抽取、摘要、情感分析以及對挖掘的信息和知識的可視化、交互式的表達界面。目前主流的技術都是基於統計機器學習的。

4.機器翻譯

:把輸入的源語言文本通過自動翻譯獲得另外一種語言的文本。根據輸入媒介不同,可以細分為文本翻譯、語音翻譯、手語翻譯、圖形翻譯等。機器翻譯從最早的基於規則的方法到二十年前的基於統計的方法,再到今天的基於神經網絡(編碼-解碼)的方法,逐漸形成了一套比較嚴謹的方法體系。

5.信息檢索:對大規模的文檔進行索引。可簡單對文檔中的詞匯,賦之以不同的權重來建立索引,也可利用1,2,3的技術來建立更加深層的索引。在查詢的時候,對輸入的查詢表達式比如一個檢索詞或者一個句子進行分析,然後在索引裏面查找匹配的候選文檔,再根據一個排序機制把候選文檔排序,最後輸出排序得分最高的文檔。

6.問答系統: 對一個自然語言表達的問題,由問答系統給出一個精準的答案。需要對自然語言查詢語句進行某種程度的語義分析,包括實體鏈接、關系識別,形成邏輯表達式,然後到知識庫中查找可能的候選答案並通過一個排序機制找出最佳的答案。

7.對話系統:系統通過一系列的對話,跟用戶進行聊天、回答、完成某一項任務。涉及到用戶意圖理解、通用聊天引擎、問答引擎、對話管理等技術。此外,為了體現上下文相關,要具備多輪對話能力。同時,為了體現個性化,要開發用戶畫像以及基於用戶畫像的個性化回復。

隨著深度學習在圖像識別、語音識別領域的大放異彩,人們對深度學習在NLP的價值也寄予厚望。再加上AlphaGo的成功,人工智能的研究和應用變得炙手可熱。自然語言處理作為人工智能領域的認知智能,成為目前大家關註的焦點。很多研究生都在進入自然語言領域,寄望未來在人工智能方向大展身手。但是,大家常常遇到一些問題。俗話說,萬事開頭難。如果第一件事情成功了,學生就能建立信心,找到竅門,今後越做越好。否則,也可能就灰心喪氣,甚至離開這個領域。這裏針對給出我個人的建議,希望我的這些粗淺觀點能夠引起大家更深層次的討論。

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

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

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

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

  • 先找到自己喜歡的研究領域。你找到一本最近的ACL會議論文集, 從中找到一個你比較喜歡的領域。在選題的時候,多註意選擇藍海的領域。這是因為藍海的領域,相對比較新,容易出成果。
  • 充分調研這個領域目前的發展狀況。包括如下幾個方面的調研:方法方面,是否有一套比較清晰的數學體系和機器學習體系;數據方面,有沒有一個大家公認的標準訓練集和測試集;研究團隊,是否有著名團隊和人士參加。如果以上幾個方面的調研結論不是太清晰,作為初學者可能不要輕易進入。
  • 在確認進入一個領域之後,按照建議一所述,需要找到本領域的開源項目或者工具,仔細研究一遍現有的主要流派和方法,先入門。
  • 反復閱讀本領域最新發表的文章,多閱讀本領域牛人發表的文章。在深入了解已有工作的基礎上,探討還有沒有一些地方可以推翻、改進、綜合、遷移。註意做實驗的時候,不要貪多,每次實驗只需要驗證一個想法。每次實驗之後,必須要進行分析存在的錯誤,找出原因。
  • 對成功的實驗,進一步探討如何改進算法。註意實驗數據必須是業界公認的數據。
  • 與已有的算法進行比較,體會能夠得出比較一般性的結論。如果有,則去寫一篇文章,否則,應該換一個新的選題。

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

  • 接上一個問題,如果想法不錯,且被實驗所證明,就可開始寫第一篇論文了。
  • 確定論文的題目。在定題目的時候,一般不要“…系統”、“…研究與實踐”,要避免太長的題目,因為不好體現要點。題目要具體,有深度,突出算法。
  • 寫論文摘要。要突出本文針對什麽重要問題,提出了什麽方法,跟已有工作相比,具有什麽優勢。實驗結果表明,達到了什麽水準,解決了什麽問題。
  • 寫引言。首先講出本項工作的背景,這個問題的定義,它具有什麽重要性。然後介紹對這個問題,現有的方法是什麽,有什麽優點。但是(註意但是)現有的方法仍然有很多缺陷或者挑戰。比如(註意比如),有什麽問題。本文針對這個問題,受什麽方法(誰的工作)之啟發,提出了什麽新的方法並做了如下幾個方面的研究。然後對每個方面分門別類加以敘述,最後說明實驗的結論。再說本文有幾條貢獻,一般寫三條足矣。然後說說文章的章節組織,以及本文的重點。有的時候東西太多,篇幅有限,只能介紹最重要的部分,不需要面面俱到。
  • 相關工作。對相關工作做一個梳理,按照流派劃分,對主要的最多三個流派做一個簡單介紹。介紹其原理,然後說明其局限性。
  • 然後可設立兩個章節介紹自己的工作。第一個章節是算法描述。包括問題定義,數學符號,算法描述。文章的主要公式基本都在這裏。有時候要給出簡明的推導過程。如果借鑒了別人的理論和算法,要給出清晰的引文信息。在此基礎上,由於一般是基於機器學習或者深度學習的方法,要介紹你的模型訓練方法和解碼方法。第二章就是實驗環節。一般要給出實驗的目的,要檢驗什麽,實驗的方法,數據從哪裏來,多大規模。最好數據是用公開評測數據,便於別人重復你的工作。然後對每個實驗給出所需的技術參數,並報告實驗結果。同時為了與已有工作比較,需要引用已有工作的結果,必要的時候需要重現重要的工作並報告結果。用實驗數據說話,說明你比人家的方法要好。要對實驗結果好好分析你的工作與別人的工作的不同及各自利弊,並說明其原因。對於目前尚不太好的地方,要分析問題之所在,並將其列為未來的工作。
  • 結論。對本文的貢獻再一次總結。既要從理論、方法上加以總結和提煉,也要說明在實驗上的貢獻和結論。所做的結論,要讓讀者感到信服,同時指出未來的研究方向。
  • 參考文獻。給出所有重要相關工作的論文。記住,漏掉了一篇重要的參考文獻(或者牛人的工作),基本上就沒有被錄取的希望了。
  • 寫完第一稿,然後就是再改三遍。
  • 把文章交給同一個項目組的人士,請他們從算法新穎度、創新性和實驗規模和結論方面,以挑剔的眼光,審核你的文章。自己針對薄弱環節,進一步改進,重點加強算法深度和工作創新性。
  • 然後請不同項目組的人士審閱。如果他們看不明白,說明文章的可讀性不夠。你需要修改篇章結構、進行文字潤色,增加文章可讀性。
  • 如投ACL等國際會議,最好再請英文專業或者母語人士提煉文字。

自然語言處理怎麽最快入門?