自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

NLP極簡入門指南,助你通過面試,踏入NLP的大門

人工智能
弱人工智能的時(shí)代已經(jīng)到來,人們每天的生活都離不開算法所提供的服務(wù)。比如:資訊類APP是根據(jù)用戶偏好做的個(gè)性化推薦;出行類APP背后是算法在做最優(yōu)化調(diào)度;購物類APP是根據(jù)歷史購買行為和商品間相似度進(jìn)行推薦。

 弱人工智能的時(shí)代已經(jīng)到來,人們每天的生活都離不開算法所提供的服務(wù)。比如:資訊類APP是根據(jù)用戶偏好做的個(gè)性化推薦;出行類APP背后是算法在做最優(yōu)化調(diào)度;購物類APP是根據(jù)歷史購買行為和商品間相似度進(jìn)行推薦。這樣的例子還有很多很多,就不一一列舉了。

[[282789]]

可見算法對(duì)于一家互聯(lián)網(wǎng)公司有多么的重要,而市場上優(yōu)秀的算法工程師卻非常稀少,因此各大互聯(lián)網(wǎng)公司不惜開出高薪來吸引人才,同時(shí)算法工程師的職業(yè)生命周期還很長,對(duì)絕大多數(shù)的開發(fā)者來說是一個(gè)非常理想的職業(yè)。

NLP的全稱是Natuarl Language Processing,中文意思是自然語言處理,是人工智能領(lǐng)域的一個(gè)重要方向。隨著機(jī)器學(xué)習(xí)不斷的發(fā)展,在圖像識(shí)別、語音識(shí)別等方向都取得了巨大的進(jìn)步。相比較而言NLP卻落后了一些,這與NLP所要解決問題的復(fù)雜度有關(guān)。

 

人類語言是抽象的信息符號(hào),其中蘊(yùn)含著豐富的語義信息,人類可以很輕松地理解其中的含義。而計(jì)算機(jī)只能處理數(shù)值化的信息,無法直接理解人類語言,所以需要將人類語言進(jìn)行數(shù)值化轉(zhuǎn)換。不僅如此,人類間的溝通交流是有上下文信息的,這對(duì)于計(jì)算機(jī)也是巨大的挑戰(zhàn)。

NLP就是解決上述問題的技術(shù)集合,不是某個(gè)單一的技術(shù)點(diǎn),而是一整套技術(shù)體系,其復(fù)雜度可見一斑。因此,NLP算法工程師的薪資待遇要遠(yuǎn)高于行業(yè)的平均水平。

本文希望通過言簡意賅的方式,幫助大家建立一個(gè)關(guān)于NLP的整體知識(shí)體系,方便大家快速入門NLP,爭取早日成為大牛,走上人生巔峰,:-P。

我們首先來看看NLP的任務(wù)類型,如下圖所示:

 

NLP極簡入門指南,助你通過面試,踏入NLP的大門

 

主要?jiǎng)澐譃榱怂拇箢悾?/p>

  • 類別到序列
  • 序列到類別
  • 同步的序列到序列
  • 異步的序列到序列

其中“類別”可以理解為是標(biāo)簽或者分類,而“序列”可以理解為是一段文本或者一個(gè)數(shù)組。簡單概況NLP的任務(wù)就是從一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型的過程,這與絕大多數(shù)的機(jī)器學(xué)習(xí)模型相同或者類似,所以掌握了NLP的技術(shù)棧就等于掌握了機(jī)器學(xué)習(xí)的技術(shù)棧。

NLP的預(yù)處理

為了能夠完成上述的NLP任務(wù),我們需要一些預(yù)處理,是NLP任務(wù)的基本流程。預(yù)處理包括:收集語料庫、文本清洗、分詞、去掉停用詞(可選)、標(biāo)準(zhǔn)化和特征提取等。

 

NLP極簡入門指南,助你通過面試,踏入NLP的大門

 

圖中紅色的部分就是NLP任務(wù)的預(yù)處理流程,有別于其它機(jī)器學(xué)習(xí)任務(wù)的流程,下面我就來分布介紹一下:

語料庫

對(duì)于NLP任務(wù)來說,沒有大量高質(zhì)量的語料,就是巧婦難為無米之炊,是無法工作的。

而獲取語料的途徑有很多種,最常見的方式就是直接下載開源的語料庫,如:維基百科的語料庫。

但這樣開源的語料庫一般都無法滿足業(yè)務(wù)的個(gè)性化需要,所以就需要自己動(dòng)手開發(fā)爬蟲去抓取特定的內(nèi)容,這也是一種獲取語料庫的途徑。

