阿里天貓一面
今天早上突然接到了阿里的面試電話,真的是十分驚悚羽莺。实昨。本來(lái)想約20分鐘以后(回宿舍準(zhǔn)備好開卷設(shè)備),但是小哥說(shuō)過(guò)一會(huì)他要開會(huì)禽翼,所以就這樣硬著頭皮開始了阿里一面屠橄。
先是一個(gè)簡(jiǎn)單的自我介紹族跛;
1.然后介紹了項(xiàng)目的框架和主要?jiǎng)?chuàng)新點(diǎn)闰挡;
2.說(shuō)一下隨機(jī)森林和Adaboost,以及區(qū)別
3.說(shuō)一下GBDT和Adaboost礁哄,以及區(qū)別
4.你用到了LDA說(shuō)一下LDA的原理
5.對(duì)于PCA长酗,會(huì)有第一主成分、第二主成分桐绒,怎么為什么第一主成分是第一夺脾,原因是什么?
6.PCA的主成分是怎么得到的
小哥說(shuō)他們推薦主要會(huì)基于圖片之類的茉继、所以可能深度學(xué)習(xí)用的多
我問(wèn)小哥那是不是一定要求會(huì)深度學(xué)習(xí)才行啊
小哥說(shuō)咧叭,你不會(huì)可以學(xué)么。烁竭。菲茬。這樣我這邊先給你過(guò),看下一面吧,這還有一段時(shí)間你先學(xué)學(xué)婉弹,關(guān)于深度學(xué)習(xí)睬魂、圖像、推薦相關(guān)的內(nèi)容镀赌。
然后我又確定了一下地點(diǎn)是否在杭州氯哮,就結(jié)束了我與阿里的第一次接觸,可以說(shuō)是很刺激了商佛。
GIO機(jī)器學(xué)習(xí)工程師(實(shí)習(xí))一面
這次小哥先加了我的微信喉钢,然后通過(guò)微信語(yǔ)音進(jìn)行了面試。小哥先進(jìn)行了一下自我介紹(話說(shuō)這還是第一次有面試官作自我介紹給我)威彰,并且介紹了一下公司的情況出牧,目前所做的東西是什么棒假。
然后讓我也進(jìn)行了一個(gè)簡(jiǎn)短的自我介紹中贝,其中簡(jiǎn)單涉及了一些學(xué)業(yè)情況,學(xué)術(shù)研究和本科的實(shí)習(xí)镀首。
1.還是先問(wèn)了簡(jiǎn)歷里面寫的科研項(xiàng)目豹缀,問(wèn)了其中我所做的幾個(gè)創(chuàng)新點(diǎn)伯复,以及哪一部分出了論文,
然后就是我balabala的講了半天的我做的東西邢笙,(小哥好像覺(jué)得還可以)
2.其中小哥還給我提了一個(gè)意見啸如,在我短期興趣的計(jì)算中,是否可以使用時(shí)間隊(duì)列來(lái)做氮惯,他曾經(jīng)看過(guò)的一篇YouTube發(fā)表的論文中叮雳,就有使用時(shí)間隊(duì)列來(lái)做短期興趣的方法,這個(gè)我覺(jué)得可以學(xué)習(xí)一下妇汗。
~~~~~~~~~~~~分割一下~~~~~~~~~~
這里有個(gè)背景要說(shuō)帘不,
我在投了這個(gè)公司以后,收了一份takehome test面試題杨箭,是給了一些關(guān)于電商購(gòu)買記錄的數(shù)據(jù)寞焙,要給出一個(gè)模型,可以識(shí)別出電商詐騙的購(gòu)買記錄互婿。
這個(gè)東西只給了48小時(shí)的時(shí)間來(lái)完成捣郊,所以做的很匆忙,因?yàn)檫@兩天有搜狐和好未來(lái)的面試慈参,以及華為和美團(tuán)的筆試23333333呛牲。所以完成的其實(shí)不是很好,本來(lái)以為不會(huì)有下文了驮配,沒(méi)想到周五開學(xué)術(shù)討論會(huì)的時(shí)候接到了HR的電話娘扩。
~~~~~~~~~~~~我分割完了~~~~~~~~~~
3.然后小哥開始問(wèn)了我是如何完成這個(gè)任務(wù)的尊勿。
首先講了如何進(jìn)行特征處理,和特征離散化畜侦,以及為什么要這么做元扔,
之后說(shuō)了都使用了什么樣的機(jī)器學(xué)習(xí)模型去跑,結(jié)果如何旋膳,性能如何(使用了邏輯回歸澎语,SVM-Liblinear,樸素貝葉斯验懊,kNN擅羞,決策樹,隨機(jī)森林义图,GDBT和xgboost减俏。其中GDBT和xgboost的效果相當(dāng),達(dá)到了恐怖的99.3%的準(zhǔn)確率)碱工。
4.當(dāng)我們要求準(zhǔn)確率很高娃承,但是不在意召回率的時(shí)候,可以怎樣處理怕篷。
我當(dāng)時(shí)有點(diǎn)蒙啊历筝,就說(shuō)了可以提高對(duì)負(fù)樣本的懲罰。廊谓。梳猪。小哥提示我,比如xgboost你可以提高閾值罢舯浴(哇春弥,這方法好,我好笨叠荠。匿沛。。這竟然沒(méi)想到)蝙叛。
5.繼續(xù)俺祠,那么閾值如何確定呢
可以公给。借帘。。一點(diǎn)點(diǎn)試試啊
小哥告訴我淌铐,這道也是個(gè)辦法肺然,但是你沒(méi)辦法得到一個(gè)特別合適的值啊,告訴我可以用Auc然后找個(gè)合適的值(看來(lái)這個(gè)AUC的用途還要在挖掘一下腿准,這個(gè)東西原來(lái)還有其他的用途)
6.xgboost际起,說(shuō)一下原理拾碌,步長(zhǎng)如何設(shè)定
從GDBT原理講起,xgboost是其加強(qiáng)版街望,說(shuō)了xgboost相比于GDBT的改進(jìn)與不同校翔,包括基學(xué)習(xí)器的選擇,二階泰勒展開以及原因灾前,行列抽樣防症,關(guān)于樹復(fù)雜度的正則項(xiàng),并行實(shí)現(xiàn)方法哎甲。
步長(zhǎng)的話 Python的xgboost 庫(kù)里面有一個(gè)參數(shù)可以調(diào)整蔫敲,常用范圍為0.01~0.2(還好我下午剛看過(guò)這地方。炭玫。)
接下來(lái)就到了奈嘿,每次都有的“你還有什么問(wèn)題么”的環(huán)節(jié)了。吞加。我問(wèn)了下公司的規(guī)模與環(huán)境裙犹,推薦相關(guān)的部分是具體做什么的,公司產(chǎn)品的具體嵌入方法衔憨。
然后小哥還問(wèn)了我的實(shí)習(xí)時(shí)間伯诬,畢業(yè)時(shí)間,是否已經(jīng)有offer巫财。
總結(jié)一下就是盗似,用過(guò)的東西一定要搞清楚,從原理到使用到優(yōu)缺點(diǎn)到類似方法的對(duì)比到調(diào)參等細(xì)節(jié)平项。
GIO機(jī)器學(xué)習(xí)工程師(實(shí)習(xí))二面
這次的二面問(wèn)的問(wèn)題都很open赫舒,都是一些如何讓我的推薦系統(tǒng)可以更好的應(yīng)用于大數(shù)據(jù)的實(shí)際場(chǎng)景當(dāng)中去的問(wèn)題。這次的面試官是該公司的機(jī)器學(xué)習(xí)總監(jiān)闽瓢,曾經(jīng)是多個(gè)互聯(lián)網(wǎng)公司推薦系統(tǒng)的負(fù)責(zé)人(了解到的有當(dāng)當(dāng)接癌、58等)。第一次面對(duì)這種大牛還是很緊張的扣讼。
首先是一個(gè)1分鐘的簡(jiǎn)短的自我介紹缺猛。
還是聊項(xiàng)目,說(shuō)了一下我推薦系統(tǒng)中的創(chuàng)新點(diǎn)椭符,以及系統(tǒng)架構(gòu)和實(shí)現(xiàn)荔燎。
然后開始針對(duì)我們系統(tǒng)提出一系列的問(wèn)題:
1.你的用戶的興趣特征有哪些,如何獲得和使用這些特征進(jìn)行推薦销钝?
命名實(shí)體有咨、關(guān)鍵字VSM傳統(tǒng)向量空間、主題分布蒸健。 使用經(jīng)典的Rocchio方法座享,對(duì)用戶興趣進(jìn)行建模婉商,分為正向樣本和負(fù)向樣本,對(duì)于正向樣本(也就是看過(guò)的新聞)以一定權(quán)重加入到用戶興趣模型中去(這個(gè)權(quán)重是可以通過(guò)我的算法算出一個(gè)具體值的)渣叛;對(duì)于負(fù)向樣本丈秩,以一定權(quán)重減到用戶興趣模型中去。
在推薦時(shí)淳衙,對(duì)于基于內(nèi)容的部分癣籽,使用用戶的興趣向量與新聞的特征向量,在三個(gè)不同層面(主題滤祖,實(shí)體筷狼,關(guān)鍵字)上做余弦相似度,然后以一定的權(quán)值加權(quán)求和得到用戶對(duì)于該新聞的興趣值匠童。
對(duì)于協(xié)同過(guò)濾的部分埂材,使用用戶喜好的相似性(計(jì)算用戶興趣的余弦相似度,方法同上)和瀏覽記錄的相似性的和來(lái)判斷用戶間的相似程度汤求。使用這二者結(jié)合的模式俏险,可以一定程度上降低協(xié)同過(guò)濾的冷啟動(dòng)現(xiàn)象。
2.你的新聞備選集是什么扬绪,這樣做是否是要遍歷所有新聞來(lái)進(jìn)行匹配呢竖独?
在我的場(chǎng)景下,由于新聞量不是很多挤牛,所以備選集就是當(dāng)天的所有新聞(大概200~300條)莹痢。所以目前是逐個(gè)進(jìn)行匹配的。但是這種方法在大數(shù)據(jù)的場(chǎng)景下是不合理的墓赴。所以我對(duì)此也有一些方案和想法竞膳。首先可以將新聞進(jìn)行聚類(根據(jù)時(shí)效性如果推薦的是近兩天的新聞,那就每?jī)商斓男侣勥M(jìn)行一次聚類)诫硕,這種聚類時(shí)分層次的坦辟。
1.首先使用主題分布進(jìn)行聚類,將新聞劃分為多個(gè)大的簇章办,這樣每個(gè)簇都是主題分布比較接近的新聞锉走,稱這個(gè)大簇為主題簇。
2.然后對(duì)于每個(gè)簇中藕届,可以使用命名實(shí)體和關(guān)鍵詞挪蹭,進(jìn)行第二次聚類,這樣每個(gè)主題簇中的小簇就代表了內(nèi)容相近的新聞翰舌。
這樣我們?cè)谕扑]時(shí)嚣潜,可以先匹配主題偏好前k個(gè)的主題簇冬骚,然后按照偏好比例從主題簇中挑選新聞椅贱。
在每個(gè)主題簇中懂算,若我們要選擇n個(gè)新聞,那么我們就可以選擇相似度前n的小簇庇麦,在每個(gè)小簇中選擇相似度最高的新聞(或者隨機(jī)游走也不是不行)计技。這樣就可以減少很大的計(jì)算量。
3.那要使用哪種聚類算法呢山橄?
快的話就k-means吧
4.k-means中的k如何確定呢垮媒?
一般根據(jù)經(jīng)驗(yàn)來(lái)確定一個(gè)范圍,然后在范圍中一個(gè)一個(gè)試吧航棱。根據(jù)每個(gè)簇中的聚集程度來(lái)判斷當(dāng)前的k值是否合理睡雇。
這個(gè)回答的不是很好。饮醇。它抱。。其實(shí)應(yīng)該這樣:
關(guān)于k-means的k的確定方法
1.計(jì)算所有點(diǎn)到對(duì)應(yīng)的類中心的距離均值朴艰,k值越大距離均值就越小观蓄,但是隨著k的增大,距離均值的變化幅度也會(huì)越來(lái)越小祠墅,就如下圖侮穿,可以在變化幅度小于某一閾值時(shí),確定該k值為最優(yōu)解毁嗦。
5.除了k-means亲茅,還可以用什么聚類方法,或者你還熟悉什么聚類方法狗准。如何應(yīng)用在你的場(chǎng)景中呢芯急?
比較熟悉的還有層次聚類,層次聚類相較于k-means的優(yōu)點(diǎn)就是不用指定k的個(gè)數(shù)驶俊,但是會(huì)比k-means慢一些娶耍。
(區(qū)別還應(yīng)該拓展一些)
層次聚類的聚類結(jié)果是一個(gè)樹型結(jié)構(gòu)(如下),那么根據(jù)層次聚類的結(jié)果就可以直接得到大小簇的關(guān)系了饼酿,就不需要多次聚類了榕酒。
6.那么使用了層次聚類的話,你又如何判斷聚成多少類合適呢故俐?
還是根據(jù)類內(nèi)的緊密程度想鹰?
Ps:屁,這樣一點(diǎn)都不好药版,是我層次聚類學(xué)習(xí)的太少了辑舷,事實(shí)上如上圖,層次聚類是一個(gè)從下到上合并的過(guò)程槽片,每次合并都會(huì)有一個(gè)合并的距離閾值何缓,我們可以設(shè)定一個(gè)合理的距離閾值來(lái)決定聚為多少類肢础。那么問(wèn)題又來(lái)了,這個(gè)閾值如何確定呢碌廓?
其實(shí)這里的思想倒是又和確定k-means中的k差不多了传轰,如下圖,剛開始合并的時(shí)候谷婆,每次距離的變化都是比較小的慨蛙,但當(dāng)我們一次次合并的時(shí)候,一般會(huì)有一個(gè)突變或者變化比較明顯的地方纪挎,那么我們可以繪制下圖根據(jù)圖中的變化來(lái)確定這個(gè)閾值為多少比較合理期贫,也就是確定了聚為多少類比較合理。
7.好异袄,那么我還想繼續(xù)提高推薦的效率唯灵,可以怎么做?
可以降維隙轻。埠帕。
8.不,我要求在不損失準(zhǔn)確性的前提下玖绿,不可以加機(jī)器敛瓷,單純的從算法上面解決這個(gè)問(wèn)題。
啊斑匪∧抛眩可以在計(jì)算用戶興趣向量與新聞相似度的時(shí)候,只保留用戶的興趣部分中與這篇新聞?dòng)嘘P(guān)的內(nèi)容蚀瘸,也就是做個(gè)交集狡蝶,然后在計(jì)算,可以提高計(jì)算效率贮勃。
9.還有呢
啊贪惹。。在協(xié)同過(guò)濾的時(shí)候需要找到用戶的鄰居節(jié)點(diǎn)寂嘉,這時(shí)候可以離線對(duì)用戶進(jìn)行聚類奏瞬,隔一段時(shí)間更新一次,這樣在尋找鄰居節(jié)點(diǎn)的時(shí)候只需要泉孩,尋找同一個(gè)簇內(nèi)的用戶硼端,這樣可以節(jié)省時(shí)間。
10.還有呢
啊寓搬。珍昨。。(我想我想,想到翻白眼傲偷洹)可以在簇內(nèi)對(duì)新聞進(jìn)行排序兔毙。。然后二分搜索這樣
11.高維特征你怎么排序呢骆撇?
把相似的放一起
12.那也不是排序啊
啊瞒御。父叙。神郊。是(翻白眼思考2分鐘),抱歉現(xiàn)在沒(méi)有別的好的想法了趾唱。
Ps:其實(shí)這時(shí)候可以跟前面的層次聚類結(jié)合起來(lái)涌乳,層次聚類的結(jié)果的那棵樹,就可以當(dāng)成一顆搜索樹甜癞,用來(lái)搜索最合適的小簇夕晓。這是我第二天早上醒來(lái)的時(shí)候想到的。悠咱。蒸辆。。
13.接下來(lái)談?wù)勚白龅膖ake home test析既,你這個(gè)類躬贡、這個(gè)類都是干什么的,說(shuō)一下職能眼坏。
實(shí)體類結(jié)構(gòu)拂玻、數(shù)據(jù)管理和處理工具、訓(xùn)練和結(jié)果
14.我們來(lái)分析一下你這個(gè)類宰译,其中的構(gòu)造函數(shù)中存在一些問(wèn)題檐蚜,有些變量不應(yīng)該在這里面,因?yàn)檫@些不是使用初始化的入?yún)?lái)構(gòu)造的沿侈。而是你在這里聲明并賦值為0的闯第,這樣會(huì)造成邏輯混亂,可讀性差缀拭。乡括。balbala。所以是不是應(yīng)該放在其他位置來(lái)維護(hù)和初始化比較合理呢智厌。哎呀這個(gè)問(wèn)題好像有些超綱诲泌。。沒(méi)事這個(gè)你可以注意一下铣鹏。
好敷扫。。啊 對(duì) 。葵第。绘迁。啊 我知道了,確實(shí)這樣不太好卒密。(確實(shí)沒(méi)有注意這方面的問(wèn)題缀台,平時(shí)編代碼還是太隨便了)
15.你是怎么處理和使用這些所給的特征的。
像不能直接使用的變量處理為對(duì)該情景有意義的表現(xiàn)形式哮奇。然后離散化膛腐。
16.我看到你瀏覽器類型這個(gè)變量,使用if else來(lái)判斷時(shí)那種然后添加0或1的鼎俘,那么當(dāng)我的瀏覽器的種類不確定的情況下哲身,你要怎么處理。
單獨(dú)維護(hù)一個(gè)瀏覽器類型的數(shù)組贸伐,當(dāng)有新的就添加一個(gè)勘天。所有的實(shí)例都參照這個(gè)數(shù)組來(lái)構(gòu)建瀏覽器類型的特征值。