基於Word2Vector做文本分類

2022-01-05 58招聘技術團隊

一、引子

        筆者所在的數據策略團隊近期在做推薦策略的時候發現了一些bad cases,即商戶在發布職位的時候,有意或無意地錯誤發布本不屬於某類目的職位。如下圖所示,在廣告文案類目中,我們可以發現裡面包含遊戲開發和java開發等類目。

        首先,用戶使用關鍵詞進行搜索或者點擊某類目進行搜索,說明有強烈的找該方面工作的意願,一旦返回的結果中包含上述毫不相干的職位,將會極大地降低用戶體驗甚至使用戶對產品可靠性產生質疑。

        其次,上文提到了這可能是商戶有意為之的結果。因為我們觀察到存在某些灰產用戶,其在幾乎每個招聘二級類目下都發布了大量與當前類目毫不相干的計算機培訓的職位。

        綜上,我們需要基於商戶發布的職位標題/職位描述去進行文本分類,將商戶發布的職位類目和我們分析的結果進行對比,對於相關性很低的(比如商戶類目為程式設計師,我們分類結果是服務員),我們在展示頁面給予降權,使相應帖子不優先展示或者不展示。

        本文將提出一種基於Word2Vector模型的文本分類方法解決上述問題。行文邏輯如下:第二節介紹傳統的做文本分類的方法;第三節介紹Word2Vector模型原理;第四節介紹我們如何使用該模型做職位的分類;第五節介紹踩過的一些坑。

        本文旨在用較為通俗形象的文字解釋算法,本人才疏學淺,如有不當之處,歡迎高手不吝賜教。

 

二、文本分類簡介

2.1概述

        文本分類,顧名思義,即給定類目體系下,根據文本的內容確定類別的過程。在我們的問題中,我們將使用58招聘的類目體系,將商戶發布的職位標題及職位描述作為文本內容。

2.2歷史及現狀

        1960-1970:人工+規則(關鍵詞或者正則表達式)的方式,制定規則的人需要對某類目領域有足夠的認知和了解。舉個慄子:類目詞是廚師,涉及到的規則可能是關於美食的、烹飪技巧的(刀工/炒鍋/烘焙)或者廚師工種的(水臺/砧板/打荷),需要涉及到方方面面,繁瑣複雜。

        1970-1990:信息檢索概率模型(如向量空間模型Vector Space Model),以及相關評價指標如準確率、召回率的引入。

        1990-2000:研究主要集中在了文本特徵(即詞語)的提取、選擇以及分類器模型的設計方面。

        目前業內做文本分類的主流方法基本上是用有監督的方式(即訓練數據既含有文本數據,又帶有相應的類目標籤以幫助模型去學習該類目的表達),其過程一般如下圖所示:

 

        ps. 向量空間模型VSM:將文本抽象成一個向量,假設我們一共有N個詞,那麼一篇文本可以表示為(w1, w2, w3, … , wn),其中wi表示第i個詞在這篇文本中的權重,其計算方法一般用詞頻-逆文章頻率即tf-idf來計算。

 

三、Word2Vector簡介

3.1詞向量模型

        之所以要引入詞向量模型,是因為上述傳統的VSM存在如下缺點:

        ①一般情況下,詞語的總數N會很大(注意N不僅僅是單篇文章的詞語數,而是整個語料庫的詞語個數),而導致單篇文章的特徵向量會很稀疏(即向量中大部分詞語的權重都為0)。

        ②不能很好地刻畫詞與詞之間的相似性。相似性是詞語之間一個很重要的性質,舉個極端的慄子:假設我們一共有3個詞語:「招聘」、「美容師」、「化妝師」;有2篇文章:「招聘美容師」,「招聘化妝師」。兩者語義很接近,然而其表示向量分別為[1,1,0]和[1,0,1],我們可以測算一下餘弦相似度,為1/2,即60°的夾角,說明兩者「語義距離」很遙遠。

        目前業界一般用Distributed  Representation方式的詞向量模型,最早由Hinton在1984年提出。其將每一個詞語映射成一個固定長度的「短」向量(比如50維,100維,相對於語料庫動輒幾十萬的詞語數量而言很短了)。類似於VSM,也是將每個詞都當做詞向量空間中的一點,在此空間中引入的距離概念,就是詞語之間語義層面的相似性了。

 

