自然語言處理:最大期望值算法

介紹

大家好,博主又來給大家分享知識了,今天給大家分享的內容是自然語言處理中的最大期望值算法。那么什么是最大期望值算法呢?

最大期望值算法,英文簡稱為EM算法,它的核心思想非常巧妙。它把求解模型參數的過程分成了兩個關鍵步驟,就像一場接力賽,期望(E)步驟最大化(M)步驟相互配合,不斷迭代。在期望步驟中,算法會根據當前模型的參數,對那些隱藏的變量進行 “猜測”,計算出它們的期望值。

打個比方,還是以新聞文章分類為例,在這一步,算法會去計算每篇文章屬于各個類別的可能性有多大。然后到了最大化步驟,算法會利用期望步驟得到的結果,想辦法調整模型的參數,讓模型能更好地擬合數據,就好像是在調整拼圖的各個板塊,讓它們能更完美地拼合在一起。這兩個步驟不斷重復,模型的參數就會越來越接近最優值,最終達到我們想要的效果。

好了,話不多說,我們直接進入正題。

最大期望值算法

自然語言處理(NLP)的復雜領域中,處理含有隱變量的數據是一項極具挑戰性但又至關重要的任務。最大期望值算法(Expectation-Maximization Algorithm,簡稱EM算法)作為一種強大的迭代優化算法,為解決這類問題提供了有效的途徑。它在文本聚類、主題模型學習、語音識別等多個自然語言處理任務中扮演著關鍵角色。

基礎概念

隱變量

隱變量是指在數據中存在,但無法直接觀測或獲取到的變量。在自然語言處理的文本聚類任務中,每篇文本具體所屬的類別就是隱變量,因為在未完成分類前,這些類別信息是未知的。

由于隱變量的存在,直接運用傳統統計方法進行數據分析會面臨困難,而最大期望值算法的目標就是在包含隱變量或數據不完整的情況下,尋求模型參數的最優估計。

不完整數據

不完整數據是指數據中部分信息缺失或者隱藏的數據。在自然語言處理場景中,可能表現為文本中某些詞匯缺失、句子結構不完整,或者文本的關鍵屬性信息(如作者、創作時間等)未被記錄。

在文本分類任務里,如果部分文本的標注信息(如所屬類別標簽)丟失,那么這些文本數據就是不完整數據。在信息抽取任務中,若某些文本中關鍵的實體信息(如人物、地點、事件等)未明確給出,也屬于不完整數據。這種數據的不完整性會影響數據分析和模型訓練的效果,增加了處理的難度。

似然函數

對于一組觀測數據X = \{x_1, x_2, \ldots, x_n\},假設它們是從概率分布P(X|\theta)中抽取的,其中\theta是模型的參數。當把X看作固定值,將\theta視為變量時,P(X|\theta)就成為關于\theta的函數,這個函數就是似然函數,記為L(\theta|X)

似然函數在最大期望值算法中起著關鍵作用。對于給定的模型和觀測數據,似然函數表示在不同參數取值下,觀測數據出現的概率。在自然語言處理中,我們希望找到一組模型參數,使得觀測到的文本數據的似然值最大。假設我們有觀測數據$X$,模型參數為$\theta$,隱變量為$Z$,那么似然函數可以表示為$P(X|\theta)$

在存在隱變量的情況下,我們通常使用聯合似然函數$P(X,Z|\theta)$,通過對隱變量$Z$進行積分或求和(取決于$Z$是連續變量還是離散變量)來計算$P(X|\theta)$,即

$P(X|\theta)=\sum_{Z}P(X,Z|\theta)$(離散情況)$P(X|\theta)=\int_{Z}P(X,Z|\theta)dZ$(連續情況)

最大期望值算法就是通過不斷優化參數$\theta$,使得這個似然函數的值最大化。

核心思想

最大期望值算法的核心是通過迭代的方式逐步逼近最優解。它基于概率論和統計學原理,將求解參數的過程分為兩個主要步驟:期望(E)步驟最大化(M)步驟

