NLP 演算法工程師的學習、成長和實戰經驗
本周「指南」欄目將帶來由「助理來也」技術合伙人、資深演算法研究員劉振華關於 NLP 演算法工程師成長的分享。主要包括以下六個方面:
1.NLP解決什麼問題
2.NLP演算法發展簡史
3.檢索式問答系統的語義匹配模型
4.任務型對話系統背後的演算法實例
5.創業公司NLP工程師的工作職責
6.NLP演算法工程師面試注意事項
本篇為上篇,主要包括前兩部分:NLP 解決什麼問題和 NLP演算法發展簡史。
一、NLP 解決什麼問題
NLP 演算法的主要目標與難點
NLP 是一個交叉性的學科,它和計算機科學,人工智慧,計算語言學這三門都有交叉,是一門對綜合要求比較高的學科。它的主要目標是解決計算機和人類(自然)語言的交互問題,隨著近年來 UGC 內容的越來越多,NLP 在很大程度上需要解決無結構化的語料怎麼讓機器更好的理解。因此 NLP 學習起來也有些難度,主要難點為:
語言本身複雜:大家想像一下語言本身有多複雜,比如我們在學習外語的時候都有各種各樣的語法規則,就可以知道讓計算機去理解人類的自然語言是多麼複雜的一件事情。
語境相關:在不同的語境裡面同樣的一句話可以有不同的理解。
抽象概念聯繫:我們在提到一個概念的時候,需要我們對概念的相關抽象概念有一些歷史上的認識,比如說以前見過或者以前看過相關的東西才能把它聯想起來。
所以人跟人之間的正常交流都需要很多語言本身之外的東西,可以想像讓計算機來完成這件事情難度是非常大的。
NLP 解決的基本問題
NLP 解決的五個基本問題,這五個是李航老師在北大的 AI 公開課上提出來的,分別為:
1. 分類問題:分類問題大家平時表容易見到,比如文本分類,情感分析目的是把一段文本打上一個或多個標籤。
2. 匹配問題:比較常見的是檢索,檢索與某句話類似的話或者是與它相關的回答,這個就是匹配。
3. 翻譯問題:類似於兩種語言之間的翻譯,把一種語言翻譯成跟它語義相似的另外一種。
4. 結構化預測:把一段文本結構化,所謂的結構化類比於一段文本中的詞對應的是動詞還是名詞,語法角色是主語還是謂語,將其轉化為結構化的輸出序列。
5. 馬氏(馬爾可夫)決策過程:當前要採取的動作和上一個狀態和動作相關,這是一個典型的馬氏鏈的過程。代表性的系統是對話,如何回復當前用戶的話,是和最近的上下文相關的,這就是馬氏決策過程。
綜述上面所講的五個基本問題,結合這張圖來看一下它的應用實例。
這張圖從上到下總共有四個任務,是用 Stanford CoreNLP 來標識的。
第一個任務是詞性標註,所謂的詞性標註,它是一個典型的序列任務,把一段文本中的每一個詞的詞性標註上,如名詞,動詞,副詞。
第二個任務是結構性預測任務,把一段文本中跟實體有關的詞,打上實體的標籤,如人名,機構名,地點,日期。
第三個任務是指代消歧,將句中的 3 個代詞反推回去,和人名一一對應。
第四個任務是句法依賴,把某些詞和其他的詞是修飾關係還是組合關係,統稱為依賴關係,建成一棵依賴樹。
生活中 NLP 都能夠應用在哪些方面?
以搜索引擎為例,在使用搜索引擎的過程中肯定有遇到出錯詞這樣的糾錯演算法,這就是 NLP 的一個應用。
還有文本分詞以及搜索詞改寫,所謂的搜索詞改寫就是我們輸入的詞,系統會給我們做泛化,把同義詞也進行檢索,擴大了搜索結果。
還有意圖識別,比如在電商中搜索一件商品,比如蘋果,是指你想要買手機還是水果,意圖的識別率會影響到它的一個轉化率。
結果排序是更重要的,所有的網頁質量都有一套排序演算法,排序演算法中很多都會涉及到 NLP 演算法,尤其是文本分析相關的技術。最後還有搜索推薦,比如你在網站上搜索一個詞的時候,下面有一塊會提示出大家還在搜的詞,你可能還想搜索的詞語,這都是根據文本相似度的理解去做的。
二、NLP 演算法發展簡史
NLP演算法對語言理解的三個層次
NLP 演算法對於語言的理解分為三個層次,分別為:
語法,是指我怎樣說是符合語法規則的,類比程序上沒有編譯錯誤。
語義,是指我這句話表達的是什麼意思,是否是正確的意思。
語用,是指我把這句話放在一個上下文的環境中這樣說是不是合理,以及它是不是當前最合適的說法,類比於在程序中我們在一個約束條件下,是否實現了正確的演算法。
從上面的圖片中我們可以看出來目前 NLP 處在語義的階段中,至於語用屬於剛剛起步的狀態。
NLP 演算法發展的三階段與趨勢
從圖片上可以看到 NLP 從被提出到現在基本上經歷了三個階段:
第一個階段是基於規則的 NLP
第二個階段是基於統計學習方法的 NLP
第三個階段是涉足深度學習的 NLP,這個階段從 2012 年開始的。
從上面這張圖中可以很明顯的看出深度學習在NLP領域的發展趨勢。
歡迎大家提前鎖定我們的訂閱號,獲取更多一手專業的互聯網圈內信息。
---
TAG:100offer |