图谱实战 | 开源知识图谱融合工具剖析:Dedupe与OpenEA工具实现思想、关键环节与实操分析...

转载公众号 | 老刘说NLP


实体对齐旨在发现不同知识图谱中的共指实体,如百度百科的360与Wikipedia中的360 qihoo。实体对齐是知识融合的重要任务,通过实体对齐集成多源知识图谱可以为下游任务提供更加全面的知识表示。

实际上,实体对齐本质上就是个去重的工作,在数据治理等场景中应用也十分广泛。

Dedupe实体对齐工具和OpenEA实体对齐工具是基于有监督方式进行实体对齐的两个代表开源工具,前者使用主动学习和聚类的方式,后者使用知识嵌入的方式完成对齐目标。

本文主要以这两个工具的调研和实验介绍为主题,从对齐思想、模型构成、模型实验以及评估测试等几个方面进行综合介绍,以达到一定的普及目标,供大家一起参考。

一、Dedupe实体对齐工具

Dedupe是一个python库,使用机器学习对结构化数据快速执行模糊匹配,重复数据删除和实体对齐。基于dedupe方法的对齐,本质上都是去除重复,通过各种数据类型来对样本进行比较,计算相似度,再进行聚类,达到将重复的数据聚集到同一类下,实现去重的目的。

地址:https://github.com/dedupeio/dedupe

Dedupe本质上都是“去重”,其核心方法就是通过各种数据类型(fields中的数据类型)来对样本进行比较计算相似度,然后通过聚类,进而达到将重复的数据(叫做同一类也好)聚集到同一类下,最终实现去重的目的。

1、对齐思想

Deque将数据去重转换为一个基于特征打分的过程,例如,比较一下两条记录是否相似,当我们计算两张唱片是否相似时,我们可以将每张唱片视为长字符串。

record_distance = string_distance('bob roberts 1600 pennsylvania ave. 555-0123',
'Robert Roberts 1600 Pensylvannia Avenue')

转变为各个字段值的相似度:

record_distance = (string_distance('bob', 'Robert')+ string_distance('roberts', 'Roberts')+ string_distance('1600 pennsylvania ave.', '1600 Pensylvannia Avenue')+ string_distance('555-0123', ''))

而不同的字段也可以使用不同的权重,逐字段比较的主要优势是,我们不必平等对待每个字段字符串距离。也许我们认为姓氏和地址相似真的很重要,但名字和电话号码接近并不重要。我们可以用数字权重来表达这种重要性,即

record_distance = (0.5 * string_distance('bob', 'Robert')+ 2.0 * string_distance('roberts', 'Roberts')+ 2.0 * string_distance('1600 pennsylvania ave.', '1600 Pensylvannia Avenue')+ 0.5 * string_distance('555-0123', ''))

其中,对于不同类型的字段,采用不同的距离度量方式,例如,对于String这种类型,模型是采用 affine gap string distance间隙惩罚方法。

2、模型训练

1)模型设置与数据输入

Dedupe给出了多个去重的例子,数据来源于10个不同的芝加哥早期儿童教育网站,

input_file = 'csv_example_messy_input.csv'output_file = 'csv_example_output.csv'settings_file = 'csv_example_learned_settings'training_file = 'csv_example_training.json'print('importing data ...')data_d = readData(input_file)# If a settings file already exists, we'll just load that and skip trainingif os.path.exists(settings_file):print('reading from', settings_file)with open(settings_file, 'rb') as f:deduper = dedupe.StaticDedupe(f)

其中:

csv_example_input_with_true_ids.csv表示带标记的训练集

其中,rue Id就是label,即重复数据的True Id是相同的。

073d116317a612afa8f43727f00caba5.png

csv_example_messy_input.csv表示训练集:

其中,该csv中是没有True Id和Id这两列的,该文件中样本的顺序是按照csv_example_input_with_true_ids.csv中Id的顺序给出的,所以csv_example_messy_input.csv的第一条样本对应的就是csv_example_input_with_true_ids.csv中Id为0的样本,

828b4d67b5cf34e38c56273c254aee94.png

2)选择特征及样本抽样

基于上述思想,训练部分首先要定义模型需要考虑的字段,这个是整个训练的基础,后面会不断学习各个特征的权重。

