NLP——遷移學習

一、遷移學習的概念

1.預訓練模型(Pretrained model)

定義: 簡單來說別人訓練好的模型。一般預訓練模型具備復雜的網絡模型結構;一般是在大量的語料下訓練完成的。

2.微調(Fine-tuning)

定義:一般是對預訓練語言模型,進行垂直領域數據的微調,可以將預訓練模型的參數全部微調或者部分微調或者不微調,但是一般我們在做任務的時候,會在預訓練模型后加入自定義網絡,自定義網絡模型的參數需要訓練。

3.遷移學習的兩種方式

① 開箱即用: 當預訓練模型的任務和我們要做的任務相似時,可以直接使用預訓練模型來解決對應的任務。
② 微調: 進行垂直領域數據的微調,一般在預訓練網絡模型后,加入自定義網絡,自定義網絡模型的參數需要訓練,但是預訓練模型的參數可以全部微調或者部分微調或者不微調。

二、fasttaxt工具介紹

1.作用

作為NLP工程領域常用的工具包, fasttext有兩大作用:

① 進行文本分類
② 訓練詞向量

2.fasttext工具包的優勢

在保持較高精度的情況下, 能夠快速的進行訓練和預測。

原因:
① fasttext工具包中內含的fasttext模型具有十分簡單的網絡結構。
② 使用fasttext模型訓練詞向量時使用層次softmax結構, 來提升超多類別下的模型性能。
③ 由于fasttext模型過于簡單無法捕捉詞序特征, 因此會進行n-gram特征提取以彌補模型缺陷提升精度。

3.安裝方法

pip install fasttext

三、fasttext文本分類

1.文本分類介紹

概念:文本分類的是將文檔(例如電子郵件,帖子,文本消息,產品評論等)分配給一個或多個類別. 當今文本分類的實現多是使用機器學習方法從訓練數據中提取分類規則以進行分類, 因此構建文本分類器需要帶標簽的數據。

2.文本分類種類

① 二分類

文本被分類兩個類別中, 往往這兩個類別是對立面。

二分類中輸出層神經元有兩種情況:
Ⅰ:只有一個神經元:該情況使用sigmoid激活函數;輸出一個0到1范圍的值,根據輸出值是否大于0.5,預測正反類,當大于等于0.5是預測為正類,反之為反類;交叉熵損失函數使用二分類交叉熵,形式為
?[y log( p )+(1?y)log(1?p)],其中y是真實值標簽(0或1),p是模型預測的屬于正類的概率。
Ⅱ:使用兩個神經元:通常使用Softmax函數;輸出兩個加和為1的概率,取最大的概率作為預測結果;交叉熵損失函數使用多分類交叉熵,在這里插入圖片描述
其中yi是真實標簽的one-hot編碼,pi是模型預測的對應類別的概率。

② 單標簽多分類

文本被分到多個類別中, 且每條文本只能屬于某一個類別(即一個標簽)。

③ 多標簽多分類

文本被分到多個類別中, 但每條文本可以屬于多個類別(即多個標簽)。

3.Fasttext模型架構

FastText 模型架構和 Word2Vec 中的 CBOW 模型很類似,,不同之處在于,FastText 預測標簽, 而 CBOW 模型預測中間詞。
模型架構分為三層:
輸入層: 是對文檔embedding之后的向量, 包含N-gram特征
隱藏層: 是對輸入數據的求和平均
輸出層: 是文檔對應的label

4.文本分類的過程

第一步: 獲取數據
第二步: 訓練集與驗證集的劃分
第三步: 訓練模型

import fasttext
# 對分割好的訓練集進行訓練
model = fasttext.train_supervised('./fasttext_data/cooking.train')

第四步: 使用模型進行預測并評估

result1 = model.predict("Which baking dish is best to bake a banana bread ?")
print(result1)
valid_result = model.test('./fasttext_data/cooking.valid')
print(f'valid_result--》{valid_result}')

第五步: 模型調優
第六步: 模型保存與重加載