當(dāng)然,每家互聯(lián)網(wǎng)公司根據(jù)自身的業(yè)務(wù),也都會(huì)有大量的語料數(shù)據(jù),如:用戶評(píng)論、電子書、商品描述等等,都是很好的語料庫。

現(xiàn)在,數(shù)據(jù)對(duì)于互聯(lián)網(wǎng)公司來說就是石油,其中蘊(yùn)含著巨大的商業(yè)價(jià)值。所以,小伙伴們?cè)谌粘9ぷ髦幸欢ㄒB(yǎng)成收集數(shù)據(jù)的習(xí)慣,遇到好的語料庫一定要記得備份(當(dāng)然是在合理合法的條件下),它將會(huì)對(duì)你解決問題提供巨大的幫助。

文本清洗

我們通過不同的途徑獲取到了想要的語料庫之后,接下來就需要對(duì)其進(jìn)行清洗。因?yàn)楹芏嗟恼Z料數(shù)據(jù)是無法直接使用的,其中包含了大量的無用符號(hào)、特殊的文本結(jié)構(gòu)。

數(shù)據(jù)類型分為:

結(jié)構(gòu)化數(shù)據(jù):關(guān)系型數(shù)據(jù)、json等 半結(jié)構(gòu)化數(shù)據(jù):XML、HTML等 非結(jié)構(gòu)化數(shù)據(jù):Word、PDF、文本、日志等

需要將原始的語料數(shù)據(jù)轉(zhuǎn)化成易于處理的格式,一般在處理HTML、XML時(shí),會(huì)使用Python的lxml庫,功能非常豐富且易于使用。對(duì)一些日志或者純文本的數(shù)據(jù),我們可以使用正則表達(dá)式進(jìn)行處理。

正則表達(dá)式是使用單個(gè)字符串來描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。Python的示例代碼如下:

  1. import re 
  2.  
  3. # 定義中文字符的正則表達(dá)式 
  4. re_han_default = re.compile("([\\u4E00-\\u9FD5]+)", re.U) 
  5.  
  6. sentence = "我/愛/自/然/語/言/處/理" 
  7.  
  8. # 根據(jù)正則表達(dá)式進(jìn)行切分 
  9. blocks= re_han_default.split(sentence) 
  10.  
  11. for blk in blocks: 
  12.  # 校驗(yàn)單個(gè)字符是否符合正則表達(dá)式 
  13.  if blk and re_han_default.match(blk): 
  14.  print(blk) 

輸出:

我愛自然語言處理復(fù)制代碼

除了上述的內(nèi)容之外,我們還需要注意中文的編碼問題,在windows平臺(tái)下中文的默認(rèn)編碼是GBK(gb2312),而在linux平臺(tái)下中文的默認(rèn)編碼是UTF-8。在執(zhí)行NLP任務(wù)之前,我們需要統(tǒng)一不同來源語料的編碼,避免各種莫名其妙的問題。

如果大家事前無法判斷語料的編碼,那么我推薦大家可以使用Python的chardet庫來檢測編碼,簡單易用。既支持命令行:chardetect somefile,也支持代碼開發(fā)。

分詞

中文分詞和英文分詞有很大的不同,英文是使用空格作為分隔符,所以英文分詞基本沒有什么難度。而中文是字與字直接連接,中間沒有任何的分隔符,但中文是以“詞”作為基本的語義單位,很多NLP任務(wù)的輸入和輸出都是“詞”,所以中文分詞的難度要遠(yuǎn)大于英文分詞。

中文分詞是一個(gè)比較大的課題,相關(guān)的知識(shí)點(diǎn)和技術(shù)棧非常豐富,可以說搞懂了中文分詞就等于搞懂了大半個(gè)NLP。中文分詞經(jīng)歷了20多年的發(fā)展,克服了重重困難,取得了巨大的進(jìn)步,大體可以劃分成兩個(gè)階段,如下圖所示:

 

NLP極簡入門指南,助你通過面試,踏入NLP的大門

 

目前,主流的中文分詞技術(shù)采用的都是基于詞典最大概率路徑+未登錄詞識(shí)別(HMM)的方案,其中典型的代表就是jieba分詞,一個(gè)熱門的多語言中文分詞包。

如果對(duì)中文分詞感興趣的朋友,想進(jìn)一步詳細(xì)了解,我推薦你看一看我寫的一本掘金小冊(cè)《深入理解NLP的中文分詞:從原理到實(shí)踐》,里面詳細(xì)地講解了中文分詞的各種實(shí)現(xiàn)方法,并深度分析了jiebe的Python源碼,讓你可以從零開始徹底掌握中文分詞的技術(shù),同時(shí)也講解了多種NLP的實(shí)際案例,相信你一定會(huì)收獲很多。

標(biāo)準(zhǔn)化

