中文文本糾錯算法走到多遠了?

糾錯是從互聯網起始時就在一直解決的問題,但是一直作爲一些重要技術的輔助、附屬功能而默默無聞,譬如搜索引擎、譬如火熱的智能寫作等。
素質整理!

中文文本糾錯任務,常見錯誤類型包括:

  • 諧音字詞,如 配副眼睛-配副眼鏡
  • 混淆音字詞,如 流浪織女-牛郎織女
  • 字詞順序顛倒,如 伍迪艾倫-艾倫伍迪
  • 字詞補全,如 愛有天意-假如愛有天意
  • 形似字錯誤,如 高梁-高粱
  • 中文拼音全拼,如 xingfu-幸福
  • 中文拼音縮寫,如 sz-深圳
  • 語法錯誤,如 想象難以-難以想象

目前來看,糾錯算法分爲兩個方向:基於規則、深度模型

規則的解決思路

中文糾錯分爲兩步走,第一步是錯誤檢測,第二步是錯誤糾正;

錯誤檢測部分先通過結巴中文分詞器切詞,由於句子中含有錯別字,所以切詞結果往往會有切分錯誤的情況,這樣從字粒度和詞粒度兩方面檢測錯誤, 整合這兩種粒度的疑似錯誤結果,形成疑似錯誤位置候選集;

錯誤糾正部分,是遍歷所有的疑似錯誤位置,並使用音似、形似詞典替換錯誤位置的詞,然後通過語言模型計算句子困惑度,對所有候選集結果比較並排序,得到最優糾正詞。

深度模型的解決思路

端到端的深度模型可以避免人工提取特徵,減少人工工作量,RNN序列模型對文本任務擬合能力強,rnn_attention在英文文本糾錯比賽中取得第一名成績,證明應用效果不錯;

CRF會計算全局最優輸出節點的條件概率,對句子中特定錯誤類型的檢測,會根據整句話判定該錯誤,阿里參賽2016中文語法糾錯任務並取得第一名,證明應用效果不錯;

seq2seq模型是使用encoder-decoder結構解決序列轉換問題,目前在序列轉換任務中(如機器翻譯、對話生成、文本摘要、圖像描述)使用最廣泛、效果最好的模型之一。

那麼筆者最近剛剛聽了百度的糾錯算法框架,就把聽到的和之前收集到的一些材料整理如下。


百度智能糾錯技術

可參考百度糾錯開放平臺:

https://ai.baidu.com/tech/nlp/text_corrector

在這裏插入圖片描述
在這裏插入圖片描述

百度智能糾錯體系:

在這裏插入圖片描述

常見錯誤分三類:

  • 用詞錯誤
  • 文法、句法錯誤
  • 知識錯誤
    點擊查看大圖

百度糾錯的整體框架:

點擊查看大圖
其中核心的關鍵步驟爲:

  • 1 錯誤檢測
  • 2 候選召回
  • 3 糾錯排序

1 錯誤檢測:

先定位,一句話中哪些可能是錯誤的!
在這裏插入圖片描述

2 候選召回

在這裏插入圖片描述

步驟爲,輸入句子,然後檢測句子中可能的錯誤點,根據兩者在億級別的數據上進行文本召回,候選對齊

3 糾錯排序

召回了一堆,應該怎麼選,W&D模型
點擊查看大圖

三大核心技術

在這裏插入圖片描述

語言知識、模型

在這裏插入圖片描述

知識計算 - 關聯

在這裏插入圖片描述

基於知識圖譜的糾錯,基於關聯

知識計算 - 文本理解

在這裏插入圖片描述

意圖理解之後,槽位填滿了,根據槽來填錯的POI


騰訊:基於語義關聯的中文查詢糾錯框架

一個好的糾錯系統能夠將用戶輸入查詢詞進行糾錯提示, 或者將正確結果直接展示給用戶,提高了搜索引擎的智能化。

對於垂直搜索引擎,尤其是比較小的垂直apps,如何進行查詢糾錯,文獻中基本沒有探討過. 普遍做法是,使用商業搜索引擎中網頁搜索訓練的糾錯模型直接作用在垂直引擎中。但是在我們調研過程中, 發現不同的垂直業務, 用戶的檢索目的是不一樣的,從而導致糾錯的也不是通用的.例如,用戶輸入”消星星”, 在音樂業務中, 應該糾錯成一首歌曲——”小星星”; 而在遊戲app分發平臺上就應該糾成一個遊戲app——”消滅星星”。

文獻研究傳統文本糾錯包含兩種類型:

  • 一種是“單詞”錯誤的糾錯類型
  • 另外一種是“詞條搭配”的錯誤類型

早期的糾錯一般是第一種,使用編輯距離進行相近查找;

