第三届阿里云磐久智维算法大赛——GRU BaseLine

2023-10-30

赛题

比赛链接:第三届阿里云磐久智维算法大赛-天池大赛-阿里云天池 (aliyun.com)

大赛概况

庸医只知头痛医头脚痛医脚,凡良医者,必会抽丝剥茧,察其根本,方得药到病除。第一届和第二届磐久智维算法大赛,我们针对异常预测开展了积极的探索和卓有成效的实践。本届大赛我们延续对异常/故障这一领域的深入挖掘,以根因诊断为赛题,和各界同仁一起探讨根因诊断的新思路,共同追逐这一人工智能应用的明珠。
在大规模IT设备、应用运维过程中,故障无可避免,而关键日志则是技术人员排查根因,对症下药的重要依据。近年来围绕日志分析,涌现出了众多先进技术,在不断突破技术瓶颈的同时,也为解决工业难题提供了越来越先进的武器装备。本次大赛开放大量不同类别的服务器运行日志,这些日志反应了服务器运行过程中各类部件的状态,能够在出现服务器故障时用来快速的定位出故障所在,这对于高效的修复故障、避免维修时间的浪费、降低服务器换件成本、提升系统可用性甚至减少客户投诉都至关重要。但准确的识别出故障根因并非易事,需要创新的思维,细致的分析。祝愿各界同仁享受比赛,开拓创新,取得好成绩。

问题描述

给定一段时间的系统日志数据,参赛者应提出自己的解决方案,以诊断服务器发生了哪种故障。具体来说,参赛者需要从组委会提供的数据中挖掘出和各类故障相关的特征,并采用合适的机器学习算法予以训练,最终得到可以区分故障类型的最优模型。数据处理方法和算法不限,但选手应该综合考虑算法的效果和复杂度,以构建相对高效的解决方案。

初赛会提供训练数据集,供参赛选手训练模型并验证模型效果使用。同时,也将提供测试集,选手需要对测试集中的数据诊断识别出故障类型,并将模型判断出的结果上传至竞赛平台,平台会根据提交的诊断结果,来评估模型的效果。

在复赛中,我们会进一步增加数据,并提供额外的其他种类的数据。面对进一步的问题和任务,选手需要提交一个docker镜像,镜像中需要包含用来进行故障诊断所需的所有内容,也即完整解决方案代码。其中,镜像中的代码需要能够根据输入的测试集文件(文件夹)位置,来对测试集中的故障数据进行诊断,并把诊断结果以指定的CSV文件格式输出到指定位置。

数据描述

1.初赛数据

1.1 SEL日志数据:

Table 1: SEL日志数据, 数据文件名: preliminary_sel_log_dataset.csv

Field Type Description
sn string server serial number
time string log reported time
msg string log
server_model string server model

1.2 训练标签数据:

Table 2: 训练标签数据, 数据文件名: preliminary_train_label_dataset.csv, preliminary_train_label_dataset_s.csv

Field Type Description
sn string server serial number
fault_time string fault time of server
label int failure label, 0,1,2,3 四类故障

其中0类和1类表示CPU相关故障,2类表示内存相关故障,3类表示其他类型故障

注: 上述两个文件的总label数据对应”preliminary_sel_log_dataset.csv“中所有的日志。在比赛之初,组委会曾在”preliminary_sel_log_dataset.csv“中开放过一份不带label的log数据交由选手提交答案测评,现该部分log数据不变,并将其对应的的label(preliminary_train_label_dataset_s.csv)一并开放,选手有了更多的数据用于训练。

1.3 选手提交数据:

Table 3: 选手提交数据, 数据文件名: preliminary_submit_dataset_a.csv, 对应的log文件名:preliminary_sel_log_dataset_a.csv
选手需要使用preliminary_sel_log_dataset_a.csv中的日志内容,评测出对应的诊断结果,并填充到preliminary_submit_dataset_a.csv中,preliminary_submit_dataset_a.csv是选手需要提交到系统的最终结果文件。

Field Type Description
sn string server serial number
fault_time string fault time of server

注: 给定sn、fault_time两个字段信息,选手需要根据SEL日志信息给出最终的label。提交文件需要包含例子中给定的header(sn,fault_time,label),提交格式例子:

sn,fault_time,label  
server_123,2019-08-16 02:12:00,0  

注:选手提交文件请参见preliminary_submit_dataset_a.csv, 不是preliminary_submit_dataset.csv;选手提交文件请参见preliminary_submit_dataset_a.csv, 不是preliminary_submit_dataset.csv;选手提交文件请参见preliminary_submit_dataset_a.csv, 不是preliminary_submit_dataset.csv

1.4 SEL日志语料数据:

Table 4: SEL日志语料数据, 数据文件名: additional_sel_log_dataset.csv

Field Type Description
sn string server serial number
time string log reported time
msg string log

注: 主要是给选手进行预训练用的数据,该数据集没有对应的label标签,也没有server_model字段,选手可以酌情使用

2.复赛数据(暂定)

2.1 SEL日志数据:

Table 5: SEL日志数据, 数据文件名: final_sel_log_dataset_*.csv

Field Type Description
sn string server serial number
time string log reported time
msg string log
server_model string server model

2.2 训练标签数据:

Table 6: 训练标签数据, 数据文件名: final_train_label_dataset_*.csv

Field Type Description
sn string server serial number
fault_time string fault time of server
label int failure label, 0,1,2,3四类故障

2.3 选手提交数据:

Table 7: 选手提交数据, 数据文件名: final_submit_dataset_*.csv

Field Type Description
sn string server serial number
fault_time string fault time of server

注: 给定sn、fault_time两个字段信息,选手需要根据SEL日志信息给出最终的label。提交格式例子:

sn,fault_time,label
server_123,2019-08-16 02:12:00,0

2.4 补充日志数据1:

Table 8: 补充日志数据1, 数据文件名: final_venus_dataset_*.csv

Field Type Description
sn string server serial number
fault_time string fault time of server
module_cause string module cause
module string module

2.5 补充日志数据2:

Table 9: 补充日志数据2, 数据文件名: final_crashdump_dataset_*.csv

Field Type Description
sn string server serial number
fault_time string fault time of server
fault_code string fault code

提交格式

初赛阶段,选手需要将模型在测试集上的诊断结果保存为csv格式,并打包成zip压缩文件进行提交。形式如下:

sn,fault_time,label
server_123,2019-08-16 02:12:00,0

复赛阶段,最后的输出形式如下:

sn,fault_time,label
server_123,2019-08-16 02:12:00,0

注:
1)选手提交数据文件中出现的机器均需要进行诊断,并将结果写到上传文件中,否则评分为0。
2)若选手上传的结果文件中,同一个sn出现多次诊断结果,则评测程序会选取第一条用于评分。
3)在复赛中,参赛选手需要提交docker镜像,具体的提交方式及规范请参见镜像提交说明。
4)诊断结果保存为csv文件格式,保存的csv文件有header,无index; 第一列为sn,第二列为故障时间,格式为YYYY-MM-dd HH:mm:ss,字符串类型,第三列为故障类型,格式为整数0-3

评价指标(初赛)

本次竞赛采用多分类加权Macro F1-score作为评价指标, 根据具体场景化的诊断内容,定义相关术语和详细指标如下:

  • 对于第ii类,有

    • Precision

      • #TP: 真正例的数量
      • #FP: 假正例的数量

       Precision  = # T P # T P + # F P \text { Precision }=\frac{\# \mathrm{TP}}{\# \mathrm{TP}+\# \mathrm{FP}}  Precision =#TP+#FP#TP

    • Recall

      • #FN: 假负例的数量

       Recall  = # T P # T P + # F N \text { Recall }=\frac{\# \mathrm{TP}}{\# \mathrm{TP}+\# \mathrm{FN}}  Recall =#TP+#FN#TP

    • F1-score
       F1-score  = 2 ×  Precision  ×  Recall  (  Precision  +  Recall  ) \text { F1-score }=\frac{2 \times \text { Precision } \times \text { Recall }}{(\text { Precision }+\text { Recall })}  F1-score =( Precision + Recall )2× Precision × Recall 

  • 综合四类,即「两种CPU故障」(0-1)、「内存故障」(2)和「其他故障」(3),有

    • 对应该四类的权重向量

    w v = { 3 7 , 2 7 , 1 7 , 1 7 } w \boldsymbol{v}=\left\{\frac{3}{7}, \frac{2}{7}, \frac{1}{7}, \frac{1}{7}\right\} wv={73,72,71,71}

    • Macro F1-score

     Macro F1-score  = ∑ i ∈ { 0 , 1 , 2 , 3 } w i ×  F1-score  -s  i \text { Macro F1-score }=\sum_{i \in\{0,1,2,3\}} w_{i} \times \text { F1-score } \text {-s }_{i}  Macro F1-score =i{0,1,2,3}wi× F1-score -s i

