從 Word2Vec 到 BERT:AI 不止是詞向量,更是語言理解

一、前言

在上篇文章中,我們介紹了Word2Vec以及它的作用,總的來說:

  • Word2Vec是我們理解NLP的第一站

  • Word2Vec將詞變成了“向量”—— 終于可以用機器理解詞語的相似度

  • 我們獲得了例如“國王 - 男人 + 女人 ≈ 女王” 的類比能力

  • 我們可以將Word2Vec這種算法能力,應用到各種創新場景,例如基于Graph的推薦系統,后續如果小伙伴有需要,可以一起深入交流。

但同時也指出了它的不足:

  • 一個詞=一個固定向量(靜態詞向量)

  • 上下文無感知:“蘋果”無論是手機還是水果,向量相同

  • 是詞的映射,不是對語言的理解

那如果讓我們來設計下一代的算法,什么最重要?

——我們需要“能讀懂句子”的模型。

接下來我們一步步實現,直至引出bert。

?二、Word2Vec是怎么工作的?

在上文,我們介紹到Word2Vec使用周圍詞預測中間詞來獲取詞向量能力,這個被稱為CBOW,同理也可以用中間詞預測周圍詞,這個稱為Skip-Gram。本質來講,Word2Vec是一個淺層神經網絡,結構如下:


from torch import nn
class Word2VecModel(nn.Module):def __init__(self, vocab_size, embedding_dim):"""vocab_size:詞總數embedding_dim:超參,詞對應的向量維度,例如64、128"""super().__init__()self.embed = nn.Embedding(num_embeddings=vocab_size, embedding_dim=embedding_dim)

最終可訓練部分是self.embed部分。

三、我們需要一個分詞器

在前文中,我們輸入的都是一個一個分好的詞,但是呢,有幾個問題:

  1. 怎么分詞的?
  2. 分詞的目的是什么?
  3. 中文怎么分詞?英文怎么分詞?其他語言怎么分詞?
  4. 分詞在對整句語義理解上的重要程度是怎樣的?

1. 怎么分詞的?

我們平時寫作時,不像英文每個單詞中間有空格,而是一個字一個字連著寫直至整句話完成。例如“今天你真漂亮”,我們希望分成?今天 你 真 漂亮

在中文分詞研究歷史中,有著比較漫長的過程。整體可認為是統計概率建模的過程,比如建立一個巨大的詞表,然后通過一堆的算法,例如隱馬爾克夫鏈,建立前詞和當前詞的轉移概率。蹭蹭蹭,我們獲得了一個分詞模型。哈哈,此處我們不做具體原理講解。如果需要,最近可著重看HMM和CRF,再往前推,有基于最長詞的分詞算法。總的來說,統計概率建模,就是獲取所有影響分詞結果的因素,對其進行建模以及學習其權重。例如針對CRF,本質是學習狀態轉移概率矩陣、發射概率矩陣,最終形成一個有向詞網,節點為詞,獲取最大概率那條路徑,就是分詞結果。

現在也有一堆基于神經網絡的分詞工具,整體都可認為是命名實體標注任務,如果有需要小伙伴,可以一起交流。

如果只是為了工程應用,可使用jieba、HanLP、LAC等。

2.?分詞的目的是什么?

我們為什么要分詞?不分詞行不行,直接一句/段話直接輸入給模型不就行了。這里牽扯到對語言建模輸入最小粒度問題,可以將“今天你真漂亮”切分成一個一個字,也可以切分成上面的結果,以這個結果作為網絡的輸入。

OOV(Out-of-Vocabulary)問題,這個小伙伴在體驗Word2Vec能力時可能已經發現,針對一些俚語,會發現這個詞不在Word2Vec表內。那就導致無法獲取這個詞的詞向量。

3. 中文怎么分詞?英文怎么分詞?其他語言怎么分詞?

有沒有一個統一算法,可以支持任意一種語言的分詞。有!這個就是大名鼎鼎Bert用到的WordPiece。

注意,如前面所說,分詞更偏向是中文領域一個特定的任務,而對于英文,可能就直接按照空格就完成了分詞任務。所以,請將分詞概念延伸至Tokenization概念,分的詞被稱為Token,分詞的動作稱之為Tokenizer。

WordPiece是一種將詞分解成更小單元的方法。

具體如何實現此處不涉及。以及現在也有其他tokenizer方法,例如BPE等。

4. 分詞在對整句語義理解上的重要程度是怎樣的?

嚴格意義上來講這里有提升空間,包括目前大模型所使用到的。為什么這么講,因為分詞作為最初輸入,其準確率影響后續的計算結果。“南京市長江大橋結婚了。”,這句話是不是沒有任何語義歧義,不像“白天鵝在湖中游”,“大學生活好”,“黑暗的夜總會迎來黎明”吧。

至此,模型的輸入我們搞定啦。

四、我們需要設計訓練任務

在Word2Vec的CBOW模型中,是用周圍詞預測中心詞。我們可以將這個條件延伸下:

  1. 預測中心詞這個事,我們將中心詞掩蓋掉這個事情稱為[MASK]。

  2. 為什么非要預測中心詞呢?我們完全可以隨機掩蓋掉一句話中某個詞。

