[oneAPI] BERT

[oneAPI] BERT

  • BERT
  • 訓練過程
    • Masked Language Model(MLM)
    • Next Sentence Prediction(NSP)
    • 微調
  • 總結
  • 基于oneAPI代碼

比賽:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517
Intel? DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/

BERT

BERT全稱是Bidirectional Encoder Representations from Transformers,是google最新提出的NLP預訓練方法,在大型文本語料庫(如維基百科)上訓練通用的“語言理解”模型,然后將該模型用于我們關心的下游NLP任務(如分類、閱讀理解)。

BERT優于以前的方法,因為它是用于預訓練NLP的第一個無監督,深度雙向系統,從名字我們能看出該模型兩個核心特質:依賴于Transformer以及雙向。它直接顛覆了人們對Pretrained model的理解。盡管Bert模型有多得駭人聽聞的參數,但是我們可以直接借助遷移學習的想法使用已經預訓練好的模型參數,并根據自己的實際任務進行微調(fine-tuning)。論文的結果表明,與單向語言模型相比,雙向訓練的語言模型可以把握更深的語言上下文信息。

BERT 的思想其實很大程度上來源于 CBOW 模型,如果從準確率上說改進的話,BERT 利用更深的模型,以及海量的語料,得到的 embedding 表示,來做下游任務時的準確率是要比 word2vec 高不少的。實際上,這也離不開模型的“加碼”以及數據的“巨大加碼”。再從方法的意義角度來說,BERT 的重要意義在于給大量的 NLP 任務提供了一個泛化能力很強的預訓練模型,而僅僅使用 word2vec 產生的詞向量表示,不僅能夠完成的任務比 BERT 少了很多,而且很多時候直接利用 word2vec 產生的詞向量表示給下游任務提供信息,下游任務的表現不一定會很好,甚至會比較差。

訓練過程

BERT 使用 Transformer,這是一種注意力機制,可以學習文本中單詞(或sub-word)之間的上下文關系。Transformer 包括兩個獨立的機制——一個讀取文本輸入的Encoder和一個為任務生成預測的Decoder。由于 BERT 的目標是生成語言模型,因此只需要Encoder。

與順序讀取文本輸入(從左到右/從右到左)的單向(directional)模型相反,Transformer 的Encoder一次讀取整個單詞序列。因此它被認為是雙向(bi-directional)的,盡管更準確地說它是非定向的(non- irectional)。這個特性允許模型根據單詞的所有上下文來學習單詞在上下文中的embedding。

在訓練語言模型時,首先要定義預測目標。許多模型預測序列中的下一個單詞, 例如“The child came home from ___”。這是一種從本質上限制上下文學習的單向方法。

為了克服這個問題,BERT是如何做預訓練的呢?有兩個任務:一是 Masked Language Model(MLM);二是 Next Sentence Prediction(NSP)。在訓練BERT的時候,這兩個任務是同時訓練的。所以,BERT的損失函數是把這兩個任務的損失函數加起來的,是一個多任務訓練

Masked Language Model(MLM)

為了解決只能利用單向信息的問題,BERT使用的是Mask語言模型而不是普通的語言模型。Mask語言模型有點類似與完形填空——給定一個句子,把其中某個詞遮擋起來,讓人猜測可能的詞。這里會隨機的Mask掉15%的詞,然后讓BERT來預測這些Mask的詞,通過調整模型的參數使得模型預測正確的概率盡可能大,這等價于交叉熵的損失函數。這樣的Transformer在編碼一個詞的時候必須參考上下文的信息。

但是這有一個問題:在Pretraining Mask LM時會出現特殊的Token [MASK],但是在后面的fine-tuning時卻不會出現,這會出現Mismatch的問題。因此BERT中,如果某個Token在被選中的15%個Token里,則按照下面的方式隨機的執行:

  • 80%的概率替換成[MASK],比如my dog is hairy → my dog is [MASK]
  • 10%的概率替換成隨機的一個詞,比如my dog is hairy → my dog is apple
  • 10%的概率替換成它本身,比如my dog is hairy → my dog is hairy

