[研替] 面試時詢問主管的問題整理

整理一下在面研替的時候可以問主管的問題,

1. 公司對新人有什麼樣的訓練,時間多久,有沒有內部訓練課程。

2. 在單位裡面的工作內容是否固定,
    還是一段時間就要學新的東西。

3. 希望現在新鮮人再多培養哪方面的能力。

4. 所在職務部門的人力配置狀況,同事前輩的學經歷大概是如何,會如何跟其他部門合作。

5. 工作氣氛,同仁間相處方式,主管對員工人格特質的期許(強調團隊或個人)。

有些是從PPT上精華區挖的,應該沒有版權問題吧?

[研替] 聯發科研替面試 軟韌體部門

今天去研替聯發科的面試,
一次被排兩場,從三點面到八點,
實在是有點瘋狂,比之前考托福還累。

不過可能是模式跟之前魯汶考試的模式很像,
先請你解釋做過的專題,再從專題裡面找和部門相關的東西問,所以並不會太緊張。
當完全沒有頭緒的時候也會試著引導你,
但是像通原那種修完就沒碰過的東西我就直接放棄了…

只能說履歷裡面的東西不能亂填,
懂不懂他們也是一眼就能看出來,不過可以還是盡量瞎掰一下。

考程式
一開始進去人資會先安排到一個電腦教室寫程式題,
總共有十題,直接用英文打在螢幕上,不能編譯。
我有寫到的題目包含:
判斷程式回傳值(指標),判斷int溢位(不能用long幫忙),
直接寫出改大小寫跟判斷大小寫的函數,交換兩數的值(不能使用變數幫忙),
用一行程式判斷是否為2的冪次方等等…

基本上就是指標與更多的指標(還有函數指標),
還有bitwise的操作也要熟悉。

結束程式題之後就是等面試,
我兩場都有五位左右的主管同時面,
所以問題也是一題接著一題來。

基本上都會照著履歷的東西問,所以忘記內容的專題記得要複習一下,
不過他們也不會問太多實作的內容,大多都會和課程做結合。

第一場
第一場主要被問到的都是專題上優化的部分,
兩場主管好像都對OS裡面thread平行化和計算機架構很有興趣。

我主要被問到的有:
1. pipeline的機制,假設有一個1MHZ的處理器經過pipeline速度會變幾倍。
2.有pipeline一定會變快嗎(假設沒有latency)?
3.cache假設可以做到無限大,我們為什麼不做得和memory一樣大。
(其實我不太懂他在問什麼,問題就是太貴不是嗎?不然就做很大了啊!)
4.解釋一下mutex, semaphore的差異以及用途。
5.當場寫出一個反轉字串的程式,輸入是一個char*。
(這題我一開始直接硬寫stack,第二次還在那邊交換記憶體位址,主管應該覺得我是智障…)
6.如何判斷一個子串陣列的大小,且不能使用strlen。
7.邏輯問題:一百顆球在袋子裡面,分別是1到100公斤,任意拿掉一顆,只秤剩下的球,要秤幾次才知道拿掉哪顆。
(這題我也莫名其妙,也沒有說一次只能秤幾顆球,害我問題目問半天,
最後我就說把袋子拿去秤就知道少哪一顆了,主管也不打算解釋清楚一點就這樣讓他過去了。)

剩下就是一些社團的問題跟自傳的問題了。

我覺得第一場的主管有點冷淡,再加上我一堆問題答不太出來,
他們應該覺得我還蠻笨的吧,有些簡單的題目也在亂講,感覺是機會渺茫,
部門做的東西我也聽不大懂,就去吃飯等第二場面試了。

第二場
第二場面試的主管有兩位看起來很年輕,
其他主管可能剛吃飽飯心情也不錯,
因為有下午的經驗,整場面試還算輕鬆,
主要有兩位主管主導面談,他們也都會適時引導,不會直接投降也不會怎麼樣。

因為他們領域包含計算機架構,作業系統,DSP,
在魯汶的那個專題就一直被拿來問,老實講我根本不懂原理啊!

這場被問到的有:
1.為什麼音訊要用dsp板處理不用CPU,同樣的操作在CPU上也可以做。
2.process和thread的不同點。
3.為什麼multi-thread可以加速,僅僅切換CPU就可以加速。
4.什麼是race-condition,如何解決。
5.優化裡面的remove branching為什麼可以加快程式。
6.專題裡面porting到DSP版上有沒有用到組語優化,和8051有沒有不同。
7.OpenMP和CUDA的平行化機制(因為我專題有)。
8.8051和DSP都是嵌入式系統,知不知道差異,8051可不可以拿來處理音訊。
9.Nyquist rate是什麼,為什麼要大於這個rate(超基本結果我也沒講完整…)。
10.物件導向的好處是什麼,C++的class的好處(我回答了動物繼承的例子還被發現是書上的…)。
11.vim的好處在哪。
12.Volatile變數的使用時機,如果不用它,平常程式會把資料存在哪。
13.談一下通原學到的東西,隨便舉幾個知道的modulation(這我直接說不會…)。

大致上是這樣,主管的問題大都圍繞著專題在問,
但幾乎不是專題的內容,還好有偷念OS和C語言的考古。
後來就是問一些為什麼大四交換成績不好,社團的經驗,
然後終於有人問到我交換學生的事了!

最後兩場都有問到一些經典問題,
你的求學困難,覺得自己比別人強(弱)更適合公司的地方在哪等等…
大概先擬一下講法就不會出什麼錯了。

