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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

SetFitABSA: 基于 SetFit 的少样本、方面级情感分析

發布時間:2024/1/21 windows 40 coder
生活随笔 收集整理的這篇文章主要介紹了 SetFitABSA: 基于 SetFit 的少样本、方面级情感分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


SetFitABSA 是一種可以有效從文本中檢測方面級情感的技術。

方面級情感分析 (Aspect-Based Sentiment Analysis,ABSA) 是一種檢測文本中特定方面的情感的任務。例如,在“這款手機的屏幕很棒,但電池太小”一句中,分別有“屏幕”和“電池”兩個方面,它們的情感極性分別是正面和負面。

ABSA 應用頗為廣泛,有了它我們可以通過分析顧客對產品或服務的多方面反饋,并從中提取出有價值的見解。然而,ABSA 要求在樣本標注時對訓練樣本中涉及的各個方面進行詞元級的識別,因此為 ABSA 標注訓練數據成為了一件繁瑣的任務。

為了緩解這一問題,英特爾實驗室和 Hugging Face 聯袂推出了 SetFitABSA,以用于少樣本場景下的特定領域 ABSA 模型訓練。實驗表明,SetFitABSA 性能相當不錯,其在少樣本場景下表現甚至優于 Llama2 和 T5 等大型生成模型。

與基于 LLM 的方法相比,SetFitABSA 有兩個獨特優勢:

?? 無需提示: 在使用基于 LLM 的少樣本上下文學習時,提示的作用非常關鍵,因此一般需要精心設計,這一要求使得最終效果對用詞十分敏感且非常依賴用戶的專業知識,因此整個方案會比較脆弱。SetFitABSA 直接從少量帶標簽的文本示例中生成豐富的嵌入,因此可完全無需提示。

?? 快速訓練: SetFitABSA 僅需少量的已標注訓練樣本。此外,其訓練數據格式非常簡單,無需專門的標注工具,因此數據標注過程簡單而快速。

本文,我們將解釋 SetFitABSA 的工作原理以及如何使用 SetFit 庫 訓練你自己的模型。我們開始吧!

工作原理與流程


SetFitABSA 的三段式訓練流程

SetFitABSA 主要分三步。第一步從文本中提取候選方面; 第二步從候選方面中篩選出真正的方面,這一步主要由一個候選方面分類器來完成; 最后一步對每個方面判斷其情感極性。其中,第二步和第三步均基于 SetFit 模型。

訓練

1. 候選方面提取

這里我們假設: 方面一般指的是產品和服務的特性,因此其主要是名詞或復合名詞 (即幾個相鄰名詞組成的字符串)。我們使用 spaCy 從少樣本訓練集的句子中提取并標注出名詞/復合名詞。由于并非所有提取的名詞/復合名詞都是方面,因此我們叫它們 候選方面

2. 方面/非方面分類

有了候選方面后,我們還需要訓練一個模型,以便能夠區分這些候選方面中哪些是真正的方面。為此,我們需要一些帶有方面/無方面標簽的訓練樣本。如果候選方面存在于訓練集中我們即視其為 True ,否則視其為 False :

  • 訓練樣本: “Waiters aren’t friendly but the cream pasta is out of this world.”
  • 分詞: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]
  • 提取候選方面: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]
  • 訓練集標簽,其格式為 BIO: [B-ASP, O, O, O, O、O、B-ASP、I-ASP、O、O、O、O、O、.]
  • 根據訓練集標簽,生成方面/非方面標簽: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]

至此,我們對所有候選方面進行了標注,下一步就是如何訓練方面分類模型?也就是說,我們如何使用 SetFit 這一句子分類框架來對詞元進行分類?我們使用的方法是: 將每個候選方面與其所在的句子串接起來,我們使用以下模板創建訓練樣本:

候選方面:所在句子

將該模板應用于上面的例子,我們會生成 3 個訓練樣本 - 其中 2 個標簽為 True ,1 個標簽為 False :

文本 標簽
Waiters:Waiters aren't friendly but the cream pasta is out of this world. 1
cream pasta:Waiters aren't friendly but the cream pasta is out of this world. 1
world:Waiters aren't friendly but the cream pasta is out of this world. 0
... ...