這樣做的好處是,BERT并不知道[MASK]替換的是哪一個詞,而且任何一個詞都有可能是被替換掉的,比如它看到的apple可能是被替換的詞。這樣強迫模型在編碼當前時刻的時候不能太依賴于當前的詞,而要考慮它的上下文,甚至更加上下文進行”糾錯”。比如上面的例子模型在編碼apple是根據上下文my dog is應該把apple(部分)編碼成hairy的語義而不是apple的語義。

Next Sentence Prediction(NSP)

Next Sentence Prediction是更關注于兩個句子之間的關系。與Masked Language Model任務相比,Next Sentence Prediction更簡單些。

在BERT訓練過程中,模型的輸入是一對句子<sentence1,sentence2>,并學習預測sentence2是否是原始文檔中的sentence1的后續句子。在訓練期間,50% 的輸入是一對連續句子,而另外 50% 的輸入是從語料庫中隨機選擇的不連續句子。

為了幫助模型區分訓練中的兩個句子是否是順序的,輸入在進入模型之前按以下方式處理:

  • 在第一個句子的開頭插入一個 [CLS] 標記,在每個句子的末尾插入一個 [SEP] 標記。
  • 詞語的embedding中加入表示句子 A 或句子 B 的句子embedding。
  • 加入類似Transformer中的Positional Embedding。
    在這里插入圖片描述

BERT的輸入部分是個線性序列,兩個句子通過分隔符 [SEP] 分割,最前面和最后增加兩個標識符號。每個單詞有三個embedding:位置信息position embedding,這是因為NLP中單詞順序是很重要的特征,需要在這里對位置信息進行編碼;單詞token embedding,這個就是我們之前一直提到的單詞embedding;第三個是句子segment embedding,因為前面提到訓練數據都是由兩個句子構成的,那么每個句子有個句子整體的embedding項對應給每個單詞。把單詞對應的三個embedding疊加,就形成了Bert的輸入。

BERT 模型通過對 MLM 任務和 NSP 任務進行聯合訓練,使模型輸出的每個字/詞的向量表示都能盡可能全面、準確地刻畫輸入文本(單句或語句對)的整體信息,為后續的微調任務提供更好的模型參數初始值。

微調

BERT 在下游任務中經過微小的改動(Fine-tuning),比如增加網絡層,就可以用于各種各樣的語言任務。

與 NSP 任務類似,通過在 [CLS] 標記的 Transformer 輸出頂部添加分類層,就可以完成諸如情感分析之類的分類任務。在問答任務(例如 SQuAD v1.1)中,會收到一個關于文本序列的問題,并需要在序列中標記答案。使用 BERT,可以通過學習標記答案開始和結束的兩個額外向量來訓練問答模型。在命名實體識別 (NER) 中,接收文本序列,并需要標記文本中出現的各種類型的實體(人、組織、日期等)。使用 BERT,可以通過將每個標記的輸出向量輸入到預測 NER 標簽的分類層來訓練 NER 模型。
在這里插入圖片描述

總結

從模型或者方法角度看,BERT借鑒了ELMo,GPT及CBOW,主要提出了 MLM 及 NSP 兩種訓練方法,但是這里NSP任務基本不影響大局,而MLM明顯借鑒了CBOW的思想。BERT是兩階段模型,第一階段雙向語言模型預訓練,第二階段采用具體任務Fine-tuning或者做特征集成。BERT最大的亮點在于效果好及普適性強,幾乎所有NLP任務都可以套用BERT這種兩階段解決思路,而且效果應該會有明顯提升。

本質上預訓練是通過設計好一個網絡結構來做語言模型任務,然后把大量甚至是無窮盡的無標注的自然語言文本利用起來,預訓練任務把大量語言學知識抽取出來編碼到網絡結構中,當手頭任務帶有標注信息的數據有限時,這些先驗的語言學特征當然會對手頭任務有極大的特征補充作用,因為當數據有限的時候,很多語言學現象是覆蓋不到的,泛化能力就弱,集成盡量通用的語言學知識自然會加強模型的泛化能力。如何引入先驗的語言學知識其實一直是NLP尤其是深度學習場景下的NLP的主要目標之一,不過一直沒有太好的解決辦法,而ELMo/GPT/BERT的這種兩階段模式看起來無疑是解決這個問題自然又簡潔的方法,這也是這些方法的主要價值所在。

基于oneAPI代碼