另外我今天面試的部門都是與通訊底層的OS或系統開發有關,
所以面試的時候這些很重要,像其他部門就可能會被問到其他課,
基本上還是不會問太深入,感覺把書上的重要概念記住就好,真的問太難也只好放棄了。

最後總結一下:
1.履歷的內容一定要熟悉,專題實驗要把握做法跟原理。
2.基本上面試單上說對XX科目有興趣,就是會考那個科目的意思,要準備。
3.經典人生題一定會被問到,有準備就好,也可以先想一些要問公司的問題。
4.單就聯發科的話,考古題還蠻有用的,可以上網搜尋一下。

——————————————————————————–

8/28 補充:
今天去竹北面談,公司在台元科技園區,
其實還蠻偏遠的,但是整個園區弄得蠻漂亮的就是了。

今天面的部門偏向非LTE的通訊,
包含從IC驗證到系統整個產品都有做設計。
一開始還以為會被問到計算機網路,嚇個半死,
結果整場面談還是著重於專題部分。

問題都是圍繞在最佳化的部分,
從平行化如何處理critical section,
使用的API或架構的原理,等等都有被問到。
還有就是如何C語言中的最佳化,可能會使用到的技巧。
中間還有被問到論文的部分,
實在是可喜可賀。

問題都不難,沒有太多追問的內容,
但我也沒有回答得十分詳細,
不知道符不符合他們的期待。

最後主管有問到工時的問題,
我回答待到八、九點沒有問題,
主管竟然說可能會到十點…

還真的是一間十分精實的公司啊。

——————————————————————————–

9/10 補充:
今天去二面,來了無線開發本部的處長,
是一個女生,人還算蠻親切的,
不過談到專業的部分解釋得也很詳盡。

面試的時候大多都在聊履歷上的東西,
比起專業,我覺得問比較多社團、個性之類的東西,
感覺是要確認我的性格適不適合他們部門。

她也有提及希望新人是肯學習,專業領域要夠深,
但其他領域也要了解,看東西才能全面。

以上,接下來就是等消息了。

[學習] OS中的經典同步問題

最近準備面試複習OS讀到同步的章節,太久沒複習了,讀了一整天還是頭昏眼花,
在這邊記錄一下幾個經典問題的解釋:

1. Bounded-Buffer Problem
有一個生產者和消費者的組合,生產者會不斷生產物品放到倉庫中,直到倉庫塞滿,
使用者會持續消費倉庫中的物品,直到倉庫清空。

使用者不能在空倉庫中消費物品,生產者也不能在滿倉庫生產物品。

解法在維基百科有十分詳細的解釋,需要使用三個semaphore:full, empty, mutex,
才能同時解決deadlock和race condition的狀況。

詳見:生產者消費問題

2. Readers and Writers Problem
通常對同一個檔案或同一份資料,不同的程序(process)會想對它做讀或寫的動作,
檔案可以接受同一時間被多個程序讀取,但寫入檔案一次只能由一個程序作,而且寫入時其他程序不能嘗試讀寫。
所以這邊必須用到兩個semaphore的機制(或者可以說是mutex),再加上限制讀取人數的reader count。

Semaphore rw_mutex= 1 ,mutex = 1; Integer read_count = 0
rw_mutex:控制reader/writer進入的mutex
mutex:控制reader修改reader count,不會被其他reader影響的mutex

//reader
do {
          wait(mutex);                                    //會修改reader count,所以限制其他reader進入
          reader_count++;
          if(reader_count == 1)
                    wait(rw_mutex);                    //第一個reader進入
          signal(mutex);                                //其他reader可以讀

          …
          /*reading*/
          …

          wait(mutex);                                   //會修改reader count,所以限制其他reader進入
          reader_count–;
          if(reader_count == 0)
                    signal(rw_mutex);                //沒人在讀,把鎖打開
          signal(mutex);
} while(true);

//writer
do {
          wait(wr_mutex);                            //writer想寫入,必須看鎖有沒有開

          …
          /*writing*/
          …

          signal(wr_mutex);
} while(true);

◎Starvation Issue
當有無限個reader連續進入想要讀取資料,writer就不可能有機會可以寫入,造成starvation。
此時可以加入一個新的semaphore來限制最大reader數量,在此假設為3,
每次reader要進入讀取時,就wait(),所以至多三個reader可以讀取資料,且結束後並不做signal()。
而signal()的指令會放在writer call裡面,當writer寫入完才會釋放semaphore,

但此方法也會造成不常被寫入的檔案會限制reader數量的問題,
不確定能不能使用timestemp來幫助釋放semaphore。

3. Dining Philosopher
假設有五位哲學家圍著一個圓桌吃飯,每兩人中間都有一根筷子,
哲學家除了吃飯之外就是思考,但當他們要吃飯就需要兩根筷子。

do {
          wait(chopstick[i]);
          wait(chopstick[(i+1)%5]);

          /*eating*/

          signal(chopstick[i]);
          signal(chopstick[(i+1)%5]);

         /*thinking*/
} while(true);

當所有哲學家同時想吃飯時,他們很有可能會各自拿到一根筷子,並等待另外一根,造成starvation。
另外當1,3號哲學家連續進食,夾在中間的2號哲學家就有可能得不到筷子而餓死,
此時semaphore也無法解決問題。

網路上解法有不少,其中一個是加入一個可以宏觀看到哪位哲學家想要用餐的使用者,
並制定出想用餐必須先舉手獲得授權才能得到筷子的規則(先左手再右手或相反),
並由宏觀的使用者來授與筷子,就可以解決starvation的問題。

