文本相似度-相似度度量
NLP點滴——文本相似度
目錄
- 前言
- 字面距離
- common lang庫
- 相同字符數
- 萊文斯坦距離(編輯距離)
- 定義
- 實現方式
- Jaro距離
- 定義
- 實現方式
- 應用
- SimHash
- 定義
- 基本流程
- 相似性度量
- 存儲索引
- 實現
- 應用
- 語義相似性
- 背景知識
- 統計語言模型
- n-gram模型
- 詞向量
- 主題模型
- LSA
- PLSA
- LDA
- 應用
- Word2Vec
- 神經網絡語言模型
- CBOW和Skip-gram模型
- 應用
- 背景知識
- 參考文獻
前言
在自然語言處理過程中,經常會涉及到如何度量兩個文本之間的相似性,我們都知道文本是一種高維的語義空間,如何對其進行抽象分解,從而能夠站在數學角度去量化其相似性。而有了文本之間相似性的度量方式,我們便可以利用劃分法的K-means、基于密度的DBSCAN或者是基于模型的概率方法進行文本之間的聚類分析;另一方面,我們也可以利用文本之間的相似性對大規模語料進行去重預處理,或者找尋某一實體名稱的相關名稱(模糊匹配)。而衡量兩個字符串的相似性有很多種方法,如最直接的利用hashcode,以及經典的主題模型或者利用詞向量將文本抽象為向量表示,再通過特征向量之間的歐式距離或者皮爾森距離進行度量。本文圍繞文本相似性度量的主題,從最直接的字面距離的度量到語義主題層面的度量進行整理總結,并將平時項目中用到的文本相似性代碼進行了整理,如有任何紕漏還請指出,我會第一時間改正^v^。(ps.平時用的Java和scala較多,本文主要以Java為例。)
語義相似性
在NLP中有時候我們度量兩個短文本或者說更直接的兩個詞語的相似性時,直接通過字面距離是無法實現的,如:中國-北京,意大利-羅馬,這兩個短語之間的相似距離應該是類似的,因為都是首都與國家的關系;再比如(男人、男孩),(女人、女孩)應該是相同的關系,但是我們看其字面距離都是0。
想要做到語義層面的度量,我們需要用到機器學習建模,而自然語言的問題轉化為機器學習的首要問題便是找到一種方法把自然語言的符號數學化。
背景知識
在自然語言處理領域中,有兩大理論方向,一種是基于統計的經驗主義方法,另一種是基于規則的理性主義方法[15]。而隨著計算機性能的提升,以及互聯網發展而得到的海量語料庫,目前NLP的研究更多是基于統計的經驗主義方法。所以在本文討論的語義相似性中,也是從統計學的角度出發進行總結。
統計語言模型
對于統計語言模型而言,最基礎的理論便是貝葉斯理論(Bayes' theorem PS.關于貝葉斯理論強烈推薦:數學之美番外篇:平凡而又神奇的貝葉斯方法,一篇深入淺出的好文。另外推薦下自己師兄參與翻譯的作品《貝葉斯方法——概率編程與貝葉斯推斷》很全面的貝葉斯理論+實踐書籍)。對于大規模語料庫,我們可以通過詞頻的方式來獲取概率,例如100個句子中,出現了1次"Okay",那么
而同樣的對于句子"An apple ate the chicken"我們可以認為其概率為0,因為這不符合我們說話的邏輯。
統計語言模型是用來計算一個句子的概率,其通常基于一個語料庫D來構建。如何表示一個句子的概率呢?我們用來表示一個基元(通常就是指詞語,也可以是字或短語),那么對于一個由N個詞組成的句子W可以表示為
那么其聯合概率
就可以認為是該句子的概率,根據貝葉斯公式的鏈式法則可以得到:
其中條件概率便是語言模型的參數,如果我們把這些全部算出來,那么一個句子的概率我們就能很輕易的得出。但是很明顯,這個參數的量是巨大的是無法計算的。這時我們可以將映射到某個等價類,從而降低參數數目。
ps.語料庫我們用C表示,而詞典D一般為語料中出現的所有不重復詞
n-gram模型
既然每個單詞依賴的單詞過多,從而造成了參數過多的問題,那么我們就簡單點,假設每個單詞只與其前n-1個單詞有關,這便是n-1階Markov假設,也就是n-gram模型的基本思想。
那么對于句子W的概率我們可以簡化如下:
那么對于最簡單的一階情況也稱unigram或uni-gram或monogram(二階bigram 三階trigram)就簡單表示為
為了在句首和句尾能夠統一,我們一般會在句首加一個BOS標記,句尾加一個EOS標記,那么對于句子"Mark wrote a book",其概率可以表示如下:
為了預估條件概率,根據大數定理,簡單統計語料庫中出現的頻率,并進行歸一化。我們用c來表示頻率,那么可表示如下:
其中分母在unigram中就可以簡單認為是詞語出現的次數。
在n-gram模型中還有一個很重要的問題就是平滑化,因為再大的語料庫都不可能涵蓋所有情況,考慮兩個問題:
這顯然是不合理的,這就需要進行平滑,這里不展開討論。
根據最大似然,我們可以得到:
其中C表示語料庫,表示詞語的上下文,而這里對于n-gram模型,取對數后的對數似然函數為:
從上式我們可以看出可以看做是關于的函數,即:
其中為待定參數集,通過語料庫訓練得到參數集后,F便確定了,我們不需要再存儲概率,可以直接計算得到,而語言模型中很關鍵的就在于F的構造
詞向量
為了從使得計算機從語義層面理解人類語言,首先要做的就是將語言數學化,如何進行表示呢?人們便提出了詞向量的概念,即用一個向量來表示一個詞。
One-hot Representation
一種最簡單詞向量就是利用詞頻向量將高維的語義空間抽象成數學符號表示,向量長度為詞典的大小,這種表示方式非常直觀,但是容易造成維度災難,并且還是不能刻畫語義的信息。
詞語表示
對于詞語而言,用一個向量來表示一個詞,最直觀簡單的方式就是將每個詞變為一個很長的向量,向量長度便是詞典的長度,其中絕大部分為0,只有一個維度為1代表了當前詞。
假設語料庫:“沖突容易引發戰爭”,那么詞典為
- D=[沖突,容易,引發,戰爭]
- 沖突=[1,0,0,0]
- 戰爭=[0,0,0,1]
每個詞都是含有一個1的n維向量(),這種方式我們壓縮存儲下,就是給每個詞語分配一個ID,通常實際變成我們最簡單的就是用hash值表示一個詞語。這種方式可以用在SVM、最大熵和CRF等等算法中,完成NLP的大多數場景。例如,我們可以直接將
但是缺點很明顯,就是我們用這種方式依舊無法度量兩個詞的語義相似性,任意兩個詞之間都是孤立的,比如上面的沖突和戰爭是近義詞,但是卻沒有任何關聯性。
文檔表示
同樣文檔也可以用詞頻向量的形式來表示,一般我們會利用tf-idf作為每一個詞的特征值,之后會挑選每篇文檔比較重要的部分詞來表示一篇文檔,拿游戲來說,如下:
[王者榮耀, 陰陽師, 夢幻西游]
- doc1:[tf-idf(王者榮耀), tf-idf(陰陽師), tf-idf(夢幻西游)]
- doc2:[tf-idf(王者榮耀), tf-idf(陰陽師), tf-idf(夢幻西游)]
然后我們就可以利用K-means等聚類算法進行聚類分析,當然對于每篇文檔,一般我們只會選取部分詞匯,因為如果詞匯過多可能造成NLP中常見的維度“災難”。這種方式在大多數NLP場景中都是適用的,但是由于這種表示往往是建立在高維空間,為了避免維度災難就要損失一定的語義信息,這也是這種方法的弊端。
Distributed representation
另外一種詞向量的表示Distributed representation最早由 Hinton在 1986年提出。它是一種低維實數向量,這種向量一般長成這個樣子:
[0.792, ?0.177, ?0.107, 0.109, ?0.542, …]
維度以 50 維和 100 維比較常見,當然了,這種向量的表示不是唯一的。
Distributed representation的關鍵點在于,將高維空間中的詞匯映射到一個低維的向量空間中,并且讓相關或者相似的詞,在距離上更接近(看到這里大家有沒有想到普通hash以及simhash的區別呢?),這里引用一張圖片(來自[13]):
圖中是英語和西班牙語通過訓練分別得到他們的詞向量空間,之后利用PCA主成分分析進行降維表示在二維坐標圖中的。我們可以清晰的看出,對于兩種語系的一二三四五,在空間距離上竟是如此的相似,這就是Distributed representation詞向量表示的意義所在。
這種采用低維空間表示法,不但解決了維數災難問題,并且挖掘了word之間的關聯屬性,從而提高了向量語義上的準確度,下面我們討論的語言模型都是基于這種詞向量表示方式。
PS. 有時候也會出現Word Represention或 Word Embedding(所謂詞嵌入)的說法。另外我們這里說的詞向量是在詞粒度進行分析,當然我們也可以在字粒度的字向量、句子粒度的句向量以及文檔粒度的文檔向量進行表示分析。
主題模型
在長文本的篇章處理中,主題模型是一種經典的模型,經常會用在自然語言處理、推薦算法等應用場景中。本節從LDA的演變過程對LDA進行闡述,然后就LDA在長文本相似性的判斷聚類上做簡要說明。
LSA
首先對于一篇文檔Document,詞語空間的一個詞頻向量如下:
其中每個維度表示某一詞語term在該文檔中出現的次數,最終對于大量的訓練樣本,我們可以得到訓練樣本的矩陣X,如下圖:
LSA的基本思想,便是利用最基本的SVD奇異值分解,將高維語義空間映射到低維空間,其流程如下:
這樣對于訓練樣本中詞表的每一個term我們便得到了一個低維空間的向量表示。但LSA的顯著問題便是值考慮詞頻,并不區分同一詞語的不同含義
PLSA
LSA基于最基本的SVD分解,但缺乏嚴謹的數理統計邏輯,于是Hofmann提出了PLSA,其中P便是Probabilistic,其基本的假設是每個文檔所表示的詞頻空間向量w服從多項式分布(Multinomial distribution)
簡單扯兩句多項式分布:
伯努利分布(Bernoulli distribution)我們從接觸概率論開始便知道,即所謂的投硬幣,其離散分布如下:
但是吊吊的數學家們總喜歡做一些優雅的讓人看不懂的事情,所以也可以寫作如下公式:
其中k為0或者1二項分布(Binomial distribution):
如果進行次投硬幣實驗,計算出現m次正面朝上的概率
伯努利分布是二項分布中n=1時的特殊情況Categorical分布(Categorical distribution),如果我們將投硬幣改成擲骰子,那么原來一維向量x就會變成一個六維向量,其中每一維度為1表示出現該面,0表示沒出現,用數學表示即對于隨機變量X有k中情況,其中第種情況出現的概率為:
那么我們可以得到其離散概率分布如下:
其中如果那么為1,否則為0多項式分布(Multinomial distribution):與二項分布類似,Categorical分布進行N次試驗,便得到多項式分布:
同樣我們可以寫成吊吊的形式:
其中為gamma函數:當n>0,則(ps.該形式與狄利克雷分布(Dirichlet distribution)的形式非常相似,因為多項式分布是狄利克雷分布的共軛先驗)
OK簡單梳理了下過去的知識,PLSA假設每篇文檔的詞頻向量服從Categorical分布,那么對于整個訓練樣本的詞頻矩陣W則服從多項式分布。PLSA利用了aspect model,引入了潛在變量z(即所謂主題),使其變成一個混合模型(mixture model)。其圖模型如下:
其中表示文檔集,Z便是PLSA中引入的隱含變量(主題/類別),表示詞表。表示單詞出現在文檔的概率,表示文檔中出現主題下的單詞的概率,給定主題出現單詞的概率。其中每個主題在所有詞項上服從Multinomial分布,每個文檔在所有主題上服從Multinmial分布。按照生成模型,整個文檔的生成過程如下:
(1)以的概率生成文檔
(2)以的概率選中主題
(3)以的概率產生一個單詞
那么對于單詞出現在文檔的聯合概率分布,而是隱含變量。
其中和分別對應了兩組Multinomial分布,PLSA需要訓練兩組分布的參數
LDA
有了PLSA,那么LDA就相對簡單了,其相當于貝葉斯(Bayes' theorem PS.關于貝葉斯理論強烈推薦:數學之美番外篇:平凡而又神奇的貝葉斯方法,一篇深入淺出的好文)PLSA即:
LDA=Bayesian pLSA
為什么這么說呢?我們站在貝葉斯理論的角度看上文提到的PLSA,基于上文的闡述,我們知道PLSA的假設是文檔-詞語的詞頻矩陣服從多項式分布(multinomial distribution),那么在貝葉斯理論中,相當于我們找到了似然函數,那么想要計算后驗概率時,我們需要找到先驗概率。
簡單扯兩句共軛先驗:
根據貝葉斯理論我們有如下形式:
OK其中我們可以成為似然函數即一件事情發生的似然性(最大似然估計),那么相當于先驗概率分布,一般為一個常數,所以忽略。那么對于計算后驗概率,我們需要找到似然函數和先驗分布。
一般當我們已知似然函數的形式的時候,我們需要找到先驗分布,那么對于所有滿足[0,1]區間內的分布都符合這個條件,為了計算簡單,我們采用與似然函數形式盡量一致的分布作為先驗分布,這就是所謂的共軛先驗。
在上文中介紹多項式分布時提到了Dirichlet分布,我們看多項式分布的形式如下:
那么我們需要找尋形式相似如下的分布:
而Dirichlet分布的形式如下:
看出來了吧,去掉左邊的Beta分布不說,在右邊的形式上Dirichlet分布和Multinomial分布是及其相似的,所以Dirichlet分布是Multinomial分布的共軛先驗。
再回到LDA,根據之前分析的PLSA可知,每個文檔中詞的Topic分布服從Multinomial分布,其先驗選取共軛先驗即Dirichlet分布;每個Topic下詞的分布服從Multinomial分布,其先驗也同樣選取共軛先驗即Dirichlet分布。其圖模型如下:
我們可以看出LDA中每篇文章的生成過程如下:
在LDA中我們可以利用來表示一篇文檔。
應用
從之前LDA的闡述中,我們可以利用來表示一篇文檔,那么我們自然可以利用這個向量對文檔進行語義層面的詞語和文檔的相似性分析從而達到聚類、推薦的效果。當然了LDA本身對于文檔分析出的主題,以及每個主題下的詞匯,就是對于文檔詞匯的一層低維聚類。
之前用過Git上Java版的LDA實現,但是語料不是很大,對其性能并不能做出很好的評估。其地址如下:
github: A Java implemention of LDA(Latent Dirichlet Allocation)
其采用吉布斯采樣的方法對LDA進行求解。之后自己也準備嘗試用spark進行實現,看是否能夠對性能進行優化。
Word2Vec
谷歌的Tomas Mikolov團隊開發了一種詞典和術語表的自動生成技術,能夠把一種語言轉變成另一種語言。該技術利用數據挖掘來構建兩種語言的結構模型,然后加以對比。每種語言詞語之間的關系集合即“語言空間”,可以被表征為數學意義上的向量集合。在向量空間內,不同的語言享有許多共性,只要實現一個向量空間向另一個的映射和轉換,語言翻譯即可實現。該技術效果非常不錯,對英語和西語間的翻譯準確率高達90%。
什么是word2vec?你可以理解為word2vec就是將詞表征為實數值向量的一種高效的算法模型,其利用神經網絡(關于神經網絡之前有簡單進行整理:馬里奧AI實現方式探索 ——神經網絡+增強學習),可以通過訓練,把對文本內容的處理簡化為K維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似。(PS. 這里往往人們會將word2vec和深度學習掛鉤,但其實word2vec僅僅只是用了一個非常淺層的神經網絡,跟深度學習的關系并不大。)
Word2vec輸出的詞向量可以被用來做很多NLP相關的工作,比如聚類、找同義詞、詞性分析等等。如果換個思路, 把詞當做特征,那么Word2vec就可以把特征映射到K維向量空間,可以為文本數據尋求更加深層次的特征表示 。
神經網絡語言模型
word2vec的思想最早起源于2003年Yoshua Bengio等人的論文A Neural Probabilistic Language Model:
Traditional but very successful approaches based on n-grams obtain generalization by concatenating very short overlapping sequences seen in the training set. We propose to fight the curse of dimensionality by learning a distributed representation for words which allows each training sentence to inform the model about an exponential number of semantically neighboring
sentences. [16]
從文中摘要中的這段話我們可以看出,神經網絡語言模型提出的初衷便是為了解決傳統的n-gram模型中維度災難的問題,用distributed representation詞向量的形式來表示每一個詞語。
文中提出的模型利用了一個三層神經網絡如下圖(一般投影層算在輸入層中,這里分開闡述):
其中,對于語料庫C,詞典D的長度為(|D|=N)為語料庫C的詞匯量大小。對于任意一個詞,表示其前n-1個詞語,類似于n-gram模型,二元對為一個訓練樣本。我們為詞向量,詞向量的維度為m。圖中W,U分別為投影層和隱藏層以及隱藏層和輸出層之間的權值矩陣,p,q分別為隱藏層和輸出層上的偏置向量。
論文中給出的神經網絡模型如下圖:
其中C(i)表示第i個詞的特征向量(詞向量),我們看到圖中第一層為詞的上下文的每個詞向量,在第二層我們將輸入層的n-1個詞向量按順序首尾拼接在一起,形成一個長向量,其長度為(n-1)m,輸入到激活函數tanh雙曲正切函數中,計算方式如下:
經過上述兩步計算得到的只是一個長度為N的向量,我們看到圖中第三層還做了一次softmax(Softmax function)歸一化,歸一化后
就可以表示為:
為詞在詞典D中的索引。
在之前的背景知識n-gram模型
我們知道語言模型中很關鍵的便是F的確定,其中參數如下:
- 詞向量:,以及填充向量(上下文詞匯不夠n時)
- 神經網絡參數:
論文的主要貢獻有一下兩點:
詞語之間的相似性可以通過詞向量來表示
不同于之前我們討論的One-hot Representation表示方式,論文中指出在進行訓練時,向量空間表達的詞語維度一般為30、60或100,遠遠小于詞典長度17000,避免了維度災難。同時語義相似句子的概率是相似的。比如:某個語料庫中的兩個句子S1="A dog is running in the room", S2="A cat is running in the room",兩個句子從語義上看僅僅是在dog和cat處有一點區別,假設在語料庫中S1=1000即出現1000次而S2=1即僅出現一次,按照之前我們講述的n-gram模型,p(S1)>>p(S2),但是我們從語義上來看dog和cat在句子中無論從句法還是語義上都扮演了相似的角色,所以兩者概率應該相似才對。
而神經網絡語言模型可以做到這一點,原因是:1)在神經網絡語言模型中假設了相似的詞在詞向量上也是相似的,即向量空間中的距離相近,2)模型中的概率函數關于詞向量是光滑的,那么詞向量的一個小變化對概率的影響也是一個小變化,這樣下面的句子:
A dog is ruuning in the room
A cat is running in the room
The cat is running in the room
A dog is walking in the bedroom
The dog was walking in the bedroom
只要在語料庫中出現一個,其他句子的概率也會相應增大。
我們最終訓練得到的詞向量,在整個神經網絡模型中,似乎只是一個參數,但是這個副作用也正是word2vec中的核心產物。
CBOW和Skip-gram模型
word2vec中用到了兩個重要模型:CBOW(Continuous Bag-of-Words Model)和Skip-gram(Continuous Skip-gram Model)模型,文中作者Tomas Mikolov[17]給出了模型圖如下:
由圖中我們看出word2vec是一個三層結構的神經網絡:輸入層、投影層和輸出層(這里我們發現word2vec與上面我們闡述的神經網絡模型的顯著區別是去掉了隱藏層)。對于圖中左邊的CBOW模型,是已知當前詞的上下文的前提下預測當前詞;而正好相反,Skip-gram模型是已知當前詞的前提下來預測其上下文。
CBOW模型的目標函數,即其對數似然函數形式如下:
而Skip-gram模型的優化目標函數則形如:
Mikolov在word2vec中提出了兩套框架,Hieraichical Softmax和Negative Sampling,這里由于博文篇幅太長了,就不錯過多闡述,只對基于Hieraichical Softmax的CBOW模型進行簡單總結。
CBOW模型中,與之前神經網絡語言模型類似表示一個樣本,其中表示詞的前后各c個詞語(共2c個),其三層結構我們可以細化如下:
對比我們之前討論的最早的神經網絡語言模型,CBOW模型的區別主要為以下三點:
word2vec對于詞典D中的任意詞,Huffman樹必存在一條從根結點到詞的路徑(且唯一)。路徑上存在個分支(每條路徑上的總結點數為),將每個分支看做一次二次分類,每一次分類產生一個概率,將這些概率乘起來,便是所需的。在二分類的過程中,可以利用Huffman編碼值,即左樹為1右樹為0進行邏輯回歸分類。
word2vec在求解的過程中主要利用了梯度下降的方法,調整學習率,這里我們不再長篇大論的闡述,具體可以參考文獻[14],對word2vec中的數學原理闡述的非常清晰。
應用
word2vec從被發布起就是各種大紅大紫,在谷歌的翻譯系統中,得到了很好的驗證。圍繞本篇博文的主題,即文本相似度的度量,word2vec產生的詞向量可以非常方便的讓我們做這件事情,利用歐氏距離或者cos都可以。
在之前Wetest輿情項目,做句法分析時,需要找尋某一個詞的同類詞語,我們用用戶的游戲評論訓練word2vec,效果還是不錯的如下圖:
對于游戲的人工想到的維度詞進行同類擴展,得到擴展維度詞。
之前在應用時是自己師兄使用的python版word2vec,而Java對于word2vec有一個較好的東東DL4J,但其性能我并沒有經過大規模預料測試,這個大家用的時候需謹慎。
OK,長舒一口氣~,好長的一篇整理,整個文章雖然涵蓋了好多個模型、算法,但是圍繞的一個主題便是如何度量兩個文本之間的相似性,從字面和語義兩個角度對自己平時用過接觸過的模型算法進行整理歸納,如有任何紕漏還請留言指出,我會第一時間改正。(感謝身邊的同事和大神給予的指導幫助)
參考文獻
關注 - 0
粉絲 - 92 +加關注 6 0 ? 上一篇:馬里奧AI實現方式探索 ——神經網絡+增強學習
? 下一篇:Spark踩坑記——Spark Streaming+Kafka
</div><div class="postDesc">posted @ <span id="post-date">2016-12-06 10:50</span> <a href="https://www.cnblogs.com/xlturing/">xlturing</a> 閱讀(<span id="post_view_count">10295</span>) 評論(<span id="post_comment_count">6</span>) <a href="https://i.cnblogs.com/EditPosts.aspx?postid=6136690" rel="nofollow">編輯</a> <a href="#" "AddToWz(6136690);return false;">收藏</a></div> </div> <script src="//common.cnblogs.com/highlight/9.12.0/highlight.min.js"></script><script>markdown_highlight();</script><script type="text/javascript">var allowComments=true,cb_blogId=150286,cb_entryId=6136690,cb_blogApp=currentBlogApp,cb_blogUserGuid='7d97d526-35b5-e211-83e8-90b11c0b17d6',cb_entryCreatedDate='2016/12/6 10:50:00';loadViewCount(cb_entryId);var cb_postType=1;var isMarkdown=true;</script>
評論列表 <div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage"> <span class="comment_actions"></span></div><a href="#3573416" class="layer">#1樓</a><a name="3573416" id="comment_anchor_3573416"></a> <span class="comment_date">2016-12-06 11:29</span> <a id="a_comment_author_3573416" href="https://www.cnblogs.com/ddx-deng/" target="_blank">deeeeeed</a> <a href="http://msg.cnblogs.com/send/deeeeeed" title="發送站內短消息" class="sendMsg2This"> </a></div><div class="feedbackCon"><div id="comment_body_3573416" class="blog_comment_body">可以看出作者的知識儲備,并且在這篇文章上下了功夫</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" "return voteComment(3573416,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" "return voteComment(3573416,'Bury',this)">反對(0)</a></div><span id="comment_3573416_avatar" style="display:none;">http://pic.cnblogs.com/face/622385/20140410162948.png</span></div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage"> <span class="comment_actions"></span></div><a href="#3573421" class="layer">#2樓</a><a name="3573421" id="comment_anchor_3573421"></a> <span class="comment_date">2016-12-06 11:30</span> <a id="a_comment_author_3573421" href="https://www.cnblogs.com/goodfulcom/" target="_blank">碼有錢</a> <a href="http://msg.cnblogs.com/send/%E7%A0%81%E6%9C%89%E9%92%B1" title="發送站內短消息" class="sendMsg2This"> </a></div><div class="feedbackCon"><div id="comment_body_3573421" class="blog_comment_body">干貨,加油!</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" "return voteComment(3573421,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" "return voteComment(3573421,'Bury',this)">反對(0)</a></div><span id="comment_3573421_avatar" style="display:none;">http://pic.cnblogs.com/face/u162282.jpg?id=19203843</span></div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage"> <span class="comment_actions"></span></div><a href="#3573449" class="layer">#3樓</a><a name="3573449" id="comment_anchor_3573449"></a> <span class="comment_date">2016-12-06 11:48</span> <a id="a_comment_author_3573449" href="https://www.cnblogs.com/zssxfc/" target="_blank">zssxfc</a> <a href="http://msg.cnblogs.com/send/zssxfc" title="發送站內短消息" class="sendMsg2This"> </a></div><div class="feedbackCon"><div id="comment_body_3573449" class="blog_comment_body">清晰,詳細</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" "return voteComment(3573449,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" "return voteComment(3573449,'Bury',this)">反對(0)</a></div></div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage"> <span class="comment_actions"></span></div><a href="#3573586" class="layer">#4樓</a><a name="3573586" id="comment_anchor_3573586"></a> <span class="comment_date">2016-12-06 14:07</span> <a id="a_comment_author_3573586" href="https://www.cnblogs.com/TextEditor/" target="_blank">codesnippet.info</a> <a href="http://msg.cnblogs.com/send/codesnippet.info" title="發送站內短消息" class="sendMsg2This"> </a></div><div class="feedbackCon"><div id="comment_body_3573586" class="blog_comment_body">NLP這塊以后也是很大的市場。</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" "return voteComment(3573586,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" "return voteComment(3573586,'Bury',this)">反對(0)</a></div><span id="comment_3573586_avatar" style="display:none;">http://pic.cnblogs.com/face/75847/20160425114402.png</span></div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage"> <span class="comment_actions"></span></div><a href="#4021637" class="layer">#5樓</a><a name="4021637" id="comment_anchor_4021637"></a> <span class="comment_date">2018-07-16 19:37</span> <a id="a_comment_author_4021637" href="http://home.cnblogs.com/u/1401872/" target="_blank">顰兒愛兮兮</a> <a href="http://msg.cnblogs.com/send/%E9%A2%A6%E5%84%BF%E7%88%B1%E5%85%AE%E5%85%AE" title="發送站內短消息" class="sendMsg2This"> </a></div><div class="feedbackCon"><div id="comment_body_4021637" class="blog_comment_body">干貨~謝謝作者,加油!</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" "return voteComment(4021637,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" "return voteComment(4021637,'Bury',this)">反對(0)</a></div></div></div><div class="feedbackItem"><div class="feedbackListSubtitle"><div class="feedbackManage"> <span class="comment_actions"></span></div><a href="#4188757" class="layer">#6樓</a><a name="4188757" id="comment_anchor_4188757"></a><span id="comment-maxId" style="display:none;">4188757</span><span id="comment-maxDate" style="display:none;">2019/2/26 19:21:32</span> <span class="comment_date">2019-02-26 19:21</span> <a id="a_comment_author_4188757" href="https://www.cnblogs.com/daletxt/" target="_blank">Daletxt</a> <a href="http://msg.cnblogs.com/send/Daletxt" title="發送站內短消息" class="sendMsg2This"> </a></div><div class="feedbackCon"><div id="comment_body_4188757" class="blog_comment_body">太有深度了,目前一下子消化不了,收藏了以后慢慢咀嚼</div><div class="comment_vote"><a href="javascript:void(0);" class="comment_digg" "return voteComment(4188757,'Digg',this)">支持(0)</a><a href="javascript:void(0);" class="comment_bury" "return voteComment(4188757,'Bury',this)">反對(0)</a></div></div></div> <div id="comments_pager_bottom"></div></div><script type="text/javascript">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script> 刷新評論刷新頁面返回頂部 注冊用戶登錄后才能發表評論,請 登錄 或 注冊,訪問網站首頁。 【推薦】超50萬C++/C#源碼: 大型實時仿真組態圖形源碼
【推薦】百度云“豬”你開年行大運,紅包瘋狂拿,低至1折
【推薦】專業便捷的企業級代碼托管服務 - Gitee 碼云
【活動】2019第四屆全球人工技術大會解碼“智能+時代”
</div><!--end: forFlow --> </div><!--end: mainContent 主體內容容器--><div id="sideBar"><div id="sideBarMain">
公告
<div id="blog-calendar" style=""><table id="blogCalendar" class="Cal" cellspacing="0" cellpadding="0" title="Calendar"> <tbody><tr><td colspan="7"><table class="CalTitle" cellspacing="0"><tbody><tr><td class="CalNextPrev"><a href="javascript:void(0);" "loadBlogCalendar('2019/02/01');return false;"><</a></td><td align="center">2019年3月</td><td class="CalNextPrev" align="right"><a href="javascript:void(0);" "loadBlogCalendar('2019/04/01');return false;">></a></td></tr> </tbody></table></td></tr><tr><th class="CalDayHeader" align="center" abbr="日" scope="col">日</th><th class="CalDayHeader" align="center" abbr="一" scope="col">一</th><th class="CalDayHeader" align="center" abbr="二" scope="col">二</th><th class="CalDayHeader" align="center" abbr="三" scope="col">三</th><th class="CalDayHeader" align="center" abbr="四" scope="col">四</th><th class="CalDayHeader" align="center" abbr="五" scope="col">五</th><th class="CalDayHeader" align="center" abbr="六" scope="col">六</th></tr><tr><td class="CalOtherMonthDay" align="center">24</td><td class="CalOtherMonthDay" align="center">25</td><td class="CalOtherMonthDay" align="center">26</td><td class="CalOtherMonthDay" align="center">27</td><td class="CalOtherMonthDay" align="center">28</td><td align="center">1</td><td class="CalWeekendDay" align="center">2</td></tr><tr><td class="CalWeekendDay" align="center">3</td><td align="center">4</td><td align="center">5</td><td align="center">6</td><td align="center">7</td><td align="center">8</td><td class="CalWeekendDay" align="center">9</td></tr><tr><td class="CalWeekendDay" align="center">10</td><td align="center">11</td><td align="center">12</td><td align="center">13</td><td align="center">14</td><td align="center">15</td><td class="CalWeekendDay" align="center">16</td></tr><tr><td class="CalWeekendDay" align="center">17</td><td align="center">18</td><td align="center">19</td><td align="center">20</td><td align="center">21</td><td align="center">22</td><td class="CalWeekendDay" align="center">23</td></tr><tr><td class="CalWeekendDay" align="center">24</td><td align="center">25</td><td align="center">26</td><td align="center">27</td><td align="center">28</td><td align="center">29</td><td class="CalTodayDay" align="center">30</td></tr><tr><td class="CalWeekendDay" align="center">31</td><td class="CalOtherMonthDay" align="center">1</td><td class="CalOtherMonthDay" align="center">2</td><td class="CalOtherMonthDay" align="center">3</td><td class="CalOtherMonthDay" align="center">4</td><td class="CalOtherMonthDay" align="center">5</td><td class="CalOtherMonthDay" align="center">6</td></tr> <div id="leftcontentcontainer"><div id="blog-sidecolumn"><div id="sidebar_search" class="sidebar-block"></div><div id="sidebar_categories">隨筆分類(69)
- ACM(37)
- Big data(5)
- CV(5)
- Java(11)
- machine learning(2)
- NLP(7)
- 前端(1)
- 數據庫(1)
-
閱讀排行榜
- 1. Spark踩坑記——Spark Streaming+Kafka(63946)
- 2. Opencv攝像頭實時人臉識別(20190)
- 3. Spark踩坑記——數據庫(Hbase+Mysql)(19186)
- 4. 【Java心得總結四】Java泛型下——萬惡的擦除(11588)
- 5. NLP點滴——文本相似度(10295)
Copyright ?2019 xlturing
id="google_osd_static_frame_6799767448321">
總結
以上是生活随笔為你收集整理的文本相似度-相似度度量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode】3月22日打卡-Da
- 下一篇: 如何开发小程序开发者工具?