# Define the fields dedupe will pay attention tofields = [{'field': 'Site name', 'type': 'String'},{'field': 'Address', 'type': 'String'},{'field': 'Zip', 'type': 'Exact', 'has missing': True},{'field': 'Phone', 'type': 'String', 'has missing': True},]# Create a new deduper object and pass our data model to it.deduper = dedupe.Dedupe(fields)

在训练阶段,需要抽取一部分随机样本的记录对,然后从中选择有可能是重复的记录对,也可以通过参数blocked_proportion设置取样记录对的比例。

3)Active learning与人工标注

Deque在训练阶段使用了一个Active learning模型,为了找出重复一组数据的最佳规则,必须给它一组带标签的示例来学习,这就需要引入标注。给出的标记示例越多,重复数据删除结果就越好,所以在运行的过程中,其会将其不能做出判断的样本打印出来让人工来判断。

Phone :  2850617
Address :  3801 s. wabash
Zip :
Site name :  ada s. mckinley st. thomas cdcPhone :  2850617
Address :  3801 s wabash ave
Zip :
Site name :  ada s. mckinley community services - mckinley - st. thomasDo these records refer to the same thing?
(y)es / (n)o / (u)nsure / (f)inished

4)partition聚类与同类数据分配

partition分区将返回dedupe认为都是指同一实体的记录集,在输出格式中,单文件csv表格,同时对相似的记录打上标签,以及对应的置信度,可以看到多了两列,一列是聚类号,相同的聚类号为相似实体,还有一列为置信度

clustered_dupes = deduper.partition(data_d, 0.5)
cluster_membership = {}
for cluster_id, (records, scores) in enumerate(clustered_dupes):for record_id, score in zip(records, scores):cluster_membership[record_id] = {"Cluster ID": cluster_id,"confidence_score": score}

使用的是hierarchy.fcluster聚类方法,其思想在于从给定的链接矩阵定义的层次聚类中形成平面聚类。

def cluster(dupes: Scores, threshold: float = 0.5, max_components: int = 30000
) -> Clusters:distance_threshold = 1 - thresholddupe_sub_graphs = connected_components(dupes, max_components)for sub_graph in dupe_sub_graphs:if len(sub_graph) > 1:i_to_id, condensed_distances, N = condensedDistance(sub_graph)linkage = scipy.cluster.hierarchy.linkage(condensed_distances, method="centroid")partition = scipy.cluster.hierarchy.fcluster(linkage, distance_threshold, criterion="distance")clusters: dict[int, list[int]] = defaultdict(list)for i, cluster_id in enumerate(partition):clusters[cluster_id].append(i)squared_distances = condensed_distances**2for cluster in clusters.values():if len(cluster) > 1:scores = confidences(cluster, squared_distances, N)yield tuple(i_to_id[i] for i in cluster), scoreselse:((ids, score),) = sub_graphif score > threshold:yield tuple(ids), (score,) * 2

3、模型评估

Deque主要定义了evaluateDuplicates来进行评价,思想在于通过计算预测值和真实值(test_dupes,true_dupes)的交集和差集个数进而计算准确率和回归率。

def evaluateDuplicates(found_dupes, true_dupes):true_positives = found_dupes.intersection(true_dupes)false_positives = found_dupes.difference(true_dupes)uncovered_dupes = true_dupes.difference(found_dupes)print('found duplicate')print(len(found_dupes))print('precision')print(1 - len(false_positives) / float(len(found_dupes)))print('recall')print(len(true_positives) / float(len(true_dupes)))

其中,dupePairs函数是将同一聚类下所有样本两两组合,假设Cluster ID=4这一类下有样本为2,3,4那么返回的结果就是(2,3),(2,4),(3,4),在计算时候,分别以真实样本和测试样本为例进行组合,得到组合序列。

def dupePairs(filename, rowname) :dupe_d = collections.defaultdict(list)with open(filename) as f:reader = csv.DictReader(f, delimiter=',', quotechar='"')for row in reader:dupe_d[row[rowname]].append(row['Id'])if 'x' in dupe_d :del dupe_d['x']dupe_s = set([])for (unique_id, cluster) in viewitems(dupe_d) :if len(cluster) > 1:for pair in itertools.combinations(cluster, 2):dupe_s.add(frozenset(pair))return dupe_s

地址:https://github.com/dedupeio/dedupe

二、OpenEA知识图谱融合工具

