1. 程式人生 > >ML:自然語言處理NLP面試題

ML:自然語言處理NLP面試題

自然語言處理的三個里程碑:


兩個事實分別為:

一、短語結構語法不能有效地描寫自然語言。

二、短語結構規則的覆蓋有限。Chomsky 曾提出過這樣的假設,認為對一種自然語言來說,其語法規則的數目是有限的,而據此生成的句子數目是無限的。


文中提到的三個里程碑式的進展為:

一、複雜特徵集。複雜特徵集又叫多重屬性描寫。

二、詞彙主義。語言學界認為,不劃分詞類就無法將語法結構,即語法“不可能”根據個別的詞來寫規則;但是人們也注意到任何歸類都會丟失個體的某些重要資訊。

三、統計語言模型。這也就是語料庫方法。

總結:

        複雜特徵集、合一語法以及詞彙主義方法都是在原先理性主義框架(產生式或邏輯推理)框架下做出的重大貢獻。尤其詞彙主義方法的發展越來越得到語料庫和統計學方法的支援,這也是經驗主義和理性主義方法的相互融合。他們將成為自然語言處理技術的主流。

自然語言處理:

            10k以上 北京 經驗1年以下 碩士及以上 全職

職位誘惑 : 績效獎金多 晉升空間大 優秀團隊 半年調薪

職位描述

職位描述:
1、承擔自然語言處理技術在對話、通用問答、意圖理解、知識庫加工管理等方向上的應用研究;
2、按照研究與專案計劃,與專案組其他成員協同工作,在保證質量的前提下,按時完成研究開發任務。
任職資格:
1.學歷要求:畢業於211或985院校、統招碩士以上學歷,博士優先;英語4級以上。
2.工作經驗:

1年以上相關領域工作經驗,熟悉自然語言處理的各項技術,有對話、通用問答、意圖理解研究經驗
熟悉C/C++/Python,有演算法研究背景經驗
英文良好,知識面廣、研究能力強,熟悉並掌握自然語言處理在智慧人機互動技術領域中的應用。
3.能力要求:
具有強烈的研究興趣與學習意願,具備較好的學習能力、問題分析能力、以及問題解決能力;
良好的溝通協調能力和團隊合作意識,能夠主動總結和分享自己的開發經驗。
4.素質要求:
工作踏實,態度積極,能夠承受工作壓力,能適應嚴格專案管理;
責任心強,正直誠實,值得信賴。

面試筆試題:

百度校園招聘-自然語言處理工程師

原文連結:http://bishi.cnrencai.com/jingyan/1775.html

一、簡答題(本題共30分)

1.簡述資料庫以及執行緒死鎖產生的原理及必要條件,簡述如何避免死鎖。(10分)

2.請列舉面向物件設計的三個基本要素及五種主要設計原則。(10分)

3.多執行緒如何同步。(10分)

二、演算法與程式設計(本題共45分)

1.一百個燈泡排成一排,第一輪將所有燈泡開啟;第二輪每隔一個燈泡關掉一個,即排在偶數的燈泡都被關掉。第三輪每隔兩個燈泡,將開著的燈泡關掉,關掉的燈泡開啟。以此類推,第100輪結束的時候,還有幾盞燈泡亮著。編寫程式碼實現。(15分)

2.有一個百萬級的字串集合(worddic),worddict中每個字串的長度為2~5個漢字。對任意一個查詢串(query),定義該query對worddic模糊匹配的條件為:該query內部移除最多6個連續漢字後,與worddic中某個詞完全匹配。例如:worddic中有"百度公司"這個字串,query"北京百度網路技術有限公司",該query即可通過移除6個連續字元('網路技術有限')來匹配"百度公司";

現在需要你設計一個演算法來實現這樣的功能:

/**@brief: query match function

*@param worddcit:字串集合,可以在這兒自定義詞典的資料結構worddic;

*@param query: query;

*@param querylen: query的長度;

*@param return: 1表示該query可以模糊匹配詞典中某個字串,-1表示其它;

*/

int check_query(const dict *worddict, const char *query, const int querylen);

要求:給出資料結構dict的設計並完成check_query函式(20分)

三、系統設計題(本題共35分)

1.拼寫糾錯是搜尋引擎具備的一個功能,指的是自動分析使用者輸入的查詢(query),檢查是否有拼寫錯誤,如果有,則給出正確的拼寫建議。例如:把"聯想手機"輸錯為"聯想手機"。這時候搜尋引擎一般會給出提示"您要找的是不是:聯想手機"。

一般來說,拼寫糾錯主要包括了兩個重要的步驟:一是識別使用者輸入的錯誤的詞語;二是把錯誤的詞語修改成正確的詞語。

問題:1)在中文中,常見的錯誤輸入是同音不同字:例如,"蘋果"輸錯為"平果";在英文中,常見的錯誤輸入時拼寫錯誤,如"latest"錯輸為"latst"。針對以上兩種在中文和英文輸入中的錯誤,請分別給出一種解決方案。

2)使用者輸入的查詢,常常還包含一些上下文的資訊(如,"平果手機什麼時候釋出"),如何利用這些上下文改進糾錯的效果?

一、簡答

1. new 和 malloc的區別。

1,malloc與free是C++/C語言的標準庫函式,new/delete是C++的運算子。它們都可用於申請動態記憶體和釋放記憶體。

2,對於非內部資料型別的物件而言,光用maloc/free無法滿足動態物件的要求。物件在建立的同時要自動執行建構函式,物件在消亡之前要自動執行解構函式。由於malloc/free是庫函式而不是運算子,不在編譯器控制權限之內,不能夠把執行建構函式和解構函式的任務強加於malloc/free。

3,因此C++語言需要一個能完成動態記憶體分配和初始化工作的運算子new,以一個能完成清理與釋放記憶體工作的運算子delete。注意new/delete不是庫函式。

4,C++程式經常要呼叫C函式,而C程式只能用malloc/free管理動態記憶體


2. hash 衝突及解決辦法。

關鍵字值不同的元素可能會映象到雜湊表的同一地址上就會發生雜湊衝突。解決辦法:

1)開放定址法:當衝突發生時,使用某種探查(亦稱探測)技術在散列表中形成一個探查(測)序列。沿此序列逐個單元地查詢,直到找到給定 的關鍵字,或者碰到一個開放的地址(即該地址單元為空)為止(若要插入,在探查到開放的地址,則可將待插入的新結點存人該地址單元)。查詢時探查到開放的 地址則表明表中無待查的關鍵字,即查詢失敗。

2)再雜湊法:同時構造多個不同的雜湊函式。

3)鏈地址法將所有雜湊地址為i的元素構成一個稱為同義詞鏈的單鏈表,並將單鏈表的頭指標存在雜湊表的第i個單元中,因而查詢、插入和刪除主要在同義詞鏈中進行。鏈地址法適用於經常進行插入和刪除的情況。

4)建立公共溢位區:將雜湊表分為基本表溢位表兩部分,凡是和基本表發生衝突的元素,一律填入溢位表。


二、程式設計

1. 實現歸併排序。

2. 二叉樹的S型遍歷。

 第一層從左到右,第二層從左到右,第三層從左到右……

3. 20億url的存在一個文字中,一個url佔一行,其中有重複,統計出url的頻率。

三、系統設計

1.自然語言處理中的前向匹配常被用於分詞。

遙遠的古巴比倫

前向匹配分詞結果為

遙遠的|古巴|比倫

前向匹配分詞結果為:

遙|遠的|古|巴比倫

要求寫出前向匹配的介面及實現方法。


總結:
就摘抄這麼多了,反正也做不完!