自然語言處理:bert 用於問答系統

原文:Question Answering with a Fine-Tuned BERT

本文介紹了bert用於問答系統的原理,還有實踐的代碼,可以參考下,以下是原文的翻譯:


BERT 在問答系統中的表現達到人類水平意味着什麼?BERT 是否有史以來最好的搜索引擎,可以找到任何我們拋出的問題的答案?

在本文第一部分,我會解釋 BERT 用於 QA 的真正含義,並展示一些細節.

第二部分包含了示例代碼,我們下載一個已經在問答系統中微調好的模型,在我們的文本中測試

在文本分類中,你會想在自己的數據集對BERT進行微調。但是對問答系統,可能會覺得使用已經在SQuAD benchmark微調好的模型會有性能的下降。本篇我們會嘗試一下,並展示即使不是SQuAD 數據集,bert一樣表現得很好.

相關鏈接

內容

Part 1: BERT 如何用於問答系統

The SQuAD v1.1 Benchmark

當某人提及 “問答系統” 作爲 BERT 的應用,他們實際指的是將 BERT 用於Stanford 問答數據集 (SQuAD).

SQuAD benchmark 給出的問答任務可能與你想象的有點不同。指定一個問題,和一個包含回答的文本片段,BERT 需要將相應的答案文本的範圍高亮出來。

SQuAD 主頁上有個不錯的工具,可以展示此數據集的問題與相應文本,並顯示最佳模型的預測結果

例如 interesting examples 有關於 超級碗 50 的相關例子.

BERT 輸入格式

要將問答任務交給 BERT,我們將問題與相關文本打包作爲輸入

兩份文本用特殊符號 [SEP] 間隔.

BERT 用 “Segment Embeddings” 來講問題與相關文本區分開(問題作爲segment1,文本作爲segment2)。這是bert學習的兩個embedding (segments “A” and “B”), 並加入到token embeddings 再交給輸入層(bert 有token 、segment、position embedding).

開始結束詞分類器

BERT 需要高亮包含問題回答的文本片段– 就是預測那個詞標誌回答的開始,那個詞標誌回答的結束。

對文本中每個詞,我們將它最終輸出的embedding 放入起始詞分類器. 起始詞分類器只有一套權重  (圖中藍色的矩形 “start” ) 作用於每個單詞.

在每個詞的輸出embeddings 與起始詞分類器權重點乘後,我們運用softmax 激活函數對所有詞生成一個概率。概率最高的詞作爲我們選擇的起始詞,作爲回答的開頭.

對於結束詞,重複這個過程(用結束詞分類器的權重,下圖的紅色end矩形表示)

 

Part 2: 示例代碼

這裏使用的是transformers 庫,有問答模塊 BertForQuestionAnswering 和分詞器模塊 BertTokenizer,還可以對開始結束詞的位置判斷可視化:

感興趣可以閱讀下 原文

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