Baseline

本文BaseLine的数据处理参照了:baseline_template-天池实验室-实时在线的数据分析协作工具,享受免费计算资源 (aliyun.com),模型采用pytorch版的GRU。

模型与DataSet

新建model.py文件,插入代码:

from torch import nn
from torch.utils.data import Dataset


class RNN(nn.Module):
    def __init__(self, input_size):
        super(RNN, self).__init__()
        self.rnn = nn.GRU(
            input_size=input_size,
            hidden_size=128,
            num_layers=1,
            batch_first=True,
        )
        self.out = nn.Sequential(
            nn.Linear(128, 4),
        )
        self.hidden = None

    def forward(self, x):
        r_out, self.hidden = self.rnn(x)  # None 表示 hidden state 会用全0的 state
        out = self.out(r_out)
        return out


class TrainSet(Dataset):
    def __init__(self, data, lables):
        # 定义好 image 的路径
        self.data, self.label = data.float(), lables.float()

    def __getitem__(self, index):
        return self.data[index], self.label[index]

    def __len__(self):
        return len(self.data)

调用nn.GRU创建模型,input_size是输入的维度,nn.Linear(64, 4),4代表输出的类别是4类。

TrainSet类定义加载数据的方式。

训练

定义完模型就开始这篇文章最重要的部分:训练!新建train.py,插入如下代码:

import pandas as pd
from sklearn.model_selection import  train_test_split
import torch
import torch.nn as nn
import numpy as np
from torch import optim
from torch.utils.data import Dataset, DataLoader
import os
from model import RNN


DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

导入需要的包。

判断是否存在cuda环境,如果存在DEVICE设置为cuda,如果没有则设置为cpu。

接下来是数据处理部分:

data_train = pd.read_csv('preliminary_sel_log_dataset.csv')
data_test = pd.read_csv('preliminary_sel_log_dataset_a.csv')
data = pd.concat([data_train, data_test])

from drain3 import TemplateMiner  # 开源在线日志解析框架
from drain3.file_persistence import FilePersistence
from drain3.template_miner_config import TemplateMinerConfig

config = TemplateMinerConfig()
config.load('drain3.ini')  ## 这个文件在drain3的github仓库里有
config.profiling_enabled = False

drain_file = 'comp_a_sellog'
persistence = FilePersistence(drain_file + '.bin')
template_miner = TemplateMiner(persistence, config=config)

##模板提取
for msg in data.msg.tolist():
    template_miner.add_log_message(msg)
temp_count = len(template_miner.drain.clusters)

## 筛选模板
template_dic = {}
size_list = []
for cluster in template_miner.drain.clusters:
    size_list.append(cluster.size)
size_list = sorted(size_list, reverse=True)[:200]  ## 筛选模板集合大小前200条,这里的筛选只是举最简单的例子。
min_size = size_list[-1]

for cluster in template_miner.drain.clusters:  ## 把符合要求的模板存下来
    print(cluster.cluster_id)
    if cluster.size >= min_size:
        template_dic[cluster.cluster_id] = cluster.size

temp_count_f = len(template_dic)


def match_template(df, template_miner, template_dic):
    msg = df.msg
    cluster = template_miner.match(msg)  # 匹配模板,由开源工具提供
    if cluster and cluster.cluster_id in template_dic:
        df['template_id'] = cluster.cluster_id  # 模板id
        df['template'] = cluster.get_template()  # 具体模板
    else:
        df['template_id'] = 'None'  # 没有匹配到模板的数据也会记录下来,之后也会用作一种特征。
        df['template'] = 'None'
    return df