標(biāo)準(zhǔn)化是為了給后續(xù)的處理提供一些必要的基礎(chǔ)數(shù)據(jù),包括:去掉停用詞、詞匯表、訓(xùn)練數(shù)據(jù)等等。

當(dāng)我們完成了分詞之后,可以去掉停用詞,如:“其中”、“況且”、“什么”等等,但這一步不是必須的,要根據(jù)實(shí)際業(yè)務(wù)進(jìn)行選擇,像關(guān)鍵詞挖掘就需要去掉停用詞,而像訓(xùn)練詞向量就不需要。

詞匯表是為語料庫建立一個(gè)所有不重復(fù)詞的列表,每個(gè)詞對(duì)應(yīng)一個(gè)索引值,并索引值不可以改變。詞匯表的最大作用就是可以將詞轉(zhuǎn)化成一個(gè)向量,即One-Hot編碼。

假設(shè)我們有這樣一個(gè)詞匯表:

我愛自然語言處理復(fù)制代碼

那么,我們就可以得到如下的One-Hot編碼:

  1. 我: [1, 0, 0, 0, 0] 
  2. 愛: [0, 1, 0, 0, 0] 
  3. 自然:[0, 0, 1, 0, 0] 
  4. 語言:[0, 0, 0, 1, 0] 
  5. 處理:[0, 0, 0, 0, 1] 

這樣我們就可以簡單的將詞轉(zhuǎn)化成了計(jì)算機(jī)可以直接處理的數(shù)值化數(shù)據(jù)了。雖然One-Hot編碼可以較好的完成部分NLP任務(wù),但它的問題還是不少的。

當(dāng)詞匯表的維度特別大的時(shí)候,就會(huì)導(dǎo)致經(jīng)過One-Hot編碼后的詞向量非常稀疏,同時(shí)One-Hot編碼也缺少詞的語義信息。由于這些問題,才有了后面大名鼎鼎的Word2vec,以及Word2vec的升級(jí)版BERT。

除了詞匯表之外,我們?cè)谟?xùn)練模型時(shí),還需要提供訓(xùn)練數(shù)據(jù)。模型的學(xué)習(xí)可以大體分為兩類:

  • 監(jiān)督學(xué)習(xí),在已知答案的標(biāo)注數(shù)據(jù)集上,模型給出的預(yù)測結(jié)果盡可能接近真實(shí)答案,適合預(yù)測任務(wù)
  • 非監(jiān)督學(xué)習(xí),學(xué)習(xí)沒有標(biāo)注的數(shù)據(jù),是要揭示關(guān)于數(shù)據(jù)隱藏結(jié)構(gòu)的一些規(guī)律,適合描述任務(wù)

根據(jù)不同的學(xué)習(xí)任務(wù),我們需要提供不同的標(biāo)準(zhǔn)化數(shù)據(jù)。一般情況下,標(biāo)注數(shù)據(jù)的獲取成本非常昂貴,非監(jiān)督學(xué)習(xí)雖然不需要花費(fèi)這樣的成本,但在實(shí)際問題的解決上,主流的方式還選擇監(jiān)督學(xué)習(xí),因?yàn)樾Ч谩?/p>

帶標(biāo)注的訓(xùn)練數(shù)據(jù)大概如下所示(情感分析的訓(xùn)練數(shù)據(jù)):

  1. 距離 川沙 公路 較近 公交 指示 蔡陸線 麻煩 建議 路線 房間 較為簡單  __label__1 
  2. 商務(wù) 大床 房 房間 很大 床有 2M 寬 整體 感覺 經(jīng)濟(jì) 實(shí)惠 不錯(cuò) !  __label__1 
  3. 半夜 沒 暖氣 住 !     __label__0 

其中每一行就是一條訓(xùn)練樣本,__label__0和__label__1是分類信息,其余的部分就是分詞后的文本數(shù)據(jù)。

特征提取

為了能夠更好的訓(xùn)練模型,我們需要將文本的原始特征轉(zhuǎn)化成具體特征,轉(zhuǎn)化的方式主要有兩種:統(tǒng)計(jì)和Embedding。

原始特征:需要人類或者機(jī)器進(jìn)行轉(zhuǎn)化,如:文本、圖像。

具體特征:已經(jīng)被人類進(jìn)行整理和分析,可以直接使用,如:物體的重要、大小。

統(tǒng)計(jì)

統(tǒng)計(jì)的方式主要是計(jì)算詞的詞頻(TF)和逆向文件頻率(IDF):

  • 詞頻,是指某一個(gè)給定的詞在該文件中出現(xiàn)的頻率,需要進(jìn)行歸一化,避免偏向長文本
  • 逆向文件頻率,是一個(gè)詞普遍重要性的度量,由總文件數(shù)目除以包含該詞的文件那么,每個(gè)詞都會(huì)得到一個(gè)TF-IDF值,用來衡量它的重要程度,計(jì)算公式如下:

 