OpenEA (https://github.com/nju-websoft/OpenEA) 是一个面向基于嵌入的知识图谱实体对齐的开源软件库,由南京大学万维网软件研究组 (Websoft) 贡献。

通过Python和Tensorflow开发得到,集成了12 种具有代表性的基于嵌入的实体对齐方法,同时它使用了一种灵活的架构,可以较容易地集成大量现有的嵌入模型。

1)内置模型

5b9e82426fa3e65712d1d0c19bccdd2d.png

2)内置数据集af953d5c8a1fffafa2abeb1f0e50b60d.png

地址:https://github.com/nju-websoft/OpenEA/tree/master/tutorial

1、模型构成

b8322cdb92f65a68938b2b8c94155657.png

1)嵌入模块 (embedding module)

嵌入模块试图将知识图谱嵌入到低维空间中。根据三元组的类型,我们可以将嵌入模型分为两类:关系嵌入与属性嵌入。

前者采用关系学习技术捕捉知识图谱结构,后者利用实体的属性三元组信息。

关系嵌入主要有三种实现方式:

基于三元组的嵌入能够捕捉关系三元组的局部语义 (例如 TransE)

基于路径的嵌入利用跨越路径的关系之间的长程依赖信息 (例如 IPTransE、RSN4EA)

基于邻居的嵌入主要利用实体之间的关系构成的子图结构 (例如 GCN)。

属性嵌入有两种方式:

属性相关性嵌入主要考虑属性间的相关性 (例如 JAPE)

字面量嵌入将字面量值引入到属性嵌入中 (例如 AttrE)。

2)对齐模块 (alignment module)

对齐模块使用种子实体对作为训练数据来捕捉实体嵌入表示的相关性,其中两个关键是选择何种距离度量方式以及设计何种对齐推断策略。

度量方式有三种:余弦距离、欧几里得距离和曼哈顿距离。 针对对齐推断策略,目前所有方法都采用贪心搜索方式,即为每一个实体依据度量方式选择距离最短的实体作为推断的对齐实体。

3)交互模块 (Interaction between modules)

有四种典型的组合模式用于调整知识图谱嵌入以便实体对齐:

嵌入空间的转换,通过种子实体对 (e1,e2) 学习两个嵌入空间中的转换矩阵 M 使得 Me1≈e2;

嵌入空间校准,将两个知识图谱嵌入到统一空间中,通过最小化||e1-e2||来校准实体对中的嵌入表示;

2、输入数据

OpenEA提供了基于DBP2.0数据集的案例,可以通过figshare下载。该数据集抽取自多语言DBpedia, 其包含三个实体对齐任务,分别是ZH-EN、JA-EN和FR-EN。但本次实验只考虑ZH-EN,其包含以下(本实验所需的)文件:

1)rel_triples_1: 源知识图谱的关系三元组,格式是(头实体 \t 关系 \t 尾实体),总数量286067

http://zh.dbpedia.org/resource/E860025  http://zh.dbpedia.org/property/R954812  http://zh.dbpedia.org/resource/E285844
http://zh.dbpedia.org/resource/E048877  http://zh.dbpedia.org/property/R901817  http://zh.dbpedia.org/resource/E744067
http://zh.dbpedia.org/resource/E711315  http://zh.dbpedia.org/property/R177205  http://zh.dbpedia.org/resource/E506745
http://zh.dbpedia.org/resource/E234064  http://zh.dbpedia.org/property/R733324  http://zh.dbpedia.org/resource/E219104
http://zh.dbpedia.org/resource/E595017  http://zh.dbpedia.org/property/R127973  http://zh.dbpedia.org/resource/E602234

2)rel_triples_2: 目标知识图谱的关系三元组,格式是(头实体 \t 关系 \t 尾实体),总数量 586868

http://dbpedia.org/resource/E586550     http://dbpedia.org/property/R003961     http://dbpedia.org/resource/E943329
http://dbpedia.org/resource/E742102     http://dbpedia.org/property/R772631     http://dbpedia.org/resource/E199274
http://dbpedia.org/resource/E570181     http://dbpedia.org/property/R683819     http://dbpedia.org/resource/E312656
http://dbpedia.org/resource/E005637     http://dbpedia.org/property/R545180     http://dbpedia.org/resource/E513394
http://dbpedia.org/resource/E355628     http://dbpedia.org/property/R545180     http://dbpedia.org/resource/E506133