import intel_extension_for_pytorch as ipexoptimizer = torch.optim.AdamW(optimizer_grouped_parameters, lr=lr)#調用套件,改進模型的優化器
model, optimizer = ipex.optimize(model, optimizer=optimizer)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36827.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JVM 中的編譯器

在Java的世界里,JVM(Java Virtual Machine)扮演了重要的角色。JVM是一個虛擬機,是Java程序的運行環境,它能夠將Java字節碼文件解釋執行,使得Java程序可以跨平臺。在JVM內部,有一個重要的組件就是編譯器,它的作用就是將Java源代碼編譯成字節碼,讓JVM可以識別并執行。 …

redis集群和分片-Redis Cluster:分布式環境中的數據分片、主從復制和 Sentinel 哨兵

當涉及到 Redis 中的集群、分片、主從復制和 Sentinel 哨兵時&#xff0c;這些是構建分布式 Redis 環境中非常重要的概念和組件。下面詳細介紹這些概念以及它們在分布式環境中的作用。 Redis Cluster Redis Cluster 是 Redis 官方提供的分布式解決方案&#xff0c;用于管理和…

React源碼解析18(4)------ completeWork的工作流程【mount】

摘要 經過上一章&#xff0c;我們得到的FilberNode已經具有了child和return屬性。一顆Filber樹的結構已經展現出來了。 那我們最終是想在頁面渲染真實的DOM。所以我們現在要在completeWork里&#xff0c;構建出一顆離屏的DOM樹。 之前在說FilberNode的屬性時&#xff0c;我們…

zabbix案例--zabbix監控Tomcat

目錄 一、 部署tomcat 二、配置zabbix-java-gateway 三、配置zabbix-server 四、配置zabbix-web界面 一、 部署tomcat tar xf apache-tomcat-8.5.16.tar.gz -C /usr/local/ ln -sv /usr/local/apache-tomcat-8.5.16/ /usr/local/tomcat cd /usr/local/tomcat/bin開啟JMX…

Vscode 常用操作教程

一、語言換成中文 這是我們可以直接點擊左邊欄第四個圖標搜索插件 chinese ,也可以直接ctrlshiftp快捷鍵也會出來如圖所示圖標&#xff0c;出來chinese 插件之后選擇安裝install,安裝完成之后重新ctrlshiftp會出現如圖所示頁面 找到我的鼠標在的地方對應的中文&#xff0c;此時…

win10下如何安裝ffmpeg

安裝ffmpeg之前先安裝win10 綠色軟件管理軟件&#xff1a;scoop. Scoop的基本介紹 Scoop是一款適用于Windows平臺的命令行軟件&#xff08;包&#xff09;管理工具&#xff0c;這里是Github介紹頁。簡單來說&#xff0c;就是可以通過命令行工具&#xff08;PowerShell、CMD等…

VVIC-商品詳情

一、接口參數說明&#xff1a; item_get-根據ID取商品詳情&#xff0c;點擊更多API調試&#xff0c;請移步注冊API賬號點擊獲取測試key和secret 公共參數 請求地址: https://api-gw.onebound.cn/vvic/item_get 名稱類型必須描述keyString是調用key&#xff08;點擊獲取測試k…

第一百一十三回 dart中的getter/setter方法

文章目錄 概念介紹使用方法示例代碼使用擴展 我們在上一章回中介紹了 flutter_screenutil包相關的內容&#xff0c;本章回中將介紹 dart中的setter/getter方法.閑話休提&#xff0c;讓我們一起Talk Flutter吧。 概念介紹 我們在這里介紹的setter/getter方法屬于編程語言中的…

【MongoDB】索引

目錄 一、概述 二、索引的類型 1、單字段索引 2、復合索引 3、其他索引 三、索引的管理 1、索引的創建 2、索引的查看 3、索引的刪除 四、索引的使用 1、執行計劃 2、涵蓋的查詢 一、概述 索引支持在MongoDB中高效地執行查詢。如果沒有索引&#xff0c;MongoDB必須…

Kubernetes pod調度約束[親和性 污點] 生命階段 排障手段

調度約束 Kubernetes 是通過 List-Watch 的機制進行每個組件的協作&#xff0c;保持數據同步的&#xff0c;每個組件之間的設計實現了解耦。 用戶是通過 kubectl 根據配置文件&#xff0c;向 APIServer 發送命令&#xff0c;在 Node 節點上面建立 Pod 和 Container。 APIServer…

