0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用樸素貝葉斯和GPU進(jìn)行更快的文本分類

星星科技指導(dǎo)員 ? 來源:NVIDIA ? 作者:NVIDIA ? 2022-10-10 14:50 ? 次閱讀

樸素貝葉斯( NB )是一種簡單但功能強(qiáng)大的概率分類技術(shù),具有良好的并行性,可以擴(kuò)展到大規(guī)模數(shù)據(jù)集。

如果您一直從事數(shù)據(jù)科學(xué)中的文本處理任務(wù),您就會知道 機(jī)器學(xué)習(xí) 模型可能需要很長時間來訓(xùn)練。在這些模型上使用 GPU 加速計算通常可以顯著提高時間性能, NB 分類器也不例外。

通過使用 CUDA 加速操作,根據(jù)使用的 NB 模型,我們實(shí)現(xiàn)了從 5 到 20 倍的性能提升。對稀疏數(shù)據(jù)的智能利用使其中一個模型的速度提高了 120 倍。

在本文中,我們介紹了 RAPIDS cuML 中 NB 實(shí)現(xiàn)的最新升級,并將其與 Scikit-learn 在 CPU 上的實(shí)現(xiàn)進(jìn)行了比較。我們提供基準(zhǔn)測試來演示性能優(yōu)勢,并通過算法的每個支持變量的簡單示例來幫助您確定哪個最適合您的用例。

什么是樸素貝葉斯?

NB 使用 Bayes’ theorem (圖 1 )對如下所示的條件概率分布進(jìn)行建模,以預(yù)測給定一些輸入特征( x )的標(biāo)簽或類別( y )。在其最簡單的形式中,貝葉斯定理使用特征和可能標(biāo)簽之間的聯(lián)合概率以及特征在所有可能標(biāo)簽上出現(xiàn)的邊際概率來計算條件概率。

poYBAGNDwMKAZkJzAACZ63VpO-E274.png

圖 1.貝葉斯定理表示由一組特征( x )產(chǎn)生的標(biāo)簽( y )的概率作為條件概率。它是使用每個標(biāo)簽與特征集發(fā)生的聯(lián)合概率和特征在所有可能標(biāo)簽上發(fā)生的邊際概率來計算的

NB 算法在文本分類用例中表現(xiàn)良好。它們通常用于過濾垃圾郵件等任務(wù);預(yù)測推特、網(wǎng)頁、博客帖子、用戶評分和論壇帖子的類別和情感;或?qū)ξ臋n和網(wǎng)頁進(jìn)行排名。

NB 算法通過使每個特征(例如,輸入向量 x 中的每列)在統(tǒng)計上獨(dú)立于所有其他特征來簡化條件概率分布 naive assumption 。這使得該算法很棒,因?yàn)檫@種天真的假設(shè)提高了算法的并行化能力。此外,計算特征和類標(biāo)簽之間簡單共生概率的一般方法使模型能夠進(jìn)行增量訓(xùn)練,支持不適合內(nèi)存的數(shù)據(jù)集。

NB 有幾種變體,它們對各種類別標(biāo)簽的聯(lián)合分布或共同出現(xiàn)的特征進(jìn)行了某些假設(shè)。

樸素貝葉斯假設(shè)

為了預(yù)測未知輸入特征集的類別,關(guān)于聯(lián)合分布的不同假設(shè)使算法具有幾種不同的變體,該算法通過學(xué)習(xí)不同概率分布的參數(shù)來建模特征分布。

表 1 模擬了一個簡單的文檔/術(shù)語矩陣,該矩陣可以來自文本文檔集合。列中的術(shù)語代表一個詞匯表。一個簡單的詞匯表可能會將一個文檔分解為一組在所有文檔中出現(xiàn)的唯一單詞。

pYYBAGNDwO-AABfoAAARBhs2gN8581.png

表 1 。 包含沿行文檔和沿列出現(xiàn)在每個文檔中的詞匯的文檔/術(shù)語矩陣

