模型简介
模型特点
模型能力
使用案例
🚀 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"
}







