Kaggle文本語義相似度計算Top5解決方案分享

2021-03-02 機器學習AI算法工程


向AI轉型的程式設計師都關注了這個號👇👇👇

機器學習AI算法工程  公眾號: datayx

句子相似度計算,即給定客服裡用戶描述的兩句話,用算法來判斷是否表示了相同的語義。

句子相似度判定

今年和去年前後相繼出現了多個關於句子相似度判定的比賽,即得定兩個句子,用算法判斷是否表示了相同的語義或者意思。其中第4、5這個2個比賽數據集格式比較像,2、3 的數據集格式比較像,本倉庫基於2、3數據集做實驗

下面是比賽的列表:

https://www.kaggle.com/c/quora-question-pairs

The goal of this competition is to predict which of the provided pairs of questions contain two questions with the same meaning.

數據集未經過脫敏處理,用真實的英文單詞標識

https://dc.cloud.alipay.com/index#/topic/intro?id=8

問題相似度計算,即給定客服裡用戶描述的兩句話,用算法來判斷是否表示了相同的語義。

數據集未經過脫敏處理 示例:

「花唄如何還款」 --「花唄怎麼還款」:同義問句

「花唄如何還款」 -- 「我怎麼還我的花被呢」:同義問句

「花唄分期後逾期了如何還款」-- 「花唄分期後逾期了哪裡還款」:非同義問句 對於例子a,比較簡單的方法就可以判定同義;對於例子b,包含了錯別字、同義詞、詞序變換等問題,兩個句子乍一看並不類似,想正確判斷比較有挑戰;對於例子c,兩句> 話很類似,僅僅有一處細微的差別 「如何」和「哪裡」,就導致語義不一致。"""

https://biendata.com/competition/CCKS2018_3/leaderboard/

與基於Quora的的的語義等價判別相同,本次評測任務的主要目標是針對中文的真實客服語料,進行問句意圖匹配。集給定兩個語句,要求判定兩者意圖是否相同或者相近。所有語料來自原始的銀行領域智能客服日誌,並經過了篩選和人工的意圖匹配標註。

數據集經過脫敏處理 輸入:一般幾天能通過審核\ t一般審核通過要多久 輸出:1

https://biendata.com/competition/chip2018/

本次評測任務的主要目標是針對中文的真實患者健康諮詢語料,進行問句意圖匹配。給定兩個語句,要求判定兩者意圖是否相同或者相近。所有語料來自網際網路上患者真實> 的問題,並經過了篩選和人工的意圖匹配標註。平安雲將為報名的隊伍提供GPU的訓練環境。

數據集經過脫敏處理,問題由數字標示 訓練集包含20000條左右標註好的數據(經過脫敏處理,包含標點符號),供參賽人員進行訓練和測試。 測試集包含10000條左右無label的數據(經過脫敏處理,包含標點> 符號)。選手需要對測試集數據的label進行預測並提交。測試集數據作為AB榜的評測依據。

智能客服聊天機器人場景中,待客戶提出問題後,往往需要先計算客戶提出問題與知識庫問題的相似度,進而定位最相似問題,再對問題給出答案。本次比賽的題目便是問 > 題相似度算法設計。

數據集經過脫敏處理,問題由數字標示 為保護用戶隱私並保證比賽的公平公正,所有原始文本信息都被編碼成單字ID序列和詞語ID序列。單字包含單個漢字、英文字母、標點及空格等;詞語包含切詞後的中> 文詞語、英文單詞、標點及空格等。單字ID和詞語ID存在於兩個不同的命名空間,即詞語中的單字詞或者標點,和單字中的相同字符及相同標點不一定有同一個ID。其> > 中,單字序列以L開頭,詞語序列以W開頭。

這篇文章想發散開來講,從傳統方法到深度模型,結合賽題的數據特點對文本相似性匹配的方法做一個梳理。以及針對比賽中的技巧做一個總結。

Quora給的題就給定兩個quora中的提問。提問數據是類似知乎上的提問標題,判斷兩個問題是不是一個問題。比如:A.如何學習NLP? B.怎樣學習自然語言處理?這就明顯是一個問題。這個題屬於NLP中的文本相似性匹配,由於quora構建數據的方式存在圖的特徵,後來發現其圖模型方面也值得研究。以下部分圖片來自於Quora第四名YesOfCourse團隊的ppt。

文本相似性/相關性度量是NLP和信息檢索中非常基礎的任務,在搜尋引擎,QA系統中有舉足輕重的地位,一般的文本相似性匹配,從大的方法來講,傳統方法和深度學習方法。

特徵工程方法

傳統方法不外乎各種角度的特徵工程,我把常用的特徵羅列如下,比如

編輯距離(Edit Distance),又稱Levenshtein距離,是指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。一般來說,編輯距離越小,兩個串的相似度越大。

例如:
 我們有兩個字符串: kitten 和 sitting:
 現在我們要將kitten轉換成sitting
 我們可以做如下的一些操作;
k i t t e n –> s i t t e n 將K替換成S
sitten –> sittin 將 e 替換成i
sittin –> sitting 添加g
在這裡我們設置每經過一次編輯,也就是變化(插入,刪除,替換)我們花費的代價都是1。
FuzzyWuzzy這個python包提供了比較齊全的編輯距離度量方法。

集合度量方式就是把兩個句子看成 BOW (bag of words)。然後使用集合相似性度量方法比如Jaccard等。這種方法有一個嚴重問題就是丟失語序。當然基於集合算重合度的度量方法不止Jaccard,也有很多別的,感興趣的同學可以了解下。

比如句子長度,詞長度,標點數量,標點種類,以及詞性序列上的度量,這也是最直觀的度量方法,大家可以發揮自己的想像力把這一部分做豐富一點

詞向量是深度學習進入NLP的非常代表性的工作,谷歌的詞向量論文引用了3000+次,可謂影響深遠了。

使用詞向量的一種簡單的方法是,BOW求平均,得到兩個句子的表示,然後利用餘弦相似度度量或者Minkowski,歐幾裡得距離等等。這是一種非常簡單而直觀的方法。

在比賽中我們這篇參考了論文, From Word Embeddings To Document Distances 這篇論文提出的一種叫做WMD的度量方法,七級本原理是利用word2vec的特性,將文本文檔表示為一個weighted point cloud of embedded words。兩個文檔A和B之間的距離定義為A中所有的詞移動精確匹配到文檔B中點雲的最小累積距離。這個思路也非常直覺,實際表現也非常良好『

對於LDA和tfidf的句子表示原理在此不做細講,在實踐中我們發現,使用tfidf值對詞向量做一個加權,得到的句子表示也是一種不錯的表示。


深度模型

深度模型有兩種思路,一種是基於表示,一種是基於交互。不過基於交互的模型大多也是先要拿到文本表示,從文本表示構建交互,從交互到特徵抽取的思路。其基本的模型如下所示

這是一個非常直觀的思路,最後一層的matching score建模方法甚至可以用一個簡單的FC代替,或者做一次element-wise 乘之後接FC。下面有在IR中用表示方法做這個問題的幾篇論文。

DSSM: LearningDeep Structured Semantic Models for

WebSearchusing Click-through Data (Huanget al.,  CIKM』13)

CDSSM: Alatentsemanticmodelwith convolutional-  poolingstructureforinformationretrieval (ShenY,HeX,  Gao J,etal.CIKM』14)

ARC I: ConvolutionalNeural NetworkArchitecturesfor  MatchingNaturalLanguageSentences(Huet al.,  NIPS』14)

LSTM-RNN:Deep Sentence Embedding Using the Long  Short Term MemoryNetwork:Analysis and Application  toInformation Retrieval (Palangietal.,TASLP』2016)

基於交互的方法是通過Interaction來對文本相似性建模,其模型基本的原理是。

有一篇非常有意思的文章Text Matching as Image Recognition.  (Liang Pang, Yanyan Lan, Jiafeng Guo, Jun Xu, and Xueqi  Cheng. AAAI 2016)這也是龐亮學長在AAAI 2016上的工作,所以他們打這個比賽,完全就是把中科院的模型拉出來遛遛。這個模型也很直覺,就是把兩個文本的相似性建模成一張圖片,再用CNN做特徵抽取器。

拿到每個詞的embedding。 (embedding)

構建兩個文本的相似矩陣。 (Interaction)

把相似矩陣放入兩層CNN中。 (Feature extract)

把CNN的結果放入兩層的全連接中。 (FC)

獲得二分類的score。 (distribution)

後來的一些工作都大同小異,比如不直接使用詞向量,利用RNN的隱層向量去構建交互等等。具體的文章如下,感興趣的同學可以看一下。

DeepMatch: A Deep Architecture for Matching Short Texts (Lu and Li, NIPS』13)
ARC II: Convolutional Neural Network Architectures for  Matching Natural Language Sentences (Hu et al.,  NIPS』14)

MatchPyramid: Text Matching as Image Recognition.  (Liang Pang, Yanyan Lan, Jiafeng Guo, Jun Xu, and Xueqi  Cheng. AAAI 2016)

Match-SRNN: Modeling the Recursive Matching  Structure with Spatial RNN. (Shengxian Wan, Yanyan  Lan, Jiafeng Guo, Jun Xu, and Xueqi Cheng. IJCAI 2016)

下面回到這個比賽中,具體結合數據談一談。

在比賽中發現,訓練集和測試集的正負樣本比有明顯差異,分布上的差異最後體現在logloss指標上的gap,在比賽中大家推導出一個後處理的公式,然後可以拉平分布帶來的分數異動。使用貝葉斯公司能推導出這個後處理,前提是可以測出分布的情況下。有論文對這個做了詳細的講解。"Adjusting the Outputs of a Classifier to New a Priori Probabilities: A SimpleProcedure

https://pdfs.semanticscholar.org/d6d2/2681ee7e40a1817d03c730d5c2098ef031ae.pdf

比賽中一些預處理方法有

top1 -top 5 詳細解決方案獲取方式:

關注微信公眾號 datayx  然後回復 文本相似性 即可獲取。

不得不提的是,這個比賽中有一個非常關鍵的leak信息。一個問題如果出現頻繁的話,就很可能是一個重複的問題。後來發現前幾名在這個leak上做了很多文章,取得了非常好的效果。後來CPMP給的解釋是:

A question that is asked often has more chances to be redundant. Thanks for sharing.

以第一名的解法為例,他的特徵工程中含有大量的來自圖的Structural features 。我感覺這部分也是最關鍵的。第一名的解法有300多個模型做了stacking。簡直爆炸。

第四名HouJP學長的,亮點就是深度模型的分數很高,不愧是中科院IR大佬。

第五名的解法也是在圖的建模上挖掘了大量的特徵。

第七名亮點就是這個人比較懶,花了大量的時間在深度模型上。和第一名都用了一個叫 decomposable attention 的東西。

後來總結一下這個賽題,由於基於圖的特徵的存在,使得這部分的特徵工程尤為重要,這也是我們做的不好的地方。前幾名在圖上都做了充分的挖掘,體現了強大的特徵工程能力。不過這部分東西,單純的文本相似性/相關性的工作沒什麼貢獻,如果抱著研究目的的同學可以忽略這部分。

由於這是我參加的第一次比賽,所以印象十分深刻。學到了一些對比賽使用的流程性的東西,體會到pipeline的重要性,不過教訓也很多,也算一種成長吧。

https://zhuanlan.zhihu.com/p/35093355

閱讀過本文的人還看了以下:

《21個項目玩轉深度學習:基於TensorFlow的實踐詳解》完整版PDF+附書代碼

將機器學習模型部署為REST API

FashionAI服裝屬性標籤圖像識別Top1-5方案分享

重要開源!CNN-RNN-CTC 實現手寫漢字識別

yolo3 檢測出圖像中的不規則漢字

同樣是機器學習算法工程師,你的面試為什麼過不了?

前海徵信大數據算法:風險概率預測

【Keras】完整實現『交通標誌』分類、『票據』分類兩個項目,讓你掌握深度學習圖像分類

VGG16遷移學習,實現醫學圖像識別分類工程項目

特徵工程(一)

特徵工程(二) :文本數據的展開、過濾和分塊

特徵工程(三):特徵縮放,從詞袋到 TF-IDF

特徵工程(四): 類別特徵

特徵工程(五): PCA 降維

特徵工程(六): 非線性特徵提取和模型堆疊

特徵工程(七):圖像特徵提取和深度學習

如何利用全新的決策樹集成級聯結構gcForest做特徵工程並打分?

Machine Learning Yearning 中文翻譯稿

螞蟻金服2018秋招-算法工程師(共四面)通過

全球AI挑戰-場景分類的比賽源碼(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(列印收藏)

python+flask搭建CNN在線識別手寫中文網站

中科院Kaggle全球文本匹配競賽華人第1名團隊-深度學習與特徵工程

不斷更新資源

深度學習、機器學習、數據分析、python

 搜索公眾號添加: datayx  

長按圖片,識別二維碼,點關注

相關焦點

  • 【論文】文本相似度計算綜述
    相關度體現在文本共現或者以任何形式相互關聯(包括上下位關係、同義關係、反義關係、部件-整體關係、值-屬性關係等)反映出文本的組合特點。而相似度是相關度的一種特殊情況,包括上下位關係和同義關係。由此得出,文本的相似度越高,則相關度越大,但是相關度越大並不能說明相似度高。相似度一般用[0,1]表示,該實數可以通過語義距離計算獲得。
  • 自然語言語義相似度計算方法
    由於文本相似度計算在文檔複製檢查、信息檢索和機器翻譯等領域都有十分廣泛的應用,所以,近年來有越來越多的學者致力於文本相似度算法的研究。總體來看,文本相似度的計算方法主要分為兩大類:一類是基於統計學的計算方法,此種方法需要大規模的語料庫,並且在計算時沒有考慮文本的句子結構信息和語義信息,計算的結果有時會與人對自然語言的理解不相符合;另一類是基於語義理解的計算方法,這種方法不需要大規模的語料庫,但需要依賴於具有層次結構關係的語義詞典,計算結果相對準確,與人對自然語言的理解較為符合。
  • 計算文本相似度常用的四種方法
    在這篇博文中,作者比較了各種計算句子相似度的方法,並了解它們是如何操作的。詞嵌入(word embeddings)已經在自然語言處理領域廣泛使用,它可以讓我們輕易地計算兩個詞語之間的語義相似性,或者找出與目標詞語最相似的詞語。然而,人們關注更多的是兩個句子或者短文之間的相似度。如果你對代碼感興趣,文中附有講解細節的Jupyter Notebook地址。以下是論智的編譯。
  • 漫談語義相似度
    常規的語義相似度架構語義相似度架構其實非常簡單,簡單地說就是兩個句子進去,進行特徵抽取,簡單到BOW、TF-IDF,複雜的就是bert(跳過word2vector、elmo???),然後進行相關性匹配計算,這塊也花樣繁多,簡單的就是餘弦相似、歐氏距離等,複雜的可以矩陣相乘等,最終到達標籤,完成一次語義相似度評估計算。OK,上圖:
  • 機器不學習:基於深度學習CNN的短文本相似度計算方案
    機器學習深度學習乾貨棧 www.jqbxx.com基於CNN模型的短文本相似度的計算方法可以大致分為兩類:一類是基於Siamese結構的神經網絡模型,先分別學習輸入的文本對兒的句子向量表達,再基於句子向量計算相似度;另一類是直接以詞語粒度的相似度矩陣作為輸入,學習並計算文本相似度。
  • 自然語言處理之文本相似度計算
    文 | 光大科技大數據部 盧格潤在金融科技的業務場景下,我們不可避免地應用到自然語言處理(NLP)的技術去解決問題,比如智能問答系統、資訊輿情的分析等……在自然語言處理中,很多實際應用具有共性問題,本文就以文本相似度的計算為例介紹自然語言處理解決問題的思路。
  • 思必馳在中文文本相似度計算任務上的探索與進展
    文本相似度計算旨在識別兩段文本在語義上是否相似,是自然語言處理領域的一個重要研究方向,其在智能問答、信息檢索等領域都發揮重要作用,具有很高的商業價值。近期,思必馳知識服務團隊在中文文本相似度計算方向投入研究,並取得階段性成果:1)在第十四屆全國知識圖譜與語義計算大會(CCKS: China Conference on Knowledge Graph and Semantic Computing)[1]上發表相關論文一篇《Neural Fusion Model for Chinese Semantic Matching》
  • NLP: 基於文本語義的智能問答系統
    0-2 在線系統DEMO項目實現以一種平臺化思路建議系統,是一個通用的解決方案。OneHot 、N-Gram 、TFIDF等詞袋模型、Word2Vec、Doc2Vec、GloveBert(本案例文本向量化表示選擇bert) 、XLNet等神經網絡模型3、文本相似度計算(項目中:我們採用餘弦相似度,計算得分)餘弦相似度、歐式距離
  • 使用gensim進行文本相似度計算
    評論和商品描述的相似度越高,說明評論的用語比較官方,不帶太多感情色彩,比較注重描述商品的屬性和特性,角度更客觀。再比如知乎、貼吧等問答社區內問題下面有很多回復者,如何快速過濾掉與問題無關的回答或者垃圾廣告??那麼Python 裡面有計算文本相似度的程序包嗎,恭喜你,不僅有,而且很好很強大。
  • 一文講述常見的文本相似度計算方法
    在對語料進行預處理的時候,我們需要給予文本的相似度,把相似度高的重複主題過濾掉。總之,相似度是一種非常有用的工具,可以幫助我們解決很多問題。任務目標一般來說,是比較兩個物體(商品,文本)之間的相似度。這裡的相似度是一個抽象的值,它可以抽象成估計的百分比。在推薦工程中,計算相似度是為了給用戶推送一定量的物品。即把所有的相似度排序,然後選出最高的那幾個物品。
  • BERT-Flow | 文本語義表示新SOTA
    這個看似無法解決的困境就引出了下面需要思考的問題。「為什麼預訓練BERT句向量的cosine相似度不能很好地近似語義相似度?:」 SBERT沒有解釋為什麼沒有經過監督式微調的BERT生成的句向量不好用,是因為BERT句向量本身沒有包含足夠的語義相似度信息,還是因為簡單的cosine相似度無法準確刻畫語義相似度?
  • 短文本相似度在金融智能客服中的應用 - 專注金融科技與創新 未央網
    短文本相似度,顧名思義是指長度較短文本(在中文中一般小於50個字符)的相似度計算,一般用於搜尋引擎、智能問答、知識檢索、信息流推薦等系統中的召回、排序等階段。1. 短文本相似度基本介紹短文本相似度的計算方式,最基本的分為無監督和有監督兩種方式。
  • 前沿|通用句子語義編碼器,谷歌在語義文本相似性上的探索
    語義文本相似度在「Learning Semantic Textual Similarity from Conversations」這篇論文中,我們引入一種新的方式來學習語義文本相似的句子表示。論文地址:https://arxiv.org/abs/1804.07754如果句子可以通過相同的答案來回答,那麼句子在語義上是相似的。否則,它們在語義上是不同的。
  • 【TF-IDF】傳統方法TF-IDF解決短文本相似度問題
    今天在這裡就介紹一下傳統算法TF-IDF是如何計算短文本相似度的。TF-IDF是英文Term Frequency–Inverse Document Frequency的縮寫,中文叫做詞頻-逆文檔頻率。那麼,TF-IDF是怎麼產生的?又是從何而來呢?在一個文本中,當一個詞彙出現很多次時,我們往往認為這個詞是重要的,可以代表該文本。
  • 最先進的語義搜索句子相似度計算
    我們的大腦會執行語義搜索,我們會查看結果並找到與我們的搜索查詢相似的句子。在金融和法律行業尤其如此,因為文件越來越長,我們不得不搜索很多關鍵字來找到正確的句子或段落。時至今日,人類在探索上所付出的累積努力是驚人的。自NLP出現以來,機器學習一直試圖解決語義搜索的這個問題。
  • 孿生網絡(Siamese Network)在句子語義相似度計算中的應用
    1、概述  在NLP中孿生網絡基本是用來計算句子間的語義相似度的。
  • 文本分析 詞頻與餘弦相似度
    上一期,我們介紹了文本相似度的概念,通過計算兩段文本的相似度,我們可以:對垃圾文本(比如小廣告)進行批量屏蔽;對大量重複信息(比如新聞)進行刪減;對感興趣的相似文章進行推薦,等等。那麼如何計算兩段文本之間的相似程度?
  • 計算相似度
    在機器學習中,經常要度量兩個對象的相似度,例如k-最近鄰算法,即通過度量數據的相似度而進行分類。在無監督學習中,K-Means算法是一種聚類算法,它通過歐幾裡得距離計算指定的數據點與聚類中心的距離。在推薦系統中,也會用到相似度的計算(當然還有其他方面的度量)。
  • NLP實戰之基於TFIDF的文本相似度計算
    :當一個詞條在文檔中出現的頻率越高,且新鮮度低(即普遍度低),則其對應的TF-IDF值越高。)中的TF-IDF值為:更多詳細的關於TFIDF的介紹可以參考關於TF-IDF的其他實戰:基於TFIDF計算文本相似度
  • Kaggle 數據挖掘比賽經驗分享
    筆者目前在騰訊社交與效果廣告部任職數據挖掘工程師,負責 Lookalike 相似人群擴展相關工作。此文分享筆者在參加數據挖掘比賽過程中的一點心得體會。1.Kaggle 基本介紹Kaggle 於 2010 年創立,專注數據科學,機器學習競賽的舉辦,是全球最大的數據科學社區和數據競賽平臺。