糾錯(cuò)框架的基本結(jié)構(gòu)
雖然糾錯(cuò)只是一個(gè)看著簡(jiǎn)單的任務(wù),但是實(shí)際上已經(jīng)構(gòu)建成了一個(gè)非常完整的系統(tǒng),根據(jù)這個(gè)系統(tǒng)兼顧很多事情,舉幾個(gè)點(diǎn):
充分縮小范圍,防止過(guò)糾,畢竟糾錯(cuò)是NLP系統(tǒng)的上游,過(guò)糾的代價(jià)非常大。
充分挖掘可能錯(cuò)誤的位置,在詞匯支持的情況,找到可能正確的結(jié)果,保證召回率。
各種抽取特征,能通過(guò)更加嚴(yán)謹(jǐn)?shù)姆绞皆诙鄠€(gè)候選中找到最優(yōu)的結(jié)果。
然后我們來(lái)看看一個(gè)比較OK的糾錯(cuò)系統(tǒng)結(jié)構(gòu)是什么樣的,三大步驟:
錯(cuò)誤檢測(cè):檢測(cè)句子錯(cuò)誤的部分,后續(xù)只對(duì)這個(gè)部分進(jìn)行錯(cuò)誤糾正。
候選召回:根據(jù)識(shí)別的錯(cuò)誤進(jìn)行針對(duì)性的修改,這塊依賴候選集。
候選排序:錯(cuò)誤可能有很多。召回的結(jié)果也有很多,那個(gè)才是最優(yōu)解,這步需要通過(guò)一定的方式得到最優(yōu)結(jié)果。
錯(cuò)誤檢測(cè)
錯(cuò)誤檢測(cè)是文本進(jìn)入糾錯(cuò)體系的一個(gè)大門(mén),設(shè)立他的目的有這幾個(gè):
縮小糾正范圍,降低后續(xù)流程的壓力。
減少過(guò)糾,保證準(zhǔn)確率,用戶自己輸對(duì)了卻改錯(cuò)了體驗(yàn)非常差。
換言之,我們需要在錯(cuò)誤檢測(cè)中做的是,找到句子中可能出現(xiàn)錯(cuò)誤的位置,提取出來(lái)任務(wù)就完成了,那么,這塊有什么方法呢。
最簡(jiǎn)單的一種方法,就是結(jié)合詞典去做,這個(gè)詞典其實(shí)已經(jīng)有比較通用的,那就是jieba的詞典(idf.txt),對(duì)于絕大部分人而言,輸入的東西一般都是TOP的,那么一些未見(jiàn)過(guò)的,即未登錄詞,就很可能是錯(cuò)誤的內(nèi)容了。但需要注意的是,領(lǐng)域內(nèi)的詞匯我們需要補(bǔ)充,詞典覆蓋率要足夠的高,這樣識(shí)別的準(zhǔn)確率才會(huì)夠高。
第二個(gè)方法也是一個(gè)無(wú)監(jiān)督的方法——用語(yǔ)言模型。語(yǔ)言模型能評(píng)判一個(gè)句子出現(xiàn)的概率,換言之,如果句子出現(xiàn)的頻次足夠低,那這里面就很可能有錯(cuò)誤的詞匯,再精確到句子中的每個(gè)位置,那就是一個(gè)局部的n-gram的條件概率了,如果概率比整個(gè)句子明顯低,那就說(shuō)明這個(gè)位置或者說(shuō)這個(gè)位置附近可能存在錯(cuò)誤點(diǎn),我們可以拿出來(lái)。其實(shí)這個(gè)應(yīng)該這里幾個(gè)方法中門(mén)檻最低的一個(gè)了,只需要語(yǔ)料,不需要挖掘覆蓋率足夠大的詞典,也不需要標(biāo)注樣本,直接可以做。
第三個(gè)想說(shuō)的方法就是序列標(biāo)注的方法。分詞和NER其實(shí)都可以抽象為序列標(biāo)注問(wèn)題,錯(cuò)誤檢測(cè)也可以,簡(jiǎn)單的其實(shí)就是整個(gè)句子中,有錯(cuò)誤的標(biāo)注為1,沒(méi)錯(cuò)誤的標(biāo)注為0,然后通過(guò)CRF之類(lèi)的方法來(lái)進(jìn)行預(yù)測(cè),從而完成抽取。這個(gè)能很好的把控準(zhǔn)確性,效果還是會(huì)比較好的,但問(wèn)題在于這種標(biāo)注樣本,可能比常規(guī)的ner樣本更難拿到。
pycorrector我前面提到過(guò),就用了上面1、2兩種方法,在開(kāi)放域里面其實(shí)效果不錯(cuò),但是在垂域,我們就需要更多的語(yǔ)料甚至是重新構(gòu)建里面涉及的模型和詞典。
而在我的實(shí)踐中,又有如下的經(jīng)驗(yàn),大家可以參考:
錯(cuò)誤檢測(cè)這塊由于只是糾錯(cuò)系統(tǒng)中的其中一部分,后續(xù)還有大量的步驟可以控制,所以我們并不需要對(duì)這步做非常高的準(zhǔn)確性的要求,抱著“寧可錯(cuò)殺也不放過(guò)”的思路去做,保證真正錯(cuò)的部分能被拿出來(lái)即可,對(duì)準(zhǔn)確率可以很大程度的放松。
無(wú)論是上面哪種方法,檢測(cè)錯(cuò)誤的時(shí)候都要注意,檢測(cè)出錯(cuò)誤的位置可能不是真的問(wèn)題點(diǎn),而可能識(shí)別出來(lái)的未知的附近,因此要擴(kuò)大召回的話,附近的可以都挑出來(lái)試試一起處理。
候選召回
在指導(dǎo)錯(cuò)誤的位置以后,我們就要開(kāi)始對(duì)癥下藥了,那么,什么是可能的藥,我們就要開(kāi)始找了,這就是候選召回的主要任務(wù),針對(duì)錯(cuò)誤點(diǎn),我們找可能正確的結(jié)果。要找到正確的結(jié)果,主要是兩種方式:基于詞典的和基于NLG的。
基于詞典的方式是比較經(jīng)典而且在現(xiàn)在還是比較常用的方法,說(shuō)白了我們就要去找一些詞匯,我們叫做“混淆集”,也就是一個(gè)簡(jiǎn)單的kv對(duì),遇到什么詞,我們就給出一些候選的結(jié)果,這個(gè)的結(jié)果非常簡(jiǎn)單,但是挖掘會(huì)非常困難,搜索領(lǐng)域常用的方式就是共現(xiàn)query,大部分情況下,用戶會(huì)在沒(méi)有得到正確結(jié)果的時(shí)候修正結(jié)果重新搜索,所以共現(xiàn)query是一個(gè)非常好的挖掘資源。
基于詞典的方式糾錯(cuò)的量總有上限,但是總有一些難以召回的情況,因此借助一些NLG的方式,可以擴(kuò)大召回,這個(gè)NLG,是一種文本生成的方式,可以根據(jù)上下文糾正的句子,給出一些可能的結(jié)果。但是這個(gè)方案的缺點(diǎn)是非常依賴平行樣本,即一個(gè)錯(cuò)誤、一個(gè)正確的樣本,這個(gè)獲取往往會(huì)比較難。
候選排序
現(xiàn)在對(duì)一個(gè)我句子,我們手里都有很多候選的結(jié)果,這里的候選排序主要有兩個(gè)目的:
判斷這么多候選結(jié)果中選出最好的幾個(gè)。
最好的幾個(gè)相比原來(lái)的句子要足夠好,才能被糾。
這里,我們需要持續(xù)思考的是,這個(gè)排序規(guī)則改怎么定。
最簡(jiǎn)單的方式就是使用語(yǔ)言模型的perplexity,即混淆度,這是用來(lái)一個(gè)句子他真的是句子的打分,一般而言這個(gè)正常無(wú)錯(cuò)的句子ppl就會(huì)比較小,有錯(cuò)的句子是ppl的比較大,可以用這個(gè)指標(biāo)來(lái)衡量最佳的糾錯(cuò)結(jié)果是什么。
光一個(gè)ppl的評(píng)判是不夠的,不僅僅是ppl的相對(duì)量,還有絕對(duì)量,還有就是pl雖然下降但是還是很高,還有和ppl無(wú)關(guān)的因素,如拼音的相似度、和原句的相似度等,因此可以先升級(jí)為機(jī)器學(xué)習(xí),把前面提到的指標(biāo)抽取為特征,通過(guò)簡(jiǎn)單的機(jī)器學(xué)習(xí)進(jìn)行計(jì)算。
進(jìn)一步地,同樣可以使用平行樣本,通過(guò)深度學(xué)習(xí)的方式來(lái)衡量是否需要糾正。
其他相關(guān)
糾錯(cuò)只是一個(gè)系統(tǒng),我們要在里面添加很多的零件完成各個(gè)我們拆解的任務(wù),我們來(lái)看看有什么需要做的事情:
語(yǔ)言模型。語(yǔ)言模型在糾錯(cuò)中起到了至關(guān)重要的作用,因此一個(gè)好的語(yǔ)言模型非常重要,而影響語(yǔ)言模型效果的很大一塊因素就是數(shù)據(jù),尤其是統(tǒng)計(jì)語(yǔ)言模型,通過(guò)調(diào)整數(shù)據(jù)集的分布,例如使用特定垂域的語(yǔ)料進(jìn)行訓(xùn)練,能有效提升最終的效果,但要注意不要把錯(cuò)誤句子過(guò)多的引入到模型中。
混淆集?;煜糜诤蜻x召回,如果正確結(jié)果無(wú)法被召回,則效果會(huì)受到很大影響,因此我們需要通過(guò)多渠道挖掘,在github、知乎等網(wǎng)站,加上一些論文提到的數(shù)據(jù)中收集外部數(shù)據(jù),同時(shí)通過(guò)用戶query,尤其是共現(xiàn)query來(lái)獲取一些用戶容易混淆的錯(cuò)誤。有一篇文章提到了,混淆集是糾錯(cuò)的上限,正確答案召回不到,好的錯(cuò)誤檢測(cè)和候選排序都沒(méi)用。
規(guī)則。糾錯(cuò)系統(tǒng)中需要大量的規(guī)則,錯(cuò)誤檢測(cè)階段衡量錯(cuò)誤的閾值我們要用規(guī)則卡,排序階段我們也需要一些提權(quán)降權(quán)保證最終我們需要的內(nèi)容能排在前面,例如一些專(zhuān)有名詞的保護(hù),”電池“不能被改為”滇池“,”嬴政“不能被改為”行政“。這些規(guī)則看著簡(jiǎn)單,但是要想提出這些規(guī)則,必須對(duì)數(shù)據(jù)有足夠的了解。
小結(jié)
一連幾篇討論了糾錯(cuò),對(duì)糾錯(cuò)問(wèn)題有了比較完整的理解,可以知道一個(gè)簡(jiǎn)單的問(wèn)題可以進(jìn)行細(xì)化然后構(gòu)建出完整的系統(tǒng)。最后我放幾篇比較好的參考文章,大家可以繼續(xù)深入閱讀。
平安糾錯(cuò):https://zhuanlan.zhihu.com/p/159101860
中文(語(yǔ)音結(jié)果)的文本糾錯(cuò)綜述:https://blog.csdn.net/lipengcn/article/details/82556569?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2
-
框架
+關(guān)注
關(guān)注
0文章
403瀏覽量
17558 -
糾錯(cuò)
+關(guān)注
關(guān)注
0文章
5瀏覽量
13311 -
語(yǔ)言模型
+關(guān)注
關(guān)注
0文章
542瀏覽量
10344
原文標(biāo)題:深入討論糾錯(cuò)系統(tǒng)
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
AI開(kāi)發(fā)框架集成介紹
SSM框架的源碼解析與理解
SSM框架的優(yōu)缺點(diǎn)分析 SSM在移動(dòng)端開(kāi)發(fā)中的應(yīng)用
大語(yǔ)言模型開(kāi)發(fā)框架是什么
JavaWeb框架比較
卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)工具與框架
TMS320C64x+和TMS320C674x的檢錯(cuò)糾錯(cuò)機(jī)制
![TMS320C64x+和TMS320C674x的檢錯(cuò)<b class='flag-5'>糾錯(cuò)</b>機(jī)制](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
bootstrap框架和vue框架的區(qū)別
bootstrap框架用什么軟件開(kāi)發(fā)
鴻蒙Ability Kit(程序框架服務(wù))【應(yīng)用啟動(dòng)框架AppStartup】
專(zhuān)家解讀 | NIST網(wǎng)絡(luò)安全框架(1):框架概覽
![專(zhuān)家解讀 | NIST網(wǎng)絡(luò)安全<b class='flag-5'>框架</b>(1):<b class='flag-5'>框架</b>概覽](https://file1.elecfans.com/web2/M00/E0/40/wKgZomY4QLOAGat4AABoZ537-Dg354.png)
Python自動(dòng)化測(cè)試框架及其應(yīng)用
![Python自動(dòng)化測(cè)試<b class='flag-5'>框架</b>及其應(yīng)用](https://file1.elecfans.com/web2/M00/C6/E2/wKgZomYNELGAIBRPAAA-Os-O1Ug806.png)
谷歌模型框架是什么軟件?谷歌模型框架怎么用?
谷歌模型框架是什么?有哪些功能和應(yīng)用?
OpenHarmony4.0源碼解析之媒體框架
![OpenHarmony4.0源碼解析之媒體<b class='flag-5'>框架</b>](https://file1.elecfans.com/web2/M00/C2/0F/wKgaomXcmcOANuqWAACuNGSccUo398.png)
評(píng)論