data = data.apply(match_template, template_miner=template_miner, template_dic=template_dic, axis=1)
data.to_pickle(drain_file + '_result_match_data.pkl')  # 将匹配好的数据存下来

df_data = pd.read_pickle(drain_file + '_result_match_data.pkl')  # 读取匹配好模板的数据
df_data[df_data['template_id'] != 'None'].head()


def feature_generation(df_data, gap_list, model_name, log_source, win_list, func_list):
    gap_list = gap_list.split(',')

    dummy_list = set(df_data.template_id.unique())
    dummy_col = ['template_id_' + str(x) for x in dummy_list]

    for gap in gap_list:
        df_data['collect_time_gap'] = pd.to_datetime(df_data.collect_time).dt.ceil(gap)
        df_data = template_dummy(df_data)
        df_data = df_data.reset_index(drop=True)
        df_data = df_data.groupby(['sn', 'collect_time_gap']).agg(sum).reset_index()
        df_data = feature_win_fun(df_data, dummy_col, win_list, func_list, gap)
        df_data.to_pickle(
            'cpu_diag_comp_sel_log_all_feature_' + gap + '_' + win_list + '_' + func_list + '.pkl')  # 将构造好的特征数据存下来
        return df_data


def template_dummy(df):
    df_dummy = pd.get_dummies(df['template_id'], prefix='template_id')
    df = pd.concat([df[['sn', 'collect_time_gap']], df_dummy], axis=1)
    return df


def feature_win_fun(df, dummy_col, win_list, func_list, gap):
    win_list = win_list.split(',')
    func_list = func_list.split(',')
    drop_col = ['sn']
    merge_col = ['collect_time_gap']
    df_out = df[drop_col + merge_col]

    for win in win_list:
        for func in func_list:
            df_feature = df.groupby(drop_col).apply(rolling_funcs, win, func, dummy_col)
            df_feature = df_feature.reset_index(drop=True).rename(columns=dict(zip(dummy_col, map(lambda x: x + '_' +
                                                                                                            func + '_' + win,
                                                                                                  dummy_col))))
            df_out = pd.concat([df_out, df_feature], axis=1)
    return df_out


def rolling_funcs(df, window, func, fea_col):
    df = df.sort_values('collect_time_gap')
    df = df.set_index('collect_time_gap')
    df = df[fea_col]

    df2 = df.rolling(str(window) + 'h')

    if func in ['sum']:
        df3 = df2.apply(sum_func)
    else:
        print('func not existed')
    return df3


def sum_func(series):
    return sum(series)


df_data.rename(columns={'time': 'collect_time'}, inplace=True)
feature_generation(df_data, '1h', '', '', '3', 'sum')

df_data = pd.read_pickle('cpu_diag_comp_sel_log_all_feature_1h_3_sum.pkl')  # 读取之前构造好的特征数据
df_train_label = pd.read_csv('preliminary_train_label_dataset.csv')
df_train_label_s = pd.read_csv('preliminary_train_label_dataset_s.csv')
df_train_label = pd.concat([df_train_label, df_train_label_s])
df_train_label = df_train_label.drop_duplicates(['sn', 'fault_time', 'label'])

df_data_train = pd.merge(df_data[df_data.sn.isin(df_train_label.sn)], df_train_label, on='sn', how='left')
y = df_data_train['label']
x = df_data_train.drop(['sn', 'collect_time_gap', 'fault_time', 'label'], axis=1)

数据处理部分,我只修改了一些错误,详见:baseline_template-天池实验室-实时在线的数据分析协作工具,享受免费计算资源 (aliyun.com)

X_train, X_val, y_train, y_val = train_test_split(x, y, test_size=0.1, random_state=6)
X_train = np.array(X_train)
y_train = np.array(y_train)
df_tensor = torch.Tensor(X_train)
tensor_y = torch.Tensor(y_train)
n=X_train.shape[1]
print(n)
X_val = np.array(X_val)
y_val = np.array(y_val)
X_val = torch.Tensor(X_val)
y_val = torch.Tensor(y_val)
trainset = TrainSet(df_tensor, tensor_y)
valset = TrainSet(X_val, y_val)
trainloader = DataLoader(trainset, batch_size=64, shuffle=True)
valloader = DataLoader(valset, batch_size=64, shuffle=False)

