首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LSTM特征工程:使用不同的知识图数据类型

LSTM特征工程:使用不同的知识图数据类型
EN

Data Science用户
提问于 2022-10-06 09:54:10
回答 1查看 122关注 0票数 1

对于一个研究项目,我计划使用LSTM从KG实体序列中学习。然而,我很少有使用LSTM或RNN的经验。在规划过程中,出现了一些与特征工程有关的问题。

让我给你一些背景:

我的初始数据将是n文本的集合。从这些文本中,我将使用n或Wikidata提取可变长度实体的DBPedia序列。因此,我将得到与其文本对应的KG实体的n序列。

我见过的大多数LSTM实现只使用一种类型的特性作为输入。然而,当我们处理知识图时,我们可以获得更多类型的信息。我想知道使用不止一种特性的好策略是什么。

目标

给定一个可见实体序列,我希望模型能够预测该序列的延续。从语料库中截取的一组序列将被分开。开始将起到提示作用,结尾将成为评估的真值。

我还对模型的预测概率感兴趣,因为它预测了作为提示符给出的单个实体的跟随实体。

假设

我假设不同类型的特性将有助于模型做出良好的预测。具体来说,我希望模型不仅要从实体序列中学习,而且要从KG‘元数据中学习,比如关联的RDF类或预计算的嵌入向量。

特性

特性1:数值词汇表特性

我能想到的最简单的情况是从所有提取的实体创建一个orderet集。

例如,如果从我的所有文档中提取的实体是[U2, rock, post-punk, yen, Bono, revolutionary, guitar] (实际上可能还会有几千个实体),我会创建这个表示我的词汇表的有序集合:

代码语言:javascript
复制
{1: http://dbpedia.org/resource/U2, 2: http://dbpedia.org/resource/Rock_music, 3: http://dbpedia.org/resource/Post-punk, 4: http://dbpedia.org/resource/Japanese_yen, 5: http://dbpedia.org/resource/Bono, 6: http://dbpedia.org/resource/Revolutionary, 7: http://dbpedia.org/resource/Acoustic_guitar}

然后,LSTM的训练数据将是整数序列,例如

代码语言:javascript
复制
training_data = [
# Datapoint 1
[[1, 2, 3, 4, 5, 6, 7]],        #document 1
# Datapoint 2
[[5, 3, 3, 1, 6]],              #document 2
# Datapoint 3
[[2, 4, 5, 7, 1, 6, 2, 1, 7]],  #document 3
...]

特性2:数值类特性

我想包括关于RDF类的其他信息。类似于特性1中的方法,我可以创建一个包含所有可能的类的有序集合。但是,区别在于每个实体都属于一个或多个类。

如果提取的所有类都是

代码语言:javascript
复制
{1: owl:Thing, 2: dbo:MusicGenre, 3: dbo:Agent, 4: dbo:Person, 5: dbo:PersonFunction}

我将为每个数据点创建一个新的数据结构,这一次包含类信息。表示法表示{entity: [classes]}。然后,我的培训数据可能会如下所示:

代码语言:javascript
复制
training_data = [
# Datapoint 1
[
[1, 2, 3, 4, 5, 6, 7],                      # feature 1
{1: [1,2,4], 2: [2,3,4,5], ..., 7: [3,5]}   # feature 2
],
# Datapoint 2
[
[5, 3, 3, 1, 6],                            # feature 1
{1: [2,3,4], 2: [1,2,4,5], ..., 5: [3,5]}   # feature 2
],
# Datapoint 3
[
[2, 4, 5, 7, 1, 6, 2, 1, 7],                # feature 1
{1: [1,2,4], 2: [1,2,3,5], ..., 9: [2,3]}   # feature 2
],
...]

特性3: RDF2Vec嵌入

实体集合中的每个KG实体可以使用像RDF2Vec这样的工具映射到一个低维空间。我不确定是否使用这个特性,因为它的潜在语义内容可能会干扰我的研究问题,但它是一个选择。

在这种情况下,嵌入特性是长度为200的向量:

代码语言:javascript
复制
embedding_vector = tensor([5.9035e-01, 2.6974e-01, 8.6569e-01, 8.9759e-01, 9.3032e-01, 5.2442e-01, 9.6031e-01, 1.8393e-01, 6.3000e-01, 9.5930e-01, 2.5407e-01, 5.6510e-01, 8.1476e-01, 2.0864e-01, 2.7643e-01, 4.8667e-02, 9.3791e-01, 8.0929e-02, 5.0237e-01, 1.4946e-01, 5.9263e-01, 4.7912e-01, 6.8907e-01, 4.8248e-03, 4.9926e-01, 1.5715e-01, 7.0777e-01, 6.0065e-01, 2.6858e-01, 7.2022e-01, 4.4128e-01, 4.5026e-01, 1.9987e-01, 2.8191e-01, 1.2493e-01, 6.0253e-01, 6.9298e-01, 2.5828e-01, 2.8332e-01, 9.6898e-01, 4.5132e-01, 4.6473e-01, 8.0197e-01, 8.4105e-01, 8.8928e-01, 5.5742e-01, 9.5781e-01, 3.8824e-01, 4.6749e-01, 4.3156e-01, 2.8375e-03, 1.5275e-01, 6.7080e-01, 9.9894e-01, 7.2093e-01, 2.7220e-01, 8.5404e-01, 6.9299e-01, 3.9316e-01, 8.9538e-01, 8.1654e-01, 4.1633e-01, 9.6143e-01, 7.1853e-01, 9.5498e-01, 4.5507e-01, 3.6488e-01, 6.3075e-01, 8.0778e-01, 6.3019e-01, 4.4128e-01, 7.6502e-01, 3.2592e-01, 9.5351e-01, 1.1195e-02, 5.6960e-01, 9.2122e-01, 3.3145e-01, 4.7351e-01, 4.5432e-01, 3.7222e-01, 4.3379e-01, 8.1074e-01, 7.6855e-01, 4.0966e-01, 2.6685e-01, 2.4074e-01, 4.1252e-01, 1.9881e-01, 2.2821e-01, 5.9354e-01, 9.8252e-01, 2.7417e-01, 4.2776e-01, 5.3463e-01, 2.9148e-01, 5.8007e-01, 8.2275e-01, 4.8227e-01, 8.5314e-01, 3.6518e-01, 7.8376e-02, 3.6919e-01, 3.4867e-01, 8.9571e-01, 2.0085e-02, 7.9924e-01, 3.5849e-01, 8.7784e-01, 4.6861e-01, 6.2004e-01, 6.8465e-01, 4.1273e-01, 4.2819e-01, 9.4532e-01, 2.2362e-01, 8.3943e-01, 1.1692e-01, 6.9463e-01, 7.6764e-01, 2.8046e-02, 6.9382e-01, 9.2750e-01, 3.6031e-01, 6.8065e-01, 1.6976e-01, 8.2079e-01, 6.4580e-01, 8.3944e-01, 3.9363e-01, 4.4026e-01, 4.4569e-01, 8.2344e-01, 5.4172e-01, 1.6886e-04, 3.8689e-01, 5.8966e-01, 1.9510e-02, 2.5976e-01, 4.0868e-01, 3.1406e-01, 3.6334e-01, 6.1768e-01, 5.4854e-01, 4.1273e-01, 7.2670e-04, 2.4486e-01, 4.1042e-01, 9.0760e-01, 1.6224e-01, 7.4019e-02, 8.1329e-01, 7.2573e-01, 8.2816e-01, 7.3032e-01, 6.6017e-01, 6.4281e-01, 4.1839e-01, 9.2251e-01, 1.5183e-02, 4.4538e-01, 9.7205e-01, 9.5677e-01, 9.5649e-01, 1.2610e-01, 9.2521e-01, 3.2649e-01, 2.1019e-02, 2.5695e-01, 4.2663e-01, 9.2064e-01, 4.5242e-01, 7.0447e-01, 8.1233e-01, 2.7507e-01, 2.4744e-01, 1.3670e-01, 6.4032e-01, 5.8332e-01, 5.5130e-01, 2.4997e-02, 7.7206e-01, 1.5085e-01, 2.8028e-01, 8.2839e-01, 5.8292e-01, 9.9087e-01, 6.0233e-01, 4.1489e-01, 6.4902e-01, 7.5428e-01, 8.0953e-01, 3.7530e-01, 4.8196e-01, 1.8786e-01, 9.8463e-01, 6.3303e-01, 4.8519e-01, 7.6163e-01, 3.3821e-01]

如果我把这个包括在我的培训数据中,它看起来会是这样的:

代码语言:javascript
复制
training_data = [
# Datapoint 1
[
[1, 2, 3, 4, 5, 6, 7],                      # feature 1
{1: [1,2,4], 2: [2,3,4,5], ..., 7: [3,5]},  # feature 2
[7 embedding vectors],                      # feature 3
],
# Datapoint 2
[
[5, 3, 3, 1, 6],                            # feature 1
{1: [2,3,4], 2: [1,2,4,5], ..., 5: [3,5]},  # feature 2
[5 embedding vectors],                      # feature 3
],
# Datapoint 3
[
[2, 4, 5, 7, 1, 6, 2, 1, 7],                # feature 1
{1: [1,2,4], 2: [1,2,3,5], ..., 9: [2,3]},  # feature 2
[9 embedding vectors],                      # feature 3
],
...]

问题

我的培训数据将包括可变长度和矩阵/张量的列表。如何最好地将这些数据提供给模型?无论如何,我只想预测实体。只对特性1进行培训可以作为一个基准,我可以将其与特性的组合进行比较,例如,功能1+2、1+3或1+2+3。

根据我所读到的,我想我要用填充和掩蔽。但是,我不知道我的功能最终应该是什么样子。

任何反馈我都很感激。谢谢你分享你的想法!

EN

回答 1

Data Science用户

回答已采纳

发布于 2022-10-06 16:32:22

作为一般要点:

  1. 多元RNN:您可以使用多个顺序特性作为递归层的输入。以pytorch作为参考,您可以看到LSTM对象的输入是批处理的形状(L, H_{in})(L, N, H_{in})的张量,其中L是序列的长度,而H_{in}是输入特性的数量。在这种方法中,可以将标记映射到词汇表,作为学习标准嵌入过程的一部分。
  2. 如果我正确理解你的问题,你也许可以使用多标签的方法(而不是多类)。
  3. 多模式学习:如果与嵌入相关的特性可以被认为是静态的,而不是随着时间的推移而进化的,那么您可能需要向您的网络添加第二个辅助端口,以便具体地对这种数据类型建模。第二部分将包括一个具有完全连接层的前馈网络。RNN和FFN模块的输出处的固定长度向量表示/嵌入可以在传递到分类层之前进行连接。通过这种方式,您可以让模型从两种数据模式的联合表示中进行推理。

希望能帮上忙。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/114958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档