生成訓練樣本后,我們就可以借助 SetFit 的強大功能僅用少許樣本訓練一個特定領域的二元分類器,以從輸入文本評論中提取出方面。這是我們第一個微調 SetFit 模型。

3. 情感極性分類

一旦系統從文本中提取到方面,它需要判斷每個方面的情感極性 (如積極、消極或中性)。為此,我們需要第二個 SetFit 模型,其訓練方式與上面相似,如下例所示:

  • 訓練樣本: “Waiters aren’t friendly but the cream pasta is out of this world.”
  • 分詞: [Waiters, are, n’t, friendly, but, the, cream, pasta, is, out, of, this, world, .]
  • 標簽: [NEG, O, O, O, O, O, POS, POS, O, O, O, O, O, .]
文本 標簽
Waiters:Waiters aren't friendly but the cream pasta is out of this world. NEG
cream pasta:Waiters aren't friendly but the cream pasta is out of this world. POS
... ...

注意,與方面提取模型不同,這里訓練集中就不用包含非方面樣本了,因為任務是對真正的方面進行情感極性分類。

推理

推理時,我們首先使用 spaCy 對輸入句子進行候選方面提取,并用模板 aspect_candidate:test_sentence 生成推理樣本。接下來,用方面/非方面分類器過濾掉非方面。最后,過濾出的方面會被送到情感極性分類器,該分類器預測每個方面的情感極性。

因此,我們的系統可以接收普通文本作為輸入,并輸出文本中的方面及其對應的情感:

模型輸入:

"their dinner specials are fantastic."

模型輸出:

[{'span': 'dinner specials', 'polarity': 'positive'}]

基準測試

我們將 SetFitABSA 與 AWS AI 實驗室 和 Salesforce AI 研究院 的最新成果進行比較,這兩項工作主要采用了對 T5 和 GPT2 進行提示微調的方法以實現方面級情感分析。為了對我們的工作進行全面測評,我們還將我們的模型與基于上下文學習的 Llama-2-chat 進行了比較。

我們采用的測評數據集是 2014 年語義評估挑戰賽 (SemEval14) 中的 Laptop14 和 Restaurant14 ABSA 數據集。測評任務選擇的是術語提取中間任務 (SB1) 及完整 ABSA 任務 (包括方面提取及情感極性預測,即 SB1+SB2)。

模型尺寸比較

模型 尺寸 (參數量)
Llama-2-chat 7B
T5-base 220M
GPT2-base 124M
GPT2-medium 355M
SetFit (MPNet) 2x 110M

請注意,SB1 任務使用的 SetFitABSA 的參數量為 110M; SB2 任務再加上一個 110M 的模型。因此 SB1+SB2 時, SetFitABSA 的總參數量為 220M。

性能比較

我們看到,當訓練樣本較少時,SetFitABSA 有明顯優勢,盡管它比 T5 小 2 倍,比 GPT2-medium 小 3 倍。即便是與 64 倍參數量的 Llama 2 相比,SetFitABSA 也能獲得相當或更好的效果。

SetFitABSA vs GPT2

SetFitABSA vs T5

請注意,為公平起見,在比較 SetFitABSA 與各基線 (GPT2、T5 等) 時,我們使用了相同的數據集劃分。

SetFitABSA vs Llama2

我們注意到,增加 Llama2 提示中的上下文樣本的數目并不能改善效果。這種現象 之前也在 ChatGPT 中發現過,我們認為后續值得深入調查一下。

訓練你自己的模型

SetFitABSA 是 SetFit 框架的一個功能。要訓??練 ABSA 模型,首先需要安裝包含 absa 功能的 setfit :

python -m pip install -U "setfit[absa]"

此外,我們必須安裝 en_core_web_lg 版的 spaCy 模型:

python -m spacy download en_core_web_lg

接著開始準備訓練數據集。訓練集是一個 Dataset 對象,其包含 textspanlabelordinal 四列:

  • text: 含有方面的完整句子或文本。
  • span: 句子中包含的方面。可以是一個單詞或多個單詞,如 “food”。
  • label: 每個 span (即方面) 的情感極性標簽,如 “positive”。這些標簽的名稱是在標注時確定的。
  • ordinal: 如果某一方面在文本中出現了多次,則該列表示其在文本中出現的次序。這個值通常是 0,因為每個方面通常在對應文本中只出現一次。