例如輸入一句話“今天天氣真不錯”,經過上面tokenizer后,變成了“今天?天氣??不錯”,隨機掩蓋掉某個詞(例如真),變成了“今天?天氣?[MASK]?不錯”,那我們的目標是預測[MASK]部分的標簽是“真”,由此我們獲得了輸入與輸出。

五、我們需要一個強大的網絡

在Word2Vec中,我們的網絡結構只有一個nn.Embedding,即詞和向量的映射表,整個結構還太簡單。那我們再引入一個新的算法架構——Transformer。

有的小伙伴可能提前已經了解過一些深度學習算法,例如LSTM,那會問LSTM不能處理這種序列問題嗎?當然,完全可以,至此我們做到了,每個token都有一個上下文相關的向量表示。

到這里我們發明了Masked Language Model(MLM)。

當然bert的預訓練不止mask這一個任務,還有被稱為NSP(Next Sentence Prediction)任務,即給定兩句話A和B,讓模型判斷B是否是A的下一句。

當然這個任務在后面的研究(例如Roberta)中被證明此任務作用并不大,不過我們知道下就行了。

關于BERT更具體原理講解,有需要的話后面可一步步實現。

特點

Word2Vec

BERT

向量類型

靜態

動態(與上下文相關)

模型結構

淺層神經網絡

多層 Transformer

能否理解語境

預訓練目標

預測詞

Mask + NSP

六、BERT模型有什么用?

這是一個好問題,上面蹭蹭說到了一堆似乎和應用無關的東西,總而言之,BERT的出現:

  1. 我們獲得了一個通用的語義理解模型,基于這個模型,我們可以和更多現實應用建立起橋梁。
  2. 降低了算法訓練與應用難度,BERT作為一個預訓練模型,由于其本身已經獲取到通用語言場景下的語義理解能力,那么相關的NLP任務都更為容易做成。例如文本分類、情感分析、命名實體識別、搜索等。

七、如何應用?

Bert作為預訓練模型,其本身并不能做太多事情,例如MASK和NSP。我們一般會在Bert模型之后再接一些其他的Layer來做具體任務。下面我放幾個應用截圖,這些都是Bert可以做到的。如果有感興趣的我可以一步步實現哦。

與情分析

命名實體/情感分析?

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

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

相關文章

鏡像管理(2)Dockerfile總結

一、docker鏡像構建方法 commoit :使用 docker commit 意味著所有對鏡像的操作都是黑箱操作,生成的鏡像也被稱為黑 箱鏡像,換句話說,就是除了制作鏡像的人知道執行過什么命令、怎么生成的鏡像,別人根 本無從得知。而且,即使是這個制作鏡像的人,過一段時間后也無法記清具…

機器學習第十七講:PCA → 把100維數據壓縮成3D視圖仍保持主要特征

機器學習第十七講:PCA → 把100維數據壓縮成3D視圖仍保持主要特征 資料取自《零基礎學機器學習》。 查看總目錄:學習大綱 關于DeepSeek本地部署指南可以看下我之前寫的文章:DeepSeek R1本地與線上滿血版部署:超詳細手把手指南 主…

【Linux庖丁解牛】——進程等待!

1. 進程退出場景 進程退出一般有三種場景: 。代碼運行完畢,結果正確 。代碼運行完畢,結果錯誤【比如,我們要對某個文件進行寫入,但寫入的文件路徑出錯,代碼運行完畢,可是結果出錯】 。代碼異…

鴻蒙OSUniApp 制作簡潔高效的標簽云組件#三方框架 #Uniapp

UniApp 制作簡潔高效的標簽云組件 在移動端應用中,標簽云(Tag Cloud)是一種常見的UI組件,它以視覺化的方式展示關鍵詞或分類,幫助用戶快速瀏覽和選擇感興趣的內容。本文將詳細講解如何在UniApp框架中實現一個簡潔高效的…

ubuntu14.04/16.06 安裝vscode(實測可以用)

地址:https://code.visualstudio.com/updates/v1_38 選擇deb 這個版本還支持ubuntu14.04和16.06 sudo dpkg -i code_1.38.1-1568209190_amd64.deb sudo apt-get install -f安裝成功,正常使用

WebRTC技術EasyRTC音視頻實時通話驅動智能攝像頭邁向多場景應用

一、方案背景? 在物聯網蓬勃發展的當下,智能攝像頭廣泛應用于安防、家居、工業等領域。但傳統智能攝像頭存在視頻傳輸延遲高、設備兼容性差、網絡波動時傳輸不穩定等問題,難以滿足用戶對實時流暢交互視頻的需求。EasyRTC憑借低延遲、高可靠、跨平臺特性…

Java EE進階1:導讀

1.發展歷程 2.學習內容 前?的課程中,學習的是Java基礎,JavaEE主要學習Java的應用,也就是學習Java在企業中是如何應用的 Java更多場景是業務開發,更狹義點可以理解為web開發.所以咱們的學習也是圍繞著如何使用Java來做web開發 2.1 什么是Web開發? web&#xff08…