第二種錯誤類型,通過探測query中詞條的上下文搭配來判定是否存在錯誤,使用噪音信道和語言模型作爲糾錯的主要方法。例如, “peace” and “piece"在上下文"a _ of cake"中只能用"piece”。英文中也有將二者結合訓練模型進行預測,進行單詞字符的糾錯。

語義關聯在垂直app和web頁面中,資源數據之間不是孤立的,而是存在着某種聯繫。

我們先看一些例子,音樂app中,歌手“吳俊餘”演唱過歌曲“17歲的雨季”,這兩個數據資源就是一種“演唱”關係;在視頻app中, 電視臺“湖南衛視”製作了一檔娛樂節目“變形計”,這兩個數據資源是一種“製作”關係。

同樣的道理,音樂業務中還存在,歌手“演唱”歌曲, 歌手“發行”專輯,專輯“包含”歌曲等;在視頻業務中,導演“拍攝”電影,演員“出演”電影,演員“出演”娛樂節目,導演“拍攝”電視劇等;在小說業務中,作者“創作”小說,小說“包含”主人公等。

  • 定義1:資源數據——在垂直業務中,數據會分爲若干的分類,每個類別中可以單獨表述完整意義的詞條。例如,音樂業務中,歌曲、歌手、專輯、mv、歌詞這些類別覆蓋的數據都是資源數據。

-定義2:數據關聯——如果兩個資源數據存在着某種關係,則這兩個資源數據就存在數據關聯。

-定義3:關聯熱度——兩個關聯資源共同被作用的頻次。例如,兩個被共同點擊的次數,或者在web中出現在同一段話中的頻次等。

關聯挖掘

傳統的知識圖譜是由三元組(spo)組成,關聯挖掘最大的差異是,只需要挖掘存在一定關係的兩個數據,不需要記錄非常明確的關係。大致流程如下:
一是對句子進行句法分析,從句法樹中查找主語(s)、謂語(p)、賓語(o)三個部分,選取主語(s)和賓語(o)作爲候選關聯數據;
其次是結合垂直數據和query logs對候選進行統計,篩選頻度較高的放入關聯數據集合。

關聯糾錯在分析query logs中,發現一個有意思的現象:

很多查詢串往往包含兩個或多個資源片段,並且這些query錯誤比例很高。分析原因應該是用戶輸入多個片段是爲了得到一條明確的結果,而不願意拿到一個結果列表;
而錯誤比例較高應該是用戶記憶比較模糊,希望使用兩個或多個資源片段的關聯關係得到明確的結果。但是如果其中一個片段或者多個片段存在錯誤,則結果會非常差,因爲這些片段自身可能都代表一個正確的資源。

例如,視頻app中query“變形記 湖南衛視”,包含兩個資源片段,電影“變形記”,電視臺“湖南衛視”,兩個資源都是正確的,而這兩個資源沒有任何關係,這種情況可能存在錯誤,用戶真正想要的是“湖南衛視”的一檔娛樂節目“變形計”,正確糾錯形式應該是“變形記 湖南衛視”->“變形計 湖南衛視”。音樂app中更多例子如下:
在這裏插入圖片描述
關聯糾錯就是使用數據之間的關聯關係,對用戶輸入的多個資源片段判定是否存在錯誤,繼而進行糾錯處理。因爲每一個資源片段可能都是正確的資源,糾錯的目的是尋找多個片段的是否存在語義關聯,所以這種糾錯是一種新的糾錯類型。

我們將整個過程分爲三個步驟:

  • 第一步,片段切分。將整個query切分成一些可以獨立表達的語義片段,切分過程中儘量保證資源的完整性。

  • 第二步,片段之間計算是否存在關聯關係。如果存在關聯關係則退出,否則對每個片段查找候選結果。算法使用噪音信道模型,從看到的query output(O),推測正確的候選 input(i),取得分最高的若干最爲候選。
    在這裏插入圖片描述

  • 第三步,將每個片段的候選結果進行拼接,拼接後可能有多個串, 使用關聯關係計算得分,返回得分最高的一個作爲糾錯結果。算法表述如下,假設一個query拆分成兩個片段S1和S2對應的糾錯串<S1,{S11,S12}>和<S2,{S21,S22, S23}>算任意兩兩組合得分,其中u(si)、u(sj)分別代表S1和S2基於噪音信道模型計算的得分,f(si,sj)表示si和sj在關聯數據中的熱度,f(si)、f(sj)分別代表si和sj自身的熱度。取得分最高的1組作爲最終結果。

在這裏插入圖片描述

