Word2Vec模型訓練全流程解析:從數據預處理到實體識別應用

在這里插入圖片描述
在這里插入圖片描述
請添加圖片描述

訓練Word2Vec模型

概述

問題

  • 我們如何訓練Word2Vec模型?
  • 在特定數據集上訓練Word2Vec模型何時是有利的?

目標

  • 理解在自有數據上訓練Word2Vec模型而非使用預訓練模型的優勢

Colab環境配置

運行以下代碼以啟用輔助函數并重新讀取數據。

PYTHON代碼

# 運行此單元格以掛載你的Google Drive
from google.colab import drive
drive.mount('/content/drive')# 顯示現有Colab筆記本和helpers.py文件
from os import listdir
wksp_dir = '/content/drive/My Drive/Colab Notebooks/text-analysis/code'
print(listdir(wksp_dir))# 將文件夾添加到Colab的路徑中,以便導入輔助函數
import sys
sys.path.insert(0, wksp_dir)

輸出結果

Mounted at /content/drive
['analysis.py','pyldavis.py','.gitkeep','helpers.py','preprocessing.py','attentionviz.py','mit_restaurants.py','plotfrequency.py','__pycache__']

PYTHON代碼

# 安裝parse模塊(helpers.py中調用)所需的依賴
!pip install parse

加載數據

PYTHON代碼

# 重新讀取數據
from pandas import read_csv
data = read_csv("/content/drive/My Drive/Colab Notebooks/text-analysis/data/data.csv")

創建我們分析時要用到的文件列表。我們先將Word2Vec模型擬合到列表中的一本書——《白鯨記》(Moby Dick)。

PYTHON代碼

single_file = data.loc[data['Title'] == 'moby_dick','File'].item()
single_file

輸出結果

'/content/drive/My Drive/Colab Notebooks/text-analysis/data/melville-moby_dick.txt'

我們預覽文件內容,確保代碼和目錄設置正常工作。

PYTHON代碼

# 打開并讀取文件
f = open(single_file,'r')
file_contents = f.read()
f.close()# 預覽文件內容
preview_len = 500
print(file_contents[0:preview_len])

輸出結果

[Moby Dick by Herman Melville 1851]ETYMOLOGY.(Supplied by a Late Consumptive Usher to a Grammar School)The pale Usher--threadbare in coat, heart, body, and brain; I see him
now.  He was ever dusting his old lexicons and grammars, with a queer
handkerchief, mockingly embellished with all the gay flags of all the
known nations of the world.  He loved to dust his old grammars; it
somehow mildly reminded him of his mortality."While you take in hand to school others, and to teach them by wha

PYTHON代碼

file_contents[0:preview_len] # 注意實際字符串中仍包含\n(print()會將其處理為換行)

輸出結果

'[Moby Dick by Herman Melville 1851]\n\n\nETYMOLOGY.\n\n(Supplied by a Late Consumptive Usher to a Grammar School)\n\nThe pale Usher--threadbare in coat, heart, body, and brain; I see him\nnow.  He was ever dusting his old lexicons and grammars, with a queer\nhandkerchief, mockingly embellished with all the gay flags of all the\nknown nations of the world.  He loved to dust his old grammars; it\nsomehow mildly reminded him of his mortality.\n\n"While you take in hand to school others, and to teach them by wha'

預處理步驟

  1. 將文本拆分為句子
  2. 對文本進行分詞
  3. 對所有詞元進行詞形還原并轉為小寫
  4. 移除停用詞

1. 將文本轉換為句子列表

要記住,我們利用句子中單詞的序列來學習有意義的詞嵌入。一個句子的最后一個單詞并不總是和下一個句子的第一個單詞相關。因此,在進一步處理前,我們要將文本拆分為單個句子。

Punkt句子分詞器