期望步驟中,利用當前估計的模型參數來計算隱變量的期望值;在最大化步驟中,基于期望步驟得到的期望值,最大化似然函數,從而更新模型參數。通過不斷重復這兩個步驟,使得模型參數逐漸收斂到最優值,以達到最佳的數據擬合效果。

算法流程

初始化模型參數

在算法開始時,需要為模型參數選擇一組初始值。這些初始值的選擇會影響算法的收斂速度和最終結果,但通常在實際應用中,只要初始值不是特別離譜,算法都能收斂到一個較好的結果。例如在高斯混合模型(GMM)中使用最大期望值算法時,需要初始化每個高斯分布的均值、方差和權重等參數。

期望步驟

E步。根據當前的模型參數$\theta^{(t)}$($t$表示迭代次數),計算隱變量$Z$的條件期望,即

$Q(\theta,\theta^{(t)}) = E_{Z|X,\theta^{(t)}}[\log P(X,Z|\theta)]$

在文本聚類場景中,如果將文檔的類別視為隱變量,那么在這一步會計算每個文檔屬于各個類別的概率。通過這個期望步驟,我們利用當前的模型參數對隱變量進行了“猜測”

最大化步驟

M步。在期望步驟的基礎上,尋找一組新的模型參數$\theta^{(t+1)}$,使得$Q(\theta,\theta^{(t)})$最大化,即$\theta^{(t+1)}=\arg\max_{\theta}Q(\theta,\theta^{(t)})$

在實際計算中,通常對$Q(\theta,\theta^{(t)})$關于參數$\theta$求導,并令導數為0來求解。例如在高斯混合模型中,會根據E步計算出的概率,重新計算每個高斯分布的均值、方差和權重等參數。

判斷收斂條件

檢查新得到的模型參數$\theta^{(t+1)}$與上一次迭代的參數$\theta^{(t)}$之間的差異是否滿足某個收斂條件。常見的收斂條件可以是參數的變化量小于某個閾值,或者似然函數值的變化量小于某個閾值。如果滿足收斂條件,則算法停止迭代;否則,返回E步繼續下一輪迭代。

與高斯模型的關系

高斯混合模型是一種概率模型,假定數據由多個高斯分布混合而成。在使用高斯混合模型時,關鍵任務是估計出每個高斯分布的參數(像均值、標準差)以及每個高斯分布的權重。不過,直接估計這些參數往往頗具難度,尤其是在數據存在隱變量(比如數據點究竟屬于哪個高斯分布并不明確)的情形下。

最大期望值算法(EM算法)是一種迭代優化算法,專門用于在存在隱變量時估計模型參數。在高斯混合模型中,EM算法通過不斷交替執行E步(期望步)M步(最大化步),逐步逼近最優的參數估計值,從而實現對高斯混合模型的擬合。

代碼實現

接下來我們用代碼來演示一下如何使用期望最大化算法(EM 算法)高斯混合模型(GMM)進行擬合。在代碼中,我們主要借助numpy庫進行數值計算和數組操作,利用matplotlib庫進行圖形的繪制和數據的可視化。

完整代碼

