【NLP/AI算法面試必備-2】NLP/AI面試全記錄

轉自:這篇文章

本文以QA形式對NLP/AI中的高頻問題進行總結,均爲自己在真實面試中所遇到的問題(持續更新中)。

部分問題答案已經寫入可參見:

學習NLP/AI,必須深入理解“神經網絡及其優化問題”

nlp中的詞向量對比:word2vec/glove/fastText/elmo/GPT/bert

    一、AI算法基礎
    
    1、樣本不平衡的解決方法?

    2、交叉熵函數系列問題?與最大似然函數的關係和區別?

    3、HMM、MEMM vs CRF 對比?

    4、SVM和LR的區別與聯繫?

    5、crf的損失函數是什麼?lstm+crf怎麼理解?

    6、GBDT vs Xgboost

    7、評估指標f1和auc的區別是哪些?

    8、sigmoid用作激活函數時,分類爲什麼要用交叉熵損失,而不用均方損失?

    9、神經網絡中的激活函數的對比?

    二、NLP高頻問題

    1、word2vec和tf-idf 相似度計算時的區別?

    2、word2vec和NNLM對比有什麼區別?(word2vec vs NNLM)

    3、 word2vec負採樣有什麼作用?

    4、word2vec和fastText對比有什麼區別?(word2vec vs fastText)

    5、glove和word2vec、 LSA對比有什麼區別?(word2vec vs glove vs LSA)

    6、 elmo、GPT、bert三者之間有什麼區別?(elmo vs GPT vs bert)

    7、LSTM和GRU的區別?

    三、其他算法問題

    1、怎麼進行單個樣本的學習?

    2、 決策樹 bagging boosting adaboost 區別?RF的特徵隨機目的是什麼?

    3、transformer各部分怎麼用?Q K V怎麼計算;Attention怎麼用?

    4、HMM 假設是什麼?CRF解決了什麼問題?CRF做過特徵工程嗎?HMM中的矩陣意義?5、說以一下空洞卷積?膨脹卷積怎麼理解?什麼是Piece-CNN?

    6、怎麼解決beam-search局部最優問題?global embedding 怎麼做?

    7、數學題:什麼是半正定矩陣?機器學習中有什麼應用?

    8、卷積的物理意義是什麼?傅里葉變換懂嗎?

    9、說一下Bert?

    10、推導word2vec?

    11、怎麼理解傳統的統計語言模型?現在的神經網絡語言模型有什麼不同?

    12、神經網絡優化的難點是什麼?這個問題要展開來談。

    13、attention你知道哪些?

    14、自動文章摘要抽取時,怎麼對一篇文章進行分割?(從序列標註、無監督等角度思考)

    15、在做NER任務時,lstm後面可以不用加CRF嗎?

    16、通過畫圖描述TextRank?

    17、LDA和pLSA有什麼區別?

    18、Transformer在實際應用中都會有哪些做法?

    19、講出過擬合的解決方案?

    20、說一下transforemr、LSTM、CNN間的區別?從多個角度進行講解?

    21、梯度消失的原因和解決辦法有哪些?

    22、數學題:貝葉斯計算概率?

    23、數學題:25只兔子賽跑問題,共5個賽道,最少幾次比賽可以選出前5名?

    24、數學題:100盞燈問題?

一、AI算法基礎

1、樣本不平衡的解決方法?

1)上採樣和子採樣;2)修改權重(修改損失函數);3)集成方法:bagging,類似隨機森林、自助採樣;4)多任務聯合學習;

2、交叉熵函數系列問題?與最大似然函數的關係和區別?

1)交叉熵損失函數的物理意義:用於描述模型預測值與真實值的差距大小;

2)最小化交叉熵的本質就是對數似然函數的最大化;

3)對數似然函數的本質就是衡量在某個參數下,整體的估計和真實情況一樣的概率,越大代表越相近;而損失函數的本質就是衡量預測值和真實值之間的差距,越大代表越不相近。

3、HMM、MEMM vs CRF 對比?

1)HMM是有向圖模型,是生成模型;HMM有兩個假設:一階馬爾科夫假設和觀測獨立性假設;但對於序列標註問題不僅和單個詞相關,而且和觀察序列的長度,單詞的上下文,等等相關。

