<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【NLP】使用Transformer模型進行文本分類

          共 3486字,需瀏覽 7分鐘

           ·

          2021-10-21 13:13

          作者 | Eric Fillion

          編譯 | VK
          來源 | Towards Data Science

          文本分類是NLP最常見的應用。與大多數(shù)NLP應用一樣,Transformer模型近年來在該領域占據(jù)主導地位。

          在本文中,我們將討論如何使用Python包(我是名為Happy Transformer的主要維護者)實現(xiàn)和訓練文本分類Transformer模型,該包只需幾行代碼。

          Happy Transformer構建在Hugging Face的transformers庫之上,允許程序員只需幾行代碼即可實現(xiàn)和訓練Transformer模型。

          預訓練模型

          在Hugging Face的模型網(wǎng)絡上,有100種預訓練文本分類模型可供選擇。

          因此,我建議,在你花費太多時間擔心模型訓練之前,先看看是否有人已經(jīng)為你的特定應用程序對模型進行了微調。

          例如,我已經(jīng)制作了關于如何實現(xiàn)用于情緒分析和仇恨語音檢測的預訓練Transformer模型的內容。

          在本教程中,我們將實現(xiàn)一個名為finbert的模型,該模型由一家名為Prosus的公司創(chuàng)建。該模型檢測金融數(shù)據(jù)的情緒。

          安裝

          Happy Transformer在PyPI上可用,因此我們可以用一行代碼安裝它。

          pip?install?happytransformer

          實例化

          讓我們導入一個名為HappyTextClassification的類,我們將使用它加載模型。

          from?happytransformer?import?HappyTextClassification

          從這里,我們可以使用HappyTextClassification類為模型實例化一個對象。

          第一個position參數(shù)指定模型的類型。例如,“BERT”、“ROBERTA”和“ALBERT”都是有效的模型名稱。第二個position參數(shù)表示模型的名稱,可以在模型的網(wǎng)頁上找到。最后一個參數(shù)是一個名為“num_labels”的參數(shù),它指定模型擁有的類的數(shù)量。在本例中,模型有三個標簽:“正”、“中性”和“負”

          重要提示:實例化模型時不要忘記設置num_labels。否則,可能會發(fā)生錯誤。

          happy_tc?=?HappyTextClassification("BERT",?"ProsusAI/finbert",?num_labels=3)

          用法

          我們可以?使用“classify_text”方法,只需一行代碼即可開始對文本進行分類

          result?=?happy_tc.classify_text("Tesla's?stock?just?increased?by?20%")

          讓我們把結果打印出來,以便更好地理解它。

          print(result)

          Output: TextClassificationResult(label=’positive’, score=0.929110586643219)

          如你所見,?輸出是一個數(shù)據(jù)類,有兩個變量:“l(fā)abel”和“score”。

          label是一個字符串,用于指示輸入被分類到哪個類。“score”變量指定模型將答案分配為浮點數(shù)的概率。我們不能孤立這兩個變量。

          print(result.label)?
          print(result.score)

          Result:

          positive

          0.929110586643219

          下面是另一個示例。

          result?=?happy_tc.classify_text("The?price?of?gold?just?dropped?by?5%")?
          print(result.label)
          print(result.score)

          Output:

          negative

          0.8852565288543701

          訓練-NLP情緒分析

          現(xiàn)在我們來討論訓練。我們將訓練一個模型來檢測與NLP相關的文本情感。我們將僅使用兩個示例進行訓練—當然,這還不足以可靠地訓練模型。但是,這只是為了示范。

          我們必須創(chuàng)建一個包含兩列的CSV文件:文本和標簽。文本列包含我們希望分類的文本。“標簽”列將標簽類型包含為大于或等于0的整數(shù)。下表給出了訓練CSV的示例。

          下面是生成上述CSV文件的代碼:

          import?csv

          cases=?[("Wow?I?love?using?BERT?for?text?classification",?0),?("I?hate?NLP",?1)]

          with?open("train.csv",?'w',?newline='')?as?csvfile:
          ????????writer?=?csv.writer(csvfile)
          ????????writer.writerow(["text",?"label"])
          ????????for?case?in?cases:
          ????????????writer.writerow([case[0],?case[1]])

          首先,我們將安裝DistilBERT的普通版本作為起點。還有其他模型可以使用,如 BERT, ALBERT, RoBERTa等。更多型號請訪問Hugging Face的模型網(wǎng)絡:https://huggingface.co/models。

          happy_tc?=?HappyTextClassification(model_type="DISTILBERT",?model_name="distilbert-base-uncased",?num_labels=2)

          然后,我們可以使用新實例化的類簡單地調用方法“train”。

          happy_tc.train("train.csv")

          就這樣!我們剛剛訓練了模型。我們現(xiàn)在可以使用它,就像我們在上一節(jié)中所做的那樣。例如,你現(xiàn)在可以像以前一樣調用“happy_tc.classify_text”,并將使用新的微調模型。

          自定義參數(shù)

          通過使用一個名為“TCTrainArgs”的類,我們可以輕松地修改學習參數(shù),例如epoch數(shù)、學習率等。

          from?happytransformer?import?TCTrainArgs

          現(xiàn)在,我們可以使用TCTrainArgs類創(chuàng)建一個對象來包含訓練參數(shù)。可以修改的參數(shù)列表:https://happytransformer.com/text-classification/finetuning/。讓我們將默認的訓練次數(shù)從3增加到5。

          args?=?TCTrainArgs(num_train_epochs=5)

          讓我們像以前一樣調用happy_tc的train方法,但這次將args對象傳遞到該方法的args參數(shù)中。

          happy_tc.train("train.csv",?args=args)

          好了,我們修改了學習參數(shù)!

          評價

          HappyTextGeneration對象有一個內置方法,允許你快速評估模型。

          首先,按照訓練中討論的格式格式化數(shù)據(jù),然后調用“.eval”方法。為了簡單起見,讓我們使用訓練文件進行評估。

          result?=?happy_tc.eval("train.csv")?
          print(result)

          Result: EvalResult(loss=0.2848379611968994)

          然后我們可以像這樣分離損失變量:

          print(result.loss)

          Output: 0.2848379611968994

          我建議你將整體數(shù)據(jù)的一部分用于訓練,另一部分用于評估。然后,在訓練前后評估你的模型。如果損失減少,則表示你的模型已學習。

          你還可以創(chuàng)建數(shù)據(jù)的第三部分,用于運行實驗,以找到最佳的學習參數(shù)

          結論

          就這樣!你剛剛學習了如何實現(xiàn)和訓練文本分類Transformer模型。使用Happy Transformer只需幾行就可以完成這么多工作!。

          相關文章

          本文中的代碼:

          https://colab.research.google.com/drive/1Jq3o8whsgEL994noS14qyv98jt5We-pU?usp=sharing


          往期精彩回顧




          站qq群554839127,加入微信群請掃碼:
          瀏覽 90
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夜夜拍日日夜夜拍 | 最新国产三级 | 成人午夜免费毛片 | 香蕉女人久久 | 日日干日日 |