參考資料:
宅學習,作業系統部分筆記
http://sls.weco.net/node/21326
YOUTUBE Channel Ranjit Kolkar
https://www.youtube.com/channel/UCD9td9yyUSuFcELrH2mOgKw

[生活筆記] 普羅旺斯燉蔬菜

今天吃飯的時候看到菜單上琳瑯滿目的加入法國地名菜名,
其中有一道普羅旺斯燉蔬菜被同行的朋友嫌沒有節瓜和茄子,不怎麼道地。
我笑著回應他可能是用台灣當季的蔬菜吧!

但仔細想想,如果叫做普羅旺斯燉蔬菜就必須道地,
那麼市面上很多料理都不能稱作X國或XX料理,頂多只能說是X式料理了。

如果消基會開始嚴格管制店家名稱,
如此一來,很多異國料理店勢必就關門大吉,或是把自己的名字改成X式料理。
聽起來跟在包裝上標示本產品果汁含量未達10%一樣傻呢。

有趣的是,在台灣反而很少看見寫著台灣料理的店家,
通常招牌都是寫台式熱炒,或是台式便當,
是大家都對自己的料理沒信心嗎?
還是積非成是大家就都這麼說了,我也不知道。

總之今天那道燉菜得到的評價不怎麼樣就是了,
雖然如此,我點的燉羊膝倒是香濃軟爛。
不過即使去過法國好幾次,我到現在還是沒辦法評斷我那道主菜夠不夠道地。

[生活筆記] 再多一點點

很多事情,只要再多一點點,就可以達到想要的程度或目標。

拿跳舞來說,只要每個動作多注意一點點自己的有沒有偷懶,
有沒有把力量跳出來,就可以強化自己跳舞的畫面感。

想要念語言,只要每天花多一點點時間聽一小段對話,
試著背一點點的單字,就可以大幅增進自己的語言能力。

如果想要運動,每天只要用一點點的時間做個仰臥起坐或深蹲,
時間比較多甚至可以在家附近慢跑一陣子,就能得到成效。

多一點點不難,但能時時刻刻都記住要再多一點點,
就不是那麼容易了。

通常我們很容易能做到多一點點的事情,都是大家眼中的壞習慣。
但與其說是壞習慣,我覺得倒不如應該說是,
容易上手卻不容易戒掉的習慣吧!

[學習]對於大數據資料分析的三個階段

上上禮拜在學校的BigData Summer School聽資策會前瞻科技所所長 林蔚君博士提了現階段大數據分析的研究趨勢與應用,所以特別在此紀錄一下

1.Exploratory Data
此階段的資料大多是半結構化或未結構化的資料,如文字。使用者必須透過文字分析等Exploration Sandbox的方法從資料中找到資料中的脈絡(pattern),通常會配合Batch System如Hadoop,使用機器學習的方法來得到結果。

2.Purposeful Diagnostic
得到Pattern之後,就可以建立Data Warehouse,並做出有目的性的決策,在此也會用上最佳化(或OR)的概念來找到最佳解。

3.Real-time
最後一個階段是建立即時處理及分析的系統,應付源源不斷的資料,會使用到Stream Computing的技術。

以上

[轉載] 個性化推薦系統的十大挑戰

轉載自: http://blog.sciencenet.cn/home.php?mod=space&uid=636598&do=blog&view=me

挑戰一:資料稀疏性問題。

現在待處理的推薦系統規模越來越大,使用者和商品(也包括其他物品,譬如音樂、網頁、文獻……)數目動輒百千萬計,兩個用戶之間選擇的重疊非常少。

如果以用戶和商品之間已有的選擇關係占所有可能存在的選擇關係的比例來衡量系統的稀疏性,那麼我們平時研究最多的MovieLens資料集的稀疏度是4.5%,Netflix是1.2%,這些其實都是非常密的資料了,Bibsonomy是0.35%,Delicious是0.046%。想想淘寶上號稱有8億商品,平均而言一個用戶能流覽800件嗎,我估計不能,所以稀疏度應該在百萬分之一或以下的量級。

資料非常稀疏,使得絕大部分基於關聯分析的演算法(譬如協同過濾)效果都不好。這個問題本質上是無法完全克服的,為了解決這個問題,也有很多辦法,譬如可以通過擴散的演算法,從原來的一階關聯(兩個用戶有多少相似打分或者共同購買的商品)到二階甚至更高階的關聯(假設關聯性或者說相似性本身是可以傳播的)[8],也可以添加一些缺少的打分[9],從而提高相似性的解析度。資料規模越大,一般而言越稀疏,現在能夠處理稀疏資料的演算法被認為是更有前途的(譬如擴散[8]、迭代最佳化[10],轉移相似性[11]等等)。

[8] Z. Huang, H. Chen, D. Zeng, Applying associative retrieval techniques to alleviate the sparsity problem in collaborative filtering, ACM Transactions on Information Systems 22 (2004) 116-142.

[9] J. S. Breese, D. Heckerman, C. Kadie, Empirical analysis of predictive algorithms for collaborative filtering, in: Proceedings of the 14th Conference on Uncertainty in Artificial Intelligence, 1998, pp. 43-52.

[10] J. Ren, T. Zhou, Y.-C. Zhang, Information filtering via self-consistent refinement, EPL 82 (2008) 58007.

[11] D. Sun, T. Zhou, J.-G. Liu, R.-R. Liu, C.-X. Jia, B.-H. Wang, Information filtering based on transferring similarity, Physical Review E 80 (2009) 017101

 

挑戰二:冷啟動問題。