2)MEMM(最大熵馬爾科夫模型)是有向圖模型,是判別模型;MEMM打破了HMM的觀測獨立性假設,MEMM考慮到相鄰狀態之間依賴關係,且考慮整個觀察序列,因此MEMM的表達能力更強;但MEMM會帶來標註偏置問題:由於局部歸一化問題,MEMM傾向於選擇擁有更少轉移的狀態。這就是標記偏置問題。

最大熵模型(MEMM)
在這裏插入圖片描述

3)CRF模型解決了標註偏置問題,去除了HMM中兩個不合理的假設,當然,模型相應得也變複雜了。

HMM、MEMM和CRF的優缺點比較:

a)與HMM比較。CRF沒有HMM那樣嚴格的獨立性假設條件,因而可以容納任意的上下文信息。特徵設計靈活(與ME一樣)

b)與MEMM比較。由於CRF計算全局最優輸出節點的條件概率,它還克服了最大熵馬爾可夫模型標記偏置(Label-bias)的缺點。

c)與ME比較。CRF是在給定需要標記的觀察序列的條件下,計算整個標記序列的聯合概率分佈,而不是在給定當前狀態條件下,定義下一個狀態的狀態分佈.

首先,CRF,HMM(隱馬模型),MEMM(最大熵隱馬模型)都常用來做序列標註的建模,像分詞、詞性標註,以及命名實體標註

隱馬模型一個最大的缺點就是由於其輸出獨立性假設,導致其不能考慮上下文的特徵,限制了特徵的選擇

最大熵隱馬模型則解決了隱馬的問題,可以任意選擇特徵,但由於其在每一節點都要進行歸一化,所以只能找到局部的最優值,同時也帶來了標記偏見的問題,即凡是訓練語料中未出現的情況全都忽略掉。

條件隨機場則很好的解決了這一問題,他並不在每一個節點進行歸一化,而是所有特徵進行全局歸一化,因此可以求得全局的最優值。

4、SVM和LR的區別與聯繫?

  • 對非線性表達上,邏輯迴歸只能通過人工的特徵組合來實現,而SVM可以很容易引入非線性核函數來實現非線性表達,淡然也可以通過特徵組合。
  • 邏輯迴歸產出的是概率值,而SVM只能產出是正類還是負類,不能產出概率。
  • 邏輯迴歸的損失函數是log loss,而SVM使用的是hinge loss。
  • SVM主要關注的是“支持向量”,也就是和分類最相關的少數點,即關注局部關鍵信息;而邏輯迴歸是在全局進行優化的。這導致SVM天然比邏輯迴歸有更好的泛化能力,防止過擬合。
    損失函數的優化方法不同,邏輯迴歸是使用梯度下降來求解對數似然函數的最優解;SVM使用SMO方法,來求解條件約束損失函數的對偶形式。
  • 處理的數據規模不同。LR一般用來處理大規模的學習問題。如十億級別的樣本,億級別的特徵。(SVM是二次規劃問題,需要計算m階矩陣)
  • svm 更多的屬於非參數模型,而logistic regression 是參數模型,本質不同。其區別就可以參考參數模型和非參模型的區別。

5、crf的損失函數是什麼?lstm+crf怎麼理解?

在這裏插入圖片描述
下面引出損失函數(雖然我感覺這不應該稱爲“損失”),對真實標記序列y的概率取log:
在這裏插入圖片描述

那麼我們的目標就是最大化上式(即真實標記應該對應最大概率值),因爲叫損失函數,所以我們也可以對上式取負然後最小化之,這樣我們就可以使用梯度下降等優化方法來求解參數。在這個過程中,我們要最大化真實標記序列的概率,也就訓練了轉移概率矩陣A和BiLSTM中的參數。

6、GBDT vs Xgboost

ID3、C4.5、CART、RF、boosting、Adaboost、GBDT、xgboost模型

那麼如何得到優秀的組合樹呢?