APPtrace 智能參數系統:重構 App 用戶增長與運營邏輯

一、免填時代:APPtrace 顛覆傳統參數傳遞模式 傳統 App 依賴「邀請碼 / 手動綁定」實現用戶關聯,流程繁瑣導致 20%-30% 的用戶流失。APPtrace 通過 **「鏈接參數自動傳遞 安裝后智能識別」** 技術,讓用戶在無感知狀態下完成關系綁定、場景還…

bisheng系列(一)- 本地部署(Docker)

目錄 一、導讀 二、說明 1、鏡像說明 2、本節內容 三、docker部署 1、克隆代碼 2、運行鏡像 3、可能的錯誤信息 四、頁面測試 1、注冊用戶 2、登陸成功 3、添加模型 一、導讀 環境:Ubuntu 24.04、Windows 11、WSL 2、Python 3.10 、bisheng 1.1.1 背景…

docker介紹與常用命令匯總

docker簡介 docker是什么? Docker 是一個開源的應用容器引擎,它可以讓開發者將應用與運行環境打包成一個標準的、可移植的容器(Container),在任何地方都可以快速部署和運行,無需關心底層環境是否一致。 …

Android 中拖拽從一個組件到另外一個組件的寫法(跨容器拖拽)

在 Android 中,拖拽一個圖片(例如 ImageView)到另一個組件(如 LinearLayout、FrameLayout 等容器)涉及以下步驟: 準備工作 源組件:你從哪里開始拖動(如 ImageView)。 目…

火絨互聯網安全軟件:自主引擎,精準防御

在數字時代,網絡安全是每一個用戶都必須重視的問題。無論是個人用戶還是企業用戶,都需要一款高效、可靠的反病毒軟件來保護設備免受惡意軟件的侵害。今天,我們要介紹的 火絨互聯網安全軟件,就是這樣一款由資深工程師主導研發并擁有…

使用亮數據代理IP+Python爬蟲批量爬取招聘信息訓練面試類AI智能體(手把手教學版)

文章目錄 一、為什么要用代理IP?(重要!!!)二、環境準備(三件套走起)2.1 安裝必備庫(pip大法好)2.2 獲取亮數據代理(官網注冊送試用) 三、編寫爬蟲代碼&#x…

Android屏幕采集編碼打包推送RTMP技術詳解:從開發到優化與應用

在現代移動應用中,屏幕采集已成為一個廣泛使用的功能,尤其是在實時直播、視頻會議、遠程教育、游戲錄制等場景中,屏幕采集技術的需求不斷增長。Android 平臺為開發者提供了 MediaProjection API,這使得屏幕錄制和采集變得更加簡單…

互聯網大廠Java求職面試:Spring AI與大模型交互的高級模式與自定義開發

互聯網大廠Java求職面試:Spring AI與大模型交互的高級模式與自定義開發 在當今技術領域,隨著AI和大模型技術的廣泛應用,如何在復雜的系統架構中高效地集成這些技術成為了各大互聯網公司關注的重點。本文將通過一場模擬的面試對話&#xff0c…

MySQL 8.0 OCP 1Z0-908 161-170題

Q161.Examine this command, which executes successfully: cluster.addInstance ( ‘:’,{recoveryMethod: ‘clone’ 1}) Which three statements are true? (Choose three.) A)The account used to perform this recovery needs the BACKUP_ ADMIN privilege. B)A target i…

藍橋杯1447 砝碼稱重

問題描述 你有一架天平和 N 個砝碼,這 N 個砝碼重量依次是 W1,W2,???,WN?。 請你計算一共可以稱出多少種不同的重量? 注意砝碼可以放在天平兩邊。 輸入格式 輸入的第一行包含一個整數 N。 第二行包含 N 個整數:W1,W2,W3,???,WN?…

金融量化智能體,如何開發一個有效的策略?

原創內容第887篇,專注智能量化投資、個人成長與財富自由。 本周重構了網站,升級了最新的回測引擎,以及升級了論壇。 策略年化210%,夏普比3.47,系統源代碼及策略均可下載 年化37.5%,回撤控制在16.8%&…

JavaScript 性能優化:調優策略與工具使用

引言 在當今的 Web 開發領域,性能優化已不再是錦上添花,而是產品成功的關鍵因素。據 Google 研究表明,頁面加載時間每增加 3 秒,跳出率將提高 32%。而移動端用戶如果頁面加載超過 3 秒,有 53% 的用戶會放棄訪問。性能…

為 Jenkins添加 Windows Slave遠程執行 python項目腳本

測試環境 JAVA JDK 1.7.0_13 (jdk-7u13-windows-i586.exe) Jenkins Win11 64 python項目環境 實踐操作 1、新建與配置結點 【系統管理】-> 【管理結點】-> 【新建結點】, 如上,輸入結點名稱,勾選 【Dumb Slave】,點擊【OK】 說明&am…