推薦系統技術之文本類似性計算(一)

推薦系統技術 --- 文本類似性計算(模型化 上)

1. 前言

推薦系統分爲兩種,一種是基於用戶的,根據某個用戶的特性推薦一些東西,還有一種是根據內容,推薦一些類似的內容,或者是兩種的結合,任何推薦系統,仔細分析下來,都屬於這兩種狀況的組合。算法

今天咱們說一下基於內容推薦中的一個分支,也是使用得比較多的內容推薦方式,那就是基於文本類似性的推薦,咱們說文本類似性的計算,文本類似性應用範圍是比較廣的:編程

  • 普通的閱讀文章,底下的相關文章推薦能夠用數組

  • 論文查重也能夠用微信

  • 過濾類似度很高的新聞,或者網頁去重數據結構

本系列咱們會寫三篇。編程語言

  • 前兩篇是模型化,分爲上和下,這兩篇是重點,開篇會用說人話的方式說說計算文本類似性的一些思想和套路,對文本類似性有個感性的瞭解,而後會把人話變成數學化的東西,只有數學化了才能計算,纔有計算機能作的文本類似性,固然不會出現大量數學公式,只會有一些數學概念。工具

  • 第三篇是工程化,這篇是非重點,會介紹一下相關的工程的工具包或者代碼片斷,至關於局部實戰吧,沒有理解第一篇說的直接看這篇沒什麼含義。搜索引擎

2. 直觀理解

假如咱們有如下這麼些篇文檔spa

  • 用Golang寫一個搜索引擎3d

  • 搜索引擎的實現

  • 推薦系統的技術要點

  • 經常使用的推薦算法總結

  • 廣告系統是一個搜索引擎和推薦引擎的組合

  • 計算廣告中都有哪些數學原理

有個一個小朋友,他叫小明,可是他還在上學前班,你讓他來講這些文章中哪幾篇比較類似,他如今字都認不全,更別說理解這些文章中的概念了,若是他特別聰明,那麼他極可能說1和5比較類似,由於都有個長得同樣的東西一個搜索引擎

又過了一些年,小明已經讀初中了,你再讓他來看哪幾篇比較類似,他可能會告訴你1和2比較類似,而後和5也比較類似,由於他如今已經學會了主謂賓定狀補的語法,知道第一條的主要表述的是搜索引擎,第二篇主要表述的也是搜索引擎,第五篇雖然主要不是說的搜索引擎,但賓語的定語也是搜索引擎,也是相關的。因此會給出1和2類似,5和他們也比較類似。

再過一些年,小明已經大學畢業了,學的就是計算機專業,這時候你再來看,他會給出6個都比較類似,由於他已經知道了搜索,推薦,廣告三個領域的基礎技術都差很少,若是對一個感興趣,那麼對另外的主題也會比較感興趣,只不過類似性有高有低而已。

上面的三個階段,實際上也是文本類似性計算髮展的三個階段,從最開始的字面的匹配類似,到第二階段的詞彙的匹配類似,再到第三階段的語義的類似,咱們一個一個來講說每一個階段使用的數學方法和原理,每一個階段都會有數學原理,但咱們對數學公式不作深刻討論,感興趣的能夠本身查閱具體的數學原理。

下面,咱們再用計算機和數學的思想來看看計算機如何在上述三個階段中進行文本類似性的計算的。

4. 前期準備

在開始三個階段以前,咱們先準備一些必要的知識。

4.1 分詞

分詞也叫切詞,由於文檔的最小單位是詞,因此咱們默認都是討論分詞過的狀況,爲了方便,咱們把每一個詞都分配一個惟一id,咱們叫這個詞的token。後面出現token這個概念,就是表示切詞後的惟一id

4.2 詞袋模型

維基百科解釋 :Bag-of-words model是個在天然語言處理和信息檢索下被簡化的表達模型。此模型下,像是句子或是文件這樣的文字能夠用一個袋子裝着這些詞的方式表現,這種表現方式不考慮文法以及詞的順序。

通俗的說就是把一個文檔分詞獲得的一堆token放到一個袋子裏,用這個袋子來表示這個文檔,這是一種簡化的文本描述方法。

5. 學前班階段

學前班階段也叫直接計算類似的階段,咱們其實不關心這篇文章到底講什麼,用計算機的理解就是,分詞完成之後,咱們找到一種方法,來計算各個token集合之間的類似性就好了。

5.1 JaccardSimilarity方法

分詞之後,咱們獲得的一堆token,按照學前班的小明的思想,找到兩兩之間類似性便可,JaccardSimilarity方法能夠知足這個條件,JaccardSimilarity提及來很是簡單,容易實現,實際上就是兩個集合的交集除以兩個集合的並集,所得的就是兩個集合的類似度,直觀的看就是下面這個圖。
圖片描述

數學表達式是:
圖片描述

很明顯,咱們能夠很容易的把上面的那幾個文檔兩兩進行上述計算,而後獲得每兩個文檔的類似性,再一排,就知道每一個文檔和其餘每一個文檔的類似性了。

即使新來一個文檔,按照上面的公式計算一下,就知道它和每一個文檔的類似性了,徹底沒有難度,固然,你會發現算出來真的就像個學前班的學生弄出來的,徹底沒有可用性。

6. 初中階段

學前班階段實在是太Low了,咱們看看初中階段都出現了一些什麼新東西?

6.1 數學化

要將表達意思的文本變成可計算類似度的東西,首先,必須將文本數字化,而且數字化之後還能保留文本的一些基本信息,只有數字化之後纔有可計算性,只有保留了基本信息,這個可計算性纔有可信度。