按照7:3的比例切分训练集和验证集。

将训练集和验证集转成torch.Tensor类型。

分别给训练集和验证集创建DataLoader对象。

n代表数据的维度,在后面创建模型的时候要用到。

EPOCH=300
modellr=0.0001
ACC=0
rnn = RNN(n)
rnn.to(device=DEVICE)
optimizer = optim.Adam(rnn.parameters(), lr=modellr)
loss_func=nn.CrossEntropyLoss()

EPOCH:迭代次数,设置为300。

modellr:学习率,设置为0.0001

ACC:记录验证集的最高分数。保存模型的时候,按照最高分数保存的。

创建rnn模型。

优化器选用Adam。

loss函数选用交叉熵。

完成上面的代码,接下来就是训练和验证部分的代码:

for step in range(EPOCH):
    rnn.train()
    loss_train=0
    for tx, ty in trainloader:
        data, target = tx.to(DEVICE, non_blocking=True), ty.to(DEVICE, non_blocking=True)
        output = rnn(torch.unsqueeze(data, dim=1))
        loss = loss_func(torch.squeeze(output), target.long())
        print_loss = loss.data.item()
        loss_train+=print_loss
        optimizer.zero_grad()  # clear gradients for this training step
        loss.backward()  # back propagation, compute gradients
        optimizer.step()
    print("epoch:",str(step),"loss:" ,str(loss_train/len(trainloader)))
    if step % 2:
        torch.save(rnn, 'rnn.pth')
    rnn.eval()
    correct = 0
    total_num = len(valloader.dataset)
    loss_val=0
    for vx, vy in valloader:
        data, target = vx.to(DEVICE, non_blocking=True), vy.to(DEVICE, non_blocking=True)
        output = rnn(torch.unsqueeze(data, dim=1))
        loss = loss_func(torch.squeeze(output), target.long())
        print_loss = loss.data.item()
        loss_val=loss_val+print_loss
        _, pred = torch.max(torch.squeeze(output), 1)
        correct += torch.sum(pred == target)
    acc = correct / total_num
    print("Val Loss {},ACC {}\n".format(loss_val/len(valloader),acc))
    if acc > ACC:
        torch.save(rnn, 'best.pth')
        ACC = acc

代码中注意的地方,由于GRU要求输入是三维的,但是我们的数据是二维的所以使用torch.unsqueeze(data, dim=1)增加一维。

在计算loss的时候,output多了一维,所以使用torch.squeeze将这一维去除。如果不理解将其打印出来就可以看到了。

完成上面的代码就可以开始训练了,运行结果如下:

image-20220316094928025

训练完成后,接下来开始测试部分的编写

测试

新建test.py,插入代码:

import pandas as pd
import torch
import numpy as np
from torch import nn
from model import RNN

DEVICE = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

drain_file = 'comp_a_sellog'
df_data = pd.read_pickle('cpu_diag_comp_sel_log_all_feature_1h_3_sum.pkl')  # 读取之前构造好的特征数据
df_test_df = pd.read_csv('preliminary_submit_dataset_a.csv', index_col=0).reset_index()
df_test = pd.merge(df_data[df_data.sn.isin(df_test_df.sn)], df_test_df, on='sn', how='left')
res = df_test[['sn', 'fault_time']]
print(df_test)
x_test = df_test.drop(['sn', 'collect_time_gap', 'fault_time'], axis=1)
model=torch.load('best.pth')
model.cpu()
x_test = np.array(x_test)

df_tensor = torch.Tensor(x_test)
output= model(torch.unsqueeze(df_tensor, dim=1))
_, pred = torch.max(torch.squeeze(output), 1)
res['label']=pred
res = res.sort_values(['sn', 'fault_time'])
res = res.drop_duplicates(['sn', 'fault_time'], keep='last')
res.to_csv('comp_a_result_1.csv', index=0)

测试集处理部分也是参考了天池上Baseline。

load模型,并设置其device为cpu。

