當前位置:
首頁 > 最新 > 如何利用文本挖掘推薦Ted演講

如何利用文本挖掘推薦Ted演講

GIF

當我第一次看到"Ted Talk"數據集的時候,腦子裡立刻冒出一些有意思的想法。首先,既然Ted Talk數據集包含了許多Ted演講的演講詞文本,那麼我們自然而然的就擁有了一個非常豐富且規範的預料庫。第二,既然這個語料庫有非常好的語言學屬性,那麼它可能是一個類似於Reuters 20 News Group這種非常優秀的數據集。所以,我們能不能利用這些演講文本,利用它們之間的相關性,搭建一個像Ted官方網站一樣的內容推薦系統呢?

當然,Ted官網用的推薦引擎,可定比本文採用的演算法更加複雜,因為它會利用用戶的歷史交互信息。而本文則提出了一種僅利用演講的台詞內容,就可以進行內容推薦的方法,這一方法在你沒有用戶交互數據,但仍希望能推薦給用戶一些相關聯的內容時非常有用。

接下來,我們介紹具體的方法。

步驟1:審查數據

所有的Ted Talk數據存儲在一個Excel表中,每個演講的台詞文本存儲在一列名為transcript的單元格內,就像下面的樣子。

import pandas as pd

transcripts=pd.read_csv("E:\Kaggle\ted-data\transcripts.csv")

transcripts.head()

檢查完數據,我們發現可以從url一列中提取出演講的名稱。而我們的最終目標是利用transcript列的內容來獲得演講之間的相似度,然後推薦4個與給定演講最相似的視頻。

利用以下代碼可以輕鬆的提取演講名稱(title)。

transcripts["title"]=transcripts["url"].map(lambda x:x.split("/")[-1])

transcripts.head()

要想創建推薦系統,接下來需要完成以下幾個步驟。

(1)創建一個代表演講文本的向量空間模型

(2)建立向量空間模型的相似度矩陣

(3)基於相似度方法,為每一個演講選擇4個相似的演講。

步驟2:利用Tf-Idf創建文本向量

因為我們是基於演講內容進行推薦,所以首先要做的是建立一個便於比較的文本內容標識方法。一種可行的方法是創建文本的Tf-Idf向量。

語料集、文檔和向量空間

為了表示文本,我們可以將每個演講看做一個文檔(Document),將所有的文檔的詞語構成一個語料集(Corpus)。然後用一個布爾型的向量描述每個文檔,其中1表示這個詞出現在文檔中,0則表示該詞沒有出現。所以,每個文檔都可以看做向量空間(語料集)中的一個向量。

但這個簡單的方法存在的問題很明顯。首先,該方法中每個詞在文檔中的重要程度相同,但直觀來說,出現次數多的詞更適合描述一篇文檔。此外,當文檔比較長時,其與指定文檔的重疊的積累更大,從而導致推薦演算法更傾向於推薦長文檔。

為了解決簡單布爾演算法的缺陷,文檔可以通過Tf-Idf轉換成歐幾里得空間中的向量。空間的維度構成對應文檔中出現的關鍵詞(Term),每個文檔在向量空間中的位置由兩個子量的乘積得到:詞頻(Term Frequency)和反文檔頻率(Inverse document frequency)。

Tf-Idf(Term Frequency -Inverse Document Frequency)方法

可以通過考慮以下三個問題來確定一個單詞在文檔中的重要性。

(1)該詞是否在文檔中經常出現?

(2)該詞是否在語料集中很少出現 ?

(3)同時滿足(1)和(2)?

如果一個單詞在文檔中出現次數很多,但在其他文檔中很少出現,則該單詞在文檔中無疑是重要的。詞頻描述某個詞在文檔中出現的頻繁程度;而反文檔頻率是組合了詞頻後的第二個指標,旨在降低所有文檔中幾乎都會出現的關鍵詞的權重。二者的乘積即是Tf-Idf。

利用機器學習框架(比如scikit-learn)計算Tf-Idf並創建文本的向量空間非常簡單。

from sklearn.feature_extraction import text

Text=transcripts["transcript"].tolist()

tfidf=text.TfidfVectorizer(input=Text,stop_words="english")

matrix=tfidf.fit_transform(Text)

#print(matrix.shape)

利用Tf-Idf方法,我們解決了演講內容的向量表示問題,接下來我們研究如何找到與指定內容相似的演講。

步驟3:找到相似的演講

為了度量兩個不同演講的相似性,需要計算二者的相似度。通常,利用餘弦相似度(Cosine Similarity)來處理Tf-Idf向量。我們可以建立一個餘弦相似度矩陣來表示各個演講之間的相似性。

最後,我們基於餘弦相似度矩陣來實現為選定內容推薦4個相似的演講這一目標。也就是說,從上面的相似度矩陣中,在指定的行中,找出5個相似度最大的列來,代碼如下。

def get_similar_articles(x):

return ",".join(transcripts["title"].loc[x.argsort()[-5:-1]])

transcripts["similar_articles_unigram"]=[get_similar_articles(x) for x in sim_unigram]

接下來,讓我們驗證下本文演算法的可行性。從Ted演講集中選擇 一個演講:

transcripts["title"].str.replace("_"," ").str.upper().str.strip()[1]

"AL GORE ON AVERTING CLIMATE CRISIS"

然後,運轉演算法,找到的最相似的演講如下:

transcripts["similar_articles_unigram"].str.replace("_"," ").str.upper().str.strip().str.split("
")[1]

["RORY BREMNER S ONE MAN WORLD SUMMIT",

",ALICE BOWS LARKIN WE RE TOO LATE TO PREVENT CLIMATE CHANGE HERE S HOW WE ADAPT",

",TED HALSTEAD A CLIMATE SOLUTION WHERE ALL SIDES CAN WIN",

",AL GORE S NEW THINKING ON THE CLIMATE CRISIS"]

可以看到,利用Tf-Idf向量及餘弦相似度,我們成功的建立了基於演講內容的推薦演算法。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

親密關係:你是怎樣的狀態,你就會遇到怎樣的人
「職業是生病,業餘是寫作」

TAG:全球大搜羅 |