新使用者因為罕有可以利用的行為資訊,很難給出精確的推薦。反過來,新商品由於被選擇次數很少,也難以找到合適的辦法推薦給用戶。

一種辦法是利用文本資訊進行輔助推薦,或者通過註冊以及詢問得知一些使用者的屬性資訊,譬如年齡、居住城市、受教育程度、性別、職業等等[12,13]。最近標籤系統(tagging systems)的廣泛應用提供了解決冷開機問題的可能方案[14],因為標籤既可以看作是商品內容的萃取,同時也反映了用戶的個性化喜好——譬如對《桃姐》這部電影,有的人打上標籤“倫理”,有的人打上標籤“劉德華”,兩個人看的電影一樣,但是興趣點可能不盡相同。

當然,利用標籤也只能是提高有少量行為的用戶的推薦準確性,對於純粹的冷開機用戶,是沒有幫助的,因為這些人還沒有打過任何標籤。有趣的是,最近的研究顯示,新使用者更容易選擇特別流行的商品[15]——這無論如何是一個好消息,說明使用熱銷榜也能獲得不錯的結果。

冷開機問題還可以通過多維資料的交叉推薦部分解決,其精確度和多樣性又遠勝於熱銷榜,這一點我們在後面會進一步介紹。

[12] A. I. Schein, A. Popescul, L. H. Ungar, D. M. Pennock, Methods and metrics for cold-start recommendations, in: Proceedings of the 25th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval, ACM Press, New York, 2002, pp. 253-260.

[13] X. N. Lam, T. Vu, T. D. Le, A. D. Duong, Addressing cold-start problemin recommendation systems, in: Proceedings of the 2nd International Conference on Ubiquitous Information Management and Communication, 2008, pp. 208-211.

[14] Z.-K. Zhang, C. Liu, Y.-C. Zhang, T. Zhou, Solving the cold-start problem in recommender systems with social tags, EPL 92 (2010) 28002.

[15] C.-J. Zhang, A. Zeng, Behavior patterns of online users and the effect on information filtering, Physica A 391 (2012) 1822-1830.

 

挑戰三:大資料處理與增量計算問題。

儘管資料很稀疏,大部分數據都擁有百千萬計的用戶和商品,因此,如何快速高效處理這些資料成為迫在眉睫的問題,而演算法時間和空間的複雜性,尤其是前者,獲得了空前重視。

一個高效的演算法,要麼複雜性很低,要麼能夠很好並行化,要麼兩者兼具。局部擴散演算法在這兩個方面都具有明顯優勢[16]!另外一條可能的解決之道,是設計增量演算法,也就是說當產生新用戶,新商品以及新的連接關係時,演算法的結果不需要在整個資料集上重新進行計算,而只需要考慮所增加節點和連邊局部的資訊,對原有的結果進行調整,快速得到新結果[17]。一般而言,這種演算法隨著加入的信息量的增多,其誤差會累積變大,最終每過一段時間還是需要利用全域資料重新進行計算。

一個特別困難的挑戰,是如何設計一種演算法,能夠保證其誤差不會累積,也就是說其結果與利用全部資料重新計算的結果之間的差異不會單調上升。我們把這種演算法叫做自我調整演算法,它是增量演算法的一個加強版本[18],其設計要求和難度更高。

增量演算法已經在業界有了應用,譬如百分點科技推薦引擎中的若干演算法都採用了增量技術,使得用戶每次新流覽收藏或者購買商品後其推薦列表立刻得到更新。當然,該引擎也只是部分演算法實現了增量技術,更沒有達到所有演算法都能夠自我調整學習的程度,還有很長的路要走。

[16] T. Zhou, J. Ren, M. Medo, Y.-C. Zhang, Bipartite network projection and personal recommendation, Physical Review E 76 (2007) 046115.

[17] B. Sarwar, J. Konstan, J. Riedl, Incremental singular value decomposition algorithms for highly scalable recommender systems, in: International Conference on Computer and Information Science, 2002, pp. 27-28.

[18] C.-H. Jin, J.-G. Liu, Y.-C. Zhang, T. Zhou, Adaptive information filtering for dynamics recommender systems, arXiv:0911.4910.

 

挑戰四:多樣性與精確性的兩難困境。

如果要給用戶推薦他喜歡的商品,最“保險”的方式就是給他特別流行或者得分特別高的商品,因為這些商品有更大的可能性被喜歡(至少貝葉斯會這麼想),往壞處說,也很難特別被討厭。但是,這樣的推薦產生的用戶體驗並不一定好,因為用戶很可能已經知道這些熱銷流行的產品,所以得到的信息量很少,並且用戶不會認同這是一種“個性化的”推薦。

事實上,Mcnee等人已經警告大家,盲目崇拜精確性指標可能會傷害推薦系統——因為這樣可能會導致用戶得到一些信息量為0的“精準推薦”並且視野變得越來越狹窄[19]。讓使用者視野變得狹窄也是協同過濾演算法存在的一個比較主要的缺陷。

與此同時,應用個性化推薦技術的商家,也希望推薦中有更多的品類出現,從而激發用戶新的購物需求。遺憾的是,推薦多樣的商品和新穎的商品與推薦的精確性之間存在矛盾,因為前者風險很大——一個沒什麼人看過或者打分較低的東西推薦出手,很可能被用戶憎惡,從而效果更差。很多時候,這是一個兩難的問題,只能通過犧牲多樣性來提高精確性,或者犧牲精確性來提高多樣性。