NLP極簡入門指南,助你通過面試,踏入NLP的大門

 

  • Embedding

Embedding是將詞嵌入到一個(gè)由神經(jīng)網(wǎng)絡(luò)的隱藏層權(quán)重構(gòu)成的空間中,讓語義相近的詞在這個(gè)空間中距離也是相近的。Word2vec就是這個(gè)領(lǐng)域具有表達(dá)性的方法,大體的網(wǎng)絡(luò)結(jié)構(gòu)如下:

 

NLP極簡入門指南,助你通過面試,踏入NLP的大門

 

輸入層是經(jīng)過One-Hot編碼的詞,隱藏層是我們想要得到的Embedding維度,而輸出層是我們基于語料的預(yù)測結(jié)果。不斷迭代這個(gè)網(wǎng)絡(luò),使得預(yù)測結(jié)果與真實(shí)結(jié)果越來越接近,直到收斂,我們就得到了詞的Embedding編碼,一個(gè)稠密的且包含語義信息的詞向量,可以作為后續(xù)模型的輸入。

綜上所述,我們就將NLP預(yù)處理的部分講解清楚了,已經(jīng)涵蓋了大部分的NLP內(nèi)容,接下來我們來聊聊NLP的一些具體業(yè)務(wù)場景。

  • NLP的業(yè)務(wù)場景

NLP的業(yè)務(wù)場景非常豐富,我簡單的梳理了一下:

  • 文本糾錯(cuò):識(shí)別文本中的錯(cuò)別字,給出提示以及正確的建議
  • 情感傾向分析:對(duì)包含主觀信息的文本進(jìn)行情感傾向性判斷
  • 評(píng)論觀點(diǎn)抽?。悍治鲈u(píng)論關(guān)注點(diǎn)和觀點(diǎn),輸出標(biāo)簽
  • 對(duì)話情緒識(shí)別:識(shí)別會(huì)話者所表現(xiàn)出的情緒類別及置信度
  • 文本標(biāo)簽:輸出能夠反映文章關(guān)鍵信息的多維度標(biāo)簽
  • 文章分類:輸出文章的主題分類及對(duì)應(yīng)的置信度
  • 新聞?wù)撼槿£P(guān)鍵信息并生成指定長度的新聞?wù)?/li>

大家不要被這些眼花繚亂的業(yè)務(wù)場景給搞暈了,其實(shí)上面的這些業(yè)務(wù)都是基于我們之前講的NLP預(yù)處理的輸出,只是應(yīng)用了不同的機(jī)器學(xué)習(xí)模型,比如:SVM、LSTM、LDA等等。

這些機(jī)器學(xué)習(xí)模型大部分是分類模型(序列標(biāo)注也是一種分類模型),只有少部分是聚類模型。這些模型就是泛化的了,并不只是針對(duì)于NLP任務(wù)的。要想講清楚這部分內(nèi)容,就需要另開一個(gè)關(guān)于“機(jī)器學(xué)習(xí)入門”的主題,這里就不過多的展開了。

小結(jié):只要大家掌握了NLP的預(yù)處理,就算入門NLP了,因?yàn)楹罄m(xù)的處理都是一些常見的機(jī)器學(xué)習(xí)模型和方法。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2017-09-14 14:43:07

NLP入門模型

2019-10-22 14:30:11

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2021-05-18 07:15:37

Python

2024-07-29 08:09:36

BERT大型語言模型LLM

2020-10-26 14:35:18

NLP自然語言人工智能

2016-12-06 10:07:01

銳捷網(wǎng)絡(luò)

2014-05-04 13:47:39

銳捷網(wǎng)絡(luò)極簡網(wǎng)絡(luò)

2017-04-13 11:48:05

NLP知識(shí)圖譜

2011-12-16 16:19:58

移動(dòng)Web

2020-12-04 14:15:28

NLP自然語言處理云計(jì)算

2015-07-10 13:51:03

品高云

2022-11-29 07:14:56

NLP語言模型

2016-12-28 10:00:03

銳捷網(wǎng)絡(luò)

2017-08-09 10:02:12

NMT神經(jīng)網(wǎng)絡(luò)自然語言處理

2021-04-28 10:10:12

模型人工智能深度學(xué)習(xí)

2022-06-13 10:17:26

人工智能

2022-07-11 14:23:09

加密貨幣比特幣以太坊

2023-01-03 08:32:38

2022-09-02 17:12:16

BlackboxLinux

2020-10-28 14:03:22

NLP自然語言分詞
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)