# 1.清洗數據后,再進行訓練和驗證
def dm01_clearn_data():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt')valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'清洗數據后,valid_result--》{valid_result}')# 2 : 增加訓練輪次
def dm02_add_epoch():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'增加訓練輪次后,valid_result--》{valid_result}')# 3: 改變學習率
def dm03_change_lr():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25, lr=1.0)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'改變學習率后,valid_result--》{valid_result}')# 4: 添加ngram
def dm04_add_ngram():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25, lr=1.0, wordNgrams=2)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'添加ngram后,valid_result--》{valid_result}')# 5: 改變loss-->層次softmax
def dm05_change_loss():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=25, lr=1.0, wordNgrams=2,loss='hs')valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'改變loss-->層次softmax后,valid_result--》{valid_result}')# 6:自動尋找最優超參數
def dm06_auto_find_best_param():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt',autotuneValidationFile='./fasttext_data/cooking_pre_valid.txt',autotuneDuration=60)valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'自動模型超參數調優之后的模型表現--》{valid_result}')
# 7. 多標簽多分類變成多個二分類
def dm07_ova():model = fasttext.train_supervised('./fasttext_data/cooking_pre_train.txt', epoch=50, lr=0.2, wordNgrams=2, loss='ova')# 在驗證集上查看模型的表現valid_result = model.test('./fasttext_data/cooking_pre_valid.txt')print(f'修改成ova之后的模型表現--》{valid_result}')	# 模型的保存:model.save_model('cooking_model1.bin')# 模型重加載model = fasttext.load_model('cooking_model1.bin')result1 = model.predict("Why not put knives in the dishwasher?", threshold=0.001, k=-1)print(f'result1--》{result1}')

四、NLP中的常用預訓練模型

當下NLP中流行的預訓練模型: BERT、GPT 、GPT-2 、Transformer-XL 、XLNet 、RoBERTa 、DistilBERT、 ALBERT。
上述預訓練模型及其變體都是以transformer為基礎,只是在模型結構如神經元連接方式,編碼器隱層數,多頭注意力的頭數等發生改變,這些改變方式的大部分依據都是由在標準數據集上的表現而定。

1.BERT及其變體

· bert-base-uncased: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共110M參數量, 在小寫的英文文本上進行訓練而得到。
· bert-large-uncased: 編碼器具有24個隱層, 輸出1024維張量, 16個自注意力頭, 共340M參數量, 在小寫的英文文本上進行訓練而得到。
· bert-base-cased: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共110M參數量, 在不區分大小寫的英文文本上進行訓練而得到。
· bert-large-cased: 編碼器具有24個隱層, 輸出1024維張量, 16個自注意力頭, 共340M參數量, 在不區分大小寫的英文文本上進行訓練而得到。
· bert-base-multilingual-uncased: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共110M參數量, 在小寫的102種語言文本上進行訓練而得到。
· bert-large-multilingual-uncased: 編碼器具有24個隱層, 輸出1024維張量, 16個自注意力頭, 共340M參數量, 在小寫的102種語言文本上進行訓練而得到。
· bert-base-chinese: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共110M參數量, 在簡體和繁體中文文本上進行訓練而得到。

2.GPT/GPT-2

· openai-gpt: 解碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共110M參數量, 由OpenAI在英文語料上進行訓練而得到。
· gpt2: 解碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共117M參數量, 在OpenAI GPT-2英文語料上進行訓練而得到。

3.Transformer-XL

· transfo-xl-wt103: 編碼器具有18個隱層, 輸出1024維張量, 16個自注意力頭, 共257M參數量, 在wikitext-103英文語料進行訓練而得到。

4.XLNet及其變體

· xlnet-base-cased: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共110M參數量, 在英文語料上進行訓練而得到。
· xlnet-large-cased: 編碼器具有24個隱層, 輸出1024維張量, 16個自注意力頭, 共340參數量, 在英文語料上進行訓練而得到。

5.RoBERTa及其變體

· roberta-base: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共125M參數量, 在英文文本上進行訓練而得到。
· roberta-large: 編碼器具有24個隱層, 輸出1024維張量, 16個自注意力頭, 共355M參數量, 在英文文本上進行訓練而得到。

6.DistilBERT及其變體

· distilbert-base-uncased: 基于bert-base-uncased的蒸餾(壓縮)模型, 編碼器具有6個隱層, 輸出768維張量, 12個自注意力頭, 共66M參數量。
· distilbert-base-multilingual-cased: 基于bert-base-multilingual-uncased的蒸餾(壓縮)模型, 編碼器具有6個隱層, 輸出768維張量, 12個自注意力頭, 共66M參數量。