3)splits/train_links: 实体对齐的训练数据,格式是(源实体 \t 等价的目标实体),总数量9954条

http://zh.dbpedia.org/resource/E365845  http://dbpedia.org/resource/E828694
http://zh.dbpedia.org/resource/E235226  http://dbpedia.org/resource/E471688
http://zh.dbpedia.org/resource/E526120  http://dbpedia.org/resource/E499307
http://zh.dbpedia.org/resource/E394136  http://dbpedia.org/resource/E439798
http://zh.dbpedia.org/resource/E679479  http://dbpedia.org/resource/E280886
http://zh.dbpedia.org/resource/E488435  http://dbpedia.org/resource/E511555

4)splits/valid_links: 实体对齐的验证数据,格式是(源实体 \t 等价的目标实体),总数量6636条

http://zh.dbpedia.org/resource/E095694  http://dbpedia.org/resource/E091946
http://zh.dbpedia.org/resource/E891776  http://dbpedia.org/resource/E703020
http://zh.dbpedia.org/resource/E973944  http://dbpedia.org/resource/E411192
http://zh.dbpedia.org/resource/E830920  http://dbpedia.org/resource/E611288
http://zh.dbpedia.org/resource/E407836  http://dbpedia.org/resource/E521500

5)splits/test_links: 实体对齐的测试数据,格式是(源实体 \t 等价的目标实体),总数量16593条

http://zh.dbpedia.org/resource/E663112  http://dbpedia.org/resource/E065714
http://zh.dbpedia.org/resource/E238387  http://dbpedia.org/resource/E050785
http://zh.dbpedia.org/resource/E833924  http://dbpedia.org/resource/E143604
http://zh.dbpedia.org/resource/E800312  http://dbpedia.org/resource/E262377

2、模型训练

在模型训练上,可以指定MTransEV2模型进行训练,例如:

if __name__ == '__main__':kgs = read_kgs_from_folder(args.training_data, args.dataset_division, args.alignment_module,args.ordered, args.align_direction)model = MTransEV2()model.set_args(args)model.set_kgs(kgs)model.init()model.run()model.test()

其中,针对2个KG,分别进行比对处理:

kg1 = KG(kg1_relation_triples, set())kg2 = KG(kg2_relation_triples, set())if direction == "left":two_kgs = MyKGs(kg1, kg2, train_links, test_links,train_unlinked_ent1, valid_unlinked_ent1, test_unlinked_ent1,train_unlinked_ent2, valid_unlinked_ent2, test_unlinked_ent2,valid_links=valid_links, mode=mode, ordered=ordered)else:assert direction == "right"train_links_rev = [(e2, e1) for e1, e2 in train_links]test_links_rev = [(e2, e1) for e1, e2 in test_links]valid_links_rev = [(e2, e1) for e1, e2 in valid_links]two_kgs = MyKGs(kg2, kg1, train_links_rev, test_links_rev,train_unlinked_ent2, valid_unlinked_ent2, test_unlinked_ent2,train_unlinked_ent1, valid_unlinked_ent1, test_unlinked_ent1,valid_links=valid_links_rev, mode=mode, ordered=ordered)

3、模型评估

基于表示学习的实体对齐方法将两个知识图谱映射到一个向量空间,期望共指的实体具有相似的向量表示,即在空间内互为最近邻。

模型训练完成后,给定每一条测试数据(源实体、对应的目标实体),先读取该源实体的向量表示(如果有必要,还需要将其映射到目标知识图谱的表示空间),然后计算其和所有目标实体向量的相似度,并根据相似度对候选目标实体进行降序排列,期望对应的目标实体排在第一位(即最近邻)。

在评价指标上,使用Hits@k (k=1或10)、mean rank (MR)、mean reciprocal rank (MRR)是常用的实体对齐性能指标。

Hits@k计算了对应目标实体排名在top k的测试数据的比例;

MR是所有测试数据的对应目标实体的平均排名;

MRR是这些排名的倒数的平均值;

Hits@k和MRR越高且MR越低,说明模型性能越好。

基线方法在ZH-EN数据上的表现如下:

8de4451680180509ec77eacfb1c28378.png

总结

本文主要围绕着实体对齐这一主题,对现有的两个具有代表性的对齐工具进行了介绍。

Dedupe使用主动学习和聚类的方式,OpenEA使用知识嵌入的方式完成对齐目标.

从中我们可以看到:

基于表示学习的实体对齐方法有两个模块。一个是embedding learning (EL) 模块,它读取两个知识图谱的关系三元组,使用表示学习技术为实体学习向量表示。另一个是alignment learning (AL) 模块,它读取实体对齐的训练数据,为共指的实体学习相似的表示。8961bc61126e0d6e7978584dbd78b7b6.png基于统计聚类方法的实体对齐方法对一特征以及聚类方法的选择较为敏感。

而在实际的业务过程中,如何在保证正确率的情况下,选择更为有效的方式,如基于规则的严控策略十分必要,后面几篇文章我们将进一步介绍。

参考文献

1、http://www.vldb.org/pvldb/vol13/p2326-sun.pdf

2、 OpenEA: A Benchmarking Study of Embedding-based Entity Alignment for Knowledge Graphs. VLDB 2020

3、https://docs.dedupe.io/en/latest/API-documentation.html

4、https://blog.csdn.net/xs1997/article/details/125060217

5、https://github.com/dedupeio/dedupe-examples

6、https://blog.csdn.net/weixin_42001089/article/details/94573050

7、https://en.wikipedia.org/wiki/Gap_penalty#Affine

关于老刘

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

就职于360人工智能研究院、曾就职于中国科学院软件研究所。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。


OpenKG

OpenKG(中文开放知识图谱)旨在推动以中文为核心的知识图谱数据的开放、互联及众包,并促进知识图谱算法、工具及平台的开源开放。

568bd2a83479138c4d54cc4c6671b023.png

点击阅读原文,进入 OpenKG 网站。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法岗SSP offer收割指南!

文 | 林小平源 | 知乎前序在本文开始以前,林小平首先需要声明的是这篇超详细面经并不是笔者本人的求职笔记,它是笔者学校隔壁实验室22届毕业学弟的面试心路历程和经验心得。由于笔者和这位学弟经常讨论校招求职和职业发展的问题,并且在秋招以…

Spring Cloud Stream如何处理消息重复消费

最近收到好几个类似的问题:使用Spring Cloud Stream操作RabbitMQ或Kafka的时候,出现消息重复消费的问题。通过沟通与排查下来主要还是用户对消费组的认识不够。其实,在之前的博文以及《Spring Cloud微服务实战》一书中都有提到关于消费组的概…

LeetCode 481. 神奇字符串(找规律)

1. 题目 神奇的字符串 S 只包含 ‘1’ 和 ‘2’,并遵守以下规则: 字符串 S 是神奇的,因为串联字符 ‘1’ 和 ‘2’ 的连续出现次数会生成字符串 S 本身。 字符串 S 的前几个元素如下:S “1221121221221121122 …” 如果我们将…

图谱实战 | ​鲍捷:知识图谱技术在金融领域的分析和应用

转载公众号 | DataFunSummit分享嘉宾:鲍捷博士 文因互联编辑整理:松烨 博瑜科技出品平台:DataFunTalk导读:知识图谱标准件已经全面赋能主流金融场景,经历了7年时间的发展,在金融监管、银行、资管、证券等领…

珍爱生命,远离大厂政治斗争

本文授权转载自公众号“算法圈的小破事”,点击以上卡片进行关注大家好,我是在互联网危险边缘疯狂试探的皮皮虾,今天跟大家分享一个关于大厂政治斗争的故事。有人可能觉得,政治斗争那都是大佬之间的事情,跟我们江湖虾米…

Spring Cloud Finchley版中Consul多实例注册的问题处理

由于Spring Cloud对Etcd的支持一直没能从孵化器中出来,所以目前来说大多用户还在使用Eureka和Consul,之前又因为Eureka 2.0不在开源的消息,外加一些博眼球的标题党媒体使得Eureka的用户有所减少,所以,相信在选择Spring…

论文浅尝 | Continual Learning for Named Entity Recognition

笔记整理:李淑怡,天津大学硕士动机在许多真实任务下,常常需要引入新的实体类型,因此需要重新训练命名实体识别模型。当因为存储或安全问题限制对原始数据的访问时,那么为新实体类型重新标注原始数据的成本将会是高昂的…

Allen AI提出MERLOT,视频理解领域新SOTA!

文 | Yimin_饭煲2021年,多模态领域大概是人工智能研究者们关注者最多的一个领域了。随着各种模态数据集的增长和算力的发展,研究者们开始不断地尝试在一个模型中融合来自各个模态的信息。而在多模态领域的研究中,和视频相关的任务被认为是最复…