# 導入numpy庫,用于進行數值計算和數組操作
import numpy as np
# 導入matplotlib庫,它是一個用于繪制圖形和可視化數據的庫
import matplotlib# 設置matplotlib的后端為tkAgg,這是一種圖形用戶界面后端,用于顯示圖形窗口
matplotlib.use('tkAgg')
# 定義一個字典plot_config,用于設置matplotlib的字體和符號顯示配置
plot_config = {# 設置字體族為襯線字體"font.family": 'serif',# 設置數學文本的字體集為stix"mathtext.fontset": 'stix',# 設置襯線字體為宋體"font.serif": 'SimSun',# 解決負號顯示問題'axes.unicode_minus': False
}
# 使用update方法將配置字典應用到matplotlib的全局參數中
matplotlib.rcParams.update(plot_config)
# 從matplotlib中導入pyplot子模塊,別名plt,用于繪制各種圖形
import matplotlib.pyplot as plt# 定義一個名為MaximumExpectedValue的類,用于實現高斯混合模型
class MaximumExpectedValue:# 類的構造函數,用于初始化對象的屬性def __init__(self, num_components, max_iter=100, convergence_threshold=1e-6):# 高斯混合模型中高斯分量的數量self.num_components = num_components# 期望最大化算法的最大迭代次數self.max_iter = max_iter# 收斂閾值,用于判斷算法是否收斂self.convergence_threshold = convergence_threshold# 初始化均值數組,初始值為Noneself.mean_values = None# 初始化標準差數組,初始值為Noneself.std_deviations = None# 初始化權重數組,初始值為Noneself.weights = None# 定義高斯概率密度函數,用于計算給定輸入值在指定均值和標準差下的概率密度def gaussian_probability_density_function(self, input_value, mean_value, standard_deviation):# 根據高斯概率密度函數的公式進行計算并返回結果return (1.0 / (np.sqrt(2 * np.pi * standard_deviation ** 2))) * np.exp(-(input_value - mean_value) ** 2 / (2 * standard_deviation ** 2))# 定義期望最大化算法的實現方法def expectation_maximization_algorithm(self, sample_data):# 獲取樣本數據的數量sample_size = len(sample_data)# 初始化參數# 從樣本數據中隨機選擇num_components個值作為初始均值self.mean_values = np.random.choice(sample_data, self.num_components)# 初始化標準差數組,每個分量的標準差初始值為1self.std_deviations = np.ones(self.num_components)# 初始化權重數組,每個分量的權重初始值相等self.weights = np.ones(self.num_components) / self.num_components# 開始迭代,最多迭代max_iter次for _ in range(self.max_iter):# E步:計算每個樣本屬于每個高斯分量的責任度membership_responsibilities = np.zeros((sample_size, self.num_components))# 遍歷每個樣本for i in range(sample_size):# 遍歷每個高斯分量for j in range(self.num_components):# 計算樣本i屬于高斯分量j的未歸一化責任度membership_responsibilities[i, j] = self.weights[j] * self.gaussian_probability_density_function(sample_data[i], self.mean_values[j], self.std_deviations[j])# 對樣本i屬于各個高斯分量的責任度進行歸一化membership_responsibilities[i] /= membership_responsibilities[i].sum()# M步:更新模型的參數# 計算每個高斯分量的責任度總和component_sums = membership_responsibilities.sum(axis=0)# 更新每個高斯分量的權重self.weights = component_sums / sample_size# 遍歷每個高斯分量for j in range(self.num_components):# 更新高斯分量j的均值self.mean_values[j] = np.sum(membership_responsibilities[:, j] * sample_data) / component_sums[j]# 更新高斯分量j的標準差self.std_deviations[j] = np.sqrt(np.sum(membership_responsibilities[:, j] * (sample_data - self.mean_values[j]) ** 2) /component_sums[j])# 判斷收斂# 復制當前的均值數組new_mean_values = np.copy(self.mean_values)# 復制當前的標準差數組new_std_deviations = np.copy(self.std_deviations)# 復制當前的權重數組new_weights = np.copy(self.weights)# 計算新均值和舊均值之間的差異mean_diff = np.linalg.norm(new_mean_values - self.mean_values)# 計算新標準差和舊標準差之間的差異std_dev_diff = np.linalg.norm(new_std_deviations - self.std_deviations)# 計算新權重和舊權重之間的差異weight_diff = np.linalg.norm(new_weights - self.weights)# 如果所有差異都小于收斂閾值,則認為算法收斂,跳出循環if mean_diff < self.convergence_threshold and std_dev_diff < self.convergence_threshold and weight_diff < self.convergence_threshold:break# 返回估計的均值、標準差和權重return self.mean_values, self.std_deviations, self.weights# 定義可視化方法,用于將擬合結果進行可視化展示def visualize(self, sample_data):# 創建一個新的圖形窗口,設置窗口大小為10x6英寸plt.figure(figsize=(10, 6))# 繪制數據的直方圖plt.hist(sample_data, bins=30, density=True, alpha=0.6, color='g', label='數據直方圖')# 生成用于繪制概率密度函數的x軸值x_axis_values = np.linspace(np.min(sample_data) - 1, np.max(sample_data) + 1, 1000)# 遍歷每個高斯分量for j in range(self.num_components):# 繪制每個高斯分量的概率密度函數plt.plot(x_axis_values,self.weights[j] * self.gaussian_probability_density_function(x_axis_values, self.mean_values[j],self.std_deviations[j]),label=f'高斯(分布) {j + 1}')# 初始化總的高斯混合模型的概率密度數組total_gmm_density = np.zeros_like(x_axis_values)# 遍歷每個高斯分量for j in range(self.num_components):# 累加每個高斯分量的概率密度函數得到總的高斯混合模型的概率密度total_gmm_density += self.weights[j] * self.gaussian_probability_density_function(x_axis_values,self.mean_values[j],self.std_deviations[j])# 繪制總的高斯混合模型的概率密度函數,用紅色虛線表示plt.plot(x_axis_values, total_gmm_density, 'r--', label='高斯混合模型')# 設置圖形的標題plt.title('高斯混合模型擬合')# 設置x軸的標簽plt.xlabel('數據')# 設置y軸的標簽plt.ylabel('密度')# 顯示圖例plt.legend()# 顯示圖形plt.show()# 當腳本作為主程序運行時執行以下代碼
if __name__ == "__main__":# 設置隨機數種子,確保結果可復現np.random.seed(0)# 生成樣本數據,由兩個不同均值和標準差的正態分布樣本拼接而成sample_data = np.concatenate([np.random.normal(0, 1, 50), np.random.normal(5, 1, 50)])# 設置高斯混合模型中高斯分量的數量num_components = 2# 創建MaximumExpectedValue類的實例maximum_expected_value = MaximumExpectedValue(num_components)# 調用期望最大化算法進行參數估計mean_values, std_deviations, weights = maximum_expected_value.expectation_maximization_algorithm(sample_data)# 打印估計的均值print(f"估計的均值: {mean_values}")# 打印估計的標準差print(f"估計的標準差: {std_deviations}")# 打印估計的權重print(f"估計的權重: {weights}")# 調用可視化方法展示擬合結果maximum_expected_value.visualize(sample_data)

