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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【NLP】使用Google的T5提取文本特征

發布時間:2025/3/12 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【NLP】使用Google的T5提取文本特征 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | Mike Casale

編譯 | VK
來源 | Towards Data Science

下圖是文本到文本框架的示意圖。每個任務都使用文本作為模型的輸入,通過訓練生成一些目標文本。

這允許在不同的任務中使用相同的模型、損失函數和超參數,包括翻譯(綠色)、語言可接受性(紅色)、句子相似性(黃色)和文檔摘要(藍色)。


在本文中,我們將演示如何使用Google T5對表格數據中的文本進行特征化。你可以使用這個存儲庫中的Jupyter筆記本:

https://github.com/mikewcasale/nlp_primitives

當試圖在機器學習管道中利用真實世界的數據時,通常會遇到書面文本—例如,在預測房地產估價時,有許多數字特征,例如:

  • “臥室數量”

  • “浴室數量”

  • “面積(平方英尺)”

  • “緯度”

  • “經度”

  • 等等…

但同時,也有大量的書面文本,比如在Zillow等網站的房地產上市描述中。這些文本數據可以包括許多其他方面沒有考慮到的有價值的信息,例如:

  • 開放式廚房/平面圖

  • 花崗巖個數

  • 硬木地板

  • 不銹鋼電器

  • 最近的裝修

  • 等等…

然而,令人驚訝的是,許多AutoML工具完全忽略了這些信息,因為諸如XGBoost之類的流行表格算法不能直接使用書面文本。

這就是Featuretools基本函數的用武之地。Featuretools旨在為不同類型的數據(包括文本)自動創建特征,然后表格機器學習模型可以使用這些數據。

在本文中,我們將展示如何擴展nlp Primitive庫,以便與Google最先進的T5模型一起使用,并在此過程中創建最重要的nlp特征,進而提高準確性。

關于T5

對于任何不熟悉T5的讀者來說,T5模型出現在谷歌的論文中,題目是Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer。

使用Hugging Face T5的一個機器學習demo

在NLP的背景下,Hugging Face Transformers是一個自然語言處理庫,對很多ML模型開放,并得到了像Flair、Asteroid、ESPnet、Pyannote等庫的支持。

為了擴展NLP庫以便與T5一起使用,我們將構建兩個自定義TransformPrimitive類。出于實驗目的,我們測試了兩種方法:

  • 微調Hugging Face T5-base

  • Hugging Face T5-base的情感分析

首先,讓我們加載基本模型。

from?simpletransformers.t5?import?T5Modelmodel_args?=?{"max_seq_length":?196,"train_batch_size":?8,"eval_batch_size":?8,"num_train_epochs":?1,"evaluate_during_training":?True,"evaluate_during_training_steps":?15000,"evaluate_during_training_verbose":?True,"use_multiprocessing":?False,"fp16":?False,"save_steps":?-1,"save_eval_checkpoints":?False,"save_model_every_epoch":?False,"reprocess_input_data":?True,"overwrite_output_dir":?True,"wandb_project":?None, }model?=?T5Model("t5",?"t5-base",?args=model_args)

第二,讓我們加載預訓練模型。

model_pretuned_sentiment?=?T5Model('t5','mrm8488/t5-base-finetuned-imdb-sentiment',use_cuda=True) model_pretuned_sentiment.args

為了對t5模型進行微調,需要對訓練數據進行重組和格式化。

從Kaggle數據集,我們將review_text列映射到一個名為input_text的新列,我們將review_rating列映射到一個名為target_text的新列,這意味著review_rating就是我們試圖預測的內容。

這些更改符合Simpletransformers庫接口,用于微調t5,其中主要的附加要求是指定一個“前綴”,用于幫助進行多任務訓練(注意:在本例中,我們將重點放在單個任務上,因此前綴不必使用,但是,我們無論如何都會定義它,以便于使用)。

dft5?=?df[['review_text','review_rating'] ].rename({ 'review_text':'input_text', 'review_rating':'target_text' },axis=1)dft5['prefix']?=?['t5-encode'?for?x?in?range(len(dft5))]dft5['target_text']?=?dft5['target_text'].astype(str)dft5

本例中的目標文本是消費者對給定餐廳的評分。我們可以通過以下方法輕松地微調T5模型

from?sklearn.model_selection?import?train_test_splittrain_df,?eval_df?=?train_test_split(dft5)model.train_model(train_df,?eval_data=eval_df)

接下來,我們加載預訓練模型。

test?=?['Great?drinks?and?food',? list(np.array(model.predict(test)).astype(float))'Good?food?&amp;?beer',Generating?outputs:?0%|?|?0/1?[00:00<?,??it/s]?Generating?outputs:?100%|██████████|?1/1?[00:00<00:00,?3.17it/s]?Generating?outputs:?100%|██████████|?1/1?[00:00<00:00,?3.16it/s]?Decoding?outputs:?0%|?|?0/3?[00:00<?,??it/s]?Decoding?outputs:?33%|███▎?|?1/3?[00:00<00:01,?1.14it/s]?Decoding?outputs:?100%|██████████|?3/3?[00:00<00:00,?3.43it/s]?Out[14]:?[4.0,?4.0,?4.0]?'Pretty?good?beers']

我們可以看到,微調模型輸出了review_rankings列表[4.0,4.0,4.0],這是一個預測結果。

接下來,讓我們使用預訓練的模型進行測試。

