模型概述
模型特點
模型能力
使用案例
🚀 WRAPresentations -- 用於Twitter推理和信息驅動論證挖掘的基於TACO的嵌入器
WRAPresentations是一款前沿的句子轉換器模型,它藉助768維的密集向量空間,將推文映射到“理由”“陳述”“通知”和“無”這四個類別中。該強大的模型專為Twitter上的論證挖掘而設計,它基於BERTweet-base架構,該架構最初在Twitter數據上進行了預訓練。通過使用TACO數據集進行微調,WRAPresentations能夠有效地對推文中的推理和信息進行編碼。
✨ 主要特性
🔍 類語義編碼
TACO框架圍繞論證的兩個關鍵要素展開,其定義來源於劍橋詞典。它將“推理”編碼為“基於已有信息做出的猜測或形成的觀點”,同時將“信息”定義為“關於某人、公司、產品等的事實或細節”。WRAPresentations在一定程度上在其嵌入空間中捕捉了這些關鍵組件的語義。
因此,它也學習到了類語義,其中推理和信息可以與包含這些組件的不同類別相關聯進行聚合:
- 陳述:指僅呈現“推理”的獨特情況,即“某人正式說或寫的內容,或為表達觀點而採取的行動”。
- 理由:代表一個完整的論證,其中“推理”基於推文中直接提及的“信息”,如來源引用或引述,從而揭示作者“試圖理解並根據實際事實做出判斷”的動機。
- 通知:指僅提供“信息”的推文,例如媒體渠道推廣其最新文章。
- 無:指既不提供“推理”也不提供“信息”的推文。
總體而言,WRAPresentations對推文進行了如下層次編碼:
📊 類語義向嵌入的轉移
觀察WRAPresentations嵌入空間中用於後續分類的CLS
標記的推文分佈,我們注意到,與BERTweet的嵌入相比,通過對比學習進行預分類微調使得預期類別的區域更加密集地出現,如下圖所示:
📦 安裝指南
安裝sentence-transformers
如果你安裝了sentence-transformers,使用該模型將變得非常簡單:
pip install -U sentence-transformers
💻 使用示例
基礎用法(Sentence-Transformers)
安裝好sentence-transformers
後,你可以使用該模型生成推文表示:
from sentence_transformers import SentenceTransformer
tweets = ["這是一個示例 #推文", "每條推文都會被轉換"]
model = SentenceTransformer("TomatenMarc/WRAPresentations")
embeddings = model.encode(tweets)
print(embeddings)
⚠️ 重要提示
推文需要按照BERTweet-base的規範進行預處理。查看詳情
高級用法(HuggingFace Transformers)
如果你沒有安裝sentence-transformers,也可以使用該模型。首先,將輸入傳遞給Transformer模型,然後對上下文詞嵌入應用正確的池化操作:
from transformers import AutoTokenizer, AutoModel
import torch
# 平均池化 - 考慮注意力掩碼以進行正確平均
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # 模型輸出的第一個元素包含所有標記嵌入
input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
# 我們想要嵌入的推文
tweets = ["這是一個示例 #推文", "每條推文都會被轉換"]
# 從HuggingFace Hub加載模型
tokenizer = AutoTokenizer.from_pretrained("TomatenMarc/WRAPresentations")
model = AutoModel.from_pretrained("TomatenMarc/WRAPresentations")
# 對句子進行分詞
encoded_input = tokenizer(tweets, padding=True, truncation=True, return_tensors="pt")
# 計算標記嵌入
with torch.no_grad():
model_output = model(**encoded_input)
# 執行池化操作。在這種情況下,使用平均池化
sentence_embeddings = mean_pooling(model_output, encoded_input["attention_mask"])
print("句子嵌入:")
print(sentence_embeddings)
此外,WRAPresentations模型非常適合作為AutoModelForSequenceClassification
的嵌入組件,能夠進一步對推文分類任務進行微調,特別是針對“理由”“陳述”“通知”和“無”這四個類別。在微調過程中,會隱式地學習到將“理由”和“陳述”歸類為論證類,將“通知”和“無”歸類為非論證類。這種設置有助於高效地識別和分析推文中的論證性內容和非論證性內容。
🔧 技術細節
訓練過程
WRAPresentations模型使用了來自TACO數據集的1219條黃金推文進行微調,涵蓋了六個主題。其中,五個主題(代表925條推文,佔比75.88%)用於優化,包括#brexit(33.3%)、#got(17%)、#lotrrop(18.8%)、#squidgame(17.1%)和#twittertakeover(13.8%)。模型在優化數據上使用了60/40的分層分割進行訓練/測試。此外,與#abortion主題相關的294條黃金推文(佔比24.12%)被選作保留集用於最終評估。
在微調之前,我們通過對每條推文進行增強來創建數據集的副本。增強操作包括替換推文中的所有主題詞和實體,然後隨機屏蔽推文中10%的單詞,這些單詞隨後使用BERTweet-base作為fill-mask
模型進行匹配。我們選擇屏蔽10%的單詞是因為這樣可以使推文與其增強版本之間的平均餘弦距離最小,約為0.08,從而使預分類微調期間的增強操作本身成為一個調節因素,避免在後續測試數據中出現過擬合。
在微調過程中,我們通過將每條推文與同一數據分割(訓練、測試、保留)中具有相似或不同類標籤的所有剩餘推文進行匹配來形成對。在微調過程中,訓練集和測試集使用增強後的推文,而保留集的推文使用其原始文本,以測試微調過程以及增強操作對真實推文的有效性。對於所有對,我們選擇儘可能大的集合,以便相似和不同的對都能得到平等的表示,同時覆蓋相應數據分割中的所有推文。
這個過程為訓練創建了162,064對,為測試創建了71,812對。另外,53,560對用於使用保留數據進行最終評估。此外,我們在微調過程中使用了MEAN
池化,以增強句子表示。
訓練參數
DataLoader
長度為5065的torch.utils.data.dataloader.DataLoader
,參數如下:
{'batch_size': 32, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
損失函數
sentence_transformers.losses.ContrastiveLoss.ContrastiveLoss
,參數如下:
{'distance_metric': 'SiameseDistanceMetric.COSINE_DISTANCE', 'margin': 0.5, 'size_average': True}
fit()方法的參數
{
"epochs": 5,
"evaluation_steps": 1000,
"evaluator": "sentence_transformers.evaluation.BinaryClassificationEvaluator.BinaryClassificationEvaluator",
"max_grad_norm": 1,
"optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
"optimizer_params": {
"lr": 4e-05
},
"scheduler": "WarmupLinear",
"steps_per_epoch": null,
"warmup_steps": 2533,
"weight_decay": 0.01
}
評估結果
我們使用CLS
或MEAN
池化對多個BERTweet模型進行了優化,並使用SBERT的BinaryClassificationEvaluator
和標準CLS
標記進行分類評估,結果如下:
模型 | 精確率 | 召回率 | F1值 | 支持數 |
---|---|---|---|---|
Vanilla BERTweet-CLS |
50.00% | 100.00% | 66.67% | 53,560 |
Augmented BERTweet-CLS |
65.69% | 86.66% | 74.73% | 53,560 |
WRAPresentations-CLS |
66.00% | 84.32% | 74.04% | 53,560 |
WRAPresentations-MEAN (當前模型) |
63.05% | 88.91% | 73.78% | 53,560 |
WRAPresentations-MEAN
的結果受到測試期間使用CLS
池化的影響,而在微調過程中使用的是MEAN
池化。儘管如此,在微調過程中使用MEAN
池化仍然改善了CLS
表示,特別是在召回率方面。當使用MEAN
池化對WRAPresentations-MEAN
進行測試時,得到的F1值為74.07%。
完整模型架構
SentenceTransformer(
(0): Transformer({'max_seq_length': 128, 'do_lower_case': False}) with Transformer model: RobertaModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
)
環境影響
屬性 | 詳情 |
---|---|
硬件類型 | A100 PCIe 40GB |
使用時長 | 2小時 |
雲服務提供商 | Google Cloud Platform |
計算區域 | asia-southeast1(新加坡) |
碳排放 | 0.21kg CO2 |
📄 許可證
WRAPresentations © 2023 遵循CC BY-NC-SA 4.0許可協議。
📚 詳細文檔
引用信息
@inproceedings{feger-dietze-2024-bertweets,
title = "{BERT}weet{'}s {TACO} Fiesta: Contrasting Flavors On The Path Of Inference And Information-Driven Argument Mining On {T}witter",
author = "Feger, Marc and
Dietze, Stefan",
editor = "Duh, Kevin and
Gomez, Helena and
Bethard, Steven",
booktitle = "Findings of the Association for Computational Linguistics: NAACL 2024",
month = jun,
year = "2024",
address = "Mexico City, Mexico",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2024.findings-naacl.146",
doi = "10.18653/v1/2024.findings-naacl.146",
pages = "2256--2266"
}