一種辦法是貪心算法,遍歷一個節點內的所有特徵,按照公式計算出按照每一個特徵分割的信息增益,找到信息增益最大的點進行樹的分割。增加的新葉子懲罰項對應了樹的剪枝,當gain小於某個閾值的時候,我們可以剪掉這個分割。但是這種辦法不適用於數據量大的時候,因此,我們需要運用近似算法。

另一種方法:XGBoost在尋找splitpoint的時候,不會枚舉所有的特徵值,而會對特徵值進行聚合統計,按照特徵值的密度分佈,構造直方圖計算特徵值分佈的面積,然後劃分分佈形成若干個bucket(桶),每個bucket的面積相同,將bucket邊界上的特徵值作爲split
point的候選,遍歷所有的候選分裂點來找到最佳分裂點。

上圖近似算法公式的解釋:將特徵k的特徵值進行排序,計算特徵值分佈,rk(z)表示的是對於特徵k而言,其特徵值小於z的權重之和佔總權重的比例,代表了這些特徵值的重要程度,我們按照這個比例計算公式,將特徵值分成若干個bucket,每個bucket的比例相同,選取這幾類特徵值的邊界作爲劃分候選點,構成候選集;選擇候選集的條件是要使得相鄰的兩個候選分裂節點差值小於某個閾值

傳統GBDT以CART作爲基分類器,xgboost還支持線性分類器,這個時候xgboost相當於帶L1和L2正則化項的邏輯斯蒂迴歸(分類問題)或者線性迴歸(迴歸問題)。

  • 傳統GBDT在優化時只用到一階導數信息,xgboost則對代價函數進行了二階泰勒展開,同時用到了一階和二階導數。順便提一下,xgboost工具支持自定義代價函數,只要函數可一階和二階求導。
  • xgboost在代價函數里加入了正則項,用於控制模型的複雜度。正則項裏包含了樹的葉子節點個數、每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是xgboost優於傳統GBDT的一個特性。
  • Shrinkage(縮減),相當於學習速率(xgboost中的eta)。每次迭代,增加新的模型,在前面成上一個小於1的係數,降低優化的速度,每次走一小步逐步逼近最優模型比每次走一大步逼近更加容易避免過擬合現象;
  • 列抽樣(column subsampling)。xgboost借鑑了隨機森林的做法,支持列抽樣(即每次的輸入特徵不是全部特徵),不僅能降低過擬合,還能減少計算,這也是xgboost異於傳統gbdt的一個特性。
  • 忽略缺失值:在尋找splitpoint的時候,不會對該特徵爲missing的樣本進行遍歷統計,只對該列特徵值爲non-missing的樣本上對應的特徵值進行遍歷,通過這個工程技巧來減少了爲稀疏離散特徵尋找splitpoint的時間開銷
  • 指定缺失值的分隔方向:可以爲缺失值或者指定的值指定分支的默認方向,爲了保證完備性,會分別處理將missing該特徵值的樣本分配到左葉子結點和右葉子結點的兩種情形,分到那個子節點帶來的增益大,默認的方向就是哪個子節點,這能大大提升算法的效率。
  • 並行化處理:在訓練之前,預先對每個特徵內部進行了排序找出候選切割點,然後保存爲block結構,後面的迭代中重複地使用這個結構,大大減小計算量。在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多線程進行,即在不同的特徵屬性上採用多線程並行方式尋找最佳分割點。

二、NLP高頻問題

1、word2vec和tf-idf 相似度計算時的區別?

word2vec 1、稠密的 低維度的 2、表達出相似度; 3、表達能力強;4、泛化能力強;

2、word2vec和NNLM對比有什麼區別?(word2vec vs NNLM)

1)其本質都可以看作是語言模型;

2)詞向量只不過NNLM一個產物,word2vec雖然其本質也是語言模型,但是其專注於詞向量本身,因此做了許多優化來提高計算效率:

  • 與NNLM相比,詞向量直接sum,不再拼接,並捨棄隱層;
  • 考慮到sofmax歸一化需要遍歷整個詞彙表,採用hierarchical softmax 和negative sampling進行優化,hierarchical softmax 實質上生成一顆帶權路徑最小的哈夫曼樹,讓高頻詞搜索路勁變小;negative sampling更爲直接,實質上對每一個樣本中每一個詞都進行負例採樣

