日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多标签文本分类 [ALBERT](附代码)

發(fā)布時間:2025/3/21 编程问答 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多标签文本分类 [ALBERT](附代码) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目前,中文多標(biāo)簽文本分類的方法主要有3種,今天我們來詳細(xì)介紹及實(shí)踐其中的一種,算法框架使用的是ALBERT。

一、介紹

  • 此項目是在tensorflow版本1.14.0的基礎(chǔ)上做的訓(xùn)練和測試。
  • 任務(wù)類型為中文多標(biāo)簽文本分類,一共有K個標(biāo)簽:??。標(biāo)簽兩兩之間的關(guān)系有的是independent,有的是non independent。
  • 模型的輸入為一個sentence,輸出為一個或者多個label。
  • 簡單介紹一個例子。
  • 假設(shè)個人愛好的集合一共有6個元素:運(yùn)動、旅游、讀書、工作、睡覺、美食。

    一般情況下,一個人的愛好有這其中的一個或者多個,那么這就是一個典型的多標(biāo)簽分類任務(wù)。

    二、框架及算法

    1、Placeholder

    首先,我們需要設(shè)置一些占位符(Placeholder),占位符的作用是在訓(xùn)練和推理的過程中feed模型需要的數(shù)據(jù)。我們這里需要4個占位符,分別是input_ids、input_masks、segment_ids和label_ids。前面3個是我們了解的BERT輸入特征,最后面一個是標(biāo)簽的id。

    2、ALBERT token-vectors

    從圖中紅色的框內(nèi)可以看出,ALBERT需要傳入3個參數(shù)(input_ids、input_masks、segment_ids),就可以得到我們所需要的一個2維向量output_layer:(batch_size, hidden_size)。

    有人在這里就會好奇,為什么ALBERT輸出的是一個2維向量,而不是一個3維向量(batch_size, sequence_length, hidden_size)呢?那我們來看一下源碼,弄清楚self.model.get_pooled_output()的來歷。

    其中self.sequence_ouput其實(shí)就是我們所說的那個3維向量(batch_size, sequence_length, hidden_size)。我們對這個3維向量做了一個"pooler"的操作,從而使之變成了一個2維的向量,這個操作是上面藍(lán)色方框內(nèi)的內(nèi)容。

    藍(lán)色方框內(nèi)的解釋為:”We "pool" the model by simply taking the hidden state corresponding to the first token. We assume that this has been pre-trained“。這句話怎么理解呢?意思是將整個句子的特征信息投射到句子第一個字的隱藏狀態(tài)向量上面。并且,認(rèn)為這個它是通過預(yù)訓(xùn)練得到的。

    3、Full connection

    最后,就是一個全連接層了。很簡單,全連接層的作用是將output_layer投射到我們的標(biāo)簽上面。

    4、上面3點(diǎn)在多標(biāo)簽文本分類和文本分類并沒有區(qū)別。那么區(qū)別在哪里呢?

    主要有以下3個區(qū)別:

    • 交叉熵
    • 輸出概率
    • 輸出標(biāo)簽

    4.1、交叉熵

    在文本分類中,我們使用的交叉熵為tf.nn.softmax_cross_entropy_with_logits;在多標(biāo)簽文本分類中,我們使用的交叉熵則為tf.nn.sigmoid_cross_entropy_with_logits。這樣做的原因:

    • tf.nn.sigmoid_cross_entropy_with_logits測量離散分類任務(wù)中的概率誤差,其中每個類是獨(dú)立的而不是互斥的。這適用于多標(biāo)簽分類問題。
    • tf.nn.softmax_cross_entropy_with_logits測量離散分類任務(wù)中的概率誤差,其中類之間是互斥的(每個條目恰好在一個類中)。這適用多分類問題。

    4.2、輸出概率

    在文本分類中,輸出概率為tf.nn.softmax(logits, axis=-1);在多標(biāo)簽文本分類中,輸出概率為tf.nn.sigmoid(logits)。這樣做的原因:

    • 在簡單的二進(jìn)制分類中,sigmoid和softmax沒有太大的區(qū)別。
    • 在多分類的情況下,sigmoid允許處理非獨(dú)占標(biāo)簽(也稱為多標(biāo)簽),而softmax處理獨(dú)占類。

    4.3、輸出標(biāo)簽

    在文本分類(多元文本分類)中,label_ids的維度為(batch_size);在多標(biāo)簽文本分類中,它的維度為(batch_size,num_labels)。這樣做的原因:

    • 在多元文本分類中,最后得到的標(biāo)簽只有一個,并且必須是其中的一個。
    • 在多標(biāo)簽文本分類中,最后得到的標(biāo)簽可能有1個或者多個。

    一般的多元分類是通過tf.argmax(logits)實(shí)現(xiàn),返回的是最大的那個數(shù)值所在的label_id,因為logits對應(yīng)每一個label_id都有一個概率。但是,在多標(biāo)簽分類中,我們需要得到的是每一個標(biāo)簽是否可以作為輸出標(biāo)簽,所以每一個標(biāo)簽可以作為輸出標(biāo)簽的概率都會量化為一個0到1之間的值。所以當(dāng)某一個標(biāo)簽對應(yīng)輸出概率小于0.5時,我們認(rèn)為它不能作為當(dāng)前句子的輸出標(biāo)簽;反之,如果大于等于0.5,那么它代表了當(dāng)前句子的輸出標(biāo)簽之一。

    三、實(shí)踐及框架圖

    1、框架圖

    2、模型Loss和Accuracy變化曲線圖

    我們可以發(fā)現(xiàn),這里的Loss和Accuracy的變化趨勢和多元文本分類有較大的區(qū)別。在多標(biāo)簽文本分類的訓(xùn)練過程中,Loss的下降幅度非常快,但并不代表模型的收斂快。在多元文本分類的訓(xùn)練過程中,Loss一般在0.1-0.2之間的時候,模型基本上已經(jīng)收斂。但是,在多標(biāo)簽文本分類(當(dāng)前框架下)的過程中,當(dāng)Loss到達(dá)0.1-0.2時,模型收斂還需較多的steps。根據(jù)訓(xùn)練經(jīng)驗,在多標(biāo)簽文本分類(這個框架下)的情況下,Loss往往要達(dá)到0.0001-0.001之間,模型才收斂。

    四、代碼鏈接

    hellonlp/classifier_multi_label?github.com

    其它相關(guān)文章:

    HelloNLP:多標(biāo)簽文本分類介紹,以及對比訓(xùn)練?zhuanlan.zhihu.com

    編輯于 03-02

    總結(jié)

    以上是生活随笔為你收集整理的多标签文本分类 [ALBERT](附代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。