目前,人工智能技術(shù)在世界范圍內(nèi)熱度極高,但卻出現(xiàn)了“雷聲大、雨點小”的現(xiàn)象。一方面,隨著近年來深度學習技術(shù)的不斷發(fā)展,計算能力的不斷提高,更深更復雜網(wǎng)絡(luò)的普及使用,加上深度學習端到端的特性,看起來好像人工智能就是端到端的標注,不斷地做數(shù)據(jù)清洗,增加標注數(shù)據(jù),加深模型參數(shù),就可以實現(xiàn)計算機像人類一樣工作。另一方面,人工智能在實際應用場景落地時經(jīng)常失敗,常聽到有“只見人工,不見智能”,“有多少人工就有多少智能”的吐槽。因此,目前許多人工智能技術(shù)的實現(xiàn)現(xiàn)階段還不能脫離人工經(jīng)驗。
人工智能落地需要人工智慧,這里核心在于結(jié)合場景和算法特點做合理的設(shè)計,而非關(guān)注更多標準化的標注或者設(shè)計更精深的算法網(wǎng)絡(luò)。達觀是ToB的自然語言處理(NLP)公司,主要做辦公文檔自動處理。近年來在金融、政務(wù)、制造業(yè)等行業(yè)成功落地了非常多的NLP項目。
NLP也被譽為人工智能皇冠上的明珠,AI落地特別是NLP落地尤其不容易,通過機器處理辦公文檔遠比從一堆圖片中找出有貓的圖片要復雜得多。因為讓機器處理辦公文檔,往往存在缺少大量的訓練語料情況,不同行業(yè)間需要處理的具體問題千差萬別,人工都需要專業(yè)培訓甚至幾年工作經(jīng)驗才能處理妥當。本文主要結(jié)合達觀的實踐落地經(jīng)驗,探討在具體NLP項目落地時,計算機“智能”需要哪些必不可少的“人工”。
“人工”化繁為簡,拆解復雜問題
人工智能難以落地的主要原因之一是要處理的問題過于復雜,如果只靠算法模型的自學習,很難學到對應知識,從而作出正確決策,就像用大學生的題目考小學生,不可能考得好。但如果我們能人工對負責問題進行拆解,分解成多個簡單問題,那每個簡單的問題可能通過模型就能解決。但如何拆解?拆解成什么程度模型是可以處理的呢?達觀的經(jīng)驗是:當面對一個NLP問題,人類看完后立刻就能反應出結(jié)果的,這樣的問題模型就是我們定義的“簡單問題”,是機器可以解決的。下面以合同文檔抽取的場景為例幫助大家理解。
假設(shè)我們需要構(gòu)建模型從PDF格式的合同中抽取出甲方、乙方、違約條款等字段信息,看看機器是怎么一步步進行拆解的:
首先看機器的輸入數(shù)據(jù)。PDF格式內(nèi)部只是規(guī)定了每個字符或者線條應該在屏幕上什么位置,這些元素本身沒有任何語義上的信息,在計算機看來這份文檔其實只有字符以及其位置等簡單信息,并沒有人看渲染好的PDF文件的對齊、大小、重要性等更多信息。如果通過端到端的方式,把文字以及坐標一起輸入到模型,讓模型自己學習文檔結(jié)構(gòu),理論上可以抽取出需要的字段。這種方式乍聽之下可以一試,但實際效果是非常差的。因為讓人看到一堆字和坐標,希望判斷出抽取的字段,那本身就是非常復雜的事情,所以我們還需要進一步拆解。
文檔解析模型負責解析PDF協(xié)議,并且通過一定算法將文檔結(jié)構(gòu)化,也就是轉(zhuǎn)成章節(jié)、表格、段落等文字流,再輸入到字段抽取的模型。這兩個模型是否足夠簡單并能落地呢?
大部分文檔下,哪個是文字塊,哪個是表格,哪個是圖片,人是可以瞬間判斷出來的。而文字塊拆成章節(jié)、標題、段落,尤其是有些文檔段落開始并沒有明顯空格,那人還是需要仔細看,有時候還要分析上下文才能分析出來。所以我們將文檔解析繼續(xù)拆解成元素識別模型和段落識別模型。
對于字段抽取,有些字段比較簡單,比如甲方、乙方,人眼就能看出結(jié)果,這些字段直接通過模型抽取問題不大;有些字段稍微復雜一些,比如合同總金額有時候是在文本中的,有時候是在表格里面的,人在看的時候也需要反應一下才能得到信息,所以可以對字段抽取再進行拆解。表格里面需要專門的表格抽取模型,如果是無線表格,人在看的時候往往還需要將虛線進行對應,所以也可以拆出無線表格識別的模型。文本抽取中,有些字段是長文本。比如違約條款,人在找的時候往往是通過前后文找到抽取的開始和結(jié)束,而短字段則更關(guān)注抽取本身以及上下文的內(nèi)容。通過對每個步驟的復雜度進行分析,可以進一步拆解為下面結(jié)構(gòu)。
這就是文檔抽取常見的模型,但在實際使用中,根據(jù)具體數(shù)據(jù)情況以及分析字段的特點,可能還會再進行拆解。比如某些字段可能是在固定的某些章節(jié)或者段落中,用全局的文本進行訓練和預測有很大的干擾,那我們就可以再增加一個字段章節(jié)預測的模型,定位該字段所在章節(jié)。再比如租房合同抽取的字段的文本是比較簡單的選擇性文本,對于模型來說也有一定困難。在銷售合同文本中常常出現(xiàn):
如果需要退貨,采用B進行退貨退款:
- 不能退貨
- 可以退貨,收取20%賠償金
- 可以退貨,收取50%賠償金
這樣的文本則需要拆成2個模型,一個是抽取選擇項的模型,另一個是抽取選擇列表的模型。
“人工”模型選擇與優(yōu)化
模型選擇也是需要“人工”經(jīng)驗的,需要結(jié)合標注數(shù)據(jù)規(guī)模、數(shù)據(jù)特點、模型難度等進行選擇和處理。比如前面提到的章節(jié)預測的模型,如果章節(jié)標題特征比較明顯,則可以直接通過關(guān)鍵詞或者機器學習模型來進行分類處理,如果寫法不太規(guī)范,需要通過章節(jié)標題和章節(jié)內(nèi)容進行判斷,則可能考慮基于bert的深度學習算法。就我們達觀的經(jīng)驗而言,不同模型,如果使用完全相同的數(shù)據(jù),調(diào)優(yōu)后效果差距在5%以內(nèi),如果場景能比較好的使用上預訓練模型,比如bert,那效果能提升10%-15%。
選定模型之后,也可以通過增加一些特征從而進一步降低模型的難度,提高準確度。在垂直領(lǐng)域文檔處理上,業(yè)務(wù)詞典是常用的方法。業(yè)務(wù)詞典包括了專有名詞,也包括了字段的重要關(guān)鍵信息的特征。比如我們要抽取合同的乙方,對于公司采購而言,很多都是有供應商庫的,或者說可以獲得之前與他們簽合同的乙方的名稱。這個名稱構(gòu)成的詞典可能不全,所以不能只靠這個來匹配,但將這個“乙方專有名詞”輸入模型作為參考特征,是非常有用的。字段的重要關(guān)鍵信息的特征,指的是抽取的這個字段非常關(guān)鍵的上下文。比如抽取“甲方”這個字段,雖然話術(shù)可以有多種,比如甲方是xxx,甲方:xxx,甲方是本次的承辦單位xxxx等等,但基本都會帶“甲方”幾個關(guān)鍵字,所以如果把這些專有名詞也加入模型,準確度往往會有不小的提升。下面這個是重要詞(專有名詞或者業(yè)務(wù)詞)使用的例子。
假設(shè)“委員”和“委員會”是重要詞。需要對“美國聯(lián)邦通信委員會最近正式批準蘋果展開5G通信試驗”的每個字生成詞向量。這里的方法是通過2-gram,3-gram,4-gram和5-gram對每個字進行編碼,編成8個位,每種gram各2個位表示上文是否是重要詞和下文是否是重要詞。以“委”字為例編碼方式為:
- 2-gram,就是“信委”和“委員”,“信委” 不是核心詞,而“委員”是核心詞,所以編碼為“01”
- 3-gram,就是“通信委”和“委員會”,“通信委” 不是核心詞,而“委員會”是核心詞,所以編碼為“01”
- 4-gram,就是“邦通信委”和“委員會最”都不是核心詞,所以編碼為“00”
- 5-gram,就是“聯(lián)邦通信委”和“委員會最近”都不是核心詞,所以編碼為“00”
其他行業(yè)知識也可以用類似的方式生成字向量。把所有的行業(yè)向量和原始的字向量進行拼接,作為模型的輸入,這樣模型就能直接獲得行業(yè)經(jīng)驗,從而有更好的效果。
“人工”構(gòu)建知識圖譜
有些文本問題有很強的業(yè)務(wù)性,難以進行拆解,或者業(yè)務(wù)邏輯太復雜,很難讓機器學習到對應的知識。清華大學人工智能研究院院長張鈸院士在一次演講中提到“人的智能沒法通過單純的大數(shù)據(jù)學習把它學出來,那怎么辦?很簡單,加上知識,讓它有推理的能力,做決策的能力,這樣就能解決突發(fā)事件?!?strong>達觀在落地實踐中就是通過知識圖譜來解決這種復雜的問題。
知識圖譜的概念由 Google 在 2012 年正式提出,是一種語義網(wǎng)絡(luò)知識庫,將現(xiàn)有知識的以結(jié)構(gòu)化多關(guān)系圖(Multi-Relational Graph)的形式進行儲存、使用、展示形成。通過將多個實體關(guān)系三元組進行融合,形成包含多個不同的實體節(jié)點和多種類別的關(guān)系邊的多關(guān)系圖,即知識圖譜。知識圖譜落地也有很多挑戰(zhàn),構(gòu)建和維護知識圖譜的工作量是非常大的,很多項目因為構(gòu)建過程太過復雜而最終失敗。需要合理設(shè)計和運用知識圖譜,也需要“人工”經(jīng)驗。達觀通過知識圖譜輔助智能制造有很多成功的落地案例,下面結(jié)合實際應用場景,談下里面的一些經(jīng)驗。
生產(chǎn)制造過程中,有很多時候會遇到一些故障,比如手機發(fā)熱,螺絲擰不上等問題,不快速解決會影響生產(chǎn)流程。之前遇到這類問題只能通過咨詢經(jīng)驗豐富的“專家”,但總會存在專家找不到或者專家不一定有空的情況。我們希望通過NLP和知識圖譜技術(shù)可以解決這個問題。
達觀通過對里面的數(shù)據(jù)進行研究發(fā)現(xiàn),要找到這些問題的答案經(jīng)常要涉及好多文件,比如產(chǎn)品說明書,故障手冊等。有些問題容易獲得答案,但有些問題可能需要通過一些復雜的推理才能獲得答案,甚至不一定能找到答案。面對這個問題,我們設(shè)計了制造業(yè)失效圖譜。
為了解決專家錄入進行構(gòu)建的成本過高的問題,一方面我們設(shè)計的失效圖譜schema只和失效本身相關(guān),其他生成過程中的知識并不納入產(chǎn)品范圍之類,從而減少生成圖譜的工作量。另一方面,我們在圖譜構(gòu)建的時候,以人工結(jié)合智能。從相關(guān)的文檔,比如產(chǎn)品說明書,故障維修手冊,失效分析文檔等內(nèi)容中提取相關(guān)屬性數(shù)據(jù),經(jīng)過人工審核,再錄入到圖譜中。這種人機結(jié)合的方式生成圖譜相比于純?nèi)斯ど蓤D譜可以大幅減少工作量。圖譜數(shù)據(jù)的抽取主要采用基于pipeline抽取和聯(lián)合抽取的方法。
pipeline抽取,是用NER技術(shù)先抽取出實體和屬性后,再通過分類方法對實體兩兩進行分類判斷。這種方法的優(yōu)點是靈活性高,不同類型的實體可以用不同的模型進行抽取,關(guān)系抽取的分類算法也可以結(jié)合實際數(shù)據(jù)進行優(yōu)化和調(diào)整,缺點在于可能產(chǎn)生錯誤傳播,實體錯誤后面的關(guān)系肯定是錯誤的,以及忽略了實體屬性抽取和關(guān)系抽取內(nèi)部的可能聯(lián)系。
基于聯(lián)合抽取的方法是同時抽取實體、屬性、關(guān)系。針對實體抽取出的實體對,在當前句子對應的依存句法樹中找到能夠覆蓋該實體對的最小依存句法樹, 并基于 TreeLSTM 生成該子樹對應的向量表示,最后,根據(jù)子樹根節(jié)點對應的 TreeLSTM 向量進行關(guān)系分類。
一些知識可以通過抽取已有的文檔,但有些文檔缺失或者抽取難度很高的,則由專家來進行人工錄入,從而構(gòu)造了一個針對失效的知識圖譜。有了這個圖譜,就形成了計算機的知識。
失效圖譜例
基于圖譜賦予的知識,企業(yè)可以使用基于知識圖譜的問答(KBQA)來解決生產(chǎn)中實際碰到的問題,我們叫“歸因分析”?;趫D譜的問答需要能理解各種query的真實意圖,尤其是query可能輸錯,可能表述不規(guī)范,需要還能對應到圖譜得到正確的答案。這里面也需要對問題進行拆解,分解成一個個可以解決的模型。
KBQA處理流程
一般來說,KBQA分為數(shù)據(jù)預處理,問句分析,知識檢索,答案生成4個階段。
- 數(shù)據(jù)預處理,指的是query進行基礎(chǔ)的NLP處理,包括了分詞,格式轉(zhuǎn)換,歸一化,糾錯等過程。這里面和傳統(tǒng)搜索中的數(shù)據(jù)預處理比較不同的是,糾錯往往可以結(jié)合圖譜里面的各種名稱進行糾錯,并且可以保留多個糾錯結(jié)果,在后面的過程中再結(jié)合其他信息判斷是否需要糾錯,或糾錯成哪個結(jié)果。
- 問句分析,核心是要對query進行意圖識別,并且進行實體鏈接。意圖識別指用戶的query是關(guān)于什么的,比如是問解決辦法還是問原因。實體鏈接就是將問句文本的某些字符串映射到知識庫中對應的實體上。實體鏈接是問答系統(tǒng)的核心問題之一,因為實體鏈接如果出錯,后面的結(jié)果會非常不相關(guān)。這里面的難點在于用戶query的名稱和圖譜中實體的名稱并不是完全一致。所以我們也會加上模糊搜索以及同義詞等方式來解決這個問題。
- 知識檢索,需要從圖譜中選出符合該query相關(guān)的子圖,并且對其排序。由于問題可能需要圖譜通過多跳獲得答案,所以這個步驟里面返回的實體節(jié)點可能有多個。
- 答案生成,一方面是根據(jù)返回的結(jié)果找出最符合的一個,并且根據(jù)問句以及圖譜的信息,通過NLG的技術(shù)生成可能的文字答案。
”人工”進行場景選擇和產(chǎn)品形態(tài)設(shè)計
針對人工智能產(chǎn)品或解決方案,一般大家都在討論技術(shù)如何提升,效果如何優(yōu)化。以達觀在過去幾年落地的很多AI項目來說,場景選擇和產(chǎn)品形態(tài)的設(shè)計其實是落地非常關(guān)鍵的環(huán)節(jié)。從落地的角度,本質(zhì)需求是希望可以更快地高質(zhì)量完成預計的工作,并不是需要一個多少準確率的模型。而且這里的高質(zhì)量,在辦公文檔處理上的落地需求往往是100%準確。而目前的算法基本都不能達到100%準確,而且算法本身并不知道錯在哪里,這也是AI落地碰到的最大挑戰(zhàn)。因為當需要所有數(shù)據(jù)進行復核,“快速”這個需求就會大打折扣。如何“快速”審核就是需要在場景選擇以及產(chǎn)品形態(tài)上做很多工作。
01比對數(shù)據(jù)
用第三方數(shù)據(jù)或者有規(guī)則進行校驗,就能快速發(fā)現(xiàn)AI錯誤之處。比如電子合同和圖片合同進行文檔比對的場景,ocr的錯誤通過比對,可以快速的找到出現(xiàn)ocr錯誤的地方,人工可以快速進行查看。
文檔比對產(chǎn)品kh
02業(yè)務(wù)關(guān)系
文檔中識別的元素有些是有業(yè)務(wù)關(guān)系的,可以通過字段的關(guān)系來驗證識別是否正確。比如下圖總和的值應該是上面列表中數(shù)值計算后的結(jié)果。如果識別出來的結(jié)果總和公式不正確,那很可能是中間哪個元素識別出現(xiàn)了問題,如果識別出來的結(jié)果總和公式正確,那基本識別本身也是正確的。
財務(wù)文檔中的勾稽關(guān)系
03高效審核
人工審核過程的產(chǎn)品交互是非常重要的,需要對比較耗費時間的環(huán)節(jié)結(jié)合具體業(yè)務(wù)場景的審核過程進行合理交互設(shè)計。審核過程主要是“找到”和“修訂”兩個動作,達觀通過對抽取結(jié)果進行高亮,點擊字段跳轉(zhuǎn)等功能幫助審核人員快速“找到”抽取結(jié)果以及上下文,通過劃選和快捷鍵等功能加速人工“修訂”的時間。
人工審核產(chǎn)品交互
人工智能落地是一個挺有挑戰(zhàn)性的工作,既需要攻克技術(shù)難度,不斷提升算法精度,也需要了解業(yè)務(wù),了解場景,才能選擇合適的場景,構(gòu)建合理的算法流程,設(shè)計方便的產(chǎn)品交互,把這些“人工”的價值發(fā)揮出來,以人機協(xié)同的方式促進算力和模型的提高,才能真正實現(xiàn)“人工智能”。