在表 1 中,每個元素可以是一個計數(shù),如此處所示, 0 或 1 表示特征的存在,或其他一些值,如在整個文檔集上出現(xiàn)的每個項的比率、擴(kuò)散或離散度。

在實(shí)踐中,滑動窗口通常在整個文檔或術(shù)語上運(yùn)行,將它們進(jìn)一步劃分為小塊的單詞序列,稱為 n-grams 。對于下圖的第一個文檔, 2-gram (或 bigram )將是“ I love ”和“ love dogs ”。這類數(shù)據(jù)集中的詞匯通常會顯著增大并變得稀疏。預(yù)處理步驟通常在詞匯表上執(zhí)行,以過濾噪聲,例如,通過刪除大多數(shù)文檔中出現(xiàn)的常見術(shù)語。

將文檔轉(zhuǎn)換為文檔項矩陣的過程稱為矢量化。有一些工具可以加速這個過程,例如 CountVectorizer cuML 中的 CountVectorizer 、 TdfidfVectorizer 或 RAPIDS 估計器對象。

多項式和伯努利分布

表 1 表示一組文檔,這些文檔已矢量化為術(shù)語計數(shù),結(jié)果矩陣中的每個元素表示特定單詞在其相應(yīng)文檔中出現(xiàn)的次數(shù)。這種簡單的表示方法可以有效地用于分類任務(wù)。

由于特征代表頻率分布,多項式樸素貝葉斯變體可以有效地將特征及其相關(guān)類別的聯(lián)合分布建模為多項式分布。

可以通過合并色散度量來增強(qiáng)每個項的頻率分布,例如項頻率逆文檔頻率( TF-IDF ),它考慮了每個項中出現(xiàn)的文檔數(shù)量。這可以通過對出現(xiàn)在較少文檔中的術(shù)語賦予更多權(quán)重來顯著提高性能,從而提高其識別能力。

雖然多項式分布在直接與項頻率一起使用時效果很好,但它也被證明在分?jǐn)?shù)值上有很好的性能,如 TF-IDF 值。多項式樸素貝葉斯變體涵蓋了大量用例,因此往往是使用最廣泛的。類似的變體是伯努利樸素貝葉斯,它模擬每個項的簡單出現(xiàn),而不是它們的頻率,從而得到 0 和 1 的矩陣(伯努利分布)。

不等階級分布

在現(xiàn)實(shí)世界中,經(jīng)常會發(fā)現(xiàn)不平衡的數(shù)據(jù)集。例如,您可能有有限的垃圾郵件和惡意活動的數(shù)據(jù)樣本,但有豐富的正常和良性樣本。

補(bǔ)碼樸素貝葉斯變體通過在訓(xùn)練期間為每個類使用聯(lián)合分布的補(bǔ)碼,例如,在所有其他類的樣本中出現(xiàn)特征的次數(shù),有助于減少不平等類分布的影響。

分類分布

你也可以為你的每一個特征創(chuàng)建存儲箱,可能通過將一些頻率量化到多個存儲桶中,使得 0-5 的頻率進(jìn)入存儲桶 0 , 6-10 的頻率進(jìn)入存儲桶 1 ,等等。

另一種選擇是將幾個術(shù)語合并到一個功能中,可能是為“動物”和“假日”創(chuàng)建桶,其中“動物”可能有三個桶,零個用于貓科動物,一個用于犬科動物,兩個用于嚙齒動物?!凹偃铡笨赡苡袃蓚€桶,零用于個人假日,如生日或結(jié)婚紀(jì)念日,一個用于聯(lián)邦假日。

分類樸素貝葉斯 變體假設(shè)特征遵循分類分布。樸素假設(shè)在這種情況下效果很好,因?yàn)樗试S每個特征都有一組不同的類別,并且它使用(您猜對了)分類分布對聯(lián)合分布進(jìn)行建模。

連續(xù)分布

最后,當(dāng)特征是連續(xù)的時,高斯樸素貝葉斯 變體非常有效,可以假設(shè)每個類別中的特征分布可以用高斯分布建模,即用簡單的均值和方差。