7.ALBERT

· albert-base-v1: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共125M參數量, 在英文文本上進行訓練而得到。
· albert-base-v2: 編碼器具有12個隱層, 輸出768維張量, 12個自注意力頭, 共125M參數量, 在英文文本上進行訓練而得到, 相比v1使用了更多的數據量, 花費更長的訓練時間。

五、Transformers庫使用

1.Transformers庫介紹

Huggingface Transformers 是基于一個開源基于 transformer 模型結構提供的預訓練語言庫。它支持 Pytorch,Tensorflow2.0,并且支持兩個框架的相互轉換。Transformers 提供了NLP領域大量state-of-art的 預訓練語言模型結構的模型和調用框架。
框架支持了最新的各種NLP預訓練語言模型,使用者可快速的進行模型調用,并且支持模型further pretraining 和 下游任務fine-tuning。

2.Transformers庫三層應用結構

· 管道(Pipline)方式:高度集成的極簡使用方式,只需要幾行代碼即可實現一個NLP任務。

· 自動模型(AutoMode)方式:可載入并使用BERTology系列模型。

· 具體模型(SpecificModel)方式:在使用時,需要明確指定具體的模型,并按照每個BERTology系列模型中的特定參數進行調用,該方式相對復雜,但具有較高的靈活度。

自定義下游任務網絡模型的作用和實現方式:
在這里插入圖片描述

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

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

相關文章

Ubuntu 安裝

文章目錄硬件準備下載 Ubuntu 鏡像創建可啟動 USB從 USB 驅動器啟動安裝 Ubuntu不要忘記更新!用了十多年的筆記本,手邊正好有個500G的固態,準備換上。考慮到機器的硬件配置,現在使用windows10實在是有點卡,ubuntu卻剛好…

【46】MFC入門到精通——MFC顯示實時時間,獲取系統當前時間GetCurrentTime()、獲取本地時間GetLocalTime()

文章目錄1 MFC獲取時間方法方法一:獲取系統當前時間GetCurrentTime()方法二:獲取本地時間GetLocalTime()使用GetTickCount()獲取程序運行時間2 MFC顯示實時時間 使用方法2.1 獲取時間2.2 類向導 添加定時器函數 OnTimer2.3 初始化 設置定時器2.4 定時器函…

Linux717 SWAP擴容;邏輯卷條帶化

root192.168.235.20s password:┌────────────────────────────────────────────────────────────────────┐│ ? MobaXterm 20.0 ? ││ …

人類社會發展過程中的熵增定律

引子研究美國羅斯福新政期間的法案為什么會對美國經濟恢復起作用?與千金買馬骨和移木賞金之間的區別與聯系?以下為豆包 AI回答一、羅斯福新政法案對美國經濟起作用的原因羅斯福新政(1933-1939年)通過一系列政策應對大蕭條&#x…

Spring-AI系列-入門篇-核心概念、組件和生產要素

原文-Spring AI知識庫,歡迎大家評論互動 師父領進門,修行靠自己。 Spring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design an…

從瀏覽器到服務器:TCP 段的網絡傳輸之旅

本文以簡化的網絡架構為例,詳細介紹了當你在瀏覽器中輸入網址(例如www.google.com)并按下回車鍵后,TCP段的完整傳輸過程。我們將探討DNS解析、ARP、TCP/IP封裝、PAT和路由如何協同工作,將數據從個人電腦通過局域網和廣…

HCIE - 云計算拿下后的職業選擇如何規劃?

Hello!大家好,小編是一名專注 IT 領域的資深探索家。我們聊聊HCIE - 云計算,這個認證作為華為認證體系中云計算領域的專家級認證,標志著持有者具備企業級云架構設計、復雜云平臺運維及跨場景技術落地能力。但認證本身只是職業進階…

1-創建Vue3項目

創建Vue3項目前提 已安裝 18.3 或更高版本的 Node.js vue 官網 https://vuejs.org/ 創建一個 Vue 應用 ① 新建項目目錄,使用 VSCode 打開 VSCode 可安裝 Vue-Official 插件協助開發 ② 執行 create vue 指令創建 vue 應用 npm create vuelatest這一指令將…

Codex,Copilot 是什么

