也就是說,對比一下c²,以及a²+b²,就知道夾角是什麼樣的角了。為了進一步方便起見,我們把畢達哥拉斯定理重新寫一下,變成這樣一種形式:a²+b²-c²=0,我們將等式左邊的部分,也就是a²+b²-c²作為一個判定因子使用,我們用������表示它。根據������和0比較的大小,就可以判斷夾角。具體的判別如下:判定因子小於0為鈍角,等於0為直角,大於0為銳角。
如果我們回顧一下函式的概念,就會發現������是a,b,c三個變數的函式。對於同樣一個角,如果三角形邊長都比較長,那麼������的動態範圍很大。如果邊長很短,������的動態範圍就很小。
為了消除邊長的影響,我們將������再除以夾角的兩個邊長(a和b)的積,這樣可以保證處理過的������的動態範圍就在-2到+2之間。
如果������=-2,那麼夾角最大,就是180度。如果是0,就是90度。如果是2,就是0度角。當然我們還可以再除以2,將這個值的範圍規整為-1到1之間,事實上它就等於夾角的餘弦。
這樣一來,我們就從畢達哥拉斯定理出發,建立了角度判定因子������和具體角度的關係,然後我們將這種關係稱作餘弦定理。
餘弦定理的思想最初出現在歐幾里得的《幾何原本》中,但是由於當時並沒有成體系的三角學,因此並沒有把這個判定因子和角度的函式用餘弦表示出來。到了15世紀,波斯數學家賈姆希德·阿爾卡西正式提出了餘弦定理。
今天,我們之所以花了不少篇幅講解餘弦定理的來龍去脈,是讓你再次體會數學體系的重要性,因為它可以從已知的定理推匯出新的定理。由此,我們可以體會各種數學概念之間的關聯。當然這只是我們講述餘弦定理的附帶目的,主要目的是介紹向量夾角的計算。
回到向量夾角計算的問題,當兩個向量確定之後,我們可以把它們的起點都挪到原點,它們各自的終點和原點之間,就構成一個三角形,如下圖所示。這個三角形的三條邊顯然是確定的,由此我們可以算出判定因子������,然後根據餘弦定理計算兩個向量的夾角。
接下來的問題就是,算出兩個向量的夾角有什麼用?
它其實有很多的應用,比如可以對文字進行自動分類。這兩件事情看似不相干,怎麼會聯絡到一起呢?下面我們就大致介紹一下計算機進行文字自動分類的原理。
我們知道一篇文章的主題和內容,其實是由它所使用的文字決定的,不同的文章使用的文字不同,但是主題相似的文章使用的文字有很大的相似性。比如講金融的文章裡面可能會經常出現“金融”、“股票”、“交易”、“經濟”等詞,講計算機的則會經常出現“軟體”、“網際網路”、“半導體”等詞。
假如這兩部分關鍵詞沒有重複,那麼我們很容易把這兩類文字分開。假如它們有重複怎麼辦?那麼我們就要看這兩類文章中,各個詞的頻率了。根據我們的經驗,即使在金融類的文章中混有一些計算機類的詞,那麼它們的詞頻不會太高,反之亦然。
為方便說明如何區分這兩類文章,我們就假設漢語中只有“金融”、“股票”、“交易”、“經濟”、“計算機”、“軟體”、“網際網路”和“半導體”這八個詞。假設有一篇經濟學的文章,這八個詞出現的次數分別是(23,32,14,10,1,0,3,2),另一篇是計算機的文章,這八個詞出現的次數是(3,2,4,0,41,30,31,12),這樣它們就各自形成一個八維的向量,我們稱之為V1和V2。
如果我們能夠在八維空間中將它們畫出來,你就會發現它們之間的夾角非常大。我算了一下,大概是82度,近乎垂直,或者說正交。由於這些向量每一個維度都是正數,因此它們最大的夾角就是90度,不會更大了。這說明兩類不同文章所對應的向量之間的夾角應該很大。
如果我們再假設另有一篇文章,八個詞的詞頻是V3=(1,3,0,2,25,23,14,10),那麼它和上述第二篇文章對應的向量的夾角只有7。5度。我用二維的座標將這三個向量的關係大致示意如下。
從圖中可以看出第一個和第二個向量的角度很大,而第二個、第三個的夾角很小。由此,我們大致可以判定第三篇文章應該和第二篇主題相近,也屬於計算機類的。
接下來我們需要思考一個問題,什麼樣的向量之間夾角會比較小,什麼樣的會幾乎正交呢?如果你對比上面三個向量,就會發現這樣一個特點:當兩個向量在同樣的維度上的分量都比較大時,它們的夾角就很小。反之,當兩個向量在不同維度上分量較大時,就近乎正交。
比如第二個、第三個向量,它們在後四個維度分量值都較大,因此它們的夾角就小。而第一個向量在前四個維度的分量較大,在後四個很小,和第二個向量的情況正好錯開,因此就近乎正交。關於向量的夾角,有兩個特殊情況大家需要留心一下:
如果兩個向量在各個維度的分量成比例,則它們的夾角為零。
如果一個向量在所有的維度都相等,比如像(10,10,10,10,10,10,10,10)這樣的向量,它可能和任何一個向量都不太接近。這個性質我們後面還要用到。
當然,在真實的文字分類中不止這8個詞,有10萬這個數量級的詞彙,因此每一篇文章對應的向量大約有10萬維左右,這些向量我們稱之為特徵向量。透過利用餘弦定理計算特徵向量之間的夾角,我們就能判斷哪些文字比較接近,該屬於同一類。
向量不僅可以對文章進行分類,而且還可以對人進行分類。今天很多大公司在招聘員工時,由於簡歷特別多,會先用計算機自動篩選簡歷,其方法的本質,就是把人根據簡歷向量化,然後計算夾角。具體的做法常常是這樣的:
首先,它們會把各種技能和素質列成一張表,這就如同我們在做文字分類時會把詞彙列成一張表一樣,這個表有N個維度。
對於不同崗位人員的要求,體現為某些維度權重很高,某些較低,一些無關的就可以是零。比如說對開發人員的要求主要是六個方面,權重如下:
程式設計能力 40
工程經驗 20
溝通能力 10
學歷和專業基礎 10
領導力 10
和企業文化的融合度 10
對銷售崗位的要求會有所不同。這樣每個職位都對應一個N維的向量,我們假設是V。
接下來計算機會對簡歷進行分析,把每一份簡歷變成一個N維的向量,我們假設是P。
然後我們就計算P和V的夾角,如果夾角非常小,那說明某一份簡歷和某一個崗位可能比較匹配。這時簡歷才轉到相應的HR部門,HR人員才開始看簡歷。
如果某份簡歷和哪一個崗位都不太匹配,這份簡歷就石沉大海了。這種做法是否會有誤差,讓一些好的候選人永遠進不了HR人員的視野呢?完全有可能,但是這種機率並不高,因為計算機做的只是初步篩選,標準是比較寬的。
要知道今天像Google、Facebook或者微軟這樣的公司,一個職位常常有上百個求職者,最少也有十幾個,合格的多則有十個、八個,少則有三五個,漏掉一兩個合格的人,對公司來講沒什麼損失。但是這對於求職者來講,就是100%的損失。因此,
除非有非常強的推薦,否則簡歷寫得不好經常連第一關都過不了。
很多人在寫簡歷時常犯的一個毛病就是重點不突出,他們所對應的向量其實就是一種每個維度數值都差不多的向量。我們在前面講了,這種向量和其它向量的匹配度都不高。
很多人喜歡在簡歷中把自己有關或無關,所有的經歷都寫進去,然後把自己描繪成全能的人,其實在計算機匹配簡歷和工作時,這種簡歷常常一個職位都匹配不上,因為這就像我們前面說的每個分量都是10的向量,和誰的夾角都小不了一樣。
很多人覺得多寫點東西沒壞處,這種認識是錯誤的,這些畫蛇添足的內容其實稀釋了求職者的競爭力。
那麼好的簡歷應該是什麼樣的呢?
如果你在求職單位有熟人,不妨問問他們對某個職位的要求,然後根據這個要求寫簡歷,這樣在他們看中的維度你的得分就高,在他們根本不在意的維度,你也不需要強調。
今天我們講了向量之間的夾角是如何計算的。透過它,我們回顧了畢達哥拉斯定理,介紹了餘弦定理。然後我們用一些例項說明了向量的用途。下一講我們看看,很多向量放到一起,會變成什麼。——吳軍《數學通識五十講》