test?=?['Great?drinks?and?food',?'Good?food?&amp;?beer',?'Pretty?good?beers']list(np.where(np.array(model_pretuned_sentiment.predict(test))=='positive',?1.0,?0.0))Generating?outputs:???0%|??????????|?0/1?[00:00<?,??it/s]?Generating?outputs:?100%|██████████|?1/1?[00:00<00:00,??7.57it/s]?Generating?outputs:?100%|██████████|?1/1?[00:00<00:00,??7.56it/s]??Decoding?outputs:???0%|??????????|?0/3?[00:00<?,??it/s]?Decoding?outputs:??33%|███▎??????|?1/3?[00:00<00:01,??1.17it/s]?Decoding?outputs:?100%|██████████|?3/3?[00:00<00:00,??3.50it/s]?Out[15]:?[1.0,?1.0,?1.0]

注意,預訓練模型輸出一個布爾真/假值列表,該列表指示語句是正還是負-我們將它們轉換為浮點值,以便更好地與表格建模集成。在這種情況下,所有值都為true,因此輸出變為[1.0、1.0、1.0]。

既然我們已經加載了兩個版本的T5,我們可以構建TransformPrimitive類,這些類將與NLP和Featuretools庫集成。

from?featuretools.primitives.base?import?TransformPrimitive from?featuretools.variable_types?import?Numeric,?Textclass?T5Encoder(TransformPrimitive):name?=?"t5_encoder"input_types?=?[Text]return_type?=?Numericdefault_value?=?0def?__init__(self,?model=model):self.model?=?model????def?get_function(self):?def?t5_encoder(x):model.args.use_multiprocessing?=?Truereturn?list(np.array(model.predict(x.tolist())).astype(float))return?t5_encoder

以上代碼創建了一個名為T5編碼器的新類,該類將使用微調的T5模型,下面的代碼創建了一個名為T5SentimentEncoder的新類,該類將使用預訓練的T5模型。

class?T5SentimentEncoder(TransformPrimitive):name?=?"t5_sentiment_encoder"input_types?=?[Text]return_type?=?Numericdefault_value?=?0def?__init__(self,?model=model_pretuned_sentiment):self.model?=?modeldef?get_function(self):def?t5_sentiment_encoder(x):model.args.use_multiprocessing?=?Truereturn?list(np.where(np.array(model_pretuned_sentiment.predict(x.tolist()))=='positive',1.0,0.0))return?t5_sentiment_encoder

Featuretools現在知道如何使用T5來為文本列提供特征,它甚至會使用T5輸出計算聚合

定義了這些新類之后,我們只需將它們與默認類一起以所需的Featuretools格式包起來,這將使它們可用于自動化特征工程

trans?=?[T5Encoder,T5SentimentEncoder,DiversityScore,LSA,MeanCharactersPerWord,PartOfSpeechCount,PolarityScore,?PunctuationCount,StopwordCount,TitleWordCount,UniversalSentenceEncoder,UpperCaseCount]ignore?=?{'restaurants':?['rating'],'reviews':?['review_rating']}drop_contains?=?['(reviews.UNIVERSAL']features?=?ft.dfs(entityset=es,target_entity='reviews',trans_primitives=trans,verbose=True,features_only=True,ignore_variables=ignore,drop_contains=drop_contains,max_depth=4)

正如你在下面的輸出中看到的,Featuretools庫非常強大!事實上,除了這里顯示的T5特征之外,它還使用指定的所有其他NLP Primitive創建了數百個特征,非常酷!

feature_matrix?=?ft.calculate_feature_matrix(features=features,entityset=es,verbose=True)features

機器學習

現在我們使用包含新創建的T5 Primitive的特征矩陣從sklearn創建和測試各種機器學習模型。

作為提醒,我們將比較T5增強的精確度和Alteryx博客《自動特征工程的自然語言處理》中演示的精確度:https://innovation.alteryx.com/natural-language-processing-featuretools/

使用邏輯回歸:

請注意,上面的0.64邏輯回歸分數顯示了比Featuretools原生邏輯回歸分數0.63有0.01的改進。

使用隨機林分類器:

請注意,上面T5增強的0.65隨機林分類器分數顯示了比Featuretools本機隨機林分類器分數0.64有0.01的改進。

隨機森林分類器特征重要性

我們可以查看sklearn隨機森林分類器的特征重要性,可以看到改進的分數歸于新的T5特征。

從上表中我們可以看到,隨機林模型的最高特征重要性是新創建的特征

T5情感編碼器(標題)!

關鍵特征

  • T5模型是一個健壯、靈活的文本到文本轉換器,它可以增強幾乎任何NLP任務的結果,包括處理文本數據時NLP Primitive庫的結果。雖然額外的準確度在這里微不足道,但幾乎可以肯定的是,除了情緒分析之外,通過實施額外的預訓練模型,可以提高準確度。

    此外,在這個例子中,我們微調的T5版本只在review_text上訓練,而不是在review_title數據上訓練,這似乎與Featuretools創建的特征不一致。糾正這個問題很可能意味著更高的整體性能。

  • 擴展Featuretools框架非常簡單,可以使用Hugging Face transformersSimpletransformers庫。再加上幾行代碼,精確度就提高了,代碼的復雜度也保持不變。

  • 往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯溫州大學《機器學習課程》視頻 本站qq群851320808,加入微信群請掃碼:

    總結

    以上是生活随笔為你收集整理的【NLP】使用Google的T5提取文本特征的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。