NLTK的句子分詞器(“punkt”)在大多數情況下表現良好,但當遇到包含大量標點、感嘆號、縮寫或重復符號的復雜段落時,可能無法正確檢測句子。要解決這些問題沒有通用的標準方法。如果希望確保用于訓練Word2Vec的每個“句子”都是真正的句子,需要編寫一些額外的(且高度依賴數據的)代碼,利用正則表達式和字符串操作來處理罕見錯誤。

就我們的目的而言,愿意容忍少量句子分詞錯誤。如果這項工作要發表,仔細檢查punkt的分詞結果是值得的。

PYTHON代碼

import nltk
nltk.download('punkt') # sent_tokenize函數的依賴
sentences = nltk.sent_tokenize(file_contents)

輸出結果

[nltk_data] Downloading package punkt to /root/nltk_data...
[nltk_data]   Package punkt is already up-to-date!

PYTHON代碼

sentences[300:305]

輸出結果

['How then is this?','Are the green fields gone?','What do they\nhere?','But look!','here come more crowds, pacing straight for the water, and\nseemingly bound for a dive.']

2-4:分詞、詞形還原與移除停用詞

調用文本預處理輔助函數并拆解代碼邏輯……

  • 我們將在每個句子上運行此函數
  • 詞形還原、分詞、小寫轉換和停用詞處理都是之前學過的內容
  • 在詞形還原步驟,我們使用NLTK的詞形還原器,它運行速度很快
  • 我們還會使用NLTK的停用詞列表和分詞函數。回憶一下,停用詞通常是語言中最常見的單詞。移除它們后,Word2Vec模型可以只關注有意義單詞的序列。

PYTHON代碼

from helpers import preprocess_text

PYTHON代碼

# 測試函數
string = 'It is not down on any map; true places never are.'
tokens = preprocess_text(string,remove_stopwords=True,verbose=True)
print('Result', tokens)

輸出結果

Tokens ['It', 'is', 'not', 'down', 'on', 'any', 'map', 'true', 'places', 'never', 'are']
Lowercase ['it', 'is', 'not', 'down', 'on', 'any', 'map', 'true', 'places', 'never', 'are']
Lemmas ['it', 'is', 'not', 'down', 'on', 'any', 'map', 'true', 'place', 'never', 'are']
StopRemoved ['map', 'true', 'place', 'never']
Result ['map', 'true', 'place', 'never']

PYTHON代碼

# 將句子列表轉換為pandas Series,以便使用apply功能
import pandas as pd
sentences_series = pd.Series(sentences)

PYTHON代碼

tokens_cleaned = sentences_series.apply(preprocess_text,remove_stopwords=True,verbose=False)

PYTHON代碼

# 查看清洗前的句子
sentences[300:305]

輸出結果

['How then is this?','Are the green fields gone?','What do they\nhere?','But look!','here come more crowds, pacing straight for the water, and\nseemingly bound for a dive.']

PYTHON代碼

# 查看清洗后的句子
tokens_cleaned[300:305]

