寫在前面
之前看了一篇很不錯(cuò)的外文博客,結(jié)合自己查閱學(xué)習(xí)的一些論文和資料,加上自己的理解,整理了一些內(nèi)容,準(zhǔn)備來跟大家分享關(guān)于文本分割任務(wù)的相關(guān)內(nèi)容。
文本分割任務(wù)的目的是將文本劃分為若干有意義的文本塊,不同的分割目的有不同的分割粒度,比如:詞、句子或者主題。
今天我們將要分享的文本分割任務(wù)的分割粒度聚焦在主題上,這類文本分割任務(wù)也稱為主題分割:識(shí)別文本主題的過渡從而將長文本劃分若干具有不同主題的文本塊。
1. 不同的文本形式
文本分割非常實(shí)用。在日常生活學(xué)習(xí)中,我們會(huì)接觸到各種各樣的文本:
- 書面文本,如:博客、文章、新聞等
-
各種轉(zhuǎn)錄文本(即記錄文本):
- 電視新聞的轉(zhuǎn)錄
- 播客的轉(zhuǎn)錄
- 電話的轉(zhuǎn)錄
- 在線會(huì)議的轉(zhuǎn)錄
這些文本通常都非常長,需要利用文本分割技術(shù)來處理這些文本,將它們按照主題的轉(zhuǎn)移或變化劃分為若干主題段落,每個(gè)主題段落內(nèi)部所表達(dá)的主題一致且連貫,不同主題段落間則描述不同的主題。
當(dāng)然,針對(duì)不同的文本,“主題”定義不同。比如:新聞文本分割中,主題可能是指一則新聞故事(Story);在線會(huì)議轉(zhuǎn)錄文本分割中,主題可能指的是不同的會(huì)議議題。無論“主題”代表的是什么,利用文本分割技術(shù)劃分長文本最直接的目的都是增加文本的可讀性。
當(dāng)然以上這些文本中可能含有各種會(huì)影響文本分割結(jié)果的噪聲,最常見的就是錯(cuò)別字。當(dāng)然在英文場(chǎng)景下還可能有拼寫錯(cuò)誤、語法錯(cuò)誤,在自動(dòng)轉(zhuǎn)錄的情況下出現(xiàn)使用不當(dāng)?shù)膯卧~。
轉(zhuǎn)錄需要自動(dòng)識(shí)別語音并將所說的內(nèi)容轉(zhuǎn)錄成等效的書面格式(依賴ASR技術(shù)),所以通常來說相對(duì)于書面文本,轉(zhuǎn)錄文本中含有更多的噪聲,尤其是在線會(huì)議的轉(zhuǎn)錄文本。這點(diǎn)很容易理解,因?yàn)樵诰€會(huì)議中,參會(huì)人有各種各樣的口音、網(wǎng)絡(luò)連接質(zhì)量也常常不太穩(wěn)定、參會(huì)人使用的介質(zhì)(麥克風(fēng))的質(zhì)量也參差不齊。
2. 文本分割技術(shù)的應(yīng)用場(chǎng)景
通過前面的介紹,我們已經(jīng)了解了文本分割(主題分割)任務(wù)是什么以及它所處理的文本的各種形式,現(xiàn)在我們一起來看看文本分割的應(yīng)用場(chǎng)景。
2.1 增加可讀性
現(xiàn)在給你兩篇文章:一篇沒有任何章節(jié)名稱、沒有任何段落,就只是長長的文本字符串;另一篇分段合理,每個(gè)自然段落過渡合理,邏輯自洽。
你愿意讀哪一篇?不用想,當(dāng)然是第二篇。文本分割最基礎(chǔ)的作用就是將冗長的文本劃分為讀者更易閱讀的一個(gè)個(gè)文本塊,也就是把形如第一篇的文章變成第二篇。
2.2 更全面的摘要
文本摘要技術(shù)是用于總結(jié)提煉文章的。通常我們?cè)陂喿x文章前,可以先通過文章的摘要了解內(nèi)容概況,如果感興趣再逐字逐句進(jìn)行精讀。就跟我們挑選要去電影院看的電影一樣,先看簡(jiǎn)介,看看是不是自己的菜,免得浪費(fèi)電影票和自己的時(shí)間。
但是,多數(shù)文本摘要模型在處理多主題的文章上效果還沒那么好,生成的摘要通常很難囊括文章所涵蓋的所有主題。
在處理多主題文章時(shí),一個(gè)很直接且有效的解決方案就是,先利用文本分割模型將文章分成若干個(gè)具有不同主題的文本塊,再利用摘要模型為每個(gè)文本塊生成摘要,在進(jìn)行進(jìn)一步的組織和編排。
2.3 視頻轉(zhuǎn)文章
融合媒體時(shí)代,新聞報(bào)道需要以不同的形式(如:視頻、文章、博客等)分發(fā)至不同的渠道(如:短視頻app、微信、微博等)。借助ASR技術(shù),我們可以將新聞視頻中的語音文本提取出來并轉(zhuǎn)化成書面格式。為增加可讀性,再利用文本分割技術(shù)將轉(zhuǎn)換的書面文本劃分成有意義的段落,組織成更適合閱讀的形式。
當(dāng)然文本分割技術(shù)在信息檢索、寫作助手、對(duì)話建模等等其他NLP下游任務(wù)上也有其相應(yīng)的應(yīng)用。
3. 文本分割任務(wù)的評(píng)價(jià)指標(biāo)
文本分割任務(wù)是識(shí)別文本主題的過渡從而將長文本劃分若干具有不同主題的文本塊。所以,如下圖所示文本分割模型實(shí)際上就是在對(duì)文本中的每個(gè)句子進(jìn)行二分類,判斷每個(gè)句子是否是分割邊界(也就是文本塊的最后一句)。
在這樣一個(gè)任務(wù)上,比較常用的評(píng)價(jià)指標(biāo)有:Precision&Recall(也就是我們?cè)凇抖诸惾蝿?wù)評(píng)價(jià)指標(biāo)(中)》介紹過的查準(zhǔn)率和查全率)、Pk、WindowDiff。
3.1 Precision & Recall
3.1 Precision & Recall的含義
既然文本分割(主題分割)本質(zhì)上是在句子級(jí)的二分類任務(wù),那么自然可以使用Precision與Recall,對(duì)應(yīng)的含義如下:
- Precision(查準(zhǔn)率):衡量了“被判別為分割邊界的句子中有多少比例是真正的邊界” ;
- Recall(查全率):衡量了“所有真正的分割邊界中有多少比例被模型識(shí)別出來了” ;
3.2 Precision & Recall 的問題
然而,Precision&Recall這兩個(gè)指標(biāo)對(duì)“near miss”不敏感。
在上圖中,Ref 是 ground truth,每個(gè)塊代表一個(gè)句子,垂直線表示真實(shí)的分割邊界。A-0 與 A-1 是兩個(gè)文本分割模型。
從圖中可以清楚地看到,模型 A-0 預(yù)測(cè)的分割邊界非常接近 ground truth,這就是所謂的“near miss”,即預(yù)測(cè)結(jié)果與真實(shí)結(jié)果偏離得很少,大概一兩句話。另一方面,模型 A-1 預(yù)測(cè)的分割邊界與ground truth 就差得遠(yuǎn)了。
也就是說,雖然兩個(gè)模型都沒有預(yù)測(cè)正確,但從“near miss”角度來看,模型 A-0 相對(duì)優(yōu)于模型 A-1。但是,Precision&Recall指標(biāo)可不會(huì)考慮這些,它們不在乎預(yù)測(cè)邊界與真實(shí)邊界的相對(duì)距離,只管預(yù)測(cè)正確與否,所以 A-0 與 A-1 從Precision、Recall值來看效果是相當(dāng)?shù)摹?/p>
3.2 Pk 指標(biāo)
3.2.1 Pk 指標(biāo)定義
針對(duì) “near miss”, Beeferemen 等人提出了Pk指標(biāo)。
Pk是基于滑動(dòng)窗口計(jì)算的,窗口大小可以自行指定,如果沒有指定一般就取真實(shí)文本段平均長度的的一半。在滑動(dòng)窗口的同時(shí),判斷窗口的兩端的節(jié)點(diǎn)是否屬于同一文本段,并比較真實(shí)結(jié)果與模型預(yù)測(cè)的結(jié)果是否一致,最后將不一致的數(shù)量除以滑動(dòng)次數(shù)即可得到Pk值。所以模型的Pk值越低,說明模型預(yù)測(cè)得越好。
Pk指標(biāo)在nltk中有相應(yīng)實(shí)現(xiàn),可以直接調(diào)用(nltk.pk[1]):
下面是Pk的實(shí)現(xiàn)源碼(為了便于大家結(jié)合定義看代碼實(shí)現(xiàn),小喵已經(jīng)在下面的源代碼中添加了相應(yīng)注釋):
#Beeferman'sPktextsegmentationevaluationmetric
[docs]defpk(ref,hyp,k=None,boundary='1'):
"""
ComputethePkmetricforapairofsegmentationsAsegmentation
isanysequenceoveravocabularyoftwoitems(e.g."0","1"),
wherethespecifiedboundaryvalueisusedtomarktheedgeofa
segmentation.
>>>'%.2f'%pk('0100'*100,'1'*400,2)
'0.50'
>>>'%.2f'%pk('0100'*100,'0'*400,2)
'0.50'
>>>'%.2f'%pk('0100'*100,'0100'*100,2)
'0.00'
:paramref:thereferencesegmentation
:typeref:strorlist
:paramhyp:thesegmentationtoevaluate
:typehyp:strorlist
:paramk:windowsize,ifNone,settohalfoftheaveragereferencesegmentlength
:typeboundary:strorintorbool
:paramboundary:boundaryvalue
:typeboundary:strorintorbool
float
"""
#若k未指定,則k設(shè)置為真實(shí)分割結(jié)果中文本段平均長度的一半
ifkisNone:
k=int(round(len(ref)/(ref.count(boundary)*2.)))
#不匹配計(jì)數(shù)
err=0
#滑動(dòng)
foriinxrange(len(ref)-k+1):
#判斷是否屬于同一文本段,只需要判斷窗口內(nèi)是否出現(xiàn)了分割邊界,若出現(xiàn)了就不屬于同一文本段
r=ref[i:i+k].count(boundary)>0
h=hyp[i:i+k].count(boundary)>0
ifr!=h:
err+=1
#pk值為不匹配次數(shù)除以總的滑動(dòng)次數(shù)
returnerr/(len(ref)-k+1.)
3.2.2 Pk 指標(biāo)問題
Pk指標(biāo)也存在一些問題:
- 對(duì)文本塊大小過于敏感
- 沒有考慮分割邊界數(shù)量
- 假負(fù)例比假正例更易受到懲罰
- 對(duì)于“near miss”處罰太多
對(duì)Pk指標(biāo)存在的問題感興趣的讀者可以細(xì)讀相關(guān)論文。小喵在這里僅針對(duì)“假負(fù)例比假正例更易受到懲罰”展開提一下。
我們來看上面這幅圖,圖中滑動(dòng)窗口大小為4 (表示在窗口兩端點(diǎn)內(nèi)潛在的分割邊界數(shù)為4)。模型將兩個(gè)真實(shí)的分割邊界都預(yù)測(cè)了出來,同時(shí)也多預(yù)測(cè)了一個(gè)(即假正例,本來不是分割邊界的被預(yù)測(cè)為分割邊界)。
但是從Pk的定義來看,在每一個(gè)窗口內(nèi),模型預(yù)測(cè)與真實(shí)結(jié)果都是一致的,即窗口兩端情況都是一樣的,要么都是在同一文本段內(nèi),要么都在不同文本段內(nèi)。也就是說只要窗口兩端情況一致,不管窗口內(nèi)部情況如何,Pk都認(rèn)為模型做對(duì)了,這樣“假正例”逃脫了懲罰。
3.3 WindowDiff 指標(biāo)
針對(duì)Pk指標(biāo)存在的問題,WindowDiff指標(biāo)被提了出來(《A Critique and Improvement of an Evaluation Metric for Text Segmentation》[2])。
WindowDiff指標(biāo)也是基于滑動(dòng)窗口計(jì)算。不同的是,WindowDiff指標(biāo)直接判別在窗口內(nèi)部真實(shí)結(jié)果與預(yù)測(cè)結(jié)果分割邊界數(shù)量的異同。
也就是說Pk與WindowDiff的計(jì)算類似,都是在分割結(jié)果上每次移動(dòng)一個(gè)固定大小的窗口,并在窗口內(nèi)計(jì)算模型預(yù)測(cè)結(jié)果與真實(shí)結(jié)果不匹配情況,最終求平均。不同之處在于,Pk是從“窗口兩端的句子是否位于同一個(gè)文本”的角度來判斷,而WindowDiff則是根據(jù)“窗口內(nèi)所包含的分割邊界個(gè)數(shù)”來判斷。
同樣地,模型的WindowDiff值越低,說明模型預(yù)測(cè)的分割邊界與真實(shí)的分割邊界越接近,模型預(yù)測(cè)得越好。
WindowDiff在nltk中也有相應(yīng)的實(shí)現(xiàn)(nltk.windowdiff()[3]):
下面是WindowDiff的實(shí)現(xiàn)源碼(小喵也在代碼中添加了相應(yīng)注釋):
defwindowdiff(seg1,seg2,k,boundary="1",weighted=False):
"""
Computethewindowdiffscoreforapairofsegmentations.A
segmentationisanysequenceoveravocabularyoftwoitems
(e.g."0","1"),wherethespecifiedboundaryvalueisusedto
marktheedgeofasegmentation.
>>>s1="000100000010"
>>>s2="000010000100"
>>>s3="100000010000"
>>>'%.2f'%windowdiff(s1,s1,3)
'0.00'
>>>'%.2f'%windowdiff(s1,s2,3)
'0.30'
>>>'%.2f'%windowdiff(s2,s3,3)
'0.80'
:paramseg1:asegmentation
:typeseg1:strorlist
:paramseg2:asegmentation
:typeseg2:strorlist
:paramk:windowwidth
:typek:int
:paramboundary:boundaryvalue
:typeboundary:strorintorbool
:paramweighted:usetheweightedvariantofwindowdiff
:typeweighted:boolean
float
"""
#句子數(shù)相同
iflen(seg1)!=len(seg2):
raiseValueError("Segmentationshaveunequallength")
ifk>len(seg1):
raiseValueError("Windowwidthkshouldbesmallerorequalthansegmentationlengths")
#不匹配計(jì)數(shù)
wd=0
#滑動(dòng)
foriinrange(len(seg1)-k+1):
#預(yù)測(cè)結(jié)果與真實(shí)結(jié)果在窗口內(nèi)的分割邊界數(shù)的差值
ndiff=abs(seg1[i:i+k].count(boundary)-seg2[i:i+k].count(boundary))
ifweighted:
wd+=ndiff
else:
#分割邊界不相同,即邊界數(shù)差值不為人零時(shí),不匹配計(jì)數(shù)加1
wd+=min(1,ndiff)
#不匹配次數(shù)除以總的滑動(dòng)次數(shù)
returnwd/(len(seg1)-k+1.)
總結(jié)
在今天的文章中,小喵跟大家一起學(xué)習(xí)了什么是文本分割(主題分割)、文本分割任務(wù)的應(yīng)用場(chǎng)景以及文本分割任務(wù)的相關(guān)評(píng)價(jià)指標(biāo),如:Precision&Recall、Pk、WindowDiff。
希望大家通過本文能夠?qū)ξ谋痉指钊蝿?wù)有一個(gè)基本的認(rèn)識(shí)。在接下來的文章里,小喵將跟大家一起閱讀文本分割的相關(guān)論文、學(xué)習(xí)文本分割的相關(guān)模型。
審核編輯 :李倩
-
自動(dòng)識(shí)別
+關(guān)注
關(guān)注
3文章
221瀏覽量
22837 -
文本
+關(guān)注
關(guān)注
0文章
118瀏覽量
17086
原文標(biāo)題:總結(jié)
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論