谣言检测常用资料

经典论文

Embedding

简单来说,embedding就是用一个低维的向量表示一个物体,可以是一个词,或是一个商品,或是一个电影等等。这个embedding向量的性质是能使距离相近的向量对应的物体有相近的含义,Embedding能够用低维向量对物体进行编码还能保留其含义的特点非常适合深度学习

  • Text Embedding

图神经网络训练

  • 神经网络中Batch Size的理解:https://www.cnblogs.com/yibeimingyue/p/11697761.html

  • Epoch、Batch Size和迭代:
    比如对于一个有 2000 个训练样本的数据集。将 2000 个样本分成大小为 500 的 batch,那么完成一个 epoch 需要 4 个 iteration。

  • 如何估算深度神经网络的最优学习率:https://www.jiqizhixin.com/articles/2017-11-17-2

  • Adam算法:
    深度学习模型通常由随机梯度下降算法进行训练。随机梯度下降算法有许多变形:例如 Adam、RMSProp、Adagrad 等等。这些算法都需要你设置学习率。学习率决定了在一个小批量(mini-batch)中权重在梯度方向要移动多远。

  • 交叉验证:https://www.cnblogs.com/pinard/p/5992719.html
    1.将所有数据集分成5份

    2.不重复地每次取其中一份做测试集,用其他四份做训练集训练模型,之后计算该模型在测试集上的: M S E i MSE_i MSEi

    3.将5次的 M S E i MSE_i MSEi取平均得到最后的MSE

全连接层

文本处理知识

图神经网络

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
谣言检测是指通过分析文本内容来判断该文本是否包含谣言或虚假信息。Transformer是一种基于注意力机制的神经网络模型,被广泛应用于自然语言处理任务中,包括谣言检测。 在谣言检测中,我们可以使用Transformer的编码器作为语义提取器。编码器将整个句子作为输入,并通过注意力机制和多层感知机(MLP)为每个字生成一个编码向量。这些编码向量包含了整个句子的语义信息。然后,我们可以将这些向量输入到全连接网络中进行分类,判断文本是否为谣言。 需要注意的是,由于Transformer的注意力机制可以同时处理整个句子,因此它具有较好的并行能力。然而,与循环神经网络(RNN)相比,Transformer缺少了上下文信息,即没有考虑到不同词之间的顺序。因此,在使用Transformer进行谣言检测时,需要注意这一点。 下面是一个基于PyTorch和Transformer实现谣言检测的示例代码: ```python import torch import torch.nn as nn import torch.optim as optim from torchtext.data import Field, TabularDataset, BucketIterator from torch.nn import TransformerEncoder, TransformerEncoderLayer # 定义模型 class RumorDetectionTransformer(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim, n_layers, n_heads, dropout): super().__init__() self.embedding = nn.Embedding(input_dim, hidden_dim) self.encoder_layer = TransformerEncoderLayer(hidden_dim, n_heads) self.encoder = TransformerEncoder(self.encoder_layer, n_layers) self.fc = nn.Linear(hidden_dim, output_dim) self.dropout = nn.Dropout(dropout) def forward(self, text): embedded = self.embedding(text) embedded = embedded.permute(1, 0, 2) output = self.encoder(embedded) output = output.permute(1, 0, 2) pooled = torch.mean(output, dim=1) pooled = self.dropout(pooled) return self.fc(pooled) # 数据预处理 TEXT = Field(tokenize='spacy', lower=True) LABEL = Field(sequential=False, is_target=True) fields = [('text', TEXT), ('label', LABEL)] train_data, test_data = TabularDataset.splits( path='data', train='train.csv', test='test.csv', format='csv', fields=fields ) TEXT.build_vocab(train_data, vectors='glove.6B.100d') LABEL.build_vocab(train_data) # 模型训练 device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') BATCH_SIZE = 64 train_iterator, test_iterator = BucketIterator.splits( (train_data, test_data), batch_size=BATCH_SIZE, device=device ) INPUT_DIM = len(TEXT.vocab) HIDDEN_DIM = 100 OUTPUT_DIM = 1 N_LAYERS = 2 N_HEADS = 2 DROPOUT = 0.2 model = RumorDetectionTransformer(INPUT_DIM, HIDDEN_DIM, OUTPUT_DIM, N_LAYERS, N_HEADS, DROPOUT).to(device) optimizer = optim.Adam(model.parameters()) criterion = nn.BCEWithLogitsLoss().to(device) def train(model, iterator, optimizer, criterion): model.train() epoch_loss = 0 for batch in iterator: optimizer.zero_grad() text = batch.text label = batch.label.float() predictions = model(text).squeeze(1) loss = criterion(predictions, label) loss.backward() optimizer.step() epoch_loss += loss.item() return epoch_loss / len(iterator) def evaluate(model, iterator, criterion): model.eval() epoch_loss = 0 with torch.no_grad(): for batch in iterator: text = batch.text label = batch.label.float() predictions = model(text).squeeze(1) loss = criterion(predictions, label) epoch_loss += loss.item() return epoch_loss / len(iterator) N_EPOCHS = 10 best_valid_loss = float('inf') for epoch in range(N_EPOCHS): train_loss = train(model, train_iterator, optimizer, criterion) valid_loss = evaluate(model, test_iterator, criterion) if valid_loss < best_valid_loss: best_valid_loss = valid_loss torch.save(model.state_dict(), 'rumor_detection_transformer.pt') # 模型使用 model.load_state_dict(torch.load('rumor_detection_transformer.pt')) def predict_rumor(text): model.eval() tokenized = [tok.text for tok in TEXT.tokenizer(text)] indexed = [TEXT.vocab.stoi[t] for t in tokenized] tensor = torch.LongTensor(indexed).unsqueeze(1).to(device) prediction = torch.sigmoid(model(tensor)) return prediction.item() # 示例使用 text = "这是一条谣言" prediction = predict_rumor(text) print(f"谣言概率:{prediction}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值