一種可行之策是直接對推薦列表進行處理,從而提升其多樣性[20-22]。目前百分點推薦引擎所使用的方法也是類似的。這種方法固然在應用上是有效的,但是沒有任何理論的基礎和優美性可言,只能算一種野蠻而實用的招數。我們發現,通過精巧混合精確性高和多樣性好的兩種演算法,可以同時提高演算法的多樣性和精確性,不需要犧牲任何一方[23]。

遺憾的是,我們還沒有辦法就這個結果提供清晰的解讀和深刻的見解。多樣性和精確性之間錯綜複雜的關係和隱匿其後的競爭,到目前為止還是一個很棘手的難題。

[19] S.M. Mcnee, J. Riedl, J.A. Konstan, Being accurate is not enough: how accuracy metrics have hurt recommender systems, in: Proceedings of the CHI’06 Conference on Human Factors in Computing Systems, ACM Press, New York, 2006, pp. 1097-1101.

[20] B. Smyth, P. Mcclave, Similarity vs. diversity, in: D.W. Aha, I. Watson (Eds.), Case-Based Reasoning Research and Development, Springer, 2001, pp. 347-361.

[21] C.-N. Ziegler, S.M. Mcnee, J.A. Konstan, G. Lausen, Improving recommendation lists through topic diversification, in: Proceedings of the 14th International Conference on World Wide Web, ACM Press, New York, 2005, pp. 22-32.

[22] N. Hurley,M. Zhang, Novelty and diversity in top-N recommendation—analysis and evaluation, ACMTransactions on Internet Technology 10 (2011) 14.

[23] T. Zhou, Z. Kuscsik, J.-G. Liu, M. Medo, J.R. Wakeling, Y.-C. Zhang, Solving the apparent diversity–accuracy dilemma of recommender systems, Proceedings of the National Academy of Sciences of the United States of America 107 (2010) 4511-4515.

 

挑戰五:推薦系統的脆弱性問題。

受推薦系統在電子商務領域重大的經濟利益的驅動,一些心懷不軌的用戶通過提供一些虛假惡意的行為,故意增加或者壓制某些商品被推薦的可能性[24]。因此,一個演算法能否在一定程度上保持對惡意攻擊的魯棒性(robustness),成為需要認真考慮的一個特徵。

以最簡單的關聯規則挖掘演算法為例,Apriori演算法的魯棒性就遠勝於k近鄰演算法[25]。有一些技術已經被設計出來提高推薦系統面對惡意攻擊的魯棒性,譬如通過分析對比真實用戶和疑似惡意使用者之間打分行為模式的差異,提前對惡意行為進行判斷,從而阻止其進入系統或賦予疑似惡意用戶比較低的影響力[26-28]。

總體來說,這方面的研究相對較少,系統性的分析還很缺乏,反而是攻擊策略層出不窮,有一種“道高一尺,魔高一丈”的感覺。僅Burke等人2011年的研究報告中就分析了4大種類8種不同的攻擊策略[29]。

[24] B. Mobasher, R. Burke, R. Bhaumik, C. Williams, Towards trustworthy recommender systems: an analysis of attackmodels and algorithm robustness, ACM Transactions on Internet Technology 7 (2007) 23.

[25] J. J. Sandvig, B. Mobasher, R. Burke, Robustness of collaborative recommendation based on association rule mining, in: Proceedings of the 2007 ACM Conference on Recommender Systems, ACM Press, 2007, pp. 105-112.

[26] S. K. Lam, D. Frankowski, J. Riedl, Do You Trust Your Recommendations? An Exploration of Security and Privacy Issues in Recommender Systems, in: Lecture Notes in Computer Science, vol. 3995, Springer, Heidelberg, Germany, 2006, pp. 14-29.

[27] P. Resnick, R. Sami, The influence limiter: provably manipulation-resistant recommender systems, in: Proceedings of the 2007 ACM Conference on Recommender Systems, ACM Press, 2007, pp. 25-32.

[28] C. Shi, M. Kaminsky, P. B. Gibbons, F. Xiao, DSybil: Optimal Sybil-Resistance for Recommendation Systems, IEEE Press, 2009, pp. 283-298.

[29] R. Burke, M. P. O’mahony, N. J. Hurley, Robust Collaborative Recommendation, in: F. Ricci, L. Rokach, B. Shapira, P. B. Kantor (Eds.), Recommender Systems Handbook, Part 5, Springer, 2011, pp. 805-835 (Chapter 25).

 

挑戰六:使用者行為模式的挖掘和利用。

深入挖掘使用者的行為模式有望提高推薦的效果或在更複雜的場景下進行推薦。譬如說,新用戶和老用戶具有很不一樣的選擇模式:一般而言,新用戶傾向於選擇熱門的商品,而老用戶對於小眾商品關注更多[15],新用戶所選擇的商品相似度更高,老用戶所選擇的商品多樣性較高[30]。

有些混合演算法可以通過一個單參數調節推薦結果的多樣性和熱門程度[23],在這種情況下就可以考慮為給不同用戶賦予不同參數(從演算法結果的個性化到演算法本身的個性化),甚至允許用戶自己移動一個滑鈕調節這個參數——當用戶想看熱門的時候,演算法提供熱門推薦;當使用者想找點很酷的產品時,演算法也可以提供冷門推薦。

用戶行為的時空統計特性也可以用於提高推薦或者設計針對特定場景的應用。用戶的選擇可能同時蘊含了長期的興趣和短期的興趣,通過將這兩種效應分離出來,可以明顯提高推薦的精確度[31-33]。事實上,簡單假設用戶興趣隨時間按照指數遞減,也能夠得到改進的推薦效果[34,35]。

