引言

了解知識圖譜的基本概念,也做過一些demo的實踐,畢竟是做問答方向的,所以就比較關注基於知識圖譜的問答。其實構建知識圖譜的核心在於命名實體識別關係抽取,圍繞這兩個方面也有很多細緻的工作,比如如何解決實體的歧義,進行實體消歧;如何進行多關係的抽取等。從最近各大公司舉行的比賽,我們也可以看出來,今年的主要工作就在這上面,這也是技術落地的一個重要標誌。最近也在搗鼓BERT,想著就將基於KB的QA流程擼一遍,於是就有了這個demo。

項目地址:

WenRichard/KBQA-BERT

數據集介紹[1]

NLPCC全稱自然語言處理與中文計算會議(The Conference on Natural Language Processing and Chinese Computing),它是由中國計算機學會(CCF)主辦的 CCF 中文信息技術專業委員會年度學術會議,專註於自然語言處理及中文計算領域的學術和應用創新。

此次使用的數據集來自NLPCC ICCPOL 2016 KBQA 任務集,其包含 14 609 個問答對的訓練集和包含 9 870 個問答對的測試集。 並提供一個知識庫,包含 6 502 738 個實體、 587 875 個屬性以及 43 063 796 個 三元組。知識庫文件中每行存儲一個事實( fact) ,即三元組 ( 實體、屬性、屬性值) 。各文件統計如下:

訓練集:14609
開發集:9870
知識庫:43063796

知識庫樣例如下所示:

"希望之星"英語風采大賽|||中文名|||「希望之星」英語風采大賽
"希望之星"英語風采大賽|||主辦方|||中央電視台科教節目中心
"希望之星"英語風采大賽|||別名|||"希望之星"英語風采大賽
"希望之星"英語風采大賽|||外文名|||Star of Outlook English Talent Competition
"希望之星"英語風采大賽|||開始時間|||1998
"希望之星"英語風采大賽|||比賽形式|||全國選拔
"希望之星"英語風采大賽|||節目類型|||英語比賽

原數據中本只有問答對(question-answer),並無標註三元組(triple),本人所用問答對數據來自該比賽第一名的預處理github.com/huangxiangzh。構造Triple的方法為從知識庫中反向查找答案,根據問題過濾實體,最終篩選得到,也會存在少量噪音數據。該Triple之後用於構建實體識別和屬性選擇等任務的數據集。

問答對樣例如下所示:

<question id=1> 《機械設計基礎》這本書的作者是誰?
<triple id=1> 機械設計基礎 ||| 作者 ||| 楊可楨,程光蘊,李仲生
<answer id=1> 楊可楨,程光蘊,李仲生
==================================================
<question id=2> 《高等數學》是哪個出版社出版的?
<triple id=2> 高等數學 ||| 出版社 ||| 武漢大學出版社
<answer id=2> 武漢大學出版社
==================================================
<question id=3> 《線性代數》這本書的出版時間是什麼?
<triple id=3> 線性代數 ||| 出版時間 ||| 2013-12-30
<answer id=3> 2013-12-30
==================================================

技術方案[2]

基於知識圖譜的自動問答拆分為2 個主要步驟:命名實體識別步驟屬性映射步驟。其中,實體識別步驟的目的是找到問句中詢問的實體名稱,而屬性映射步驟的目的在於找到問句中詢問的相關屬性。

  • 命名實體識別步驟,採用BERT+BiLSTM+CRF方法(另外加上一些規則映射,可以提高覆蓋度)
  • 屬性映射步驟,轉換成文本相似度問題,採用BERT作二分類訓練模型

技術細節

  • 命名實體識別

構造NER的數據集,需要根據三元組-Enitity 反向標註問題,給數據集中的Question 打標籤。我們這裡採用BIO的標註方式,因為識別人名,地名,機構名的任務不是主要的,我們只要識別出實體就可以了,因此,我們用B-LOC, I-LOC代替其他的標註類型。

Figure1. BIO標註圖

  • 屬性映射

構造測試集的整體關係集合,提取+去重,獲得 4373 個關係 RelationList;

一個 sample 由「問題+關係+Label」構成,原始數據中的關係值置為 1;

從 RelationList 中隨機抽取五個屬性作為 Negative Samples;

Figure2. question-triple相似度訓練集
  • 模型總體架構

1、 實體檢索:輸入問題,ner得出實體集合,在資料庫中檢索出與輸入實體相關的所有三元組

2、 屬性映射:bert分類/文本相似度

+ 非語義匹配:如果所得三元組的關係(attribute)屬性是輸入問題字元串的子集(相當於字元串匹配),將所得三元組的答案(answer)屬性與正確答案匹配,correct +1

+ 語義匹配:利用bert計算輸入問題(input question)與所得三元組的關係(attribute)屬性的相似度,將最相似的三元組的答案作為答案,並與正確的答案進行匹配,correct +1

目前這2個是一起做的,更注重的是測試性能,所以並沒有像Retrieval QA那樣做召回+排序,其實修改一下很簡單,也就那回事。

總結

  • 目前不足
  1. 在命名實體識別的時候,進行eval,最後的結果是nan,如下:

INFO:tensorflow:evaluation_loop marked as finished
INFO:tensorflow:***** Eval results *****
INFO:tensorflow: eval_f = nan
INFO:tensorflow: eval_precision = nan
INFO:tensorflow: eval_recall = nan
INFO:tensorflow: global_step = 1

當然,predict是沒有什麼問題的。

  • 反思
  1. 其實用question和attribute進行一個相似度計算做排序我還是有點疑惑的,感覺更像是個強行匹配,question的句子明顯更長,語義明顯比attribute更豐富,單拿attribute進行匹配有種斷章取義的感覺,所以不提倡。
  2. 在用BERT online做命名實體識別的時候,速度有點慢,如何提高線上速度是個問題。
Figure3. NER online測試

Figure2. question-triple相似度訓練集

目前bert之跑了一個epoch,就是test下而已,如果多跑幾個epoch,效果會更好!

3. 目前的測試效果很一般,可能是訓練的時間比較短有關.

Figure4. KB_QA outline測試

Results:

total: 9870, recall: 9088, correct:7698,

accuracy: 84.70510563380282%, ambiguity (屬性匹配正確但是答案不正確)681

4. 這個demo並不是真正意義上的KB_QA,我還是把它看成Retrieval QA,但是第一步的非語義匹配是用資料庫做的,相比於TF-idf,BM25之類的,有何優劣呢?希望實驗過的同學能告知一下!

  • TO DO
  1. 完成KB_QA的online模式
  2. 完成排序+召回模式

Reference:

  1. 基於知識圖譜的問答系統入門之—NLPCC2016KBQA數據集
  2. 基於BERT的知識庫問答實戰

暫時就想到這些,後續如果被蘋果砸了一下腦袋就更新一下,最後,嗯,如果覺得對您有幫助就點個贊或者給個star鼓勵一下吧!


推薦閱讀:
相关文章