運行結果

估計的均值: [0.1163709  4.94665325]
估計的標準差: [1.10985417 0.91259302]
估計的權重: [0.49414197 0.50585803]進程已結束,退出代碼為 0

這段代碼主要實現了使用期望最大化(EM)算法擬合高斯混合模型(GMM)并進行可視化的功能。導入numpy用于數值計算,導入matplotlib并配置其繪圖相關設置。

gaussian_probability_density_function方法計算高斯概率密度,expectation_maximization_algorithm方法實現EM算法,通過E步計算樣本責任度M步更新模型參數并判斷收斂visualize方法繪制數據直方圖及模型概率密度函數曲線以可視化擬合結果。

這段代碼其實在對復雜數據分布建模、進行聚類分析與異常檢測方面有著重要作用,且可視化有助于理解數據和模型。希望此段代碼能給大家在實際項目中作參考。

算法優點

  • 廣泛適用性:最大期望值算法不依賴于數據的具體分布形式,適用于各種含有隱變量的模型,無論是在自然語言處理、計算機視覺還是其他領域,只要存在隱變量的問題,都可以嘗試使用該算法求解。
  • 原理簡單且易于實現:算法的核心思想是基于期望和最大化兩個基本步驟的迭代,原理相對直觀,實現起來也并不復雜。通過不斷重復這兩個步驟,就能夠逐步逼近最優解,這種迭代的方式使得算法在實際應用中具有很高的可操作性。
  • 收斂性有理論保障:在一定的條件下,最大期望值算法能夠保證收斂到局部最優解。雖然不能保證收斂到全局最優解,但在許多實際問題中,局部最優解已經能夠滿足需求。而且,通過多次隨機初始化參數并運行算法,可以在一定程度上提高找到更優解的概率。