線性代數給咱們提供了一個數學工具叫向量,向量看上去特別簡單,就是一串數字,別看它看上去很是簡單,但倒是很是強大的數學工具,有多強大呢?咱們從側面來講說,咱們知道不管哪一個編程語言,都有一個最基本的數據結構,是內嵌在語言中的,那就是數組,而數組就是向量,數組有多強大不用我說了吧?誰敢說他沒用過?它都已經強大到咱們感受不到他的強大了,就像空氣同樣,重要到咱們不以爲他重要了(北京除外,呵呵)。

若是咱們能將一個文本變成一個向量,那麼咱們就將一篇複雜的文章變成了一個能夠用數組描述的數學概念了。

囉嗦了這麼多,若是有一個向量了會怎麼樣?再往上一步,線性代數還給了咱們一個概念,就是空間,任何向量均可以表示爲某一個空間上的一個點。

因此說,先有了文本,文本變成了向量,再有了空間,向量變成了空間的點,那麼咱們經過求兩個點之間的距離,就求得了兩個文檔的類似性。

至此,數學化完成了,文本類似性的計算就變成了空間中兩個點的距離的計算,就像下圖同樣。

6.2 向量化

6.2.1 最簡單的向量化

咱們先來看看如何進行向量化,前期準備部分咱們已經說了,每一個詞均可以表示爲一個惟一的token,那麼最簡單的向量化,咱們拿這個token來向量化,好比下面兩個文檔,每一個詞用一個id表示(搜索引擎這個詞重複出現了,因此id同樣,都是5)

文檔內容 token集合
用/Golang/寫/一個/搜索引擎/ 1,2,3,4,5
搜索引擎/的/實現/ 5,6,7

這兩個向量不同長,很差映射到同一個空間中,因而咱們這麼處理一下,編號1到7爲全部的token,用數組的下標表示,若是這個編號上有詞,那麼設爲1,不然設爲0,這樣一來,兩個文檔向量化之後就變成了

用Golang寫一個搜索引擎  ===>  [1,1,1,1,1,0,0]
搜索引擎的實現          ===>  [0,0,0,0,1,1,1]

這樣,兩個文檔就都向量化了,雖然這種向量化是最簡單的,但無論怎樣,咱們至少把文本變成了數學符號了。

6.2.2 TF-IDF向量化

文本處理中,還有一種很是常見的向量化方法,就是TF-IDF方法,關於TF-IDF方法,能夠參見我以前的一篇文章,已經說得比較清楚了,這裏就不贅述了,能夠點擊連接打開看。

總之,經過TF-IDF的向量化方法,咱們能夠將每一個詞向量化成一個表示權重的小數,而不是上面的0,1向量了,它已經帶有了文本的信息了,經過TF-IDF計算,兩個文檔向量化之後就變成了下面這樣

用Golang寫一個搜索引擎  ===>  [0.5, 0.8, 0.2, 0.15, 0.9, 0,   0]
搜索引擎的實現          ===>  [0,   0,   0,   0,    0.8, 0.4, 0.3]

這樣向量化之後,每一個詞都帶上了TF-IDF信息了,而TF-IDF的做用就是保留詞在文檔中的權重信息,這就至關於保留了文本的信息,因而咱們經過token的概念和TF-IDF方法,就把一個文本向量化了,而且向量化完了之後還保留了文本自己的信息,每個向量就是一個前面提到的詞袋。

6.3 向量空間模型

向量化完了之後,須要提供一個空間來進行計算,咱們把這個叫作向量空間(VSM),這沒啥好說的,好比向量是一個二維向量,那麼空間就是一個平面,若是是個三維向量,那麼空間就是一個立體空間,上文中的向量是一個7維向量,那麼空間就是一個七維空間了。

這樣,每一篇文檔向量化之後都是一個7維向量,均可以表述爲這個向量空間中的一個點了。

6.4 向量類似度計算

有了向量空間和向量自己了,計算兩個向量的類似度就簡單了,通常有兩種方法

6.4.1 歐式距離

不是說每一個向量就是這個空間中的一個點麼?那麼類似性就是直接計算這兩個點的歐式距離,歐式距離公式初中就學了哦

圖片描述

把上面那兩個向量用這個距離公式一帶入,就求出兩篇文檔的類似度了。

6.4.2 餘弦類似度距離

除了歐式距離,還有一種方法求類似度,就是求兩個向量之間的夾角,這個叫餘弦類似性,這也是初中數學的內容,不過初中咱們學的是二維向量,若是是N維呢?是同樣的,假設兩個向量是A和B,那麼公式是,n表示維度

圖片描述

照樣帶入,就能求出兩個文檔類似度了。

7. 中學畢業

至此,文本類似性計算的最基本的概念和模型都介紹完了,中學已經畢業了,你能夠按照上面的方法本身試着計算計算文檔的類似性,應該不會太離譜,後面一篇會介紹一些更加高級的東西,可是總體的思想不會有太大的變化,仍是向量化文檔,而後計算向量間的類似度來表述爲文本之間的類似度。

這篇咱們看到的東西都仍是淺層的文本類似性計算,可是其實一個TF-IDF向量化模型,一個餘弦類似性夾角計算已經能夠處理一大部分的文本類似性計算了,並且效果還湊合吧,但後面出來的各類語義模型纔是文本推薦的將來。


歡迎關注個人公衆號,主要聊聊搜索,推薦,廣告技術,還有瞎扯。。文章會在這裏首先發出來:)掃描或者搜索微信號XJJ267或者搜索西加加語言就行

圖片描述

相關文章
相關標籤/搜索