雖然這種變體在 TF-IDF 歸一化后可能在某些數(shù)據(jù)集上表現(xiàn)出良好的性能,但它在一般機(jī)器學(xué)習(xí)數(shù)據(jù)集上也很有用。

pYYBAGNDwPmABF2lAAAxOTSiB44257.png

表 2.不同 NB 算法的比較 s

真實(shí)世界的端到端示例

如表 2 所示,為了證明每種算法變體的優(yōu)點(diǎn),我們逐步瀏覽了每種算法變體的示例筆記本。有關(guān)包含所有示例的全面端到端筆記本,請參閱 news_aggregator_a100.ipynb 。

我們使用新聞聚合器數(shù)據(jù)集來演示 NB 變體的性能。該數(shù)據(jù)集可從 Kaggle 公開獲取,由來自多個新聞來源的 422K 條新聞標(biāo)題組成。每個標(biāo)題都標(biāo)有四個可能的標(biāo)簽之一:商業(yè)、科技、娛樂和健康。使用 cuDF RAPIDS 將數(shù)據(jù)直接加載到 GPU 上,并繼續(xù)執(zhí)行針對每個 NB 變體的預(yù)處理步驟。

高斯樸素貝葉斯

從高斯樸素貝葉斯 , 開始,我們運(yùn)行 TD-IDF 矢量器將文本數(shù)據(jù)轉(zhuǎn)換為可用于訓(xùn)練的實(shí)值向量。

通過指定ngram_range=(1,3),我們表示我們將學(xué)習(xí)單字以及 2-3-gram 。這顯著增加了要學(xué)習(xí)的術(shù)語或功能的數(shù)量,從 15K 個單詞增加到 180 萬個組合。由于大多數(shù)術(shù)語不會出現(xiàn)在大多數(shù)標(biāo)題中,因此生成的矩陣稀疏,許多值等于零。 cuML 支持特殊結(jié)構(gòu)來表示這樣的數(shù)據(jù)。

NB 分類器的另一個優(yōu)點(diǎn)是,可以使用partial_fit方法對Estimator對象進(jìn)行增量訓(xùn)練。這種技術(shù)適用于可能無法一次性放入內(nèi)存或必須分布在多個 GPU 中的大規(guī)模數(shù)據(jù)集。

我們的第一個示例演示了使用高斯樸素貝葉斯的增量訓(xùn)練,方法是在使用 TF-IDF 預(yù)處理為連續(xù)特征后,將數(shù)據(jù)分割成多個塊。高斯樸素貝葉斯的 cuML 版本在訓(xùn)練方面比 Scikit 學(xué)習(xí)快 21 倍,在推理方面快 72 倍。

伯努利樸素貝葉斯

下一個示例演示了伯努利樸素貝葉斯,無需增量訓(xùn)練,使用表示每個項存在或不存在的二進(jìn)制特征。CountVectorizer對象可以通過設(shè)置binary=True來實(shí)現(xiàn)這一點(diǎn)。在本例中,我們發(fā)現(xiàn)比 Scikit learn 快 14 倍。

多項式樸素貝葉斯

多項式樸素貝葉斯是最通用和最廣泛使用的變體,如以下示例所示。我們使用 TF-IDF 矢量器而不是CountVectorizer來實(shí)現(xiàn)比 Scikit learn 快 5 倍的速度。

補(bǔ)碼樸素貝葉斯

我們使用CountVectorizer證明了補(bǔ)碼樸素貝葉斯的威力,并表明在我們的不平衡數(shù)據(jù)集上,它比伯努利和多項式 NB 變體產(chǎn)生了更好的分類分?jǐn)?shù)。

范疇樸素貝葉斯

最后但絕對不是最不重要的是一個分類樸素貝葉斯的例子,我們使用 k-means 和之前在另一個 NB 變體上訓(xùn)練的模型對其進(jìn)行矢量化,以根據(jù)相似項對結(jié)果類的貢獻(xiàn)將其分組到相同的類別中。