輸出結果

    300                                                   []301                                 [green, field, gone]302                                                   []303                                               [look]304    [come, crowd, pacing, straight, water, seeming...dtype: object

PYTHON代碼

tokens_cleaned.shape # 共9852個句子

PYTHON代碼

# 移除空句子和僅含1個單詞的句子(全為停用詞)
tokens_cleaned = tokens_cleaned[tokens_cleaned.apply(len) > 1]
tokens_cleaned.shape

使用分詞后文本訓練Word2Vec模型

現在我們可以用這些數據訓練Word2Vec模型。首先從gensim導入Word2Vec模塊。然后將分詞后的句子列表傳入Word2Vec函數,并設置sg=0(“skip-gram”)以使用**連續詞袋(CBOW)**訓練方法。

為完全確定性運行設置種子和工作線程:接下來我們設置一些可復現性參數。設置種子,確保每次運行代碼時向量的隨機初始化方式相同。為了實現完全確定性的復現,我們還將模型限制為單工作線程(workers=1),以消除操作系統線程調度帶來的順序抖動

PYTHON代碼

# 導入gensim的Word2Vec模塊
from gensim.models import Word2Vec# 使用清洗后的數據訓練Word2Vec模型
model = Word2Vec(sentences=tokens_cleaned, seed=0, workers=1, sg=0)

Gensim的實現基于Tomas Mikolov最初的word2vec模型,該模型會根據頻率自動下采樣所有高頻詞。下采樣能節省模型訓練時間。

后續步驟:詞嵌入應用場景

現在我們已獲得《白鯨記》中所有(經過詞形還原和去停用詞的)單詞的向量表示。看看如何用這些向量從文本數據中獲取洞見。

最相似單詞

和預訓練Word2Vec模型一樣,我們可以用most_similar函數找到與查詢詞有意義關聯的單詞。

PYTHON代碼

# 默認設置
model.wv.most_similar(positive=['whale'], topn=10)

輸出結果

[('great', 0.9986481070518494),('white', 0.9984517097473145),('fishery', 0.9984385371208191),('sperm', 0.9984176158905029),('among', 0.9983417987823486),('right', 0.9983320832252502),('three', 0.9983301758766174),('day', 0.9983181357383728),('length', 0.9983041882514954),('seen', 0.998255729675293)]

詞匯表限制

注意,Word2Vec只能為訓練數據中出現過的單詞生成向量表示。

PYTHON代碼

model.wv.most_similar(positive=['orca'], topn=30)
KeyError: "Key 'orca' not present in vocabulary"

fastText解決OOV問題

若需獲取未登錄詞(OOV)的詞向量,可改用fastText詞嵌入模型(Gensim也提供該模型)。fastText模型可通過對單詞的字符n-gram分量向量求和,為未登錄詞生成向量(只要至少有一個字符n-gram在訓練數據中出現過)。

Word2Vec用于命名實體識別

這個“最相似”功能能用來做什么?一種用法是構建相似單詞列表來表示某類概念。例如,我們想知道《白鯨記》中還提到了哪些海洋生物。可以用gensimmost_similar函數來構建平均代表“海洋生物”類別的單詞列表。

我們將使用以下步驟:

  1. 初始化一個表示“海洋生物”類別的小單詞列表
  2. 計算該單詞列表的平均向量表示
  3. 用這個平均向量找到最相似的前N個向量(單詞)
  4. 檢查相似單詞并更新海洋生物列表
  5. 重復步驟1-4,直到找不到新的海洋生物

PYTHON代碼

# 初始化表示海洋生物的小單詞列表
sea_creatures = ['whale', 'fish', 'creature', 'animal']# 以下代碼將計算列表中單詞的平均向量,
# 并找到與該平均向量最相似的向量/單詞
model.wv.most_similar(positive=sea_creatures, topn=30)

輸出結果

[('great', 0.9997826814651489),('part', 0.9997532963752747),('though', 0.9997507333755493),('full', 0.999735951423645),('small', 0.9997267127037048),('among', 0.9997209906578064),('case', 0.9997204542160034),('like', 0.9997190833091736),('many', 0.9997131824493408),('fishery', 0.9997081756591797),('present', 0.9997068643569946),('body', 0.9997056722640991),('almost', 0.9997050166130066),('found', 0.9997038245201111),('whole', 0.9997023940086365),('water', 0.9996949434280396),('even', 0.9996913075447083),('time', 0.9996898174285889),('two', 0.9996897578239441),('air', 0.9996871948242188),('length', 0.9996850490570068),('vast', 0.9996834397315979),('line', 0.9996828436851501),('made', 0.9996813535690308),('upon', 0.9996812343597412),('large', 0.9996775984764099),('known', 0.9996767640113831),('harpooneer', 0.9996761679649353),('sea', 0.9996750354766846),('shark', 0.9996744990348816)]

PYTHON代碼

# 將shark加入列表
model.wv.most_similar(positive=['whale', 'fish', 'creature', 'animal', 'shark'], topn=30)

輸出結果

[('great', 0.9997999668121338),('though', 0.9997922778129578),('part', 0.999788761138916),('full', 0.999781608581543),('small', 0.9997766017913818),('like', 0.9997683763504028),('among', 0.9997652769088745),('many', 0.9997631311416626),('case', 0.9997614622116089),('even', 0.9997515678405762),('body', 0.9997514486312866),('almost', 0.9997509717941284),('present', 0.9997479319572449),('found', 0.999747633934021),('water', 0.9997465014457703),('made', 0.9997431635856628),('air', 0.9997406601905823),('whole', 0.9997400641441345),('fishery', 0.9997299909591675),('harpooneer', 0.9997295141220093),('time', 0.9997290372848511),('two', 0.9997289776802063),('sea', 0.9997265934944153),('strange', 0.9997244477272034),('large', 0.999722421169281),('place', 0.9997209906578064),('dead', 0.9997198581695557),('leviathan', 0.9997192025184631),('sometimes', 0.9997178316116333),('high', 0.9997177720069885)]

PYTHON代碼

# 將leviathan(海 serpent)加入列表
model.wv.most_similar(positive=['whale', 'fish', 'creature', 'animal', 'shark', 'leviathan'], topn=30)

輸出結果

[('though', 0.9998274445533752),('part', 0.9998168349266052),('full', 0.9998133182525635),('small', 0.9998107552528381),('great', 0.9998067021369934),('like', 0.9998064041137695),('even', 0.9997999668121338),('many', 0.9997966885566711),('body', 0.9997950196266174),('among', 0.999794602394104),('found', 0.9997929334640503),('case', 0.9997885823249817),('almost', 0.9997871518135071),('made', 0.9997868537902832),('air', 0.999786376953125),('water', 0.9997802972793579),('whole', 0.9997780919075012),('present', 0.9997757077217102),('harpooneer', 0.999768853187561),('place', 0.9997684955596924),('much', 0.9997658729553223),('time', 0.999765157699585),('sea', 0.999765157699585),('dead', 0.999764621257782),('strange', 0.9997624158859253),('high', 0.9997615218162537),('two', 0.999760091304779),('sometimes', 0.9997592568397522),('half', 0.9997562170028687),('vast', 0.9997541904449463)]

沒有找到新的海洋生物。看來我們已用Word2Vec找回了海洋生物列表。

局限性

我們的列表中至少遺漏了一種海洋生物——大王烏賊。大王烏賊在《白鯨記》中僅被提及幾次,因此我們的Word2Vec模型可能無法為“squid”(烏賊)訓練出良好的表示。神經網絡只有在數據量充足時才能表現良好。

探索skip-gram算法

skip-gram算法在捕捉訓練數據中罕見單詞的語義方面有時表現更優。用skip-gram算法訓練新的Word2Vec模型,看看能否重復上述類別搜索任務找到“squid”(烏賊)這個詞。

PYTHON代碼

# 導入gensim的Word2Vec模塊
from gensim.models import Word2Vec# 使用清洗后的數據訓練Word2Vec模型
model = Word2Vec(sentences=tokens_cleaned, seed=0, workers=1, sg=1)
model.wv.most_similar(positive=['whale', 'fish', 'creature', 'animal', 'shark', 'leviathan'], topn=100) # 仍未找到squid

輸出結果

[('whalemen', 0.9931729435920715),('specie', 0.9919217824935913),('bulk', 0.9917919635772705),('ground', 0.9913252592086792),('skeleton', 0.9905602931976318),('among', 0.9898401498794556),('small', 0.9887762665748596),('full', 0.9885162115097046),('captured', 0.9883950352668762),('found', 0.9883666634559631),('sometimes', 0.9882548451423645),('snow', 0.9880553483963013),('magnitude', 0.9880378842353821),('various', 0.9878063201904297),('hump', 0.9876748919487),('cuvier', 0.9875931739807129),('fisherman', 0.9874721765518188),('general', 0.9873012900352478),('living', 0.9872495532035828),('wholly', 0.9872384667396545),('bone', 0.987160861492157),('mouth', 0.9867696762084961),('natural', 0.9867129921913147),('monster', 0.9865870475769043),('blubber', 0.9865683317184448),('indeed', 0.9864518046379089),('teeth', 0.9862186908721924),('entire', 0.9861844182014465),('latter', 0.9859246015548706),('book', 0.9858523607254028)]

討論練習結果:使用Word2Vec揭示某類別中的項目時,可能會遺漏很少被提及的項目。即使使用在罕見詞上表現更優的Skip-gram訓練方法,也是如此。因此,有時將此類任務留待處理更大的文本語料庫更合適。在后續課程中,我們將探索大語言模型(LLM)如何在命名實體識別相關任務中表現更優。

實體識別應用

在你的研究中,還可以如何利用這類分析?和小組分享你的想法。

示例:在19世紀的報紙文章上訓練模型,收集語料庫中提及的食物列表(所選主題)。對20世紀的報紙文章做同樣處理,比較流行食物隨時間的變化。

跨作者比較向量表示

回憶一下,Word2Vec模型基于單詞最常見的上下文單詞來學習編碼單詞的語義/表示。例如,在兩位不同作者的書籍(每位作者對應一個模型)上訓練兩個獨立的Word2Vec模型,我們可以比較不同作者用詞的差異。這種方法可以用來研究哪些研究問題或單詞?

一種可能的方法是比較作者如何表現不同性別。由于歷史性別規范,早期(過時的!)書籍中“man”和“woman”的詞向量可能比新書的詞向量距離更遠。

其他詞嵌入模型

盡管Word2Vec是著名模型且至今仍在許多NLP應用中使用,但還有其他一些詞嵌入模型值得探索。GloVefastText是目前最流行的兩種選擇。

PYTHON代碼

# 預覽可用的其他詞嵌入模型
print(list(api.info()['models'].keys()))

輸出結果

['fasttext-wiki-news-subwords-300', 'conceptnet-numberbatch-17-06-300', 'word2vec-ruscorpora-300', 'word2vec-google-news-300', 'glove-wiki-gigaword-50', 'glove-wiki-gigaword-100', 'glove-wiki-gigaword-200', 'glove-wiki-gigaword-300', 'glove-twitter-25', 'glove-twitter-50', 'glove-twitter-100', 'glove-twitter-200', '__testing_word2vec-matrix-synopsis']
相似性
  • 三種算法都在高維空間中生成單詞的向量表示
  • 它們可用于解決多種自然語言處理任務
  • 它們都是開源的,在研究社區中廣泛使用
差異
  • Word2Vec通過給定句子中單詞的周圍單詞來預測其上下文以生成嵌入,而GloVefastText通過預測語料庫中單詞與其他單詞共現的概率來生成嵌入
  • fastText還包含字符n-gram,使其能為訓練中未見過的單詞生成嵌入,在處理未登錄詞時特別有用
  • 總體而言,在三種嵌入技術(GloVefastTextWord2Vec)中,fastText被認為是訓練最快的。這是因為fastText使用子詞信息,減少了詞匯量并允許模型處理未登錄詞。此外,fastText在訓練中使用分層softmax,比Word2Vec使用的傳統softmax更快。最后,fastText可在多線程上訓練,進一步加快訓練過程

關鍵要點

  • 作為使用預訓練模型的替代方案,在特定數據集上訓練Word2Vec模型可讓你將Word2Vec用于**命名實體識別(NER)**相關任務。

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

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

相關文章

在Ubuntu上使用QEMU學習RISC-V程序(2)gdb調試

文章目錄一、準備工作二、基本調試流程1. 設置斷點2. 執行程序3. 查看源代碼/匯編三、查看寄存器1. 查看通用寄存器2. 查看特殊寄存器四、查看內存1. 內存查看命令2. 內存修改命令五、調試實戰示例六、高級調試技巧1. 條件斷點2. 自動顯示3. 內存斷點(觀察點&#x…

不止于“亮”:一盞智慧路燈的技術進化史——塔能科技用“落地性”定義行業標準

在凌晨3點的園區道路之上,路燈會隨著車輛的靠近而自動亮起,待車輛逐漸遠去之后,又會緩緩地調暗下來;當電纜意外被觸碰的時候,系統能夠在短短3秒之內自動發出報警信息,并且推送出維修工單;而當一…

Redis的String數據類型底層實現

redis就是用c語言寫,但redis的string并沒有直接用c語言的string,而是自己搞了一個 SDS 結構體來表示字符串。SDS 的全稱是 Simple Dynamic String,中文叫做“簡單動態字符串”。想知道為什么這么做,我們先看看c語言的string是什么…

【音視頻學習】四、深入解析視頻技術中的YUV數據存儲方式:從原理到實踐

文章目錄 引言 1. YUV 基礎:為什么它比 RGB 更適合視頻? 1.1 YUV 與 RGB 的核心區別 1.2 YUV色度下采樣簡介 2. YUV 的三大存儲方式 方式一:平面格式(Planar) 方式二:半平面格式(Semi-Planar ) 方式三:打包格式(Packed YUV) 三種存儲方式對比: 3. 如何選擇合適的 Y…

前端項目組成

一、前端項目常見模塊及功能(以 Vue/React 通用結構為例) 前端項目的模塊本質是「按功能拆分的代碼文件/文件夾」,就像蓋房子的「磚、梁、窗」各司其職:模塊類型功能說明(大白話)舉個例子pages(…

聚觀早報 | 猿編程推動中美青少年AI實踐;華為Pura 80數字版售價公布;iPhone 17 Air電池曝光

聚觀早報每日整理最值得關注的行業重點事件,幫助大家及時了解最新行業動態,每日讀報,就讀聚觀365資訊簡報。整理丨肖羽7月24日消息猿編程推動中美青少年AI實踐華為Pura 80數字版售價公布iPhone 17 Air電池曝光亞馬遜收購AI初創公司Bee蜂巢半固…

unittest 案例執行順序詳解

unittest 案例執行順序詳解在 unittest 框架中,測試用例的執行順序有默認規則,也可通過自定義方式調整。以下是具體說明:一、默認執行順序規則unittest 對測試用例的執行順序遵循 “按測試方法名的 ASCII 碼排序” 原則,具體邏輯如…

【web大前端】001_前端開發入門:創建你的第一個網頁

前端開發入門:創建你的第一個網頁 在當今數字化時代,網頁已經成為人們獲取信息和交流的重要平臺。對于想要學習編程的人來說,前端開發往往是一個不錯的起點。本文將帶你通過簡單的兩步,創建屬于你的第一個網頁程序。 點擊這里去…

HTTP性能優化終極指南:從協議原理到企業級實踐

前言:為什么性能優化是Web開發的生命線?根據Google研究數據,當頁面加載時間從1秒增加到3秒時,跳出率提升32%;當達到5秒時,轉化率下降90%。本文將通過七層優化體系,帶您掌握HTTP性能優化的核心技…

Python 數據分析(二):Matplotlib 繪圖

目錄 1. 簡介2. 繪圖 2.1 折線圖 2.1.1 單線2.1.2 多線2.1.3 子圖 2.2 散點圖2.3 直方圖2.4 條形圖 2.4.1 縱置2.4.2 橫置2.4.3 多條 2.5 餅圖 1. 簡介 Matplotlib 是 Python 提供的一個繪圖庫,通過該庫我們可以很容易的繪制出折線圖、直方圖、散點圖、餅圖等豐…

Scrapy分布式爬蟲數據統計全棧方案:構建企業級監控分析系統

引言:數據統計在分布式爬蟲中的戰略價值在分布式爬蟲系統中,??數據統計與分析??是系統優化的核心驅動力。根據2023年爬蟲工程調查報告:實施專業統計方案的爬蟲系統性能提升??40%以上??數據驅動的優化策略可減少??70%??的資源浪費…

計劃任務(at和cron命令介紹及操作)

簡介計劃任務主要做一些周期性的任務,目前最主要的是定期備份數據分類at:一次性調度執行cron:循環調度執行at簡介at 是一個用于安排一次性任務的命令行工具,適合在指定時間點執行單次任務語法at 時間 選項若要提交,通過…

[2025CVPR:圖象合成、生成方向]WF-VAE:通過小波驅動的能量流增強視頻 VAE 的潛在視頻擴散模型

論文概述? 這篇論文提出了一種名為WF-VAE(Wavelet Flow VAE)?的新型視頻變分自編碼器(Video VAE),旨在解決潛在視頻擴散模型(LVDM)中的關鍵瓶頸問題,包括高計算成本和潛在空間不連續性。WF-VAE利用小波變換(Wavelet Transform)來分解視頻信號,并通過能量流路徑優…

Map接口-實現類HashMap

目錄 一、什么是Map? 二、實現類HashMap 1.關鍵特點 無序、key唯一、value允許重復、key和value允許為null。 2.數據結構 2.1 JDK 1.7 2.2 JDK 1.8 2.3 關鍵參數 2.4 關鍵計算 3.擴容方式 3.1 初始化 3.2 擴容 4.常見方法 4.1 根據key存入value 4.2 …

深入解析Hadoop如何實現數據可靠性:三副本策略、校驗和驗證與Pipeline復制

Hadoop數據可靠性的重要性在大數據時代,數據可靠性已成為企業數字化轉型的生命線。根據IDC預測,到2025年全球數據總量將增長至175ZB,其中企業數據占比超過60%。面對如此龐大的數據規模,任何數據丟失或損壞都可能造成數百萬美元的經…

15.6 DeepSpeed+Transformers實戰:LLaMA-7B訓練效率提升210%,顯存直降73%

DeepSpeedTransformers實戰:LLaMA-7B訓練效率提升210%的底層邏輯與實操指南 當LLaMA-7B的訓練顯存需求達到78GB時,單卡A100(80GB)幾乎瀕臨溢出,更不用說普通GPU集群。而DeepSpeed與Hugging Face Transformers的深度集成,通過"ZeRO三階段優化+混合精度+梯度檢查點&q…

Nginx + PM2 實現Express API + React 前端 本地測試服務器搭建

一、工具準備 openSSL:需要針對https請求頭 生成對應的 自簽名證書。 Nginx:服務器搭建工具 nodeJS: Express API運行環境 PM2: node進程管理器。用于替代npm命令管理 啟動命令。 二、openSSL 本地自簽名證書生成。 創建服務器空文件夾&#xff08…

OTG原理講解

文章目錄一、什么是 OTG(USB On-The-Go)?? OTG 的定義:二、傳統 USB 與 OTG 的區別三、OTG 的核心機制:**通過 ID 引腳判斷角色**1. 對于 Micro-USB OTG:2. 電路如何感知 ID 引腳?四、OTG 電路…

數據結構系列之紅黑樹

前言 紅黑樹是比較重要的一顆樹了,map和set的底層就是紅黑樹,一定要牢牢記住。 一、什么是紅黑樹 首先:紅黑樹仍然是一顆搜索二叉樹,但他引入了顏色這一概念,每個結點多一個存儲位來存儲顏色,它通過維護下…

在OpenMP中,#pragma omp的使用

在OpenMP中,#pragma omp for 和 #pragma omp parallel for(或 #pragma omp parallel num_threads(N))有本質區別,主要體現在 并行區域的創建 和 工作分配方式 上。以下是詳細對比:1. #pragma omp for 作用 僅分配循環迭…