pipeline_tag: 句子相似度
tags:
- 句子转换器
- 特征提取
- 句子相似度
- 转换器
- 论点挖掘
- 推特
metrics:
- 宏观F1值
license: 知识共享署名-相同方式共享4.0协议
language:
- 英语
widget:
- source_sentence: >-
公式:并非所有投票脱欧的人都是种族主义者。但所有种族主义者都投票支持脱欧。并非所有投票脱欧的人都愚昧无知。但所有愚昧无知的人都投票支持脱欧。因此,愚昧的种族主义者主导了局面,无论少数其他人的想法如何。#愚昧 #英国脱欧
sentences:
- '男性不应就女性身体制定法律 #堕胎 #德克萨斯'
-
观点:随着严苛(甚至更甚)的堕胎法在#德克萨斯生效,对数百万美国人来说这并非无关紧要的问题。这可能导致更多志同道合的共和党州议会效仿,形成滑坡效应。#堕胎 #F24 HTTPURL
-
"苦涩真相":欧盟负责人给英国人保留#英国脱欧后欧盟公民身份的想法泼冷水 HTTPURL 通过@用户
- '@用户 废话连篇废话连篇'
example_title: 理由
- source_sentence: 这对儿童不利。
sentences:
- '男性不应就女性身体制定法律 #堕胎 #德克萨斯'
-
观点:随着严苛(甚至更甚)的堕胎法在#德克萨斯生效,对数百万美国人来说这并非无关紧要的问题。这可能导致更多志同道合的共和党州议会效仿,形成滑坡效应。#堕胎 #F24 HTTPURL
-
"苦涩真相":欧盟负责人给英国人保留#英国脱欧后欧盟公民身份的想法泼冷水 HTTPURL 通过@用户
- '@用户 废话连篇废话连篇'
example_title: 陈述
- source_sentence: >-
埃隆·马斯克已准备好"B计划",以防推特拒绝其收购要约 阅读@用户报道 | HTTPURL #埃隆马斯克 #埃隆马斯克推特 #推特收购 HTTPURL
sentences:
- '男性不应就女性身体制定法律 #堕胎 #德克萨斯'
-
观点:随着严苛(甚至更甚)的堕胎法在#德克萨斯生效,对数百万美国人来说这并非无关紧要的问题。这可能导致更多志同道合的共和党州议会效仿,形成滑坡效应。#堕胎 #F24 HTTPURL
-
"苦涩真相":欧盟负责人给英国人保留#英国脱欧后欧盟公民身份的想法泼冷水 HTTPURL 通过@用户
- '@用户 废话连篇废话连篇'
example_title: 通知
- source_sentence: '@用户 👅是关键 😂'
sentences:
- '男性不应就女性身体制定法律 #堕胎 #德克萨斯'
-
观点:随着严苛(甚至更甚)的堕胎法在#德克萨斯生效,对数百万美国人来说这并非无关紧要的问题。这可能导致更多志同道合的共和党州议会效仿,形成滑坡效应。#堕胎 #F24 HTTPURL
-
"苦涩真相":欧盟负责人给英国人保留#英国脱欧后欧盟公民身份的想法泼冷水 HTTPURL 通过@用户
- '@用户 废话连篇废话连篇'
example_title: 无意义
base_model:
- vinai/bertweet-base
library_name: 句子转换器
WRAPresentations —— 基于TACO的推特推理与信息驱动型论点挖掘嵌入器
推出WRAPresentations,这是一款先进的句子转换器模型,利用768维密集向量空间的强大能力,将推文映射为"理由"、"陈述"、"通知"和"无意义"四种类别。该模型专为推特论点挖掘定制,源自最初在推特数据上预训练的BERTweet-base架构。通过使用TACO数据集进行微调,WRAPresentations能有效编码推文中的推理和信息。
类别语义
TACO框架围绕剑桥词典定义的论证两大关键要素构建。它将推理编码为基于已有信息做出的猜测或形成的观点,同时采用信息的定义作为关于人物、公司、产品等的事实或细节。
WRAPresentations在其嵌入空间中一定程度上捕捉了这些关键组件的语义。
因此,该模型也学习了类别语义,其中推理和信息可以按照包含这些组件的不同类别进行关联聚合:
- 陈述,指仅呈现推理的独特案例,即某人正式表达或书写的内容,或为表达观点而采取的行动。
- 理由,代表完整论证,其中推理基于推文中直接提及的信息(如来源引用或引述),从而揭示作者试图理解并根据实际事实做出判断的动机。
- 通知,指仅限于提供信息的推文,如媒体频道推广其最新文章。
- 无意义,既不提供推理也不含信息的推文。
整体而言,WRAPresentations为推文编码了以下层级结构:
类别语义向嵌入的迁移
观察WRAPresentations嵌入空间中针对后续分类的CLS
令牌的推文分布,我们注意到通过对比学习进行的预分类微调,相比BERTweet的嵌入,导致了预期类别区域的更密集显现,如下图所示。
使用(句子转换器)
安装sentence-transformers后,使用此模型变得简单:
pip install -U sentence-transformers
然后可以像这样生成推文表示:
from sentence_transformers import SentenceTransformer
tweets = ["这是一个示例#推文", "每条推文都会被转换"]
model = SentenceTransformer("TomatenMarc/WRAPresentations")
embeddings = model.encode(tweets)
print(embeddings)
注意:推文需要按照BERTweet-base的规范进行预处理。
使用(HuggingFace转换器)
若不使用sentence-transformers,可以这样使用模型:首先将输入传递给转换器模型,然后对上下文化的词嵌入应用正确的池化操作。
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 = ["这是一个示例#推文", "每条推文都会被转换"]
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数据集的1,219条黄金推文进行了微调,涵盖六个主题。选择五个主题进行优化,代表925条推文(75.88%),涉及#英国脱欧(33.3%)、#权力的游戏(17%)、#指环王力量之戒(18.8%)、#鱿鱼游戏(17.1%)和#推特收购(13.8%)。模型采用分层60/40分割进行优化数据的训练/测试。另外,294条与#堕胎主题相关的黄金推文(24.12%)被选作最终评估的保留集。
微调前,我们通过为每条推文创建增强版本来构建数据集副本。增强过程包括替换推文中的所有主题词和实体,然后随机掩码推文中10%的词,这些词随后使用BERTweet-base作为填充掩码
模型进行匹配。选择掩码10%的词汇是因为这导致推文与其增强版本之间的平均余弦距离最小,约为0.08,使得预分类微调过程中的增强本身成为防止后续测试数据过拟合的调节因素。微调期间,我们通过将每条推文与同一数据分割(训练、测试、保留)中具有相似或不同类别标签的所有其他推文配对来形成对。对于训练和测试集,我们使用增强版本,而对于保留推文,我们使用原始文本来测试微调过程及增强对真实推文的有用性。对于所有配对,我们选择最大可能的集合,以便相似和不相似的配对同等代表,同时覆盖各自数据分割的所有推文。这一过程产生了162,064对用于训练,71,812对用于测试。另外53,560对用于保留数据的最终评估。此外,我们采用MEAN
池化增强句子表示进行微调。
模型训练参数如下:
数据加载器:
torch.utils.data.dataloader.DataLoader
,长度5065,参数:
{'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值 |
支持数 |
原始BERTweet-CLS |
50.00% |
100.00% |
66.67% |
53,560 |
增强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
表示,特别是在召回率方面。当WRAPresentations-MEAN
使用MEAN
池化进行测试时,F1值达到74.07%。
完整模型架构