算法缺點

  • 容易陷入局部最優解:由于算法是基于迭代的方式逐步優化參數,很容易受到初始值的影響而陷入局部最優解。不同的初始值可能導致最終得到的結果差異很大,在復雜的模型和數據情況下,找到全局最優解變得非常困難。
  • 計算復雜度較高:在每次迭代的E步M步中,都需要對所有數據進行計算。當數據量非常大時,計算隱變量的期望值以及最大化似然函數的計算量會顯著增加,導致算法的運行時間變長,計算效率較低。
  • 對模型的依賴性強:最大期望值算法的性能很大程度上依賴于所選擇的模型。如果模型本身不能很好地擬合數據,即使算法收斂,得到的結果也可能不理想。而且,在選擇模型時,需要對數據有一定的先驗知識,否則可能選擇不合適的模型,影響算法效果。

結論賦能

最大期望值算法作為自然語言處理中處理隱變量問題的重要工具,憑借其廣泛的適用性、簡單的原理和有保障的收斂性,在眾多任務中發揮著不可或缺的作用。它為我們解決自然語言處理中復雜的數據問題提供了有效的方法,幫助我們從含有隱變量的文本數據中挖掘出有價值的信息。

然而,其容易陷入局部最優解、計算復雜度高以及對模型依賴性強的缺點也限制了它在一些場景中的應用。在實際使用中,需要根據具體的自然語言處理任務和數據特點,謹慎選擇是否使用最大期望值算法。可以通過合理選擇初始值、結合其他優化算法或者對數據進行預處理等方式來彌補其不足,以更好地實現自然語言處理的目標。

結束

好了,以上就是本次分享的全部內容,希望大家對最大期望值算法有了更多的認識。從它的基礎概念,像隱變量、不完整數據以及似然函數,到核心思想的期望和最大化兩個步驟的配合,再到具體的算法流程、與高斯模型的緊密聯系,還有實際的代碼實現,以及對其優缺點的深入分析,我們層層遞進,深入探索了這個在自然語言處理中極為重要的算法。

回顧一下,最大期望值算法為我們處理自然語言處理中那些含有隱變量的數據提供了一種有效的途徑。它通過不斷迭代期望步驟和最大化步驟,逐漸優化模型參數,讓模型能更好地擬合數據。就像我們代碼中展示的,在擬合高斯混合模型時,它能準確地估計出每個高斯分布的參數,并且通過可視化讓我們直觀地看到模型與數據的擬合效果。

希望大家在今后的學習和實踐中,如果遇到自然語言處理中涉及隱變量的問題,能夠想到最大期望值算法這個有力的工具。同時,也不要局限于此,要結合其他方法,充分發揮它的優勢,克服其不足,從而更好地解決實際問題。

那么本次分享就到這里了。最后,博主還是那句話:請大家多去大膽的嘗試和使用,成功總是在不斷的失敗中試驗出來的,敢于嘗試就已經成功了一半。如果大家對博主分享的內容感興趣或有幫助,請點贊和關注。大家的點贊和關注是博主持續分享的動力🤭,博主也希望讓更多的人學習到新的知識。?

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

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

相關文章

【從零開始學習計算機科學】計算機體系結構(一)計算機體系結構、指令、指令集(ISA)與量化評估

【從零開始學習計算機科學】計算機體系結構(一)計算機體系結構、指令、指令集(ISA)與量化評估 概論計算機體系結構簡介計算機的分類并行體系結構指令集體系結構(ISA)分類存儲器尋址尋址模式操作數大小指令ISA的編碼程序的優化計算機體系結構量化評估存儲器體系結構概論 …

Electron使用WebAssembly實現CRC-32 常用標準校驗

