日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【NLP】竞赛中的文本相似性!

發(fā)布時(shí)間:2025/3/12 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】竞赛中的文本相似性! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文本相似度是指衡量?jī)蓚€(gè)文本的相似程度,相似程度的評(píng)價(jià)有很多角度:單純的字面相似度(例如:我和他 v.s. 我和她),語(yǔ)義的相似度(例如:爸爸 v.s. 父親)和風(fēng)格的相似度(例如:我喜歡你 v.s. 我好喜歡你耶)等等。

文本表示角度

統(tǒng)計(jì)模型

文本切分

在中文和拉丁語(yǔ)系中,文本的直觀表示就存在一定的差異,拉丁語(yǔ)系中詞與詞之間存在天然的分隔符,而中文則沒(méi)有。

I can eat glass, it doesn't hurt me.
我能吞下玻璃而不傷身體。

因此針對(duì)拉丁語(yǔ)系的文本切分相對(duì)中文容易許多。

  • N 元語(yǔ)法

N-gram (N 元語(yǔ)法) 是一種文本表示方法,指文中連續(xù)出現(xiàn)的 個(gè)詞語(yǔ)。N-gram 模型是基于 階馬爾科夫鏈的一種概率語(yǔ)言模型,可以通過(guò)前 個(gè)詞對(duì)第 個(gè)詞進(jìn)行預(yù)測(cè)。以 南京市長(zhǎng)江大橋 為例,N-gram 的表示如下:

一元語(yǔ)法(unigram):南/京/市/長(zhǎng)/江/大/橋 二元語(yǔ)法(bigram):南京/京市/市長(zhǎng)/長(zhǎng)江/江大/大橋 三元語(yǔ)法(trigram):南京市/京市長(zhǎng)/市長(zhǎng)江/長(zhǎng)江大/江大橋 import?re from?nltk.util?import?ngramss?=?'南京市長(zhǎng)江大橋' tokens?=?re.sub(r'\s',?'',?s)list(ngrams(tokens,?1)) #?[('南',),?('京',),?('市',),?('長(zhǎng)',),?('江',),?('大',),?('橋',)]list(ngrams(tokens,?2)) #?[('南',?'京'),?('京',?'市'),?('市',?'長(zhǎng)'), #??('長(zhǎng)',?'江'),?('江',?'大'),?('大',?'橋')]list(ngrams(tokens,?3,?pad_left=True,?pad_right=True,?left_pad_symbol='<s>',?right_pad_symbol='</s>')) #?[('<s>',?'<s>',?'南'), #??('<s>',?'南',?'京'), #??('南',?'京',?'市'), #??('京',?'市',?'長(zhǎng)'), #??('市',?'長(zhǎng)',?'江'), #??('長(zhǎng)',?'江',?'大'), #??('江',?'大',?'橋'), #??('大',?'橋',?'</s>'), #??('橋',?'</s>',?'</s>')]
  • 分詞

分詞就是將連續(xù)的字序列按照一定的規(guī)范重新組合成詞序列的過(guò)程。在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過(guò)明顯的分界符來(lái)簡(jiǎn)單劃界,唯獨(dú)詞沒(méi)有一個(gè)形式上的分界符,雖然英文也同樣存在短語(yǔ)的劃分問(wèn)題,不過(guò)在詞這一層上,中文比之英文要復(fù)雜得多、困難得多。