利用手機上網現在已經越來越普及,與此同時,嵌入GPS的手機越來越多,因此,基於位置的服務成為一個受到學術界和業界廣泛關注的問題。基於位置資訊的推薦可能會成為個性化推薦的一個研究熱點和重要的應用場景,而這個問題的解決需要能夠對使用者的移動模式有深入理解[36,37](包括預測用戶的移動軌跡和判斷用戶在當前位置是否有可能進行餐飲購物活動等),同時還要有定量的辦法去定義用戶之間以及地點之間的相似性[38,39]。

另外,不同使用者打分的模式也很不一樣[40,41],用戶針對不同商品的行為模式也不一樣[42,43](想像你在網上下載一首歌和團購房子時的區別),這些都可以用來提高推薦的效果。

[15] C.-J. Zhang, A. Zeng, Behavior patterns of online users and the effect on information filtering, Physica A 391 (2012) 1822-1830.

[23] T. Zhou, Z. Kuscsik, J.-G. Liu, M. Medo, J.R. Wakeling, Y.-C. Zhang, Solving the apparent diversity–accuracy dilemma of recommender systems, Proceedings of the National Academy of Sciences of the United States of America 107 (2010) 4511-4515.

[30] M.-S. Shang, L. Lü, Y.-C. Zhang, T. Zhou, Empirical analysis of web-based user-object bipartite networks, EPL 90 (2010) 48006.

[31] S.-H. Min, I. Han, Detection of the customer time-variant pattern for improving recommender systems, Expert Systems with Applications 28 (2005) 189-199.

[32] L. Xiang, Q. Yuan, S. Zhao, L. Chen, X. Zhang, Q. Yang, J. Sun, Temporal recommendation on graphs via long-and short-term preference fusion, in: Proceedings of the 16th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, ACM Press, New York, 2010, pp. 723-732.

[33] N. N. Liu, M. Zhao, E. Xiang, Q. Yang, Online evolutionary collaborative filtering, in: Proceedings of the 4th ACM Conference on Recommender Systems, ACM Press, New York, 2010, pp. 95-102.

[34] J. Liu, G. Deng, Link prediction in a user-object network based on time-weighted resource allocation, Physica A 39 (2009) 3643-3650.

[35] Y. Koren, Collaborative filtering with temporal dynamics, in: Proceedings of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, ACM Press, New York, 2009, pp. 447-456.

[36] C. Song, Z. Qu, N. Blumm, A.-L. Barabási, Limits of predictability in human mobility, Science 327 (2010) 1018-1021.

[37] E. Cho, S.A. Myers, J. Leskovec, Friendship and mobility: user movement in location-based social networks, in: Proceedings of the 17th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, ACM Press, New York, 2011, pp. 1082-1090.

[38] V. W. Zheng, Y. Zheng, X. Xie, Q. Yang, Collaborative location and activity recommendations with GPS history data, in: Proceedings of the 19th International Conference on World Wide Web, ACM Press, New York, 2010, pp. 1029-1038.

[39] M. Clements, P. Serdyukov, A. P. De Vries, M. J. T. Reinders, Personalised travel recommendation based on location co-occurrence, arXiv:1106.5213.

[40] Y. Koren, J. Sill, OrdRec: An ordinal model for predicting personalized item rating distributions, Proc. 5th ACM Conference on Recommender Systems, ACM Press, New York, 2011, pp. 117-124.

[41] Z. Yang, Z.-K. Zhang, T. Zhou, Uncovering Voting Patterns in Recommender Systems (unpublished).

[42] J. Vig, S. Sen, J. Riedl, Navigation the tag genome, in: Proceedings of the 16th International Conference on Intelligent User Interfaces, ACM Press, New York, 2011, pp. 93-102.

[43] L. Chen, P. Pu, Critiquing-based recommenders: survey and emerging trends, User Modeling and User-Adapted Interaction 22 (2012) 125-150.

 

挑戰七:推薦系統效果評估。

推薦系統的概念提出已經有幾十年了,但是怎麼評價推薦系統,仍然是一個很大的問題。

常見的評估指標可以分為四大類,分別是準確度、多樣性、新穎性和覆蓋率,每一類下轄很多不同的指標,譬如準確度指標又可以分為四大類,分別是預測評分準確度、預測評分關聯、分類準確度、排序準確度四類。以分類準確度為例,又包括準確率、召回率、準確率提高率、召回率提高率、F1指標和AUC值。朱郁筱和呂琳媛總結了文獻中曾經出現過的幾乎所有的推薦系統指標[44],這些指標都是基於資料本身的指標,可以認為是第一層次。

實際上,在真實應用時,更為重要的是另外兩個層次的評價,第二個層次是商業應用上的關鍵表現指標,譬如受推薦影響的轉化率,購買率,客單價,購買品類數等等,第三個層次是使用者真實的體驗。

絕大部分研究只針對第一個層次的評價指標,而業界真正感興趣的是第二個層次的評價(譬如到底是哪個指標或者哪些指標組合的結果能夠提高使用者購買的客單價),而第三個層細最難,沒人能知道,只能通過第二層次來估計。如何建立第一層面和第二層面指標之間的關係,就成為了關鍵,這一步打通了,理論和應用之間的屏障就通了一大半了。

[44] 朱郁筱,呂琳媛,推薦系統評價指標綜述,電子科技大學學報(已接受)

 

挑戰八:使用者介面與使用者體驗。

這個問題更多地不是一個學術性質的問題,而是真實應用的問題。十年前就有學者指出[45,46],推薦結果的可解釋性,對於用戶體驗有至關重要的影響——用戶希望知道這個推薦是怎麼來的。

