【论文代码】① STIOCS: Active learning-based semi-supervised training framework for IOC extraction

简介: 【论文代码】① STIOCS: Active learning-based semi-supervised training framework for IOC extraction



写在最前面

论文 STIOCS: Active learning-based semi-supervised training framework for IOC extraction

代码解读:https://github.com/MuscleFish/SeqMask.

DataDeal.py

FastTextDeal

getToken方法

getToken方法接受一个参数words,默认值为空字符串。这个方法的目的是将输入的字符串或字符串列表进行分词处理。如果输入的words是一个字符串,那么它会被cut_sentences函数处理,并将结果作为一个列表返回。如果输入的words是一个列表,那么列表中的每个元素都会被cut_sentences函数处理,并将所有结果作为一个列表返回。如果输入的words既不是字符串也不是列表,那么这个方法将返回一个空列表。

def getToken(self, words=""):
        if isinstance(words, str):
            return [cut_sentences(words)]
        if isinstance(words, list):
            return [cut_sentences(w) for w in words]
        return []

clean_sentences方法

clean_sentences方法接受一个参数max_sentence,它的目的是清理paper_emb_list列表中的每个元素。这个方法首先创建一个空列表clear_pem,然后遍历paper_emb_list中的每个元素。对于每个元素,它首先获取其形状,然后检查形状的长度。如果形状的长度为3,那么它会使用numpy.pad函数对元素进行填充,以使其第一维度的长度等于max_sentence,然后将填充后的元素重塑为一个新的形状,并将其添加到clear_pem列表中。如果形状的长度不为3,那么它会创建一个全零的新元素,并将其添加到clear_pem列表中。最后,这个方法使用numpy.concatenate函数将clear_pem列表中的所有元素沿着第0轴连接起来,并返回结果。

def clean_sentences(self, max_sentence):
        clear_pem = []
        for pem in self.paper_emb_list:
            pem_shape = pem.shape
            if len(pem_shape) == 3:
                npem = np.pad(pem, ((0, max_sentence - pem.shape[0]), (0, 0), (0, 0)), 'constant',
                              constant_values=(0, 0))
                npem = np.reshape(npem, (1, npem.shape[0], npem.shape[1], npem.shape[2]))
                clear_pem.append(npem)
            else:
                clear_pem.append(
                    np.zeros((1, max_sentence, self.paper_emb_list[0].shape[1], self.paper_emb_list[0].shape[2])))
        return np.concatenate(clear_pem, axis=0)

getEmbedding方法

getEmbedding方法是FastTextDeal类的一部分,它的目的是获取输入词汇的嵌入表示。

这个方法接受三个参数:words(默认为空字符串)、tokens(默认为None)和max_len(默认为512)。如果没有提供tokens,那么它会使用getToken方法获取words的分词。

如果tokens的长度为0,那么这个方法将返回None。如果tokens的第一个元素的长度小于或等于1,那么它会使用FastTextModelembedding方法获取tokens的嵌入表示,并将结果返回。

如果tokens的第一个元素的长度大于1,那么这个方法将对tokens中的每个元素进行处理。对于每个元素,它首先将其转换为一个列表,然后使用FastTextModelembedding方法获取这个列表的嵌入表示,并将结果添加到paper_emb_list列表中。同时,它还会更新max_sentence的值,使其等于paper_emb_list中所有元素的第一维度的最大长度。最后,这个方法使用clean_sentences方法清理paper_emb_list,并将结果返回。

def getEmbedding(self, words="", tokens=None, max_len=512):
        if not tokens:
            tokens = self.getToken(words)
        if len(tokens) <= 0:
            return None
        if len(tokens[0]) <= 1:
            return self.FastTextModel.embedding(tokens, max_row=max_len)
        else:
            max_sentence = 0
            self.paper_emb_list = []
            for i, paper in enumerate(tokens):
                paper_text = [[w] for w in paper]
                print(i + 1, '/', len(tokens))
                paper_emb = self.FastTextModel.embedding(paper_text, max_row=max_len)
                max_sentence = max(paper_emb.shape[0], max_sentence)
                self.paper_emb_list.append(paper_emb)
                print(self.paper_emb_list[-1].shape, max_sentence)
            return self.clean_sentences(max_sentence)

全部代码