s?=?'南京市長(zhǎng)江大橋'#?jieba #?https://github.com/fxsjy/jieba import?jiebalist(jieba.cut(s,?cut_all=False)) #?['南京市',?'長(zhǎng)江大橋']list(jieba.cut(s,?cut_all=True)) #?['南京',?'南京市',?'京市',?'市長(zhǎng)',?'長(zhǎng)江',?'長(zhǎng)江大橋',?'大橋']list(jieba.cut_for_search(s)) #?['南京',?'京市',?'南京市',?'長(zhǎng)江',?'大橋',?'長(zhǎng)江大橋']#?THULAC #?https://github.com/thunlp/THULAC-Python import?thulacthulac_ins?=?thulac.thulac()thulac_ins.cut(s) #?[['南京市',?'ns'],?['長(zhǎng)江',?'ns'],?['大橋',?'n']]#?PKUSEG #?https://github.com/lancopku/PKUSeg-python import?pkusegseg?=?pkuseg.pkuseg(postag=True)seg.cut(s) #?[('南京市',?'ns'),?('長(zhǎng)江',?'ns'),?('大橋',?'n')]#?HanLP #?https://github.com/hankcs/HanLP import?hanlptokenizer?=?hanlp.load('LARGE_ALBERT_BASE')tokenizer(s) #?['南京市',?'長(zhǎng)江',?'大橋']

主題模型

除了對(duì)文本進(jìn)行切分將切分后結(jié)果全部用于表示文本外,還可以用部分字詞表示一篇文檔。主題模型(Topic Model)在機(jī)器學(xué)習(xí)和自然語(yǔ)言處理等領(lǐng)域是用來(lái)在一系列文檔中發(fā)現(xiàn)抽象主題的一種統(tǒng)計(jì)模型。

直觀來(lái)講,如果一篇文章有一個(gè)中心思想,那么一些特定詞語(yǔ)會(huì)更頻繁的出現(xiàn)。比方說(shuō),如果一篇文章是在講狗的,那“狗”和“骨頭”等詞出現(xiàn)的頻率會(huì)高些。如果一篇文章是在講貓的,那“貓”和“魚(yú)”等詞出現(xiàn)的頻率會(huì)高些。而有些詞例如“這個(gè)”、“和”大概在兩篇文章中出現(xiàn)的頻率會(huì)大致相等。但真實(shí)的情況是,一篇文章通常包含多種主題,而且每個(gè)主題所占比例各不相同。因此,如果一篇文章 10% 和貓有關(guān),90% 和狗有關(guān),那么和狗相關(guān)的關(guān)鍵字出現(xiàn)的次數(shù)大概會(huì)是和貓相關(guān)的關(guān)鍵字出現(xiàn)次數(shù)的 9 倍。

一個(gè)主題模型試圖用數(shù)學(xué)框架來(lái)體現(xiàn)文檔的這種特點(diǎn)。主題模型自動(dòng)分析每個(gè)文檔,統(tǒng)計(jì)文檔內(nèi)的詞語(yǔ),根據(jù)統(tǒng)計(jì)的信息來(lái)斷定當(dāng)前文檔含有哪些主題,以及每個(gè)主題所占的比例各為多少。

  • TF-IDF

TF-IDF 是 Term Frequency - Inverse Document Frequency 的縮寫(xiě),即“詞頻-逆文本頻率”。TF-IDF 可以用于評(píng)估一個(gè)字詞在語(yǔ)料中的一篇文檔中的重要程度,基本思想是如果某個(gè)字詞在一篇文檔中出現(xiàn)的頻率較高,而在其他文檔中出現(xiàn)頻率較低,則認(rèn)為這個(gè)字詞更能夠代表這篇文檔。

形式化地,對(duì)于文檔 中的字詞 的 TF-IDF 重要程度可以表示為:

其中, 表示字詞 在文檔 中出現(xiàn)的頻率, 為包含字詞 的文檔數(shù)量, 為語(yǔ)料中文檔的總數(shù)量。

以 14萬(wàn)歌詞預(yù)料為例,通過(guò) TF-IDF 計(jì)算周杰倫的《簡(jiǎn)單愛(ài)》中最重要的 3 個(gè)詞為 ['睡著', '放開(kāi)', '棒球']。

  • BM25

BM25 算法的全稱(chēng)為 Okapi BM25,是一種搜索引擎用于評(píng)估查詢(xún)和文檔之間相關(guān)程度的排序算法,其中 BM 是 Best Match 的縮寫(xiě)。

對(duì)于一個(gè)給定的查詢(xún) ,包含的關(guān)鍵詞為 ,一個(gè)文檔 的 BM25 值定義為:

其中, 表示 在文檔 中的詞頻, 表示文檔 中的詞數(shù), 表示語(yǔ)料中所有文檔的平均長(zhǎng)度。 和 為自由參數(shù),通常取值為 。 表示詞 的逆文檔頻率,通常計(jì)算方式如下:

其中, 為語(yǔ)料中文檔的總數(shù)量, 表示包含 的文檔數(shù)量。

BM25 算法是對(duì) TF-IDF 算法的優(yōu)化,在詞頻的計(jì)算上,BM25 限制了文檔 中關(guān)鍵詞 的詞頻對(duì)評(píng)分的影響。為了防止詞頻過(guò)大,BM25 將這個(gè)值的上限設(shè)置為 。

同時(shí),BM25 還引入了平均文檔長(zhǎng)度 ,不同的平均文檔長(zhǎng)度 對(duì) TF 分值的影響如下圖所示:

  • TextRank

TextRank 是基于 PageRank 算法的一種關(guān)鍵詞提取算法。PageRank 最早是用于 Google 的網(wǎng)頁(yè)排名,因此以公司創(chuàng)始人拉里·佩奇(Larry Page)的姓氏來(lái)命名。PageRank 的計(jì)算公式如下:

其中, 表示任意一個(gè)網(wǎng)頁(yè), 表示鏈接到網(wǎng)頁(yè) 的網(wǎng)頁(yè), 表示網(wǎng)頁(yè) 的 PageRank 值, 表示網(wǎng)頁(yè) 所有的入鏈集合, 表示網(wǎng)頁(yè) 所有的出鏈集合, 表示集合的大小, 為阻尼系數(shù),是為了確保每個(gè)網(wǎng)頁(yè)的 PageRank 值都大于 0。

TextRank 由 PageRank 改進(jìn)而來(lái),計(jì)算公式如下:

相比于 PageRank 公式增加了權(quán)重項(xiàng) ,用來(lái)表示兩個(gè)節(jié)點(diǎn)之間的邊的權(quán)重。TextRank 提取關(guān)鍵詞的算法流程如下:

  • 將文本進(jìn)行切分得到 。

  • 將 中大小為 的滑動(dòng)窗口中的詞定義為共現(xiàn)關(guān)系,構(gòu)建關(guān)鍵詞圖 。

  • 根據(jù) TextRank 的計(jì)算公式對(duì)每個(gè)節(jié)點(diǎn)的值進(jìn)行計(jì)算,直至收斂。

  • 對(duì)節(jié)點(diǎn)的 TextRank 的值進(jìn)行倒敘排序,獲取前 個(gè)詞作為關(guān)鍵詞。

    • LSA, PLSA, LDA & HDP

    潛在語(yǔ)義分析(LSA, Latent Semantic Analysis) 的核心思想是將文本的高維詞空間映射到一個(gè)低維的向量空間,我們稱(chēng)之為隱含語(yǔ)義空間。降維可以通過(guò)奇異值分解(SVD)實(shí)現(xiàn),令 表示語(yǔ)料矩陣,元素 表示詞 和文檔 的共現(xiàn)情況(例如:詞頻):

    利用奇異值分解:

    取最大的 個(gè)奇異值,則可以得到原始矩陣的近似矩陣:

    在處理一個(gè)新的文檔時(shí),可以利用下面的公式將原始的詞空間映射到潛在語(yǔ)義空間:

    LSA 的優(yōu)點(diǎn):

  • 低維空間可以刻畫(huà)同義詞

  • 無(wú)監(jiān)督模型

  • 降維可以減少噪聲,使特征更加魯棒

  • LSA 的缺點(diǎn):

  • 未解決多義詞問(wèn)題

  • 計(jì)算復(fù)雜度高,增加新文檔時(shí)需要重新訓(xùn)練

  • 沒(méi)有明確的物理解釋

  • 高斯分布假設(shè)不符合文本特征(詞頻不為負(fù))

  • 維度的確定是 Ad hoc 的

  • 概率潛語(yǔ)義分析(Probabilistic Latent Semantic Analysis, PLSA) 相比于 LSA 增加了概率模型,每個(gè)變量以及相應(yīng)的概率分布和條件概率分布都有明確的物理解釋。

    PLSA 認(rèn)為一篇文檔可以由多個(gè)主題混合而成,而每個(gè)主題都是詞上的概率分布,文章中的每個(gè)詞都是由一個(gè)固定的主題生成的,如下圖所示:

    針對(duì)第 篇文檔 中的每個(gè)詞的生成概率為:

    因此整篇文檔的生成概率為:

    PLSA 可以利用 EM 算法求得局部最優(yōu)解。

    PLSA 優(yōu)點(diǎn):

  • 定義了概率模型,有明確的物理解釋

  • 多項(xiàng)式分布假設(shè)更加符合文本特征

  • 可以通過(guò)模型選擇和復(fù)雜度控制來(lái)確定主題的維度

  • 解決了同義詞和多義詞的問(wèn)題

  • PLSA 缺點(diǎn):

  • 隨著文本和詞的增加,PLSA 模型參數(shù)也隨之線性增加

  • 可以生成語(yǔ)料中的文檔的模型,但不能生成新文檔的模型

  • EM 算法求解的計(jì)算量較大

  • 隱含狄利克雷分布(Latent Dirichlet Allocation, LDA) 在 PLSA 的基礎(chǔ)上增加了參數(shù)的先驗(yàn)分布。在 PLSA 中,對(duì)于一個(gè)新文檔,是無(wú)法獲取 的,因此這個(gè)概率模型是不完備的。LDA 對(duì)于 和 都增加了多項(xiàng)式分布的共軛分布狄利克雷分布作為先驗(yàn),整個(gè) LDA 模型如下圖所示:

    LDA 的參數(shù)估計(jì)可以通過(guò)吉布斯采樣實(shí)現(xiàn)。

    LDA 在使用過(guò)程中仍需要指定主題的個(gè)數(shù),而層次狄利克雷過(guò)程(Hierarchical Dirichlet Processes, HDP) 通過(guò)過(guò)程的構(gòu)造可以自動(dòng)訓(xùn)練出主題的個(gè)數(shù),更多實(shí)現(xiàn)細(xì)節(jié)請(qǐng)參考論文。

    LSA,PLSA,LDA 和 HDP 之間的演化關(guān)系如下圖所示:

    距離度量

    相似性度量 (Similarity Measurement) 用于衡量?jī)蓚€(gè)元素之間的相似性程度或兩者之間的距離 (Distance)。距離衡量的是指元素之間的不相似性 (Dissimilarity),通常情況下我們可以利用一個(gè)距離函數(shù)定義集合 X?上元素間的距離,即:

    • Jaccard 系數(shù)

    Jaccard 系數(shù)的取值范圍為:,0 表示兩個(gè)集合沒(méi)有重合,1 表示兩個(gè)集合完全重合。

    • Dice 系數(shù)

    與 Jaccard 系數(shù)相同,Dice 系數(shù)的取值范圍為:,兩者之間可以相互轉(zhuǎn)換 。不同于 Jaccard 系數(shù),Dice 系數(shù)的差異函數(shù) 并不是一個(gè)合適的距離度量,因?yàn)槠洳⒉粷M(mǎn)足距離函數(shù)的三角不等式。

    • Tversky 系數(shù)

    其中, 表示集合的相對(duì)補(bǔ)集。Tversky 系數(shù)可以理解為 Jaccard 系數(shù)和 Dice 系數(shù)的一般化,當(dāng) 時(shí)為 Jaccard 系數(shù),當(dāng) 時(shí)為 Dice 系數(shù)。

    • Levenshtein 距離

    Levenshtein 距離是 編輯距離 (Editor Distance) 的一種,指兩個(gè)字串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù)。允許的編輯操作包括將一個(gè)字符替換成另一個(gè)字符,插入一個(gè)字符,刪除一個(gè)字符。例如將 kitten 轉(zhuǎn)成 sitting,轉(zhuǎn)換過(guò)程如下:

    編輯距離的求解可以利用動(dòng)態(tài)規(guī)劃的思想優(yōu)化計(jì)算的時(shí)間復(fù)雜度。

    • Jaro-Winkler 距離

    對(duì)于給定的兩個(gè)字符串 和 ,Jaro 相似度定義為:

    其中, 為字符串 的長(zhǎng)度, 為匹配的字符的個(gè)數(shù), 換位數(shù)目的一半。如果字符串 和 相差不超過(guò) ,我們則認(rèn)為兩個(gè)字符串是匹配的。例如,對(duì)于字符串 CRATETRACE,僅 R, A, E 三個(gè)字符是匹配的,因此 ,盡管 C, T 均出現(xiàn)在兩個(gè)字符串中,但是他們的距離超過(guò)了 1 (即,),因此 。

    Jaro-Winkler 相似度給予了起始部分相同的字符串更高的分?jǐn)?shù),其定義為:

    其中, 為字符串 和 的 Jaro 相似度, 為共同前綴的長(zhǎng)度 (規(guī)定不超過(guò) ), 為調(diào)整系數(shù) (規(guī)定不超過(guò) ),Winkler 將其設(shè)置為 。

    • 漢明距離

    漢明距離為兩個(gè)等長(zhǎng)字符串對(duì)應(yīng)位置的不同字符的個(gè)數(shù),也就是將一個(gè)字符串變換成另外一個(gè)字符串所需要替換的字符個(gè)數(shù)。例如:10111011001001 之間的漢明距離是 2,“toned”“roses” 之間的漢明距離是 3。

    import?textdistance?as?tds1?=?'南京市長(zhǎng)江大橋' s2?=?'北京市三元橋'td.jaccard(s1,?s2) #?0.6666666666666666td.sorensen_dice(s1,?s2) #?0.46153846153846156td.tversky(s1,?s2) #?0.3td.levenshtein(s1,?s2) #?4td.jaro(s1,?s2) #?0.6428571428571429td.hamming(s1,?s2) #?5

    表示學(xué)習(xí)

    基于表示學(xué)習(xí)的文本相似度計(jì)算方法的思路如下:

  • 利用表示學(xué)習(xí)方法將不定長(zhǎng)的文本表示為定長(zhǎng)的實(shí)值向量。

  • 計(jì)算轉(zhuǎn)換后的實(shí)值向量相似度,用于表示兩個(gè)文本的相似度。

  • 文本詞法,句法和語(yǔ)義角度

    一段文本的內(nèi)容分析由淺及深可以分為詞法,句法和語(yǔ)義三個(gè)層次。

  • 詞法,以詞為對(duì)象,研究包括分詞,詞性和命名實(shí)體等。

  • 句法,以句子為對(duì)象,研究包括句子成分和句子結(jié)構(gòu)等。

  • 語(yǔ)義,研究文字所表達(dá)的含義和蘊(yùn)含的知識(shí)等。

  • 詞法和句法可以統(tǒng)一成為語(yǔ)法,如下圖所示:

    詞法

    詞法層以單個(gè)句子作為輸入,其輸出為已標(biāo)記(詞性,命名實(shí)體等)的詞匯序列。

    詞匯序列的相似度計(jì)算可以采用上文中的距離度量等方式實(shí)現(xiàn)。

    句法

    句法層用于研究句子各個(gè)組成部分及其排列順序,將文本分解為句法單位,以理解句法元素的排列方式。句法層接收詞法層分析后的將其轉(zhuǎn)化為依存圖。

    對(duì)于依存圖,我們可以利用三元組 表示任意一個(gè)依存關(guān)系,然后通過(guò)統(tǒng)計(jì)計(jì)算兩個(gè)文本的依存圖的三元組集合之間的相似度來(lái)評(píng)價(jià)句法層的相似度。此外,也可以從樹(shù)結(jié)構(gòu)的角度直接評(píng)價(jià)依存句法的相似度,更多細(xì)節(jié)可參考相關(guān)論文 。

    語(yǔ)義

    語(yǔ)義層用于研究文本所蘊(yùn)含的意義。例如“父親”和“爸爸”在詞法層完全不同,但在語(yǔ)義層卻具有相同的含義。針對(duì)語(yǔ)義相似度的兩種深度學(xué)習(xí)范式如下:

    第一種范式首先通過(guò)神經(jīng)網(wǎng)絡(luò)獲取文本的向量表示,再通過(guò)向量之間的相似度來(lái)衡量文本的語(yǔ)義相似度。這種范式在提取特征時(shí)不考慮另一個(gè)文本的信息,更適合做大規(guī)模的語(yǔ)義相似召回,例如:DSSM ,ARC-I ,CNTN ,LSTM-RNN ?等。

    第二種范式首先通過(guò)深度模型提取兩個(gè)文本的交叉特征,得到匹配信號(hào)張量,再聚合為匹配分?jǐn)?shù)。這種范式同時(shí)考慮兩個(gè)文本的輸入信息,更適合做小規(guī)模的語(yǔ)義相似精排,例如:ARC-II ,MatchPyramid ,Match-SRNN ,Duet ?等。

    文本長(zhǎng)度角度

    從文本長(zhǎng)度角度出發(fā),我們可以粗略的將文本分類(lèi)為短文本長(zhǎng)文本短文本包括“字詞”,“短語(yǔ)”,“句子”等相對(duì)比較短的文本形式,長(zhǎng)文本包括“段落”,“篇章”等相對(duì)比較長(zhǎng)的文本形式。

    短文本 v.s. 短文本

    短文本同短文本的常見(jiàn)比較形式有:關(guān)鍵詞(字詞)同文本標(biāo)題(句子)的匹配,相似查詢(xún)(句子)的匹配等。如果單純的希望獲取字符層面的差異,可以通過(guò)距離度量進(jìn)行相似度比較。如果需要從語(yǔ)義的角度獲取相似度,則可以利用表示學(xué)習(xí)對(duì)需要比對(duì)的文本進(jìn)行表示,在通過(guò)語(yǔ)義向量之間的相似程度來(lái)衡量原始文本之間的相似度,詳情可參見(jiàn)上文。

    短文本 v.s. 長(zhǎng)文本

    短文本同長(zhǎng)文本的比較多見(jiàn)于文檔的搜索,即給定相關(guān)的查詢(xún)(字詞),給出最相關(guān)的文檔(段落和篇章)。對(duì)于這類(lèi)問(wèn)題常見(jiàn)的解決方式是對(duì)長(zhǎng)文本利用 TF-IDF,BM25等方法或進(jìn)行主題建模后,再同查詢(xún)的關(guān)鍵詞進(jìn)行匹配計(jì)算相似度度。

    長(zhǎng)文本 v.s. 長(zhǎng)文本

    長(zhǎng)文本同長(zhǎng)文本的比較多見(jiàn)于文檔的匹配和去重,對(duì)于這類(lèi)問(wèn)題常見(jiàn)的解決方式是利用關(guān)鍵詞提取獲取長(zhǎng)文本的特征向量,然后利用特征向量之間的相似度衡量對(duì)應(yīng)文本的相似程度。在針對(duì)海量文本的去重,還以應(yīng)用SimHash等技術(shù)對(duì)文本生成一個(gè)指紋,從而實(shí)現(xiàn)快速去重。

    往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專(zhuān)輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專(zhuān)輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專(zhuān)輯 本站知識(shí)星球“黃博的機(jī)器學(xué)習(xí)圈子”(92416895) 本站qq群704220115。 加入微信群請(qǐng)掃碼:

    總結(jié)

    以上是生活随笔為你收集整理的【NLP】竞赛中的文本相似性!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。