我們發(fā)現(xiàn),與 Scikit 相比,使用 315K 條新聞標(biāo)題訓(xùn)練模型的速度提高了 126 倍,使用 23 倍的速度進(jìn)行推理和計算模型的準(zhǔn)確性。

基準(zhǔn)

圖 2 中的圖表比較了 RAPIDS cuML 和 Scikit learn 之間的 NB 訓(xùn)練和推理的性能,以及本文中概述的所有變體。

基準(zhǔn)測試是在a2-highgpu-8g谷歌云平臺( GCP )實(shí)例上執(zhí)行的,該實(shí)例配備了 NVIDIA Tesla A100 GPU 和 96 Intel Cascade Lake v CPU ,頻率為 2.2Ghz 。

圖 2.Scikit learn (藍(lán)色)和 cuML (綠色)之間的性能比較

GPU 加速樸素貝葉斯

我們能夠使用 CuPy 在 Python 中實(shí)現(xiàn)所有 NB 變體,這是一種 GPU 加速,幾乎可以替代 NumPy 和 SciPy 。 CuPy 還提供了用 Python 編寫自定義 CUDA 內(nèi)核的功能。當(dāng) Python 應(yīng)用程序運(yùn)行時,它使用 NVRTC 的即時( JIT )編譯功能在 GPU 上編譯和執(zhí)行它們。

所有 NB 變體的核心是兩個使用 CuPy 的 JIT 編寫的簡單原語,用于匯總和計算每個類的特征。

當(dāng)單個文檔項矩陣過大而無法在單個 GPU 上處理時, Dask 庫可以利用增量訓(xùn)練功能將處理擴(kuò)展到多個 GPU 和多個節(jié)點(diǎn)。目前,多項式變量可以在 cuML 中與 Dask 一起分布。

結(jié)論

NB 算法應(yīng)該在每個數(shù)據(jù)科學(xué)家的工具包中。使用 RAPIDS cuML ,您可以在 GPU 上加速 NB 的實(shí)現(xiàn),而無需大幅更改代碼。這些強(qiáng)大而基本的算法,再加上 cuML 的加速,提供了您必須在超大或稀疏數(shù)據(jù)集上執(zhí)行分類的一切。

關(guān)于作者

Mickael Ide 是 NVIDIA RAPIDS 團(tuán)隊的機(jī)器學(xué)習(xí)工程師,專注于開發(fā) GPU 加速的機(jī)器學(xué)習(xí)算法。米克爾擁有計算機(jī)科學(xué)碩士學(xué)位。

Corey Nolet 是 NVIDIA 的 RAPIDS ML 團(tuán)隊的數(shù)據(jù)科學(xué)家兼高級工程師,他專注于構(gòu)建和擴(kuò)展機(jī)器學(xué)習(xí)算法,以支持光速下的極端數(shù)據(jù)負(fù)載。在 NVIDIA 工作之前, Corey 花了十多年時間為國防工業(yè)的 HPC 環(huán)境構(gòu)建大規(guī)模探索性數(shù)據(jù)科學(xué)和實(shí)時分析平臺??评锍钟杏砉W(xué)士學(xué)位計算機(jī)科學(xué)碩士學(xué)位。他還在攻讀博士學(xué)位。在同一學(xué)科中,主要研究圖形和機(jī)器學(xué)習(xí)交叉點(diǎn)的算法加速??评餆嶂杂诶脭?shù)據(jù)更好地了解世界。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10804

    瀏覽量

    210829
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    4855

    瀏覽量

    102709
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    4673

    瀏覽量

    128592