在這個意義上,協同過濾有明顯的優勢,譬如亞馬遜基於商品的協同過濾在發送推薦的電子郵件時會告訴使用者之所以向其推薦某書,是因為用戶以前購買過某些書。相對地,矩陣分解或者集成學習演算法就很難向使用者解釋推薦結果的起源。使用者更喜歡來自自己朋友的推薦而不是系統的推薦,這一點在後面還會詳細提到。

另外,推薦列表往往含有很多項,這些推薦項最好能夠區分成很多類別,不同類別往往來自於不同的推薦方法,譬如看過還看過(流覽過本商品的客戶還流覽過的商品)、買過還買過(購買過本商品的客戶還購買過的商品)、看過最終購買(流覽過本商品的客戶最終購買的商品)、個性化熱銷榜(個性化流行品推薦)、猜你喜歡(個性化冷門商品推薦)等等。

當然,如何更好呈現推薦,是一個很難建立理論模型和進行量化的問題,對於不同被推薦品而言,使用者介面設計的準則也可能大不相同。建立一個可以進行A/B測試的系統,或可累計重要的實驗資料。

[45] R. Sinha, K. Swearingen, The role of transparency in recommender systems, in: Proceedings of the CHI’06 Conference on Human Factors in Computing Systems, 2002, pp. 830-831.

[46] A. D. J. Cooke, H. Sujan, M. Sujan, B. A. Weitz, Marketing the unfamiliar: the role of context and item-specific information in electronic agent recommendations, Journal of Marketing Research 39 (2002) 488-497.

 

挑戰九:多維資料的交叉利用。

目前網路科學研究一個廣受關注的概念是具有相互作用的網路的結構和動力學。網路與網路之間的相互作用大體可以分成三類:

第一類是依存關係[47],譬如電力網絡和Internet,如果發生了大規模停電事故,當地的自主系統和路由器也會受到影響,導致網路局部中斷;

第二類是合作關係[48],譬如人的一次出行,可以看作航空網路、鐵路網路和公路網路的一次合作;

第三類是交疊關係[49],主要針對社會網路,這也是我們最關注的。

我們幾乎每一個人,都參與了不止一個大型的社會網路中,譬如你可能既有新浪微博的帳號,又是人人網的註冊用戶,還是用手機,那麼你已經同時在三個巨大的社會網路中了。與此同時,你可能還經常在淘寶、京東、麥包包、1號店、庫巴網……這些地方進行網購,那麼你也是一張巨大的使用者-商品二部分圖中的一員。想像如果能夠把這些網路資料整合起來,特別是知道每個節點身份的對應關係(不需要知道你真實身份,只需要知道不同網路中存在的一些節點是同一個人),其中有特別巨大的社會經濟價值。舉個例子,你可能已經在新浪微博上關注了很多資料採擷達人的微博,並且分享了很多演算法學習的心得和問題,當你第一次上當當網購書的時候,如果主頁向你推薦資料採擷的最新專著並附有折扣,你會心動嗎?

交疊社會關係中的資料採擷,或稱多維資料採擷,是真正有望解決系統內部冷開機問題的終極法寶——只要使用者在系統外部的其他系統有過活動。單純從個性化商品推薦來講,可以利用用戶在其他電子商務的流覽購買歷史來提高在目標電子商務推薦的精確度——當然,每一個電子商務既是付出者,也是獲利者,總體而言,大家能夠通過提高用戶體驗和點擊深度實現共贏。與此同時,可以利用微博和其他社會網路的活動提高商品推薦的精度,還可以反過來利用商品流覽歷史提高微博關注物件推薦的精度。給一個經常購買專業羽毛球和流覽各種專業羽毛球設備的使用者推薦關注羽毛球的專業選手和業餘教練成功率應該很高,而且不會陷入“總在一個圈子裡面來回推薦”的毛病中。

從機器學習的角度,楊強等人提出的“遷移學習”演算法有望移植來解決這種跨鄰域的推薦[50]。我們分析了百分點科技服務客戶的真實資料,發現有相當比例的用戶都具有交叉購物的習慣(在多個獨立B2C電商有流覽和購買行為)[51,52]。即便只考慮兩個點上,例如利用麥包包的流覽購買資料為名鞋庫的使用者進行個性化推薦(這些用戶在名鞋庫上是沒有任何歷史記錄的新使用者,但是在麥包包上有流覽購買行為),就可以明顯提高推薦的準確度[51](比完全冷開機的隨機推薦高數十倍),而如果利用3家或以上的外部電子商務的資料,其推薦的精確度可以明顯高於熱銷榜(注意,熱銷榜一點個性化都沒有),特別在團購類網站上表現非常好[52]。雖然針對多維資料採擷的研究剛剛起步,但是我完全相信這在學術和應用上都將是一個焦點和難點。

[47] S. V. Buldyrev, R. Parshani, G. Paul, H. E. Stanley, S. Havlin, Catastrophic cascade of failures in interdependent networks, Nature 464 (2010) 1025-1028.

[48] C.-G. Gu, S.-R. Zou, X.-L. Xu, Y.-Q. Qu, Y.-M. Jiang, D.-R. He, H.-K. Liu, T. Zhou, Onset of cooperation between layered networks, Physical Review E 84 (2011) 026101.

[49] M. Mognani, L. Rossi, The ML-model for multi-layer social networks, 2011 International Conference on Advances in Social Networks Analysis and Mining, IEEE Press, 2011, pp. 5-12.

