中文機器閱讀理解

Chinese Machine Reading Comprehension

適用針對文章提出問題並從中抽取出答案 (用文章中一段原文來回答問題)

那些自然語言處理 (Natural Language Processing, NLP) 踩的坑

中文文本糾錯中文文本分類中文文本相似度中文實體識別
https://github.com/Deep-Learning-101

https://huggingface.co/DeepLearning101

這是應用閱讀理解於問答系統,就是傳說中的 Bert,並搭配另外自行標註數據,fine-tuning 前的結果;只用CPU,速度還可以 (2023/03)

投入約120天,早期想上線需要不少計算資源 (沒有昂貴的GPU想上線簡直是難如登天,好險時代在進步,現在CPU就能搞定)。記得我2018從老闆口中第一次聽到新項目是機器閱讀理解時,一頭霧水不知道是在幹麼,Google後突然發現這還真是它X的超級難的東西,而當時落地場景是要解決機器人在博物館或者展場的Q&A,不想再預先建一堆關鍵字與正規表示式來幫相似度和分類做前處理。

但機器閱讀理解坑真的不小,首先當然是數據,公開數據有SQuAD 1.0和2.0,但這是英文,你想用在中文 ? 你可以自己試試啦,再來有了個中文的CMRC,但用得是對岸用語跟簡體中文,而且數據格式不太一樣;後來台達電放出了DRCD還有科技部辦的科技大擂台,依然有格式不同的問題,數據量真的不太夠,所以想要落地你真的得要自己標註。

為了解決像是多文章還有問非文章內問題,還有公開數據要嘛英文不然就是簡體中文或對岸用語,然後本地化用語的數據實在不足的狀況,小夥伴們真的很給力,我們也用機器翻譯SQuAD 1.0和2.0還有自己手工爬維基百科跟開發了數據標註系統自己標註 ! 不得不說小夥伴們真的是投入超多精神在機器閱讀理解,更在Deep Learning 101做了分享。

什麼是機器閱讀理解?跟自然語言處理有什麼關係?  機器閱讀理解 (機器之心)  一文讀懂機器閱讀理解 (朱晨光) 機器閱讀理解與問答聊天機器人

機器閱讀理解綜述(一)  機器閱讀理解綜述(二)  機器閱讀理解綜述(三)  機器閱讀理解探索與實踐

PPT @ HD @ No. 41 @ Deep Learning 101 Marchine Reading Comprehsesion 2020/05/29 

https://github.com/huggingface/transformers 

The Stanford Question Answering Dataset (SQuAD)     中文 GLUE

BiDAF在embedding部分也同時引入word-embedding與char-embedding兩種embedding方法,讓模型的輸入包含更多資訊。而其最大的特點,為在Interaction層中引入了雙向attention機制,計算Query2Context和Context2Query兩種query-aware表示,再利用雙向LSTM對兩種query-aware進行整合,可更加有效的得出文章與問題之間的關係。最後預測答案的方式,則與Match-LSTM同樣使用boundary model的方法。

RuminatingReader算是加強版的BiDAF模型。他將BiDAF的架構中Interaction的輸出經過Highway Network的處理,將資訊加入至原文與原問題中。之後把帶有資訊的文章與問題再次輸入Interaction層計算,得出新的query-aware表示,其餘部分則與BiDAF基本上相同。藉由二次的重複計算attention,將原本已計算出的文章與問題相互關係做再一次地確認與強化,能在文章中更加準確地預測答案位置。

Match-LSTM架構較為簡單,用單層的LSTM對embedding過的文字做雙向編碼,再引入attention機制,計算出每個詞的query-aware表示,最後導入Answer層計算答案。計算答案的方式分為sequence model或boundary model兩種方式,但在最後實驗證明了簡化的boundary model比sequence model有著更好的效果,所以之後也預設以boundary model作為預測答案的方式。

在QANet的架構中,便捨棄了傳統RNN的編碼方式,而使用self-attention的機制。為此建立了一名為encoder block的子區塊,內含多個卷積層、self-attention與FeedForward layer。在文章與問題經過embedding後便利用encoder block對其進行編碼,之後引用與BiDAF相同的Context-Query attention計算文章與問題之間的相互關係。最後在接上多個encoder block,便進入output layer計算答案位置。QANet的結果證實,以self-attention取代RNN,並增加層數的方式能得出更好的結果。

在Transformer之中存在一個問題,就是在計算attention時,能擷取的上下文長度為固定的,導致超過長度之外的資訊可能就無法獲得。所以提出Transformer-XL架構,特色為將計算的hidden state緩存起來,在之後計算新片段時,能夠將hidden state重複使用,擴展獲取的前文資訊。但與此同時又產生新的問題,在hidden state的位置資訊原本是採用絕對位置,但引入上述機制後會導致性能損失。對此,Transformer-XL的解決方法為使用相對位置編碼,相對於絕對位置更加直觀,且能解決上述性能耗損的問題。

同樣建立在seq2seq的基礎上,但在過程中捨棄RNN,使用多層的attention替代。整個架構可分成encoder與decoder,兩者皆由多個block組成。encoder的block包含一個Multi-Head Attention和一個Feed Forward Network,而decoder的block則是由兩個Multi-Head Attention和一個Feed Forward Network組成。其中每個Multi-Head Attention和Feed Forward Network都採取類似 ResNet 的方法,後面加上一層 Add & Norm。由於Transformer捨棄了舊有的RNN與attention組合,改為全attention的構成,因此缺少了位置資訊。也就是說(a, b, c, d)與(d, c, b, a)這兩種組合在Transformer中視沒有區別的。所以在input時,Transformer會多出一個名為positional embedding的輸入,保留各個文字的位置資訊。

中文機器閱讀理解標註工具 (開發者:Alice Hong, Nat Lee)