3.2Word2Vector模型

        2013年,Google開源了一個用於生成詞向量的工具,因其簡單實用高效而引起廣泛關注。其中具體的原理因篇幅原因,本文只稍作介紹,若有興趣的讀者,可閱讀作者的原論文[8](不涉及太多算法細節)、Word2Vec相關數學原理[9]進行了解。

        Word2Vector本質上有兩個學習任務,還有兩套模型。

        ①兩個學習任務分別是:

        CBOW:對於每個詞,用其周圍的詞,來預測該詞生成的概率。

        Skip-gram:對於每個詞,用其自身去預測周圍其他詞生成的概率。

        ②兩個模型分別是:

        HierarchicalSoftmax模型:算法輸入為初始隨機的詞向量,輸出為一個包含語料裡所有詞語的Huffman樹(最優二叉樹),對於其中每一個葉節點(代表一個詞),其從根節點到葉節點的路徑即為此詞語的Huffman編碼。從名字上看,Softmax是用於解決多分類問題的(可以形象的理解為從所有詞語中選擇一個條件概率最大的),而此模型將一個多分類問題轉化多個帶有層級關係的二分類問題(這樣能夠將時間複雜度大大降低),即在每一個非葉子節點,都做一次二分類(輸出為0或者1)。下圖是該模型一個形象的展示(來自於[9]):

 

        NegativeSampling模型:提出這個模型本質上是為了提高性能,不需要再生成複雜的Huffman樹。負採樣,顧名思義,關注點主要在負樣本上,因為正樣本是確定且數量很少的(比如CBOW裡,給定context(w),w就是唯一正樣本)。我們需要的是帶權採樣,即對於高頻詞彙,我們希望選中的概率大;低頻則較小。下圖展示了Word2Vec中負採樣的策略(來自於[10])

          

3.3模型特性

        前面也提到過,Word2Vec是用於解決詞與詞之間的相似性問題,更準確地說是在給定語境下,同時出現的概率(即詞的共現性co-occurence)。舉個慄子,我們選取最近一個月的新浪微博數據當做語料庫去訓練模型。那麼當我輸入「迪麗熱巴」這個詞的時候,模型返回最相似的詞語可能是:「鹿晗」、「跑男」、「吃貨」、「小姐姐」這些詞(前提是我們分詞的時候,這些詞語能夠被正常切分)。

        除了上述相似性(共現性),Word2Vec作者還在[8]中提到了模型能自動將詞語實體的概念組織起來並學習它們之間的隱含關係。下圖是一個部分詞向量經過PCA降維投影之後的展示,我們可以看到,首都詞和國家詞之間的語義距離幾乎一樣,而模型訓練的過程中,我們並不需要提供任何此類信息,這完全是模型自己學習到的。

 

四、Word2Vec應用於文本分類

4.1可行性分析

        第二節我們討論了文本分類的一般步驟,基本上都是在大量有數據集上做的有監督學習,需要大量人工標註數據(58自己有商戶和用戶數據,其在錄入過程中都會標上類目,且類目不準的佔比很小,所以這方面問題不太大,而對於有些任務來說,標註數據獲取成本極高)。而第三節我們看出,Word2Vec模型不需要標註數據,其能自發的學習出詞與詞之間的相似性和某些概念之間的內在聯繫。

        那如何將其用做分類呢?

        詞向量,就是多維空間的一個向量,而兩個詞語的相似程度,可以由他們的向量的餘弦距離(夾角)來描述。夾角越小,表明相似性越高,即越相似的詞語指向的方向越一樣。

        類目體系由類目詞語組成,假定我們有一個好的類目體系,類目詞之間具有完備性和互斥性,那麼不同類目詞向量所指向的方向應該是不一樣的。我們要做文本的分類,只要將文本映射到同一個詞向量空間中,將文本也表示成某一個向量,然後看看這個向量和哪個類目詞向量夾角最小,不就是這個文本屬於的類目麼?

        如何映射文本到詞向量空間?

        文本是由詞語組成的,但是並不是每個詞語對於文本的表述能力都是一樣的。舉個慄子,某職位信息是:「本工廠急招車床技工,要求有實際操作經驗、年齡不限,學歷不限」。最重要的幾個詞語(特徵)應該是「工廠」、「車床」、「技工」這幾個或代表了場所,或代表了技能,或代表了工種(實際上有個類目詞就是技工)的名詞性質的詞語,其他詞語都不能很好的幫助我們確定類目。

        所以在由詞語向量生成文章向量之前,我們還需要做一步特徵選擇,這和我們在第二節中提到的特徵選擇過程是類似的,僅僅是使用的方法有差異。

 