收藏 人收藏

    評論

    相關(guān)推薦

    機(jī)器學(xué)習(xí)的樸素講解

    秦剛剛的機(jī)器學(xué)習(xí)成長之路之樸素
    發(fā)表于 05-15 14:41

    樸素法的優(yōu)缺點(diǎn)

    樸素法(1) 之 基礎(chǔ)概念
    發(fā)表于 08-05 11:32

    樸素法的惡意留言過濾

    樸素法(2) 之 惡意留言過濾
    發(fā)表于 08-26 14:40

    常用的分類方法:樸素

    統(tǒng)計學(xué)習(xí)方法樸素
    發(fā)表于 11-05 09:24

    樸素算法的理解

    我對樸素算法的理解
    發(fā)表于 05-15 14:13

    機(jī)器學(xué)習(xí)之樸素應(yīng)用教程

    方法輸出的是某一類的概率,其取值范圍在 0-1 之間,樸素在做文本分類,或者說垃圾郵件識別的時候非常有效。
    發(fā)表于 11-25 12:49 ?1367次閱讀
    機(jī)器學(xué)習(xí)之<b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>應(yīng)用教程

    基于概率的常見的分類方法--樸素

    方法輸出的是某一類的概率,其取值范圍在 0-1 之間,樸素在做文本分類,或者說垃圾郵件識別的時候非常有效。
    的頭像 發(fā)表于 02-03 14:37 ?5183次閱讀
    基于概率的常見的<b class='flag-5'>分類</b>方法--<b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>

    樸素NB經(jīng)典案例

    分類算法是統(tǒng)計學(xué)的一種分類方法,其分類原理就是利用
    發(fā)表于 02-28 10:17 ?2次下載

    一種新型樸素文本分類算法

    針對在文本分類中先驗(yàn)概率的計算比較費(fèi)時而且對分類效果影響不大、后驗(yàn)概率的精度損失影響分類準(zhǔn)確率的現(xiàn)象,對經(jīng)典樸素
    發(fā)表于 03-05 11:19 ?0次下載

    機(jī)器學(xué)習(xí)之樸素

    學(xué)習(xí)過概率的人一定知道貝葉斯定理,在信息領(lǐng)域內(nèi)有著無與倫比的地位。算法是基于貝葉斯定理的一類算法,主要用來解決分類和回歸問題。人工智能之機(jī)器學(xué)習(xí)中最為廣泛的兩種
    發(fā)表于 05-29 09:01 ?872次閱讀

    樸素算法詳細(xì)總結(jié)

    樸素法是基于貝葉斯定理與特征條件獨(dú)立假設(shè)的分類方法,是經(jīng)典的機(jī)器學(xué)習(xí)算法之一,處理很多問題時直接又高效,因此在很多領(lǐng)域有著廣泛的應(yīng)用,
    的頭像 發(fā)表于 07-01 08:37 ?3.5w次閱讀
    <b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>算法詳細(xì)總結(jié)

    如何使用Spark計算框架進(jìn)行分布式文本分類方法的研究

    ,分別在單機(jī)、Map Reduce和Spark三種不同的計算框架下測試了文本分類的效率,并使用控制變量的方法在Spark計算框架下設(shè)計對照實(shí)驗(yàn)。實(shí)驗(yàn)證明,Spark計算框架下的樸素
    發(fā)表于 12-18 14:19 ?3次下載
    如何使用Spark計算框架<b class='flag-5'>進(jìn)行</b>分布式<b class='flag-5'>文本分類</b>方法的研究

    一種特征假期樸素文本分類算法

    樸素(NB)算法應(yīng)用于文本分類時具有簡單性和高效性,但算法中屬性獨(dú)立性與重要性一致的假設(shè),使其在精確度方面存在瓶頸。針對該問題,提出一
    發(fā)表于 05-28 11:30 ?4次下載

    樸素分類 樸素算法的優(yōu)點(diǎn)

    。 雖然這個簡化方式在一定程度上降低了分類算法的分類效果,但是在實(shí)際的應(yīng)用場景中,極大地簡化了
    的頭像 發(fā)表于 10-02 17:14 ?9238次閱讀

    PyTorch教程22.9之樸素

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程22.9之樸素.pdf》資料免費(fèi)下載
    發(fā)表于 06-06 09:22 ?0次下載
    PyTorch教程22.9之<b class='flag-5'>樸素</b><b class='flag-5'>貝</b><b class='flag-5'>葉</b><b class='flag-5'>斯</b>