舉個例子,訓練文本 “Restaurant with wonderful food but worst service I ever seen” 中包含兩個方面,因此其在訓練集表中占據兩行,如下:

text span label ordinal
Restaurant with wonderful food but worst service I ever seen food positive 0
Restaurant with wonderful food but worst service I ever seen service negative 0
... ... ... ...

一旦準備好訓練數據集,我們就可以創建一個 ABSA 訓練器并運行訓練。SetFit 模型的訓練效率相當高,但由于 SetFitABSA 涉及兩個依次訓練的模型,因此建議使用 GPU 進行訓練,以縮短訓練時間。例如,以下訓練腳本在免費的 Google Colab T4 GPU 上僅需約 10 分鐘就可以完成 SetFitABSA 模型的訓練。

from datasets import load_dataset
from setfit import AbsaTrainer, AbsaModel

# Create a training dataset as above
# For convenience we will use an already prepared dataset here
train_dataset = load_dataset("tomaarsen/setfit-absa-semeval-restaurants", split="train[:128]")

# Create a model with a chosen sentence transformer from the Hub
model = AbsaModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")

# Create a trainer:
trainer = AbsaTrainer(model, train_dataset=train_dataset)
# Execute training:
trainer.train()

好了!自此,我們成功訓得一個特定領域的 ABSA 模型。我們可以將訓得的模型保存到硬盤或將其上傳到 Hugging Face Hub。請記住,該模型包含兩個子模型,因此每個子模型都需有自己的路徑:

model.save_pretrained(
    "models/setfit-absa-model-aspect",
    "models/setfit-absa-model-polarity"
)
# 或
model.push_to_hub(
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity"
)

現在我們使用訓得的模型進行推理。首先加載模型:

from setfit import AbsaModel

model = AbsaModel.from_pretrained(
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",
    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity"
)

然后,使用模型的預測 API 進行推理。輸入一個字符串列表,其中每個字符串代表一個評論文本:

preds = model.predict([
    "Best pizza outside of Italy and really tasty.",
    "The food variations are great and the prices are absolutely fair.",
    "Unfortunately, you have to expect some waiting time and get a note with a waiting number if it should be very full."
])

print(preds)
# [
# [{'span': 'pizza', 'polarity': 'positive'}],
# [{'span': 'food variations', 'polarity': 'positive'}, {'span': 'prices', 'polarity': 'positive'}],
# [{'span': 'waiting time', 'polarity': 'neutral'}, {'span': 'waiting number', 'polarity': 'neutral'}]
# ]

有關訓練選項、如何保存和加載模型以及如何推理等更多詳細信息,請參閱 SetFit 文檔。

參考文獻

  • Maria Pontiki, Dimitris Galanis, John Pavlopoulos, Harris Papageorgiou, Ion Androutsopoulos, and Suresh Manandhar. 2014. SemEval-2014 task 4: Aspect based sentiment analysis. In Proceedings of the 8th International Workshop on Semantic Evaluation (SemEval 2014), pages 27–35.
  • Siddharth Varia, Shuai Wang, Kishaloy Halder, Robert Vacareanu, Miguel Ballesteros, Yassine Benajiba, Neha Anna John, Rishita Anubhai, Smaranda Muresan, Dan Roth, 2023 “Instruction Tuning for Few-Shot Aspect-Based Sentiment Analysis”. https://arxiv.org/abs/2210.06629
  • Ehsan Hosseini-Asl, Wenhao Liu, Caiming Xiong, 2022. “A Generative Language Model for Few-shot Aspect-Based Sentiment Analysis”. https://arxiv.org/abs/2204.05356
  • Lewis Tunstall, Nils Reimers, Unso Eun Seo Jo, Luke Bates, Daniel Korat, Moshe Wasserblat, Oren Pereg, 2022. “Efficient Few-Shot Learning Without Prompts”. https://arxiv.org/abs/2209.11055

英文原文: https://hf.co/blog/setfit-absa

原文作者: Ronen Laperdon,Tom Aarsen,Lewis Tunstall,Daniel Korat,Oren Pereg,Moshe Wasserblat

譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態數據上的應用及大規模模型的訓練推理。

總結

以上是生活随笔為你收集整理的SetFitABSA: 基于 SetFit 的少样本、方面级情感分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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