from DataPreprocess import cut_sentences
import joblib
import numpy as np
class FastTextDeal(object):
    def __init__(self):
        self.FastTextModel = joblib.load("./FastTextModels/fastText_20210126.model")
        self.paper_emb_list = []
    def getToken(self, words=""):
        if isinstance(words, str):
            return [cut_sentences(words)]
        if isinstance(words, list):
            return [cut_sentences(w) for w in words]
        return []
    def clean_sentences(self, max_sentence):
        clear_pem = []
        for pem in self.paper_emb_list:
            pem_shape = pem.shape
            if len(pem_shape) == 3:
                npem = np.pad(pem, ((0, max_sentence - pem.shape[0]), (0, 0), (0, 0)), 'constant',
                              constant_values=(0, 0))
                npem = np.reshape(npem, (1, npem.shape[0], npem.shape[1], npem.shape[2]))
                clear_pem.append(npem)
            else:
                clear_pem.append(
                    np.zeros((1, max_sentence, self.paper_emb_list[0].shape[1], self.paper_emb_list[0].shape[2])))
        return np.concatenate(clear_pem, axis=0)
    def getEmbedding(self, words="", tokens=None, max_len=512):
        if not tokens:
            tokens = self.getToken(words)
        if len(tokens) <= 0:
            return None
        if len(tokens[0]) <= 1:
            return self.FastTextModel.embedding(tokens, max_row=max_len)
        else:
            max_sentence = 0
            self.paper_emb_list = []
            for i, paper in enumerate(tokens):
                paper_text = [[w] for w in paper]
                print(i + 1, '/', len(tokens))
                paper_emb = self.FastTextModel.embedding(paper_text, max_row=max_len)
                max_sentence = max(paper_emb.shape[0], max_sentence)
                self.paper_emb_list.append(paper_emb)
                print(self.paper_emb_list[-1].shape, max_sentence)
            return self.clean_sentences(max_sentence)
目录
相关文章
|
7月前
|
机器学习/深度学习 网络协议 PyTorch
【文献学习】DCCRN: Deep Complex Convolution Recurrent Network for Phase-Aware Speech Enhancement
本文介绍了一种新的深度复数卷积递归网络(DCCRN),用于处理语音增强问题,特别是针对低模型复杂度的实时处理。
326 5
|
7月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【文献学习】Phase-Aware Speech Enhancement with Deep Complex U-Net
文章介绍了Deep Complex U-Net模型,用于复数值的语音增强,提出了新的极坐标掩码方法和wSDR损失函数,并通过多种评估指标验证了其性能。
103 1
|
10月前
|
存储 JSON 算法
【论文代码】②.1 STIOCS: Active learning-based semi-supervised training framework for IOC extraction
【论文代码】②.1 STIOCS: Active learning-based semi-supervised training framework for IOC extraction
49 0
|
机器学习/深度学习 开发框架 数据建模
HiCLRE: A Hierarchical Contrastive Learning Framework for Distantly Supervised Relation Extraction
远程监督假设任何包含相同实体对的句子都反映了相同的关系。先前的远程监督关系抽取(DSRE)任务通常独立地关注sentence-level或bag-level去噪技术
201 0
|
机器学习/深度学习 自然语言处理 算法
Multimedia Event Extraction From News With a Unified Contrastive Learning Framework论文解读
从新闻中提取事件在下游应用程序中有很多好处。然而,今天的事件提取(EE)系统通常专注于单一的模态——无论是文本还是图像
221 0
|
机器学习/深度学习 编解码 自然语言处理
SegFormer: Simple and Efficient Design for Semantic Segmentation with Transformers论文解读
我们提出了SegFormer,一个简单,高效而强大的语义分割框架,它将transformer与轻量级多层感知器(MLP)解码器统一起来。
955 0
|
自然语言处理 算法 知识图谱
DEGREE: A Data-Efficient Generation-Based Event Extraction Model论文解读
事件抽取需要专家进行高质量的人工标注,这通常很昂贵。因此,学习一个仅用少数标记示例就能训练的数据高效事件抽取模型已成为一个至关重要的挑战。
231 0
|
机器学习/深度学习 移动开发 编解码
【论文阅读】A Three-Stage Self-Training Framework for Semi-Supervised Semantic Segmentation
【论文阅读】A Three-Stage Self-Training Framework for Semi-Supervised Semantic Segmentation
257 0
【论文阅读】A Three-Stage Self-Training Framework for Semi-Supervised Semantic Segmentation
|
机器学习/深度学习 编解码 算法
Self-Training using Selection Network for Semi-supervised Learning
Self-Training using Selection Network for Semi-supervised Learning
184 0
Self-Training using Selection Network for Semi-supervised Learning
|
机器学习/深度学习
【论文阅读】(2019)SimGNN:A Neural Network Approach to Fast Graph Similarity Computation
- 图形相似性搜索是最重要的基于图形的应用程序之一,例如查找与查询化合物最相似的化合物。 - 图相似性距离计算,如图编辑距离(GED)和最大公共子图(MCS),是图相似性搜索和许多其他应用程序的核心操作,但实际计算成本很高。 - 受神经网络方法最近成功应用于若干图形应用(如节点或图形分类)的启发,我们提出了一种新的基于神经网络的方法来解决这一经典但具有挑战性的图形问题,**旨在减轻计算负担,同时保持良好的性能**。 - 提出的**方法称为SimGNN**,它结合了两种策略。 - 首先,我们**设计了一个可学习的嵌入函数**,将每个图映射到一个嵌入向量中,从而提供图的全局摘要。**提出了一种新的
325 0
【论文阅读】(2019)SimGNN:A Neural Network Approach to Fast Graph Similarity Computation