Codex是什么 Codex 是 OpenAI 研發的一款專注于代碼生成的大型語言模型,它可以根據自然語言描述自動編寫程序代碼,在軟件開發、自動化測試等領域展現出了強大的應用潛力。下面為你詳細介紹: 1. 核心功能 代碼生成:Codex 能夠依據自然語言指令生成代碼,像函數、類或者完整…

Typecho插件開發:自定義表單驗證規則addRule實戰指南

文章目錄 Typecho表單驗證進階:為插件和主題添加自定義addRule驗證規則 引言 一、Typecho表單驗證基礎 1.1 Typecho表單系統概述 1.2 addRule方法解析 二、自定義驗證規則實現 2.1 創建自定義驗證類 2.2 注冊自定義驗證規則 2.3 使用自定義驗證規則 三、高級驗證場景實現 3.1 …

數據分布是如何影響目標檢測精度的

文章目錄一、研究背景與目標模型效果提升數據集優化二、研究問題明細各方向的關聯性與核心邏輯1. 高質量數據集的高效篩選與主動學習應用2. 基于推理結果的數據補充與增強方向優化3. 多類別場景下目標尺度與模型精度的關聯性4. 損失函數與數據增強對精度的量化影響5. 目標類型專…

Python 網絡爬蟲 —— 代理服務器

一、會話(Session)(一)核心邏輯HTTP 本身無記憶,每次請求獨立。會話(Session) 就是為解決這問題,讓客戶端(瀏覽器)和服務器 “記住” 交互狀態(比…

Vue在線預覽Excel和Docx格式文件

前提:本次示例基于Vue2.x,所用插件為Vue-Office。 一、Vue-Office 插件簡介 Vue-Office 是一個一站式解決方案,支持多種 Office 文件格式的在線預覽,包括: Word(.docx)Excel(.xlsx、…

提升(Boosting)及 Python 示例

咱們結合這張圖,把 “提升” 想象成 “做錯題本 請老師補課” 的過程:第一波數據(最上面的圓圈):“第一次作業”假設你第一次做 100 道數學題(圖中圓圈里的綠點白點代表不同的題),做…

【生產實踐】Linux中NAS掛載丟失后提示“過舊的文件句柄”錯誤解決

太長不看版: 問題:nas掛載在系統里掉了,使用df或ls訪問目錄提示過舊的文件句柄解決過程: 和機房聯系,發現NAS服務器重啟了重新執行mount發現掛不上先umount掉當前掛載,再重新執行mount命令問題解決 umount …

JUnit4

JUnit4 介紹JUnit 是 Java 編程語言的單元測試框架,用于編寫和運行可重復的自動化測試。JUnit 特點:JUnit 是一個開放的資源框架,用于編寫和運行測試。提供注解來識別測試方法。提供斷言來測試預期結果。JUnit 測試允許你編寫代碼更快&#x…

Python-TCP編程-UDP編程-SocketServer-IO各種概念及多路復用-asyncio-學習筆記

序 欠4前年的一份筆記 ,獻給今后的自己。 網絡編程 Socket介紹 Socket套接字 Python中提供socket.py標準庫,非常底層的接口庫。 Socket是一種通用的網絡編程接口,和網絡層次沒有一一對應的關系。 協議族 AF表示Address Family,用于…

Mybatis-開發一個類似mybatisplus的mybatis擴展,該怎么入手?

開發一個類似mybatisplus的mybatis擴展,該怎么入手? 要開發一個類似于 MyBatis-Plus 的 MyBatis 擴展框架,你需要從以下幾個核心方面入手,逐步構建出一個功能完整、易用性強、兼容性好的增強型 MyBatis 框架。🧱 一、整…

深入了解linux系統—— 信號的捕捉

前言 信號從產生到處理,可以分為信號產生、信號保存、信號捕捉三個階段;了解了信號產生和保存,現在來深入了解信號捕捉。 信號捕捉 對于1-31號普通信號,進程可以立即處理,也可以不立即處理而是在合適的時候處理&#x…

twikitFKS: 基于 twikit 2.3.1 的改進版本

twikitFKS: 基于 twikit 2.3.1 的改進版本 項目概述 關于 twikit twikit 是一個優秀的 Twitter API 爬蟲庫,它的核心優勢在于無需 API Key即可訪問 Twitter 功能。通過網頁爬蟲技術,twikit 實現了: 發布推文和媒體內容搜索推文和用戶獲取…