基于HMM的中文词性标注 POSTagging

文章目录1. 词性标注1.1 概念1.2 任务1.3 预处理1.4 初步统计预览2. 最大概率模型2.1 训练2.2 预测2.3 结果评估2.4 结果可视化3. 二元隐马尔科夫BiHMM模型3.1 训练3.2 预测3.3 结果评估3.4 结果可视化4. 结果讨论思考本文的代码是在徐老师的代码基础上,自己加了些注…

图谱实战 | 58同城周超:基于招聘场景下的知识图谱构建及应用

转载公众号 | DataFunSummit分享嘉宾:周超 58同城 NLP资深算法工程师编辑整理:吴祺尧 加州大学圣地亚哥分校出品平台:DataFunTalk导读:知识图谱作为一种富信息工程,已经深入到各行各业中,也为产业效率的提升…

2022年薪百万赛道:高性能神经网络与AI芯片应用

随着大数据的发展,计算机芯片算力的提升,人工智能近两年迎来了新一轮的爆发。而人工智能实现超级算力的核心就是AI芯片。AI芯片也被称为人工智能加速器,即专门用于处理人工智能应用中的大量计算任务的模块。2020年我国人工智能芯片市场规模约…

API网关 Zuul1.0 和 2.0 我们该如何选择?

介绍 在今年5月中,Netflix终于开源了它的支持异步调用模式的Zuul网关2.0版本,真可谓千呼万唤始出来。从Netflix的官方博文[附录1]中,我们获得的信息也比较令人振奋: The Cloud Gateway team at Netflix runs and operates more t…

LeetCode 623. 在二叉树中增加一行(BFS/DFS)

文章目录1. 题目2. 解题2.1 BFS2.2 DFS1. 题目 给定一个二叉树,根节点为第1层,深度为 1。在其第 d 层追加一行值为 v 的节点。 添加规则:给定一个深度值 d (正整数),针对深度为 d-1 层的每一非空节点 N&a…

论文浅尝 | KR-GCN: 知识感知推理的可解释推荐系统

论文作者:马婷,中国科学院信息工程研究所直博生动机抽取并利用知识图谱(KG)中的多跳关系路径可以提高推荐系统的性能,并提供可解释性。然而,现有的工作仍面临着两个主要的挑战:用户偏好的错误传播和模型的弱解释性。提…

吴恩达,确诊新冠阳性!

编 | 好困 袁榭源 | 新智元【导读】当代人工智能领域最权威的学者之一吴恩达,于2022年2月8日晨在自己推特上宣布新冠检测结果阳性,不过症状轻微。北京时间,2022年2月8日早上6点,吴恩达新冠病毒检测呈阳性。吴恩达表示,…

Spring Cloud Config采用Git存储时两种常用的配置策略

由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略。即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就来介绍一下两种常用的配置策略。 第一种:多个项目公用一…

图谱实战 | 城市大脑知识图谱构建及应用研究

转载公众号 | 专知随着城市大脑建设进程的推进,城市中积累了大量的物联网(IoT)设备和数据,利用海量设备数据对问题 进行分析和溯源,对于城市大脑建设具有重要意义。该文基于资源描述框架和智能物联网协议概念,提出一种以城市物联网本体为基础的城市大脑知识图谱建设方法,城市大…

震惊!三个万引大佬嘴仗,原来是为了他……?

文|白鹡鸰想把小轶挂到三作编|小轶已把白鹡鸰挂到三作这本应是白鹡鸰在小轶追杀下游刃有余拖稿的一天,结果小轶再次把一篇新论文喂到了我的嘴边。象征性地打开论文,草草扫过去,嗯,迁移学习,嗯&a…

LeetCode 611. 有效三角形的个数(双指针)

1. 题目 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3注意: 数组长度不超过1000。 数组里整数的范围为 [0, 1000]…

Eureka 2.0 开源流产,真的对你影响很大吗?

最近连续发烧四天,偶尔刷两下朋友圈都能看到好几条来自不同号的关于《Eureka 2.0开源工作宣告停止,继续使用风险自负》的推文。主要内容如下: 近日,知名服务注册与服务发现工具 Eureka 的 GitHub Wiki 上显示其 2.0 版本的开源工作…