springcloud3 hystrix實現服務降級,熔斷,限流以及案例配置

一 hystrix的作用 1.1 降級&#xff0c;熔斷&#xff0c;限流 1.服務降級&#xff1a; A方案出現問題&#xff0c;切換到兜底方案B&#xff1b; 2.服務熔斷&#xff1a;觸發規則&#xff0c;出現斷電限閘&#xff0c;服務降級 3.服務限流&#xff1a;限制請求數量。 二 案例…

ES6學習-Symbol

Symbol 數據類型Symbol&#xff0c;表示獨一無二的值。 對象的屬性名可有兩種類型&#xff0c;一種是原來的字符串&#xff0c;另一種是新增的 Symbol 類型 可以保證不與其他屬性名產生沖突。 let s1 Symbol() let s2 Symbol() console.log(s1, s2, s1 s2)//Symbol() Sy…

liunx exercise

云計算作業 Linux DAY1 1、創建alan1用戶&#xff0c;并使用root用戶切換用戶至alan1用戶。&#xff08;兩種方式切換【加-與不加-】&#xff0c;并總結其效果&#xff09; [rootlocalhost ~]# useradd alan1 [rootlocalhost ~]# su alan1 [alan1localhost root]$ pwd /roo…

FPGA學習——驅動WS2812光源并進行動態顯示

文章目錄 一、WS2812手冊分析1.1 WS2812燈源特性及概述1.2 手冊重點內容分析1.2.1 產品概述1.2.2 碼型及24bit數據設計 二、系統設計2.1 模塊設計2.2 模塊分析2.2.1 驅動模塊2.2.1 數據控制模塊 三、IP核設置及項目源碼3.1 MIF文件設計3.2 ROM IP核調用3.3 FIFO IP核調用3.4 項…

源碼斷點分析Spring的占位符(Placeholder)是怎么工作的

項目中經常需要使用到占位符來滿足多環境不同配置信息的需求&#xff0c;比如&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://www.springframe…

InnoDB文件物理結構解析7 - FIL_PAGE_SDI

在數據庫系統中&#xff0c;通常包含數據字典(data dictionary)用于記錄數據庫對象的元數據(表&#xff0c;分區&#xff0c;觸發器&#xff0c;存儲過程&#xff0c;函數的定義)&#xff0c;我們可以通過information_schema(i_s)數據庫下的視圖(view)或者SHOW語句來訪問數據字…

【愛書不愛輸的程序猿】CPOLAR+HFS,低成本搭建NAS

歡迎來到愛書不愛輸的程序猿的博客, 本博客致力于知識分享&#xff0c;與更多的人進行學習交流 通過HFS低成本搭建NAS&#xff0c;并內網穿透實現公網訪問 - cpolar 極點云 前言1.下載安裝cpolar1.1 設置HFS訪客1.2 虛擬文件系統 2. 使用cpolar建立一條內網穿透數據隧道2.1 保留…

(三) 搞定SOME/IP通信之CommonAPI庫

本章主要介紹在SOME/IP通信過程中的另外一個IPC通信利劍,CommonAPI庫,文章將從如下幾個角度讓讀者了解什么是CommonAPI, 以及庫在實際工作中的作用 SOME/IP通信之CommonAPI CommonAPI庫是什么CommonAPI庫的編譯寫個Demo實戰一下CommonAPI庫是什么 CommonAPI是GENIVI組織開發…

推出 Elasticsearch 查詢語言 (ES|QL)

作者&#xff1a;Costin Leau 我很高興地宣布&#xff0c;經過大約一年的開發&#xff0c;Elasticsearch 查詢語言 (ES|QL) 已準備好與世界共享&#xff0c;并已登陸 Elasticsearch 存儲庫。 ES|QL 是 Elasticsearch 原生的強大聲明性語言&#xff0c;專為可組合性、表現力和速…

Django-配置郵箱功能(一):使用django自帶的發送郵件功能

一、獲取郵箱授權碼 以QQ郵箱為例子&#xff1a; 1、進入到設置&#xff0c;找到賬戶 2、開啟POP3等服務&#xff0c;點擊管理服務 3、進入管理服務&#xff0c;生成授權碼 4、按照要求發送短信就可以了 5、將授權碼復制保存&#xff0c;離開界面就看不到了 二、django項目中…