數據集合我們選取一個垂直app——QQ music來驗證我們的算法,qq music是騰訊公司推出的中文最大的網絡音樂平臺,每天約6000w左右的搜索量。從一個月的query logs中,隨機抽取3w條query,分別抓取baidu網頁搜索糾錯結果和自身糾錯結果, 取兩個糾錯結果的並集共3.1k,進行人工標註,其中有200條存在關聯糾錯,作爲實驗的數據集合。

抓取baidu網頁搜索的糾錯結果,主要是爲了對比垂直糾錯框架和網頁搜索糾錯效果進行對比,而baidu是中文網頁搜索中最權威的。

人工測評在3.1k數據集合上和網頁糾錯對比,召回提高了28.5%,F1提高了0.26。在200條存在關聯糾錯的集合上,我們的方法召回提高42.4%,F1提高了0.39.說明我們的垂直通用糾錯框架(DCQC)和關聯糾錯算法能夠明顯勝出網頁搜索的糾錯結果,也證明了垂直業務需要搭建自身糾錯系統的必要性。
在這裏插入圖片描述

在這裏插入圖片描述

Webpage vs domain (ALL data set)

在這裏插入圖片描述

Semantic Association Correction (small data set)

線上用戶點擊對線上流量進行隨機切分三分,每一份代表一種糾錯算法,使用用戶的真實點擊數據進行對比。爲了排除排序位置的影響,只取第一條結果的點擊數據進行分析。實驗證明,和原始query相比,網頁糾錯後用戶點擊率提高2%,我們的框架能夠提高8.4%, 效果更爲明顯。

在這裏插入圖片描述


中文糾錯的開源項目

pycorrector

https://github.com/shibing624/pycorrector
https://shibing624.github.io/pycorrector/

本項目的初衷之一是比對、共享各種文本糾錯方法,拋磚引玉的作用,如果對大家在文件糾錯任務上有一點小小的啓發就是我莫大的榮幸了。

主要使用了4種深度模型應用於文本糾錯任務,分別是前面模型小節介紹的rnn_attention、rnn_crf、seq2seq、seq2seq_attention,每種方法單獨放在文件夾中, 都可以獨立運行,相互之間無依賴。

demo地址:

https://www.borntowin.cn/product/corrector/

在這裏插入圖片描述

Chinese “spelling” error correction

https://github.com/ccheng16/correction

特點:

訓練的語言模型很多,根據介紹看,整體比較完善,看起來高大上。不過code跑不起來,作者沒回應—–後面再改一下作者代碼,看看能否跑起來。

在這裏插入圖片描述

中文單詞自動糾錯Cn_Speck_Checker

https://github.com/PengheLiu/Cn_Speck_Checker

簡介:

針對醫學數據訓練出來的,基於編輯距離,可自行訓練–效果一般,統計詞頻和共現信息,不太完善,返回大量candidates

特點:

· 人們通常越往後字打錯的可能越大,因而可以考慮每個字在單詞中的位置給予一定權重,這中方法有助於改進上面的第一種“傳然”- "雖然"的情況;

· 考慮拼音的重要性,對漢語來講,通常人們打錯時拼音是拼對的,只是選擇時候選擇錯了,因而對候選詞也可以優先選擇同拼音的字。

京東:簡易的中文糾錯和消歧

https://github.com/taozhijiang/chinese_correct_wsd

京東客服機器人語料做的中文糾錯–更接近我們的應用場景,主要解決同音自動糾錯問題,比如:

對京東新人度大打折扣 – > 對京東信任度大打折扣

我想買哥蘋果手機 糾正句:我想買個蘋果手機

但代碼四年未更新,目前跑不起來。

Autochecker & autocorrecter for chinese

https://github.com/beyondacm/Autochecker4Chinese

單詞、短句效果:5/13 效果差

速度:2.860311 all , 0.220023 avg; with print

可擴展性:詞典可擴展,不使用自己的語料進行訓練。擴展性一般。

在這裏插入圖片描述

小明NLP

提供中文分詞, 詞性標註, 拼寫檢查,文本轉拼音,情感分析,文本摘要,偏旁部首

https://github.com/SeanLee97/xmnlp

單詞、短句效果:3/13 效果差

速度:2.860311 all , 0.220023 avg; without print: 0:00:00.000017 all

可擴展性:既沒發現詞典、也沒發現模型。擴展性較差。

在這裏插入圖片描述

雲查錯 - 智能查錯

http://www.yunchacuo.com/

在這裏插入圖片描述
在這裏插入圖片描述


參考文獻:

基於語義關聯的中文查詢糾錯框架
https://cloud.tencent.com/developer/article/1030059

中文文本糾錯算法–錯別字糾正的二三事
https://zhuanlan.zhihu.com/p/40806718

pycorrector文檔
https://shibing624.github.io/pycorrector/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章