文本推薦與文章分群: 使用BERT 為例

mz bai
Aug 6, 2020

--

來源網址

隨著人們在網路上產生的內容不斷增加,眼花撩亂的文章、資訊在網路上比比皆是,對於內容管理者和內容生產者來說,如何讓文章可以與對應的讀者群接觸便成為重要的課題。

身為內容管理者,工作內容之一便是如何分配文章給有興趣的讀者,同時讓讀者節省尋找好文章的精力,也讓內容生產者的作品能獲得關注,使兩者雙贏。人工分類建立文章間的關係固然可行,但也佔據許多人力,同時可能帶有偏差,這時推薦系統便成為可能的幫手。

文章推薦系統的思路有很多種,

1. 讀者與文章的交互矩陣 => 矩陣分解

2. 文章的相似度矩陣 => 文章embedding向量

3. 讀者閱讀文章的序列 => 馬可夫鍊

我們這次選擇的是第二種,相較於其他方法的好處是不需要前處理成特定矩陣和訓練模型,不過仍需微調(fine-tuning)BERT成該文本領域的模型。使用BERT的套件在BERT出來後便如雨後春筍般冒出,本文使用的是transformers.

首先呢,可以用 simpletransformers微調你的BERT。

train.txt 的格式如下

===title1===Paragraph1===title2===
Paragraph2

等待你的模型訓練完,大概幾分鐘之內會訓練完成(注意GPU約莫需要10G左右才能訓練語言模型(Language Model))。

接著,載入模型並推論文章embedding向量。Transformers 的使用概念是先將文字轉成token,由於模型計算的是數字,再轉成對應id輸入模型。

得到所有文章的embedding向量後,做average pooling處理,雖然average pooling不一定能得到好的結果,但簡單、直覺。最後,我以umap呈現embedding向量及其分群結果。

fine-tuning前的文本分群
fine-tuning後的文本分群

結語

這次做的簡單NLP項目,可視為文本相似度、無監督細粒度(fine-grained)分類、文本叢集(text clustering)應用在文本推薦、搜尋、分群上,雖然表現尚可,但這個簡單的實現仍有許多可以精進的地方,例如可以換成sentenceBERT強化對文本相似度任務的表現、使用average pooling以外的pooling方法,增強BERT 對文本的理解希望能在文本推薦這項目上有更好的表現。

--

--

mz bai
mz bai

Written by mz bai

Math is math, math is universal Code is code, code is horrifying unique.

Responses (1)