Electron使用WebAssembly實現CRC-32 常用標準校驗 將C/C語言代碼&#xff0c;經由WebAssembly編譯為庫函數&#xff0c;可以在JS語言環境進行調用。這里介紹在Electron工具環境使用WebAssembly調用CRC-32 常用標準格式校驗的方式。 CRC-32 常用標準校驗函數WebAssembly源文件…

Docker基礎篇——Ubuntu下Docker安裝

大家好我是木木&#xff0c;在當今快速發展的云計算與云原生時代&#xff0c;容器化技術蓬勃興起&#xff0c;Docker 作為實現容器化的主流工具之一&#xff0c;為開發者和運維人員帶來了極大的便捷 。下面我們一起進行Docker安裝。 Docker的官方Ubuntu安裝文檔&#xff0c;如…

第五課:Express框架與RESTful API設計:技術實踐與探索

在使用Node.js進行企業應用開發&#xff0c;常用的開發框架Express&#xff0c;其中的中間件、路由配置與參數解析、RESTful API核心技術尤為重要&#xff0c;本文將深入探討它們在應用開發中的具體使用方法&#xff0c;最后通過Postman來對開發的接口進行測試。 一、Express中…

mitmproxy配合Wireshark 抓包分析

Mitmproxy 是一款非常強大的 交互式 HTTP 代理 工具&#xff0c;它被廣泛應用于 Web 開發、API 調試、安全測試 等領域。與 Wireshark 側重于被動監聽網絡流量不同&#xff0c;Mitmproxy 更像一個 主動的中間人&#xff0c;可以攔截、檢查、修改和重放 HTTP/HTTPS 流量&#xf…

Varlens(手機上的單反)Ver.1.9.3 高級版.apk

Varlens 是一款專業級手機攝影軟件&#xff0c;旨在通過豐富的功能和高自由度參數調節&#xff0c;讓手機拍攝效果媲美微單相機。以下是核心功能總結&#xff1a; 一、核心功能 專業拍攝模式 支持手動/自動/程序模式&#xff0c;可調節ISO、快門速度、EV、白平衡等參數27 提供…

Scala 中的訪問修飾符

在Scala中&#xff0c;面向對象的權限控制主要通過訪問修飾符來實現。Scala提供了以下幾種訪問修飾符來控制類、對象、成員變量和方法的訪問權限&#xff1a; 1. 默認訪問權限&#xff08;無修飾符&#xff09; 如果沒有指定任何訪問修飾符&#xff0c;成員默認是public的&…

第十五屆藍橋杯省賽電子類單片機學習過程記錄(客觀題)

客觀試題: 01.典型的BUCK電源電路包含哪些關鍵器件(ABCD) A. 電容 B. 二極管 C. 電感 D. MOSFET 解析: 典型的 BUCK 電源電路是一種降壓型的直流-直流轉換電路,它包含以下關鍵器件: A.電容:電容在電路中起到濾波的作用。輸入電容用于平滑輸入電壓的波動,減少電源噪聲對…

Dify使用日常:我是如何按標題級別將word中的內容轉存到excel中的

先上效果圖 word中的內容 轉存到excel之后 實現步驟&#xff1a; 1、在dify中創建一個工作流&#xff0c;如上圖 2、在開始節點增加一個支持文件上傳的變量 3、添加文檔提取器&#xff0c;提取上傳的文件中的內容 4、添加大模型節點&#xff0c;將文檔提取器提取出來的內容&…

Vue 框架深度解析:源碼分析與實現原理詳解

文章目錄 一、Vue 核心架構設計1.1 整體架構流程圖1.2 模塊職責劃分 二、響應式系統源碼解析2.1 核心類關系圖2.2 核心源碼分析2.2.1 數據劫持實現2.2.2 依賴收集過程 三、虛擬DOM與Diff算法實現3.1 Diff算法流程圖3.2 核心Diff源碼 四、模板編譯全流程剖析4.1 編譯流程圖4.2 編…

IDEA與Maven使用-學習記錄(持續補充...)

