在上一篇文章中,我大致介紹了推薦系統,但卡在了矩陣系統的效能這一塊。所以本文將繼續上一篇,一個個找出每個沒有執行的變數,並嘗試修復它們。
現在,我們繼續從上次中斷的地方開始吧!
「疼痛識別」:發現問題
正如上一篇文章中所提到的,我們要面對的問題之一是:互動矩陣太大,很難衡量或計算。這是因為不同商店中會有相同或者相似的產品,所以我們收集的大量資料中包含重複的資訊。
也就是說,如果你賣耳機,而你的三個競爭對手也賣相同品牌的耳機,那你的矩陣中會有很多重複的資訊,而這無疑會拖慢你的工作速度。
所以本文的目的是:實現相同或相似產品的跨商店識別。
「走個過場」:融合資訊
我們將會使用資料集提供的產品資訊(即產品編碼、產品名稱、產品 URL 和產品價格)來確定產品的相似度。然而,現在每個商店都會用內部系統來追蹤產品。因此,對每個商店來說,產品編碼都是獨一無二的。
更鬱悶的是,產品價格我們也用不上,因為每個商店的產品價格也不同。產品 URL 倒是個不錯的資訊來源,如果我們可以構建 Web Scraper 來從網頁上獲取資料的話。但是,由於網頁的「非結構化」,我們沒辦法構建適用於每個網頁的 Web Scraper。
因此,我們能用的選項只剩一個了:產品名。
「做好準備」:文字預處理
文字預處理是指文字在饋送至演算法前必須經歷的所有調整。因為文字本身會有很多不需要的符號,或者一些特殊的結構,所以預處理需要做的就是整理文字,並用數值編碼文字內容。
文字聚類預處理步驟
我們要對資料進行以下預處理過程:
首先,我們確認產品的品牌並將其從產品名中剔除,這樣我們得到的就是單純的產品名了。
然後,我們分離產品名中描述顏色的單詞,以便減少資料噪聲。此時,我們就可以根據顏色給產品分類。例如,我們想建立這兩個類別:「黑色匡威全明星鞋 10」和「白色匡威全明星鞋 10.5」。
接下來,我們分離產品名中的數字和度量單位(如果有的話),因為我們想把非常相似的產品歸到一類中去,比如「Cola 330ml」和「Cola 500ml」。
最後,我們對單詞進行詞幹處理。也就是說,分離單詞的字尾,以找出共同的詞根,並完全去停用詞。
為了將產品名輸入至演算法中,我們要把資料轉換為向量。為此,我們使用 2 個不同的向量器:CountVectorizer 和* *tf-idf Vectorizer。前者用 {0,1} 建立二元向量,後者根據單詞在所有向量中的頻率為每個單詞分配一個權重。在這裡,我們用這兩個向量器來找出對我們更有效的向量。
下一步:文字聚類
什麼是文字聚類?
文字聚類是在無標籤資料中生成分組的過程,很多網站的「同類」新聞就是通過文字聚類完成的。在大多數聚類技術中,分組(或叢集)數量是由使用者預定義的。但在本文中,分組數量必須動態變化。
我們的聚類可以包含單個產品,也可以包含 10 個或更多產品;這個數量要取決於我們找到的相似產品的數量。
前面所述的需求令我們鎖定了 DBSCAN 聚類。DBSCAN 是一種基於密度的演算法,它依賴於向量相互之間的距離,以建立分組。
DBSCAN 生成的分組:
為什麼 DBSCAN 無法正確地聚類資料?
產品名一般都很短(1~5 個單詞)。但是,我們建立的向量很龐大,因為資料中每個單獨的詞最終組成了整個詞彙表。詞彙表的大小即向量的長度,所以我們相當於丟失了所有資訊。
像 PCA 和 SVD 這樣的降維技術也沒辦法解決這個問題,因為轉換矩陣的每一列都代表一個單詞。因此,當你刪除一些列時,也刪除了很多產品。
由於我們現有的解決方案無法正常工作,所以,我們決定構建自定義的聚類過程,以找到解決問題的辦法。
打破舒適圈:訓練向量器
當你訓練向量器(vectorizer)時,它會學習給定句子中包含的單詞。
例如,給定「Nike Capri Shoes」,向量器只學習這三個單詞。這意味著當你轉換其它產品時,除了那些包含一個單詞或所有單詞的產品外,其它產品的向量都會為 0。
為了找出 2 個向量之間的相似性,我們用歐幾里得距離來進行衡量。如果 2 個產品被歸為 1 類,且距離要高於我們的閾值,我們就稱生成的組為 category。
想象一下,我們的資料就像一大桶產品。category 很有用,因為它們建立了更小的桶來包含相關資料,而我們可以處理這種規模的資料。
現在,我們用更高的閾值再次執行同樣的過程,然後為每個「小桶」建立 Subcategory。Subcategory 是我們將使用的最小組別。
換擋:提高處理速度的技巧
整個聚類過程有些費時。為了節約時間,我們將仔細檢查所有的文字預處理步驟,向量化除外。
之後,我們根據產品名包含的單詞數量對資料進行分類,所以只含有 1 個單詞的產品名將排在列表最上面,而包含最多單詞的則在排在最後。
我們的分組中大部分都是包含 1 個單詞的產品名,這減少了我們需要處理的資料量。
OK,功成身退!
下一篇文章中,我們將繼續利用從產品中提取的任何資訊。盡請期待……