1. 程式人生 > >阿里nlp演算法實習記錄

阿里nlp演算法實習記錄

開貼記錄實習面試,為了以後找工作備用

電話一面: 

線上程式設計, 求兩個有序陣列交集, 我寫了一個比暴力法強一點的版本,從頭遍歷A和B,A大B往後移動,B大A往後移動.時間複雜度O(M+N)

他: 如果其中一個數組很長怎麼辦?

    當時太緊張沒答出來.應該是用二分查詢

他: variance和bias是什麼, 如果這兩個東西高了分別代表什麼?

我: variance是方差, bias是誤差. variance高了代表過擬合, bias高了代表欠擬合.

他:優化方法瞭解哪些?

我:SGD,牛頓法,最小二乘法

他:說一下momentum?

我:不太瞭解,但是我的理解可能是梯度,梯度就是更新的方向,學習率就是步長.

他: 過擬合有什麼方法解決?

我: 正則化, dropout,early stopping

他: 正則化介紹一下

我: 有L1和L2正則化,比較常用的L2正則化

他:有什麼區別?為什麼好用?

我: L1正則化是一範數,L2是二範數.在損失後面加正則項一起優化,相當於給引數加了一層限制,也就是所謂的權重衰減,這樣可以避免過大和過小的資料對模型影響太大.

他:還可以,能不能說一下隱馬爾可夫和條件隨機場?

我:HMM是生成模型, 它是對X,Y的聯合分佈對P(X,Y)建模, 預測時利用P(X, Y)和輸入的P(X)反推P(Y | X). CRF是判別模型,直接對P(Y|X)建模

他:你說的是模型上的區別, 能不能從理論上講一下?

我: HMM是根據馬爾科夫假設, 當前狀態只和前一個狀態有關, 他只考慮前面的.而CRF是在全域性範圍內的狀態轉移.

他:GRU和LSTM都知道吧,說一說GRU吧

我:GRU沒怎麼用過, 能不能說一說LSTM?

他:不行

我:(不知道對不對)GRU和LSTM不同點是他沒有LSTM的cell狀態, 它的輸入通過sigmoid和tanh,巴拉巴拉,全是亂說的

他:聊一下專案吧, 看你做的一個評測, 選的模型是沒什麼好說的, 你說一下模型以外的東西,出了什麼問題,怎麼解決的?

我:(一個實體識別的評測)資料標註不一致, 暴力選擇多的標註代替. 分詞歧義, 先分實體外的句子, 再分實體.嘗試字元級的模型,後來失敗了.輸出後做一個一致性分析,如果和訓練集中的標註不一致,人工改正

他:看來主要還是取決於資料,還有一些trick, 你能不能說一下如果資料噪聲很大, 資料量又很少,你怎麼做?

我:如果標註資料不夠,學實體可能效果不會很好,可以嘗試學實體的語境(其實我是亂說的),然後用外部資料訓練一個語言模型,把語言模型加上去共同訓練.

他:也算是個方法, 還有別的方法嗎?

我: 因為我們的資料是分好類的(5個科室的醫療資料), 所以可以在訓練的採用兩個LSTM,一個共有,一個私有. 共有的一起做實體識別和科室分類,私有的專門做實體識別,最後兩個LSTM的輸出結合在一起做識別. 損失加在一起訓練

他: 你說的就是一個multi task learning的一個過程唄

我:是的

他:看你的簡歷上還有一些知識表示的專案, 你對知識表示的模型有哪些瞭解?分別說一下TransE, TransH, TransR.

我:TransE是撿屍體和關係嵌入到低維向量空間, TransH認為TranE過於簡單,不能處理一對多,多對多的關係,他的解決方法是把關係對映到一個空間,再做翻譯操作.TransR是將實體和關係投影到不同的空間.

他:為什麼TransE模型有這種缺點?

我:因為TransE模型是那種三角形模型,訓練目標是h + r = t, 這樣的話如果一個頭實體有多種尾實體就永遠不能擬合.比如曹操有兒子曹植和曹丕, 這兩個三元組的訓練目標是一樣的,所以不好擬合.如果把曹植和曹丕投影到另一個空間,是可以用一個向量來表示的,這樣再做翻譯操作就沒有問題了.

他:ACL投稿的那篇文章是怎麼做的?

我:和TransE系列不一樣,我們這個方法是把實體和關係結合做卷積,然後輸出是另一個實體, 其中在實體中加入實體的描述,在加描述的部分用內部attention去給句子中的詞的重要性打分,然後送入CNN,輸入後給每個描述加入外部attention選取各個描述的重要性.

他:大概就這麼多,有什麼問我的麼?