開源 NLP 中文面試學習資料:面向演算法面試,理論程式碼俱全!

  • 2019 年 10 月 10 日
  • 筆記

基礎到什麼是線性、非線性:

進一步到損失函數如何計算,過擬合、欠擬合如何解決:

再到應用場景:

沒有多餘的廢話,儘是知識要點。拿著這樣一份重點筆記有針對性地學習、複習,豈不爽哉?

光看理論記不住?放心,每一節的文末都有配套的課後習題,邊學邊練,事半功倍。

課後習題不僅包括題目、數據和程式碼實現,項目作者還結合自身的經驗,把整個解題的思路完整呈現了出來,可以參考學習。

比如機器學習入門中的經典題房價預測。

題目是:

從給定的房屋基本資訊以及房屋銷售資訊等,建立一個回歸模型預測房屋的銷售價格。 測試數據主要包括3000條記錄,13個欄位,跟訓練數據不同的是測試數據並不包括房屋銷售價格,學員需要通過由訓練數據所建立的模型以及所給的測試數據,得出測試數據相應的房屋銷售價格預測。

腦子一團漿糊不知道從何著手?

可以參考一下作者的思路:

1、選擇合適的模型,比如這裡,選擇多元線性回歸模型。

2、對缺失的值進行補齊操作,可以使用均值的方式補齊數據,使得準確度更高。

3、數據的取值一般跟屬性有關,為了提高預測的準確度,需統一數據維度進行計算,方法有特徵縮放和歸一法等。

#讀取數據  housing = pd.read_csv('kc_train.csv')  target=pd.read_csv('kc_train2.csv')  #銷售價格  t=pd.read_csv('kc_test.csv')         #測試數據    #數據預處理  housing.info()    #查看是否有缺失值    #特徵縮放  from sklearn.preprocessing import MinMaxScaler  minmax_scaler=MinMaxScaler()  minmax_scaler.fit(housing)   #進行內部擬合,內部參數會發生變化  scaler_housing=minmax_scaler.transform(housing)  scaler_housing=pd.DataFrame(scaler_housing,columns=housing.columns)

4、調用模型庫進行訓練。

#選擇基於梯度下降的線性回歸模型  from sklearn.linear_model import LinearRegression  LR_reg=LinearRegression()  #進行擬合  LR_reg.fit(scaler_housing,target)      #使用均方誤差用於評價模型好壞  from sklearn.metrics import mean_squared_error  preds=LR_reg.predict(scaler_housing)   #輸入數據進行預測得到結果  mse=mean_squared_error(preds,target)   #使用均方誤差來評價模型好壞,可以輸出mse進行查看評價值    #繪圖進行比較  plot.figure(figsize=(10,7))       #畫布大小  num=100  x=np.arange(1,num+1)              #取100個點進行比較  plot.plot(x,target[:num],label='target')      #目標取值  plot.plot(x,preds[:num],label='preds')        #預測取值  plot.legend(loc='upper right')  #線條顯示位置  plot.show()

5、使用測試數據進行目標函數預測輸出,觀察結果是否符合預期。或者通過畫出對比函數進行結果線條對比。

當然,最後都會附上參考答案。

NLP部分也是一樣的節奏,比如全局向量詞嵌入(GloVe)。

先說明概念:

GloVe的全稱叫Global Vectors for Word Representation,它是一個基於全局詞頻統計(count-based & overall statistics)的詞表徵(word representation)工具,它可以把一個單詞表達成一個由實數組成的向量,這些向量捕捉到了單詞之間一些語義特性,比如相似性(similarity)、類比性(analogy)等。我們通過對向量的運算,比如歐幾里得距離或者cosine相似度,可以計算出兩個單詞之間的語義相似性。

再詳述實現步驟:

1、構建共現矩陣。

2、詞向量和共現矩陣的近似關係。

3、構造損失函數。

4、訓練GloVe模型。

還分析了一番GloVe與LSA(Latent Semantic Analysis,潛在語義分析)、Word2Vec(詞嵌入)的比較。

LSA(Latent Semantic Analysis)是一種比較早的count-based的詞向量表徵工具,它也是基於co-occurance matrix的,只不過採用了基於奇異值分解(SVD)的矩陣分解技術對大矩陣進行降維,而我們知道SVD的複雜度是很高的,所以它的計算代價比較大。還有一點是它對所有單詞的統計權重都是一致的。而這些缺點在GloVe中被一一克服了。 而word2vec最大的缺點則是沒有充分利用所有的語料,所以GloVe其實是把兩者的優點結合了起來。從這篇論文給出的實驗結果來看,GloVe的性能是遠超LSA和word2vec的,但網上也有人說GloVe和word2vec實際表現其實差不多。

最後,還是附上程式碼實現。