4.2算法詳述

        將4.1節的思路連貫的串起來,我們可以得到如下算法流程:

        有如下幾點說明:

        ①上圖只是模型預測部分的文本分類流程,並不包含模型訓練的部分。

        ②停用詞指的是諸如「我」、「你」、「是」等出現在大量文章中,但是對文章的語義表達無任何作用的詞語。詞語重要度文件是離線計算獲得的詞語IDF(參見[6])文件,包含語料庫中任意詞語以及其權重。

        ③模型加載完畢後,首先對用戶文本進行預處理,包含了4個小步驟;其次進行特徵選擇,本算法中使用了tf-idf的方法對特徵進行排序;然後計算文章向量的時候,需要根據特徵的權重轉化詞語特徵為文章特徵;最後與類目詞進行餘弦相似度的計算,取相似度最高的類目詞作為最終類目。

 

五、踩過的坑

        1、筆者之前應用此方法進行過新聞文本的分類,取得過較好的效果。其類目體系中一級類目約20個(政治、體育、經濟、娛樂等),每個一級類目下二級類目約20-30個(如體育下有籃球、足球、網球、桌球等),二級類目總數約為500多個。當時採取的方法是,先分一級類目,然後在當前一級類目中繼續劃分二級類目,這樣能避免一次性劃分500多個類目,極大程度上提高分類的精度。

        然而這個方法並不能應用於58招聘的類目體系中。雖然其類目也是分層級的,且每一層級的個數並不多(30-40)。有以下幾個原因:

        ①商戶在寫職位標題和職位描述的時候,傾向於直接用三級級類目相關描述詞而不用二級類目的相關描述詞(註:58招聘屬於一級類目,所以這裡從二級類目開始算起)(比如用「水泥工」、「磚瓦工」這樣的三級類目細分詞,而很少用「普工」、「技工」這樣的二級類目抽象詞),導致部分二級類目詞語出現次數極低,這樣算出的二級類目詞和三級類目描述詞的共現性肯定是極低的,從而導致分二級類目的時候準確率就不高,更別提分三級類目了。

        ②很多三級類目描述詞詞和好幾個二級類目均有共現情況,如「寵物美容」和「醫療/醫院/護理」以及「美容/美發」。這樣算出共現性肯定會有偏差。

        ③類目的互斥性不夠,如二級類目「汽車製造/服務」和「司機/交通服務」很相似。

        ④類目本身應該按照功能性區分,但是有的卻按照級別去區分,比如二級類目存在「高級管理」和「生產管理/研發」這樣的類目,那麼銷售總監究竟是應該分到「高級管理」還是應該分到「銷售」?

        ⑤部分二級類目詞太過於抽象:「美術/設計/創意」中的創意,「政府/非營利機構」中的非營利機構等。

        筆者嘗試對類目詞進行過人工修改,可以提高部分效果,但是很費時費力。目前暫時採用的方法是直接進行三級類目的劃分(1000多個),取top20,然後跟商戶打上的三級類目進行對比,如果其類目不在這top20中,則對帖子採取降權處理。

        2、對於文章特徵的選擇。這方面最大的感觸就是,職位描述文本的質量實在是堪憂,表現為:

        ①大量重複性的千篇一律的描述,如對於薪酬福利的描述(日薪200,隨走隨結,上二休一等等),對於學歷年齡等的要求(高中學歷,30歲以下,服從領導安排等)。

        ②有價值的信息往往只在標題中或者在正文的某一個小角落。出於吸引點擊的考慮,很多商戶都是「標題黨」,巴不得把整個職位所有的特點都在標題中描述完全。舉個慄子:標題為「急招電工+五險+雙休包吃住」,而正文隻字不提或只提一句跟電工相關的東西。這種基本上根據標題就能選取特徵「電工」直接進行分類了。

        從上面能看出,只根據詞性進行過濾,特徵選擇只根據tf-idf是不夠的,必須要有一些小tricks。筆者用到或將要用到如下幾點:

        ①目前選取特徵主要是選取名詞,但是更需要細分為「職位詞」(股票交易員、貨車司機等)、「場所詞」(工廠、酒吧等)、「技能詞」(java、c1等)並給予不同的權重予以區分。

        ②對於職位描述,嘗試用正則表達式提取出「崗位職責」的描述部分,而忽略其餘關於「崗位要求」、「薪酬待遇」等部分。

        ③標題相對於正文給予更大的權重。

        3、對於正文長度過短的帖子,可以嘗試直接對於標題去進行類目詞的匹配。這樣做的原因很簡單:正文長度過短,特徵數量不足以很好的表達文本。而標題中如果帶有一模一樣的類目詞,那麼直接做匹配,是更加精準的。