将测试集转为torch.Tensor对象。

预测,并保存结果。

总结

本文实现了第三届阿里云磐久智维算法大赛的BaseLine,该BaseLine基于pytoch版的GRU实现。通过对该BaseLine,可以学习到如何使用GRU完成对csv数据训练和测试。

希望能给大家带来帮助,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第三届阿里云磐久智维算法大赛——GRU BaseLine 的相关文章

  • 如何使用CNN来训练不同大小的输入数据?

    CNN 似乎主要针对固定大小的输入来实现 现在我想用CNN来训练一些不同大小的句子 有哪些常用的方法 以下建议主要与用于计算机视觉任务 特别是识别 的 CNN 相关 但也可能对您的领域有所帮助 我会看看He 等人的 用于视觉识别的深度卷积网
  • 运行时错误:CUDA 错误:设备端断言已触发 - 训练 LayoutLMV3 时

    我正在训练最新版本的layoutLMv3模型 但在开始训练时trainer train 出现以下错误 请帮我解决它 我使用的是 v100 4 GPU RuntimeError Traceback most recent call last
  • Attention机制中的“源隐藏状态”指的是什么?

    注意力权重计算如下 我想知道什么h s指 在tensorflow代码中 编码器RNN返回一个元组 encoder outputs encoder state tf nn dynamic rnn 正如我所想 h s应该是encoder sta
  • browserify :- 未捕获类型错误:fs.readFileSync 不是函数

    我试图在我的代码中使用natural js 在客户端使用它 我使用browserify 但它给出了一个错误 Uncaught TypeError fs readFileSync is not a function at loadDictio
  • Keras 文本预处理 - 将 Tokenizer 对象保存到文件中以进行评分

    我按照以下步骤 大致 使用 Keras 库训练了一个情感分类器模型 使用 Tokenizer 对象 类将文本语料库转换为序列 使用 model fit 方法构建模型 评估这个模型 现在 为了使用此模型进行评分 我可以将模型保存到文件中并从文
  • Python 3 和 NLTK 与 WordNet 2.1 - 这可能吗?

    我将 Python 3 和 NLTK 3 0 0 与 WordNet 3 0 结合使用 我想用该数据 semval2007 https github com alvations pywsd tree master pywsd data se
  • 比较文本文档含义的最佳方法?

    我正在尝试找到使用人工智能和机器学习方法来比较两个文本文档的最佳方法 我使用了 TF IDF Cosine 相似度和其他相似度度量 但这会在单词 或 n gram 级别上比较文档 我正在寻找一种方法来比较meaning的文件 最好的方法是什
  • BERT - 池化输出与序列输出的第一个向量不同

    我在 Tensorflow 中使用 BERT 有一个细节我不太明白 根据文档 https tfhub dev google bert uncased L 12 H 768 A 12 1 https tfhub dev google bert
  • 生成易于记忆的随机标识符

    与所有开发人员一样 我们在日常工作中不断处理某种标识符 大多数时候 它与错误或支持票有关 我们的软件在检测到错误后 会创建一个包 该包的名称由时间戳和版本号格式化 这是创建合理唯一标识符以避免混淆包的一种廉价方法 例子 错误报告 20101
  • 否定句子的算法

    我想知道是否有人熟悉算法句子否定的任何尝试 例如 给定一个句子 这本书很好 请提供任意数量的意思相反的替代句子 例如 这本书不好 甚至 这本书不好 显然 以高精度实现这一点可能超出了当前 NLP 的范围 但我确信在这个主题上已经有了一些工作
  • 语音识别中如何处理同音词?

    对于那些不熟悉什么是同音字 https en wikipedia org wiki Homophone是的 我提供以下示例 我们的 是 嗨和高 到 太 二 在使用时语音API https developer apple com docume
  • NLTK 中的无监督 HMM 训练

    我只是想进行非常简单的无监督 HMM 训练nltk http www nltk org 考虑 import nltk trainer nltk tag hmm HiddenMarkovModelTrainer from nltk corpu
  • SpaCy 模型“en_core_web_sm”的词汇量大小

    我尝试在 SpaCy 小模型中查看词汇量 model name en core web sm nlpp spacy load model name len list nlpp vocab strings 只给了我 1185 个单词 我也在同
  • BERT 输出不确定

    BERT 输出是不确定的 当我输入相同的输入时 我希望输出值是确定性的 但我的 bert 模型的值正在变化 听起来很尴尬 同一个值返回两次 一次 也就是说 一旦出现另一个值 就会出现相同的值并重复 如何使输出具有确定性 让我展示我的代码片段
  • 是否可以使用 Google BERT 来计算两个文本文档之间的相似度?

    是否可以使用 Google BERT 来计算两个文本文档之间的相似度 据我了解 BERT 的输入应该是有限大小的句子 一些作品使用 BERT 来计算句子的相似度 例如 https github com AndriyMulyar semant
  • 如何在Python中使用多处理来加速循环执行

    我有两个清单 列表 A 包含 500 个单词 列表 B 包含 10000 个单词 我正在尝试为列表 A 找到与 B 相关的相似单词 我正在使用 Spacy 的相似函数 我面临的问题是计算需要很长时间 我是多处理使用的新手 因此请求帮助 如何
  • NLTK:包错误?朋克和泡菜?

    基本上 我不知道为什么会收到此错误 只是为了获得更多图像 这里有一个代码格式的类似消息 由于是最新的 该帖子的答案已经在消息中提到 Preprocessing raw texts LookupError Traceback most rec
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • 斯坦福 CoreNLP:使用部分现有注释

    我们正在尝试利用现有的 代币化 句子分割 和命名实体标记 同时我们希望使用斯坦福 CoreNlp 额外为我们提供 词性标注 词形还原 和解析 目前 我们正在尝试以下方式 1 为 pos lemma parse 创建一个注释器 Propert
  • 管道:多个流消费者

    我编写了一个程序来计算语料库中 NGram 的频率 我已经有一个函数 它消耗一串令牌并生成一个订单的 NGram ngram Monad m gt Int gt Conduit t m t trigrams ngram 3 countFre

