Deepdive原理

2023-11-08

Deepdive原理

DeepDive是一种新型数据管理系统,能够从非结构化的文本中提取出结构化的数据,可以在单个系统中解决提取,集成和预测问题,使用户能够快速构建复杂的端到端数据管道,例如黑暗数据BI(商业智能)系统。通过允许用户端到端构建系统,DeepDive允许用户专注于系统中最能直接提高应用程序质量的部分。相比之下,以前基于流水线的系统要求开发人员构建提取器,集成代码和其他组件 - 而不清楚他们的更改如何提高其数据产品的质量。这种简单的洞察力是DeepDive系统如何在更短的时间内生成更高质量数据的关键。
通过DeepDive,可以提取实体间的复杂的关系,并推断涉及这些实体的事实。

1.数据处理

加载原始输入数据
我们的第一个任务是下载巨潮资讯网提供的公告文章集的原始文本并将其加载到我们数据库的articles表格中。我们创建一个简单的shell脚本,以TSV格式下载和输出新闻文章。DeepDive将自动创建表,执行脚本并加载表,如果我们将其保存为:input/articles.tsv.sh
上述脚本读取语料库的样本(作为JSON对象的行提供),然后使用jq语言提取字段id(对于文档id)和content每个条目并将它们转换为TSV格式。
接下来,我们需要声明本的架构articles表中我们的app.ddlog文件 ; 我们添加以下行:

articles(id      text,
    	   content text).

添加自然语言标记
deepdive默认用standford nlp进行文本处理,可以返回句子的分词、lemma、pos、NER
自然语言处理 Natural Language Processing
分词:首先是中文分词,在一句话中,我们要把词分出来,而不是光看单独的子。比如 我 今天 很 高兴 选择合适的字组成合适的词来构成句子
lemma:词元,这个是指这个词实质上的含义,比如cat,cats他们有相同词元。
pos:词性标注,最基本的是动词、名词等等
NER:Named Entity Recognition,可以识别出地名、人名、组织等等

抽取候选关系
前面都是通用的步骤,不论抽取什么样的关系,什么类型的实体,都要先对文章进行处理,分词、标记。但是到了这一步,我们就是要按照我们的任务去安排了。
既然我们要抽取公司间的交易信息,首先要得到文本中的公司是谁,才能进一步知道他们有没有关系,这一步就是要抽取这些公司啦。一共分两步:

  1. 抽取候选实体
  2. 得到实体间的候选关系

2.抽取候选关系

抽取候选实体
如何从这一堆文本里得到公司的名字。在nlp处理中有一个步骤是命名实体识别(NER),这个东西会把每个词的实体识别出来,比如公司名字就应是属于ORG类的实体。所以我们只要在每个sentence中找到其中的ner_tags 为连续的ORG标记的就可以了。

抽取候选关系
​ 候选实体已经有了,就是文中出现的公司名,我们要找的是公司之间的交易关系。所以这里候选关系简单来说,就是把不同的公司名两两组合,最终得到的关系表其实就相当于对两个候选实体表进行笛卡尔积(当然,我们还需要一些简单的过滤的处理,比如两个公司名不能相同啊等等)了。

A:a1,a2,a3 B:b1,b2
​A×B:(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)

现在定义一个表来存储候选关系

transaction_candidate(
    p1_id       text,
    p1_name     text,
    p2_id       text,
    p2_name     text
)

特征提取
对于前面提取出来的公司间的候选关系,要使用机器学习的算法,通过训练集,让计算机去分类。根据特征判断哪个关系可能有交易关系,
​ 对于自然语言来说,特征就是上下文。
所以定义一个特征表:

transaction_feature(
    p1_id       text,
    p2_id       text,
    feature     text
).
feature                        
————————————————————————————
 WORD_SEQ_[郴州市 城市 建设 投资 发展 集团 有限 公司]
 LEMMA_SEQ_[郴州市 城市 建设 投资 发展 集团 有限 公司]
 NER_SEQ_[ORG ORG ORG ORG ORG ORG ORG ORG]
 POS_SEQ_[NR NN NN NN NN NN JJ NN]
 W_LEMMA_L_1_R_1_[为]_[提供]
 W_NER_L_1_R_1_[O]_[O]
 W_LEMMA_L_1_R_2_[为]_[提供 担保]
 W_NER_L_1_R_2_[O]_[O O]
 W_LEMMA_L_1_R_3_[为]_[提供 担保 公告]
 W_NER_L_1_R_3_[O]_[O O O]
 W_LEMMA_L_2_R_1_[公司 为]_[提供]
 W_NER_L_2_R_1_[ORG O]_[O]
 W_LEMMA_L_2_R_2_[公司 为]_[提供 担保]
 W_NER_L_2_R_2_[ORG O]_[O O]
##下面最长的就是左2右3,或者左3右2的格式,最长是五个。
 W_LEMMA_L_2_R_3_[公司 为]_[提供 担保 公告]
 W_NER_L_2_R_3_[ORG O]_[O O O]
 W_LEMMA_L_3_R_1_[有限 公司 为]_[提供]
 W_NER_L_3_R_1_[ORG ORG O]_[O]
 W_LEMMA_L_3_R_2_[有限 公司 为]_[提供 担保]
 W_NER_L_3_R_2_[ORG ORG O]_[O O]

样本打标
对于监督学习,必然需要标注数据,那么已标注数据是怎么来的呢?当然正经的来说,应该是我们给这个系统提供大量的我们之前已经标注好了的数据,但是现在我们没有。所以我们可以对前面几步我们抽取出来的关系,利用一些先验的数据(比如人工标记的关系,还有先验的规则)对那些关系进行标记(标注出某些标记是已知的存在交易关系的,还有已知不存在交易关系的候选关系)。

所以对于这里来说,我们同样需要数据库中有一个表,来存储我们的被标记数据。在app.ddlog中定义一个表来存储关系的规则名和权重:

transaction_label(
p1_id   text,
p2_id   text,
label   int,
rule_id text
    ).

其中rule_id代表在标记决定相关性的规则名称。label为正值表示正相关,负值表示负相关。绝对值越大,相关性越大。初始化定义,复制 transaction_candidate表到transaction_label中,label均定义为零。

3.模型构建

首先简单介绍一下关系抽取,关系抽取就是判断一个一句话中出现的两个实体是否存在某种已经定义好的关系。比如下面这个句子:

在这里插入图片描述
对于这样一次判断的过程,输入是句子+实体对。输出是夫妻关系这样一个类别。传统的关系抽取过程可以看成是对目标实体对和句子的一个多分类问题。