二、參考文獻

[1]http://blog.csdn.net/chl033/article/details/4733647文本分類概述

[2]Lewis D D. Representation and learning ininformation retrieval[D]. University of Massachusetts, 1992.

[3]Yang Y, Pedersen J O. A comparative study onfeature selection in text categorization[C]//Icml. 1997, 97: 412-420.

[4] Freund Y, Schapire R E. Adesicion-theoretic generalization of on-line learning and an application toboosting[C]//European conference on computational learning theory. SpringerBerlin Heidelberg, 1995: 23-37.

[5] Jiang J, Wu C, Liang Y. Multi-categoryclassification by least squares support vector regression[J]. Advances inNeural Networks–ISNN 2005, 2005: 787-832.

[6] http://baike.baidu.com/link?url=v1dDZvWp5XCMi_iyGq734_vod7rQ4kHkKcGwlxGrXgyXi848g-fmUkNNmmQ0K_XvNmZcrsZVYrXvrPuiXNYdO_百度百科tf-idf

[7] Hinton G E. Distributed representations[J].1984.

[8] Mikolov T, Sutskever I, Chen K, et al.Distributed representations of words and phrases and theircompositionality[C]//Advances in neural information processing systems. 2013:3111-3119.

[9]http://blog.csdn.net/itplus/article/details/37969519 Word2Vec數學原理

[10]http://www.cnblogs.com/neopenx/p/4571996.html Word2Vec源碼解析

我們是

58招聘技術 

在這裡

有我們的技術實踐

我們探索新技術

帶給你不一樣的收穫