随机推荐

  • Java如何使用JDOM解析XML呢?

    转自 Java如何使用JDOM解析XML呢 下文笔者讲述使用JDOM解析XML的方法分享 如下所示 JDOM简介 JDOM是一个开源项目 它基于树形结构 使用Java代码对XML文档实现解析 生成 序列化及多种操作 JDOM与DOM非常类似
  • 微星主板 新版bios 开启虚拟化

    微星主板新版bios的虚拟化位置比较特别 进入bios开启高级模式 如图cpu configurationn SVM Mode就是虚拟化
  • 基于Jenkins的自动构建系统开发

    1 绪论 1 1 课题的研究背景 随着IT行业的不断发展 软件开发的复杂度也随着不断提高 与此同时 软件的开发团队也越来越庞大 而如何更好地协同整个团队进行高效准确的工作 从而确保软件开发的质量已经慢慢成为了开发过程中不可回避的问题 在软件
  • 中标麒麟离线搭建SVN服务器教程

    中标麒麟离线搭建SVN服务器教程 一 下载相应的包 subversion 1 8 18 tar gz 下载地址 http subversion apache org sqlite autoconf 3190300 tar gz 下载地址 h
  • Python 赋值和copy的区别

    Python 赋值和copy的区别 1 定义 1 1 直接赋值 对象名的引用 相当于起了一个别名 赋值不改变变量的内存地址 仅是对象的简单引用 a和b指向同一片内存区域 改变其中一个 另外一个也会改变 1 2 拷贝copy 划分新的存储地址
  • 【机器学习】Yellowbrick 包的理解和说明

    文章目录 一 介绍 二 Visualizers 2 1 Classification Visualization 2 2 Clustering Visualization 2 3 Feature Visualization 2 4 Mode
  • node.js连接mysql出现错误: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requ

    node js连接mysql出现错误 ER NOT SUPPORTED AUTH MODE Client does not support authentication protocol requested by server consid
  • 数据系统架构-8.任务调度系统

    任务调度系统 序 在有了各种数据统计任务之后 就产生了任务调度需求 我们需要把任务管理起来统一调度 保证任务之间上下游的依赖关系 监控任务运行状态 异常情况下及时告警 尽可能自动化处理异常 调度系统高可用 使每天的数据统计任务按时执行完成
  • Java之反射机制(获取Class对象的三种方式)

    Java之反射机制 获取Class对象的三种方式 开发工具与关键技术 MyEclipse 10 java 作者 刘东标 撰写时间 2019 06 14 如何得到各个字节码对应的实例对象 每个类被加载后 系统会为该类生成对应的 Class对象
  • 英特尔正式宣布于2021年推7奈米制程芯片

    英特尔 Intel 在近日举行的投资人会议上揭露了该公司的产品规画 宣布将于2021年推出7奈米制程芯片 以对抗台积电的5奈米制程产品 今年英特尔力推的Ice Lake微架构仍是基于10奈米制程 宣称预计于6月出货的Ice Lake客户端产
  • 基于卷积神经网络的高光谱分类 CNN+高光谱+印度松数据集

    基于卷积神经网络的高光谱分类 一 研究现状 只考虑到高光谱图像的光谱特征 即 1 提取特征 小波变换 Gabor纹理分析 形态学剖面 2 利用分类方法分类 支持向量机 决策树 随机森林 神经网络 缺点 这些特征提取方法需要依据先验知识手动设
  • 【YOLOv5 数据集划分】训练和验证、训练验证和测试(train、val)(train、val、test)

    YOLOv5 数据集划分 训练和验证 训练验证和测试 train val train val test 在已有测试集的情况下划分训练集和验证集 将图片和标注数据按比例切分为 训练集和测试集 import shutil import rand
  • ORACLE 根据分组排序产生序列号

    对应的语法是这样的 select row number over partition by col1 order by col2 seq 具体的场景如下 如果一张表中保存了整个年级的各个班级每个同学的语文成绩 create table Sc
  • Linux系统常用命令

    操作系统 作用 是管理好硬件设备 并为用户和应用程序提供一个简单的接口 以便于使用 作为中间人 连接硬件和软件 linux 安全 稳定 免费 占有率高 嵌入式操作系统 linux发展历程 unix gt minix gt linux 发行版
  • 自定义oh-my-zsh主题风格,代码和语法的解释

    自定义oh my zsh主题风格 代码和语法的解释 摘要 简要介绍 zsh theme的代码 不涉及函数 关键词 ohmyzsh zsh theme语法 https github com ohmyzsh ohmyzsh wiki Theme
  • ubuntu20.04为AppImage创建快捷启动器

    前言 作为一名java开发者 平时用得到的一些开源的或者实用的开发工具 他们有的都是打包为AppImage格式 这种格式的优越性在于它是临时挂载在我们的文件系统上以便运行 使用这种方法 开发人员可以将他们的应用程序打包到一个 AppImag
  • Kotlin和Android:一种语言背后的JetBrains和Google

    Google I O 2017 宣布了几项重要公告 但对我而言 最有趣的一个是Android上的 对Kotlin的一流支持 关于此公告的Kotlin博客文章讨论了这给Kotlin用户带来的好处 如果您担心Kotlin支持的其他平台 服务器和
  • React-Native开发中常用的第三方控件持续更新

    十一假期已经过去了 今天正式开工了 这里的文章我会持续进行更新 希望为开发的小伙伴们提供点帮助 如果能帮到你们 我就心满意足了 十一假期学习撸了一个小程序 欢迎各位朋友进行关注 代码已经在gitHub上开源 清风天气 清风天气 2018 1
  • python三种基本数据类型_python基础数据类型

    python常用的数据类型包括整型 int 字符串 str 布尔值 bool 列表 list 元组 tuple 字典 dict 集合 set 整型 int int操作方法 bit length 就是查看十进制数转换成二进制在内存中占用了多少
  • 第三届阿里云磐久智维算法大赛——GRU BaseLine

    赛题 比赛链接 第三届阿里云磐久智维算法大赛 天池大赛 阿里云天池 aliyun com 大赛概况 庸医只知头痛医头脚痛医脚 凡良医者 必会抽丝剥茧 察其根本 方得药到病除 第一届和第二届磐久智维算法大赛 我们针对异常预测开展了积极的探索和