[50] S. J. Pan, Q. Yang, A survey on transfer learning, IEEE Transactions on Knowledge and Data Engineering 22 (2010) 1345-1359.

[51] 張亮,柏林森,周濤,基於跨電商行為的交叉推薦演算法,電子科技大學學報(已接收).

[52] T. Zhou, L. Zhang, L.-S. Bai, L. Gong, C. Li, S. Huang, M.-S. Shang, S. Guo, Crossing Recommendation via Local Diffusion (unpublished).

 

挑戰十:社會推薦。

很早以前,研究人員就發現,用戶更喜歡來自朋友的推薦而不是被系統“算出來的推薦”[53]。社會影響力被認為比歷史行為的相似性更加重要[54,55],例如通過社會關係的分析,可以大幅度提高從科研文獻[56]到網購商品[57]推薦的精確度。

來自朋友的社會推薦有兩方面的效果:一是增加銷售(含下載、閱讀……)[58],二是在銷售後提高用戶的評價[59]。社會推薦的效果也不完全是正面的,譬如Leskovec等人[58]在同一篇論文中也報導了一個反例:朋友推薦對書的銷售增長幾乎沒有幫助,有時候還會起到負面作用。國內業界做得最出色的是豆瓣網,其朋友推薦被接受被高度評價的比例非常高,我們的研究也主要是基於豆瓣網的資料[59]。最近有證據顯示,朋友推薦也是淘寶商品銷售一個非常重要的驅動力量[60]。

在社會推薦方向存在的挑戰主要可以分為三類:

一是如何利用社會關係提高推薦的精確度[55];

二是如何建立更好的機制以促進社會推薦[61,62];

三是如何將社會信任關係引入到推薦系統中[63,64]。

社會推薦的效果可能來自於類似口碑傳播的社會影響力,也可能是因為朋友之間本來就具有相似的興趣或者興趣相投更易成為朋友,對這些不同的潛在因素進行量化區別,也屬學術研究的熱點之一[65]。

[53] R. Sinha, K. Swearingen, Comparing recommendations made by online systems and friends, in: Proceedings of the DELOS-NSF Workshop on Personalization and Recommender Systems in Digital Libraries, 2001.

[54] M.J. Salganik, P.S.Dodds,D.J.Watts, Experimental study of inequality and unpredictability in an artificial culturalmarket, Science 311 (2006) 854-856.

[55] P. Bonhard,M.A. Sasse, “Knowingme knowing you"—using profiles and social networking to improve recommender systems, BT Technology Journal 24 (2006) 84-98.

[56] S.-Y. Hwang, C.-P. Wei, Y.-F. Liao, Coauthorship networks and academic literature recommendation, Electronic Commerce Research and Applications 9 (2010) 323-334.

[57] P. Symeonidis, E. Tiakas, Y.Manolopoulos, Product recommendation and rating prediction based onmulti-modal social networks, in: Proceedings of the 5th ACM Conference on Recommender Systems, ACM Press, New York, 2011, pp. 61-68.

[58] J. Leskovec, L.A. Adamic, B.A. Huberman, The dynamics of viral marketing, ACM Transactions on Web 1 (2007) 5.

[59] J. Huang, X.-Q. Cheng, H.-W. Shen, T. Zhou, X. Jin, Exploring social influence via posterior effect ofword-of-mouth recommendations, in: Proceedings of the 5th ACM International Conference onWeb Search and Data Mining, ACM Press, New York, 2012, pp. 573-582.

[60] S. Guo, M. Wang, J. Leskovec, The role of social networks in online shopping: information passing, price of trust, and consumer choice, in: Proceedings of the 12th ACM Conference on Electronic Commerce, ACM Press, New York, 2011, pp. 157-166.

[61] M. Medo, Y.-C. Zhang, T. Zhou, Adaptive model for recommendation of news, EPL 88 (2009) 38005.

[62] T. Zhou, M. Medo, G. Cimini, Z.-K. Zhang, Y.-C. Zhang, Emergence of scale-free leadership strcuture in social recommender systems, PLoS ONE 6 (2011) e20648.

[63] J. O’Donovan, B. Smyth, Trust in recommender systems, Proceedings of the 10th international conference on Intelligent user interfaces, ACM Press, 2005, pp. 167-174.

[64] P. Massa, P. Avesani, Trust-aware recommender systems, in: Proceedings of the 2007 ACM conference on Recommender systems, ACM Press, 2007, pp. 17-24.

[65] J. He, W. W. Chu, A social network-based recommender system (SNRS), Annals of Information Systems 12 (2010) 47-74.

[轉載] C/C++在Windows,批次讀取資料夾內的檔案名稱

轉載自:http://candcpluspluswriter.blogspot.tw/2011/01/cc.html

#include <windows.h>
#include <stdio.h>
void main()
{
    char InputPath[65535] = "C:\\Program Files\\";  
    //放要讀取檔案的資料夾路徑到InputPath字串裡
    char szDir[65535];
    char dir[65535];
    WIN32_FIND_DATA FileData;
    HANDLE          hList;
    sprintf(szDir, "%s\\*", InputPath );
    if ( (hList = FindFirstFile(szDir, &FileData))==INVALID_HANDLE_VALUE )
        printf("No files be found.\n\n");
    else {
        while (1) {
            if (!FindNextFile(hList, &FileData)) {
                if (GetLastError() == ERROR_NO_MORE_FILES)
                    break;
            }
            sprintf(dir, "%s\\%s", InputPath, FileData.cFileName);
            printf("%s\n", dir);
        }
    }
    FindClose(hList);
}