相關焦點

  • NLP.TM | 再看word2vector
    那麼,建立這棵樹之後,是怎麼應用和計算呢。此時在word2vec中,使用的就轉為分層二分類邏輯斯蒂回歸,從根節點出發,分為負類則向左子樹走,分為正類則向右子樹走,分類的依據來源於每個非葉子節點上所帶有的內部節點向量。
  • 文本深度表示模型—word2vec&doc2vec詞向量模型
    目前訓練LDA模型的方法有原始論文中的基於EM和 差分貝葉斯方法以及後來出現的Gibbs Samplings 採樣算法。Word2Vector 模型最近幾年剛剛火起來的算法,通過神經網絡機器學習算法來訓練N-gram 語言模型,並在訓練過程中求出word所對應的vector的方法。本文將詳細闡述此方法的原理。
  • 文本深度表示模型——word2vec&doc2vec詞向量模型
    目前訓練LDA模型的方法有原始論文中的基於EM和 差分貝葉斯方法以及後來出現的Gibbs Samplings 採樣算法。  d)  Word2Vector 模型  最近幾年剛剛火起來的算法,通過神經網絡機器學習算法來訓練N-gram 語言模型,並在訓練過程中求出word所對應的vector的方法。本文將詳細闡述此方法的原理。
  • NLP03:基於TF-IDF和LogisticRegression的文本分類
    如果要體現詞的上下文結構,那麼你可能需要使用word2vec算法來支持。2. LogisticRegression基本原理2.1 什麼是LRlogistic回歸雖然說是回歸,但確是為了解決分類問題,是二分類任務的首選方法,簡單來說,輸出結果不是0就是1。
  • fastText詞向量與文本分類工具
    一、簡介fastText 是 Facebook 於2016年開源的一個詞向量訓練與文本分類工具,其典型應用場景是「無監督的詞向量學習」和「有監督的文本分類」。fastText 提供簡單而高效的文本分類和詞表徵學習方法,性能比肩深度學習但速度優勢明顯。在文本分類任務中,fastText(淺層網絡)往往能取得和深度學習分類器相媲美的精度,卻在訓練和預測時間上快深度網絡許多數量級。
  • 基於Text-CNN模型的中文文本分類實戰
    本文介紹NLP中文本分類任務中核心流程進行了系統的介紹,文末給出一個基於Text-CNN模型在搜狗新聞數據集上二分類的Demo。文本分類是自然語言處理領域最活躍的研究方向之一,從樣本數據的分類標籤是否互斥上來說,可以分為文本多分類與文本多標籤分類。
  • 手把手教你在Python中實現文本分類(附代碼、數據集)
    2. 模型訓練:最後一步是建模,利用標註數據集訓練機器學習模型。3. 進一步提高分類器性能:本文還將討論用不同的方法來提高文本分類器的性能。(word)if embedding_vector is not None:embedding_matrix[i] = embedding_vector2.4 基於文本/NLP的特徵創建許多額外基於文本的特徵有時可以提升模型效果。
  • 以BBC新聞文章為例:應用XGBoost等算法進行文本分類
    ,討論不同的文本分類技術。/data/bbc-text.csv')bbc_text_df.head()表中似乎含有許多長文本。後續章節將對其作詳細論述。現在的問題是:若給定一個「文本」,就需要預測其類別。這無疑是一個多累文本分類的問題。
  • 【DS】Doc2Vec和Logistic回歸的多類文本分類
    2 您如何做文本分類?Doc2vec是一個NLP工具,用於將文檔表示為向量,是word2vec方法的推廣。為了理解doc2vec,最好理解word2vec方法。Doc2vec是一個NLP工具,用於將文檔表示為向量,是word2vec方法的推廣。為了理解doc2vec,最好理解word2vec方法。但是,完整的數學細節超出了本文的範圍。
  • 基於 Python 的文本分類簡介
    機器學習是一種從數據中學習表示的方法,因此我們可以用它來提取知識或基於它來預測標籤。其中的一個常見應用是文本分類。文本分類是將文本按照其所屬類別進行分類的一項工作。在機器學習成為一種趨勢之前,這項工作大多是由幾個注釋者手工完成的。這在將來會成為一個問題,因為數據會變得更大,而且僅僅因為這樣做就會花費大量的時間。因此,我們應該自動化的任務,同時也獲得更高的準確性。
  • 【算法】word2vec與doc2vec模型
    2 word2vec與doc2vec有什麼差異?3 如何做word2vec和doc2vec?深度學習掀開了機器學習的新篇章,目前深度學習應用於圖像和語音已經產生了突破性的研究進展。4.word2vec算法思想  什麼是word2vec?你可以理解為word2vec就是將詞表徵為實數值向量的一種高效的算法模型,其利用深度學習的思想,可以通過訓練,把對文本內容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似。
  • 文本挖掘:語義分析的一些方法
    先看c-bow方法,相比於word2vec的c-bow模型,區別點有:訓練過程中新增了paragraph id,即訓練語料中每個句子都有一個唯一的id。paragraph id和普通的word一樣,也是先映射成一個向量,即paragraph vector。paragraph vector與word vector的維數雖一樣,但是來自於兩個不同的向量空間。
  • 自然語言處理 | word2vector的原理及實例解析
    K維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似度。Word2vec輸出的詞向量可以被用來做很多NLP相關的工作,比如聚類、找同義詞、詞性分析等等。如果換個思路,把詞當做特徵,那麼Word2vec就可以把特徵映射到K維向量空間,可以為文本數據尋求更加深層次的特徵表示。Word2vec 使用的是 Distributed representation 的詞向量表示方式。
  • 專欄|用 Word2vec 輕鬆處理新金融風控場景中的文本類數據
    下面以文本數據為例,為大家簡單介紹一下輕鬆處理和使用這類數據的深度學習技術 word2vec 到底長啥樣,具體是怎麼來的,以及在我們金融風控場景中應用的案例。one hot vector 與 distributed representation問你這樣一個問題:如果有幾個詞語擺在你面前,你希望你的計算機能夠理解每個詞,你可能會採取哪種方式?
  • NLP之文本分類:「Tf-Idf、Word2Vec和BERT」三種模型比較
    ,我將使用NLP和Python來解釋3種不同的文本多分類策略:老式的詞袋法(tf-ldf),著名的詞嵌入法(Word2Vec)和最先進的語言模型(BERT)。NLP常用於文本數據的分類。文本分類是指根據文本數據內容對其進行分類的問題。我們有多種技術從原始文本數據中提取信息,並用它來訓練分類模型。本教程比較了傳統的詞袋法(與簡單的機器學習算法一起使用)、流行的詞嵌入模型(與深度學習神經網絡一起使用)和最先進的語言模型(和基於attention的transformers模型中的遷移學習一起使用),語言模型徹底改變了NLP的格局。
  • 乾貨| 深度學習在文本分類中的應用
    文本分類的應用非常廣泛。>更多應用:讓AI當法官: 基於案件事實描述文本的罰金等級分類(多分類)和法條分類(多標籤分類)。因此,往往需要採取一些策略進行降維:人工降維:停用詞過濾,低頻n-gram過濾等自動降維:LDA等值得指出的是,將深度學習中的word2vec,doc2vec作為文本特徵與上文提取的特徵進行融合,常常可以提高模型精度。
  • 深度學習:基於語境的文本分類弱監督學習
    深度學習:基於語境的文本分類弱監督學習 丁磊 發表於 2021-01-18 16:04:27 高成本的人工標籤使得弱監督學習備受關注。seed-driven 是弱監督學習中的一種常見模型。
  • 基於CNN的中文文本分類算法(可應用於垃圾文本過濾、情感分析等場景)
    傳統機器學習的做法是先進行特徵工程,構建出特徵向量後,再將特徵向量輸入各種分類模型(貝葉斯、SVM、神經網絡等)進行分類。隨著深度學習的發展以及RNN、CNN的陸續出現,特徵向量的構建將會由網絡自動完成,因此我們只要將文本的向量表示輸入到網絡中就能夠完成自動完成特徵的構建與分類過程。就分類任務而言,CNN比RNN更為合適。
  • 文本分類經典論文:fasttext,textcnn解讀
    文本分類是自然語言處理領域一個非常經典的任務,一般文本分類分為三種,基於規則的文本分類,基於機器學習的文本分類和基於深度學習的文本分類。本文我們重點關注基於深度學習的文本分類,並為大家介紹文本分類中非常經典的fasttext和textcnn。
  • Embedding起源:Word2Vector(中)
    基於one-hot、tf-idf、textrank等的bag-of-words;主題模型:LSA(SVD)、pLSA、LDA;基於詞向量的固定表徵:word2vec、fastText、glove;基於詞向量的動態表徵:elmo、GPT、bert……圖為美團技術團隊的製作一、One-hot