deepdive (http://deepdive.stanford.edu/) 是斯坦福大学开发的信息抽取系统,系统集成了文件分析、信息提取、信息整合、概率预测等功能。deepdive系统运行过程中包括一个重要的迭代环节。即每轮输出生成后,用户需要对运行结果进行错误分析,通过特征调整、更新知识库信息、修改规则等手段干预系统的学习,这样的交互与迭代计算能使得系统的输出不断得到改进。
首先来简单介绍一下deepdive的算法原理,主要分为以下几个内容:
1.因子图模型
2.吉布斯采样
3. 权重学习

因子图概述
因子图是概率图模型的一种, DeepDive的概率推测(Probabilistic inference)就是在因子图上执行的。在因子图中,有两类节点,变量节点( Variables )和因子节点( Factor )。每一个变量节点表示一个特定事件发生的概率。比如我们可以将小明是否抽烟看成一个变量节点,如果他抽烟。则节点值为1,否则则节点取值为0。在deepdive中,所有的变量节点都是布尔类型的。因子节点表示一种一阶谓词逻辑和其对应的特定的权重w,定义了变量节点之间的关系。我们可以把他们看成一些关于变量节点的函数。

接下来看一个例子,构造如上所示的一个因子图:
变量节点(V):
v1:小明是否有癌症
v2:小明是否抽烟
在这里插入图片描述
Variables:如果这种结点的值已知,它就可以当作一个证据变量(用来推断别的值);这个值也可以是未知的,这事就叫做查询变量,就是我们需要进行预测得到的值,比如图中的v1,v2;
Factor:每个因子都可以连接到多个变量,并用因子函数定义它们之间的关系,比如图中的f1,f2​ ;每个因子(或者说因子函数)都有一个权重值,来表示这个因子影响力的大小。换个说法,这个权重值表示了某个因子的可信程度,正数越大则越正确,负数越小则越错误(错误表示某种不可能,比如一个人的亲儿子同时是他的亲兄弟,这就是一个错误,所以这个因子的权重就应该是一个很小的负值)。因子函数的权重可以通过训练学习得到,也可以手动赋值(通过脚本或者app.ddlog)。

因子节点(F,W):
定义:f1(v2, v1), w1:小明如果抽烟那么他有癌症
f2(v2), w2:我们认为小明是抽烟的
那么:f1(0,0) = 1, f1(0,1) =1, f1(1,0) = 0 , f1(1,1) = 1
f2(1) = 1, f2(0) = 0
概率计算:
在这里插入图片描述

DDlog概述
DDlog是一种更高级的语言,用于以简洁的Datalog类语法编写DeepDive应用程序。在这里,我们专注于描述在DeepDive应用程序中定义数据流的一般语言功能。
DDlog程序是声明和规则的集合。每个声明和规则都以句点(.)结尾。DDlog中的注释以hash(#)字符开头。
所有DDlog代码都应放在app.ddlog(DeepDive应用程序下命名的文件)中。

DDlog架构声明
首先,在app.ddlog中应声明在整个程序中定义和使用的关系的模式。这些关系映射到为DeepDive应用程序配置的数据库中的表。如下所示:

relation_name(
  column1_name  column1_type,
  column2_name  column2_type,
  ...
).

与SQL表定义类似,模式声明只是关系的名称,后跟逗号分隔的列名列表及其类型。目前,DDlog将类型直接映射到SQL,因此可以使用底层数据库支持的任何类型,例如PostgreSQL的类型。

下面是一个现实的例子。

article(
  id     int,
  length int,
  author text,
  words  text[]
).

这里我们定义了一个名为“article”的关系,它有四列,分别命名为“id”,“length”,“author”和“words”。每列都有它自己的类型,在这里利用int,text和text[]。

DDlog正态推导规则
典型的类似数据目录的规则用于定义如何从其他关系派生关系。例如,以下规则规定关系的元组Q是从关系R和S派生的.

Q(x, y) :- R(x, y), S(y).

这里Q(x, y)是head原子,R(x, y)和S(y)是body原子。 X和y是规则中的变量。head是被定义的关系,body是谓词或条件的结合,它们用于绑定定义的变量,用逗号(,)分隔。在这个例子中,R的第二列是统一用的S第一列,即,主体是R和S之间相等联接关系。

DDlog布尔变量
变量关系的定义方法,就是在普通关系的关系名后面加上一个问号:?,就可以表示这个表是变量表,而不是用于加载或处理数据以供模型稍后使用的常规关系。变量关系的列用作关键字。以下是布尔变量关系的示例声明。

has_spouse?(
	p1_id text, 
	p2_id text
 ).

这声明了一个名为变量的关系has_spouse,其中每个唯一的一对(p1_id, p2_id)代表模型中的一个不同的随机变量。

DDlog指定相关性
现在,在几乎每个问题中,变量都以特殊的方式相互关联,并且希望用这种领域知识来丰富模型。可以通过创建将多个相关变量连接在一起的某些类型的因子来建模这种相关性。这是FACTOR_HEAD中更丰富的语法发挥作用的地方。DDlog借用了Markov Logic Networks的大量语法,因此也使用了一阶逻辑。
例如,smoke示例中的以下规则关联两个变量关系。

@weight(3)
smoke(x) => cancer(x) :-
    person(x).

这条规则表明,如果一个人抽烟,就会暗示他/她会患上癌症。这里,常量3用于@weight表示该规则的某种程度的置信度,而不是从数据中学习权重。

模型构建
(1) 我们最终想要得到的是什么。是判断某两家公司之间是否存在交易。就像前面的数据一样,我们的推理数据同样需要存储他们的数据表,因为他是算出来的,所以这些是变量,故DeepDive给它取了个名字:Variable Relation(变量关系)。

我们要求的是是否有交易,所以可以按照下边例子定义一个变量关系:

@extraction
has_transaction?(
    p1_id text,
    p2_id text).

这里的变量关系结合到因子图,应该是变量这一部分,变量即可以包含已知的知识,也可是未知的要抽取的知识,所以这个变量关系其实就是定义了因子图中的一部分变量节点,下一小部分就是填入因子和已知知识的过程。当然一个DeepDive项目中可以有很多种变量节点,构建一个复杂的因子图来实现更准确的抽取。

(2). 在前面部分已经对数据进行了简单的打标,也就是相当于机器学习任务中,我们有了已标记数据。把已经标记了的数据,输入到has_transaction表中,也就是可以得到因子图中的已知的变量节点。如下所示:

has_transaction(p1_id, p2_id) = if l > 0 then TRUE
     else if l < 0 then FALSE
     else NULL end :- transaction_label_resolved(p1_id, p2_id, l).

此时变量表中的部分变量label已知,成为了先验变量。

(3). 最后编译执行这个表,可以得到带有已知结果的变量节点:

deepdive compile && deepdive do has_transaction

4.因子图构建

指定特征
前面已经定义了因子图中的基本节点,下面应该定义其中的因子了,还有用来学习的特征。transaction_candidate这个表中,我们存储了所有候选的公司的匹配对,transaction_feature中存储了每个公司对之间的语言特征。现在我们告诉因子图,如何训练权重,就是根据我们之前抽取到的特征来训练。比如下面:
将每一对has_transaction中的实体对和特征表连接起来,通过特征的连接,全局学习这些特征的权重。在app.ddlog中定义:

@weight(f)
   has_transaction(p1_id, p2_id) :-
       transaction_candidate(p1_id, _, p2_id, _),
       transaction_feature(p1_id, p2_id, f).

指定变量间的依赖性
定义一个简单的因子,指定变量间的依赖性,也是一个简单的推理规则:
在当前的工作中,甲公司和乙公司发生交易,那么必定乙公司和甲公司也发生了交易,交易是一个双向的关系,所以我们现在按照下面的例子来定义一个推理的因子,表示这种关系,其中weight中的3.0认为赋予这个规则的权重,不用学习。

@weight(3.0)
has_transaction(p1_id, p2_id) => has_transaction(p2_id, p1_id) :-
     transaction_candidate(p1_id, _, p2_id, _).

变量表间的依赖性使得deepdive很好地支持了多关系下的抽取。

最后,编译,并生成最终的概率模型:

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

Deepdive原理 的相关文章

  • Deepdive原理

    Deepdive原理 DeepDive是一种新型数据管理系统 能够从非结构化的文本中提取出结构化的数据 可以在单个系统中解决提取 集成和预测问题 使用户能够快速构建复杂的端到端数据管道 例如黑暗数据BI 商业智能 系统 通过允许用户端到端构
  • 动态知识图补全问题

    4 19 4 23 动态信息 1 Dual Quaternion Knowledge Graph Embeddings 本文应该是静态方法 距离公式和旋转公式的一个统一框架 提出一个新的映射空间 Dual Quaternion space
  • 知识图谱相关会议之观后感分享与学习总结

    2015年6月27日 清华大学FIT楼多功能报告厅 中国中文信息学会青年工委系列学术活动 知识图谱研究青年学者研讨会 由于我毕设是与知识图谱 实体消歧 实体对齐 知识集成相关的 所以去听了这个报告 同时报告中采用手写笔记 所以没有相应的PP
  • 基于知识图谱的个性化学习推荐系统的设计与实现_kaic

    摘 要 Abstract 1 绪 论 1 1 研究背景及意义 1 2 国内外现状研究 1 3 研究工作和论文结构 2 相关技术 2 1 HTML 语言 2 2 Python 语言 2 3 数据库技术 2 4 Django 框架 3 系统分析
  • 【Neo4j与知识图谱】Neo4j的常用语法与一个简单知识图谱构建示例

    文章目录 一 Cypher基本语法 1 创建节点和关系 2 查询节点和关系 3 更新节点和关系 4 删除节点和关系 二 小示例 2 1 准备数据和创建实体和关系 2 2 进行查询修改等操作 一 Cypher基本语法 Neo4j是一种基于图形
  • MindMap: Knowledge Graph Prompting Sparks Graph of Thoughts in Large Language Models

    本文是LLM系列文章 针对 MindMap Knowledge Graph Prompting Sparks Graph of Thoughts in Large Language Models 的翻译 思维导图 大型语言模型中的知识图谱提
  • 实体-关系联合抽取:Knowledge-Based Weak Supervision for Information Extraction of Overlapping Relations

    论文地址 https www aclweb org anthology P11 1055 pdf 文章标题 Knowledge BasedWeak Supervision for Information Extraction of Over
  • 学习PGL课程:图卷积网络GCN、图注意力网络GAT

    一 GCN 什么是图卷积 不同的地方在于 图像像素点周围的像素个数通常是固定的 而图结构上某个节点周围的节点数是不固定的 图卷积网络计算公式 1 邻接矩阵解释 2 度矩阵 表示节点与之相连节点的个数 包括自环 3 H l 表示第l次迭代的节
  • 清华裴丹:我在智能运维科研领域的一些思考

    前言 中国应用性能管理行业盛宴 2017中国应用性能管理大会 简称APMCon 2017 于8月10日至11日在北京新云南皇冠假日酒店隆重召开 本届APMCon是由听云 极客邦和InfoQ联合主办 作为国内APM领域最具影响力的技术大会 本
  • 初识Jena

    目录 前言 ApacheJena Or Neo4j Jena的安装和简介 从MySql转换数据到RDF RDF加载laod到Fuseki Fuseki的使用 遇到的问题 个人总结 其他 参考文献 前言 一个机器人问答系统的核心我认为包括两大
  • 华为机试-第二题

    查找知识图谱中的实例知识 知识图谱是一种结构化的语义网络 用于描述物理世界中的概念及其实例的相关关系 可以把知识图谱看成是一种有向图 图中的点是概念或实例 图中的边是概念及其实例的相关关系 现定义一种简单的知识图谱 概念 包括父概念及其子概
  • 知识图谱之知识融合

    最近在 小象学院 上知识图谱的课程 做了一些笔记 现整理了一下 1 什么是知识融合 将来自不同知识库的同一实体融合在一起 目标 融合各层面的知识 合并两个知识图谱 本体 需要确认的是 1 等价实例 实体的匹配 左右两个人是同一个人 sams
  • 海量影像图元合并可以考虑用openmp

    影像合并图元耗时较长 又是重复的功能 可以考虑并行openmp
  • 脊柱神经系统分布在哪里,脊柱神经系统分布图片

    脊柱两侧分出多少对脊神经 它构成了颈丛 臂丛 腰丛和骶丛 接着分布到全身 构成周围神经 31对脊神经 分别对应于31个脊髓节段上 即8颈 12胸 5腰 5骶 1尾 脊髓每个节段发出一对脊神经 颈丛由第1 4颈神经的前支构成 臂丛由第5 8颈
  • 基于依存句法分析的实体关系提取

    基于依存句法分析的实体关系提取 1 概述 概述 句法分析是自然语言处理中的关键技术之一 其基本任务是确定句子的句法结构或者句子中词汇之间的依存关系 主要包括两方面的内容 一是确定语言的语法体系 即对语言中合法的句子的语法结构给与形式化的定义
  • 软件测试/人工智能丨如何使用知识图谱实现精准测试效果

    使用知识图谱实现精准测试效果涉及构建和利用知识图谱来辅助测试过程 以下是一些步骤和方法 帮助实现精准测试效果 定义测试知识图谱 识别实体 确定在测试过程中涉及的关键实体 例如系统组件 功能模块 用户角色等 建立关系 定义这些实体之间的关系
  • 人工智能深度学习:探索智能的深邃奥秘

    导言 人工智能深度学习作为当今科技领域的明星 正引领着智能时代的浪潮 深度学习和机器学习作为人工智能领域的两大支柱 它们之间的关系既有协同合作 又存在着显著的区别 本文将深入研究深度学习在人工智能领域的角色 以及其在各行各业中的深远影响 研
  • 人工智能智能控制系统:引领未来智能化时代

    导言 人工智能智能控制系统是当今科技领域的热点之一 它不仅在工业生产中发挥着关键作用 也在生活中展现出前所未有的智能化特征 本文将深入探讨人工智能智能控制系统的定义 应用领域和未来发展趋势 深入探讨如何实现智能控制系统与人工智能的有机结合
  • 人工智能伦理学与法律:创造公正智能的道路

    导言 随着人工智能的迅速发展 伦理学和法律的角色变得愈发关键 人工智能的迅猛发展引发了对伦理和法律框架的深刻思考 本文将深入探讨人工智能伦理学的原则 伦理法规的建设以及法律对人工智能的监管 为创造公正智能的道路指明方向 探讨如何将伦理学和法
  • HttpUtils——助力高效网络通信

    使用HttpClient发送请求 接收响应很简单 一般需要如下几步即可 1 创建HttpClient对象 2 创建请求方法的实例 并指定请求URL 如果需要发送GET请求 创建HttpGet对象 如果需要发送POST请求 创建HttpPos

随机推荐

  • 冒泡法详解

    目录 什么是冒泡法 冒泡法思路 代码的实现 什么是冒泡法 冒泡排序 Bubble Sort 是一种计算机科学领域的较简单的排序算法 这个算法的名字由来是因为越小的元素会经由交换慢慢 浮 到数列的顶端 升序或降序排列 就如同碳酸饮料中二氧化碳
  • 大数据和人工智能关系的基本介绍

    人工智能主要有三个分支 1 基于规则的人工智能 2 无规则 计算机读取大量数据 根据数据的统计 概率分析等方法 进行智能处理的人工智能 3 基于神经元网络的一种深度学习 基于规则的人工智能 在计算机内根据规定的语法结构录入规则 用这些规则进
  • 搜索引擎solr系列---多字段匹配的实现方法

    solr可以实现多字段匹配查询的结果 即传入一个条件 可以按照你预选设置好的匹配范围去匹配数据 将匹配到的所有数据返回 比如现在我有如下这样的需求 数据库中fbf表中有多个字段 其中有几个中文字段 现在要求传入汉字 对其中的四个中文字段进行
  • 人脸属性识别 - 使用多任务学习模型在CelebA数据集上进行人脸属性识别任务

    简介 人脸属性识别是计算机视觉领域的一个重要应用 它可以用于人脸检测 人脸识别 表情识别等多个领域 本文将介绍如何使用多任务学习模型在CelebA数据集上进行人脸属性识别任务 我们将使用Python编写代码 并使用PyTorch框架搭建我们
  • 云计算基础架构

    原文地址 http www chinacloud cn show aspx id 15922 cid 12 云计算不仅是技术 更是服务模式的创新 云计算之所以能够为用户带来更高的效率 灵活性和可扩展性 是基于对整个IT领域的变革 其技术和应
  • 基础算法:差分

    题目 输入一个长度为 n 的整数序列 接下来输入 m 个操作 每个操作包含三个整数 l r c 表示将序列中 l r 之间的每个数加上 c 请你输出进行完所有操作后的序列 差分 若数组A a1 a2 a3 数组B b1 b2 b3 满足a1
  • java种语言包在线翻译_Java 实现在线翻译功能 调用微软Bing API

    下面是利用java程序实现翻译功能 调用微软Bing API 注意 代码中的keyId 需要自己申请 2 去申请key 进入http www bing com developers createapp aspx 填写相关的你的应用信息就行了
  • pikachu靶场之暴力破解

    暴力破解 是一攻击具手段 在web攻击中 一般会使用这种手段对应用系统的认证信息进行获取 其过程就是使用大量的认证信息在认证接口进行尝试登录 直到得到正确的结果 为了提高效率 暴力破解一般会使用带有字典的工具来进行自动化操作 理论上来说 大
  • 计算机网络主要分为哪几类?

    通俗地讲 计算机网络就是由多台计算机或其他计算机网络设备通过传输介质和软件物理 或逻辑 连接在一起组成的 从总体上来说 计算机网络的组成基本上包括计算机 网络操作系统 传输介质 可以是有形的 也可以是无形的 如无线网络的传输介质就是空气 和
  • vue-cli搭建项目

    一 全局化安装cnpm 其实对于安装vue cli 使用npm命令和cnpm命令都是可以的 个人觉得使用npm安装的比较慢 而且很可能会因为网络问题而出错 所以还是觉得使用cnpm稳一点 npm install cnpm g registr
  • 第35讲:Xposed+模拟器的详细使用

    如果你对逆向有所涉猎的话 可能听说过 Hook 利用 Hook 技术我们可以在某一逻辑的前后加入自定义的逻辑处理代码 几乎可以实现任意逻辑的修改 在前面的 JavaScript 逆向实战课时我们也初步体会了 Hook 的功效 如果你对 Ho
  • 一 , Element-UI tabs标签实现点击左右箭头 实现左右tab栏按个选中切换(正常是只会切换到后面空白tab栏 不会选中) .........二 , tabs标签切换不同的模板样式

    div class TAb div class xiangzuo i class el icon arrow left i div div
  • cuda c by example - 1

    并行计算大当其道 cuda c 给了开发者与NVIDIA 通用型GPU设备交互的能力 举2个栗子先了解一下 1 枚举设备属性代码 int main void cudaDeviceProp prop int count HANDLE ERRO
  • 面试官:说说CountDownLatch,CyclicBarrier,Semaphore的原理?

    CountDownLatch CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景 举个例子 早上部门开会 有人在上厕所 这时候需要等待所有人从厕所回来之后才能开始会议 public class
  • Storm 踩坑记

    1 storm web ui 不显示 Kafka Spouts Lag 原因分析 vim logs ui log 2023 06 05 16 55 35 206 o a s u TopologySpoutLag qtp931482420 2
  • JDBC连接mysql遇到的问题

    本地安装的mysql是5 7版本 pom中引用的mysql connector java依赖是8 0 11版本 驱动使用Class forName com mysql cj jdbc Driver 连接的url为 jdbc mysql 12
  • android使用C/C++调用SO库

    有时候 我们反编译apk得到一个so库 如果直接使用这个so库的话 必须使用原来so库同样的package名字 才能用 这样人家反编译你的apk 就知道你侵犯了人家的版权 为了达到混淆的目的 我们可以再写一个so库调用人家的so库 即把人家
  • Nessus 扫描问题处理

    Nessus扫描后 如下问题 SSH Weak Key Exchange Algorithms Enabled 和 SSH Server CBC Mode Ciphers Enabled 解决方法如下 修改 etc ssh sshd con
  • 使用JSCH连接Linux系统并执行命令

    一 关于JSCH技术的简单描述 JSCH是SSH的一个纯Java实现 说直白点 就是一个远程连接你其他Linux或者Unix服务器的一个java代码包 其实就是我们使用jsch这个jar包来方便我们编写代码来连接自己linux系统的 SSH
  • Deepdive原理

    Deepdive原理 DeepDive是一种新型数据管理系统 能够从非结构化的文本中提取出结构化的数据 可以在单个系统中解决提取 集成和预测问题 使用户能够快速构建复杂的端到端数据管道 例如黑暗数据BI 商业智能 系统 通过允许用户端到端构