1. 下載與安裝 以ideaIU-2021.3.1為例&#xff0c;安裝步驟&#xff1a; 以管理員身份啟動ideaIU-2021.3.1修改安裝路徑為&#xff1a;D:\Program Files\JetBrains\IntelliJ IDEA 2021.3.1勾選【創建桌面快捷方式】&#xff08;可選&#xff09;、【打開文件夾作為項目】&…

認識vue2腳手架

1.認識腳手架結構 使用VSCode將vue項目打開&#xff1a; package.json&#xff1a;包的說明書&#xff08;包的名字&#xff0c;包的版本&#xff0c;依賴哪些庫&#xff09;。該文件里有webpack的短命令&#xff1a; serve&#xff08;啟動內置服務器&#xff09; build命令…

SQL經典查詢

查詢不在表里的數據&#xff0c;一張學生表&#xff0c;一張學生的選課表&#xff0c;要求查出沒有選課的學生&#xff1f; select students.student_name from students left join course_selection on students.student_idcourse_selection.student_id where course_selecti…

《機器學習數學基礎》補充資料:過渡矩陣和坐標變換推導

盡管《機器學習數學基礎》這本書&#xff0c;耗費了比較長的時間和精力&#xff0c;怎奈學識有限&#xff0c;錯誤難免。因此&#xff0c;除了在專門的網頁&#xff08; 勘誤和修訂 &#xff09;中發布勘誤和修訂內容之外&#xff0c;對于重大錯誤&#xff0c;我還會以專題的形…

解鎖DeepSpeek-R1大模型微調:從訓練到部署,打造定制化AI會話系統

目錄 1. 前言 2.大模型微調概念簡述 2.1. 按學習范式分類 2.2. 按參數更新范圍分類 2.3. 大模型微調框架簡介 3. DeepSpeek R1大模型微調實戰 3.1.LLaMA-Factory基礎環境安裝 3.1大模型下載 3.2. 大模型訓練 3.3. 大模型部署 3.4. 微調大模型融合基于SpirngBootVue2…

第七課:Python反爬攻防戰:Headers/IP代理與驗證碼

在爬蟲開發過程中&#xff0c;反爬蟲機制成為了我們必須面對的挑戰。本文將深入探討Python爬蟲中常見的反爬機制&#xff0c;并詳細解析如何通過隨機User-Agent生成、代理IP池搭建以及驗證碼識別來應對這些反爬策略。文章將包含完整的示例代碼&#xff0c;幫助讀者更好地理解和…

Vue3——Fragment

文章目錄 一、Fragment的核心意義1. 解決Vue2的單根限制問題2. 減少不必要的 DOM 嵌套3. 語義化和結構化 二、Fragment 的實現原理三、Fragment 使用方式1. 基本用法2. 結合條件渲染3. 動態組件 四、實際應用場景1. 列表/表格組件2. 布局組件3. 語義化標簽 五、注意事項1. 屬性…

字節跳動C++客戶端開發實習生內推-抖音基礎技術

智能手機愛好者和使用者&#xff0c;追求良好的用戶體驗&#xff1b; 具有良好的編程習慣&#xff0c;代碼結構清晰&#xff0c;命名規范&#xff1b; 熟練掌握數據結構與算法、計算機網絡、操作系統、編譯原理等課程&#xff1b; 熟練掌握C/C/OC/Swift一種或多種語言&#xff…

【Linux學習筆記】Linux基本指令分析和權限的概念

【Linux學習筆記】Linux基本指令分析和權限的概念 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;Linux學習筆記 文章目錄 【Linux學習筆記】Linux基本指令分析和權限的概念前言一. 指令的分析1.1 alias 指令1.2 grep 指令1.3 zip/unzip 指…

數據庫索引的作用:提升數據檢索效率的關鍵

在數據庫管理系統中&#xff0c;數據如同浩瀚海洋中的寶藏&#xff0c;如何快速準確地找到所需信息&#xff0c;成為了一個關鍵問題。這時候&#xff0c;數據庫索引就如同一張精確的航海圖&#xff0c;指引著我們高效地定位數據。那么&#xff0c;數據庫索引究竟是什么&#xf…