3、 word2vec負採樣有什麼作用?

兩個作用,1.加速了模型計算,2.保證了模型訓練的效果,一個是模型每次只需要更新採樣的詞的權重,不用更新所有的權重,那樣會很慢,第二,中心詞其實只跟它周圍的詞有關係,位置離着很遠的詞沒有關係,也沒必要同時訓練更新。

4、word2vec和fastText對比有什麼區別?(word2vec vs fastText)

1)都可以無監督學習詞向量, fastText訓練詞向量時會考慮subword;

2)fastText還可以進行有監督學習進行文本分類,其主要特點:

  • 結構與CBOW類似,但學習目標是人工標註的分類結果;
  • 採用hierarchical softmax對輸出的分類標籤建立哈夫曼樹,樣本中標籤多的類別被分配短的搜尋路徑;
  • 引入N-gram,考慮詞序特徵;
  • 引入subword來處理長詞,處理未登陸詞問題;

5、glove和word2vec、 LSA對比有什麼區別?(word2vec vs glove vs LSA)

1)glove vs LSA

  • LSA(Latent Semantic Analysis)可以基於co-occurance matrix構建詞向量,實質上是基於全局語料採用SVD進行矩陣分解,然而SVD計算複雜度高;
  • glove可看作是對LSA一種優化的高效矩陣分解算法,採用Adagrad對最小平方損失進行優化;

2)word2vec vs LSA

  • 主題模型和詞嵌入兩類方法最大的不同在於模型本身。
  • 主題模型是一種基於概率圖模型的生成式模型。其似然函數可以寫爲若干條件概率連乘的形式,其中包含需要推測的隱含變量(即主題)
  • 詞嵌入模型一般表示爲神經網絡的形式,似然函數定義在網絡的輸出之上。需要學習網絡的權重來得到單詞的稠密向量表示。

3)word2vec vs glove

  • word2vec是局部語料庫訓練的,其特徵提取是基於滑窗的;而glove的滑窗是爲了構建co-occurance matrix,是基於全局語料的,可見glove需要事先統計共現概率;因此,word2vec可以進行在線學習,glove則需要統計固定語料信息。
  • word2vec是無監督學習,同樣由於不需要人工標註;glove通常被認爲是無監督學習,但實際上glove還是有label的,即共現次數。
  • word2vec損失函數實質上是帶權重的交叉熵,權重固定;glove的損失函數是最小平方損失函數,權重可以做映射變換。
  • 總體來看,glove可以被看作是更換了目標函數和權重函數的全局word2vec

6、 elmo、GPT、bert三者之間有什麼區別?(elmo vs GPT vs bert)

之前介紹詞向量均是靜態的詞向量,無法解決一次多義等問題。下面介紹三種elmo、GPT、bert詞向量,它們都是基於語言模型的動態詞向量。下面從幾個方面對這三者進行對比:

(1)特徵提取器

elmo採用LSTM進行提取,GPT和bert則採用Transformer進行提取。很多任務表明Transformer特徵提取能力強於LSTM,elmo採用1層靜態向量+2層LSTM,多層提取能力有限,而GPT和bert中的Transformer可採用多層,並行計算能力強。

(2)單/雙向語言模型

  • GPT採用單向語言模型,elmo和bert採用雙向語言模型。但是elmo實際上是兩個單向語言模型(方向相反)的拼接,這種融合特徵的能力比bert一體化融合特徵方式弱。
  • GPT和bert都採用Transformer,Transformer是encoder-decoder結構,GPT的單向語言模型採用decoder部分,decoder的部分見到的都是不完整的句子;bert的雙向語言模型則採用encoder部分,採用了完整句子。

7、LSTM和GRU的區別?

  • GRU和LSTM的性能在很多任務上不分伯仲。
  • GRU 參數更少因此更容易收斂,但是數據集很大的情況下,LSTM表達性能更好。
  • 從結構上來說,GRU只有兩個門(update和reset),LSTM有三個門(forget,input,output),GRU直接將hidden state 傳給下一個單元,而LSTM則用memory cell 把hidden state 包裝起來。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章