【数据集分析】NYT-Wiki关系抽取数据集分析(一)—— 理解单条实例

目录:NYT-Wiki数据集分析

【数据集分析】NYT-Wiki关系抽取数据集分析(一)—— 理解单条实例
【数据集分析】NYT-Wiki关系抽取数据集分析(二)—— 统计类别和实例数
【数据集分析】NYT-Wiki关系抽取数据集分析(三)—— 绘制Relation分布图

最近拿到一个关系抽取数据集,nyt-wiki,分析了一波分布、重合等,分享一下分析思路和代码。

1.单条实例分析

[’/m/0124gn1g’, ‘/m/02lx2r’, ‘trick’, ‘album’, ‘instance_of’, ‘utah saints pulls off a similar trick on its hit single, “something good,” the opening track on its eponymous debut album (london/plg 828 374-2; cd and cassette).’, ‘###END###’]

可以看到这一个instance的构成为:

[头实体id,尾实体id,头实体,尾实体,关系名,句子,终止记号]

一共包含七个部分,其中我们需要的是前六个部分。

我们很难记住list的序号对应的值的构成,因此将instance数据类型转化成dict,这样取数据时就会比较方便,dictkey值如下:

{“text”: , “relation”: , “h”: {“id”: , “name”: , “pos”: }, “t”: {“id”: , “name”: , “pos”: }}

这样我们在取数据时就直接用instance["text"]就可以直接取出数据,非常的方便,list转化dict后,一个instance如下:

{
    "text":"utah saints pulls off a similar trick on its hit single, "something good," the opening track on its eponymous debut album (london/plg 828 374-2; cd and cassette).",
    "relation":"instance_of",
    "h":{
        "id":"/m/0124gn1g",
        "name":"trick",
        "pos":[
            32,
            37
        ]
    },
    "t":{
        "id":"/m/02lx2r",
        "name":"album",
        "pos":[
            116,
            121
        ]
    }
}

NOTE:

  1. instance的结构组成:由{句子,h,t}三部分。其中 h 和 t 也是dict,该dict包含三部分{id,name,pos}。
  2. 在 h 和 t 中我添加了一个pos,意义是头实体或者尾实体的在句子中的position。
  3. 其实dict类型可以用json相互转化,存储和读取比较规范。

2. 代码

import json
train_rel_fre_dict = {}
train_data = {}
temp1 = {}
temp2 = {}
with open("nytwiki_train.txt", 'w', encoding = 'utf-8') as f_op:
    with open("train.txt", 'r', encoding = 'utf-8') as f:
        lines = f.readlines()
        for line in lines:
            line = line.strip().split('\t') #loads后面字符串, load(文件名字)
            # 获取头(尾)实体在句子中的位置
            pos1 = [line[5].index(line[2]),line[5].index(line[2])+len(line[2])]
            pos2 = [line[5].index(line[3]),line[5].index(line[3])+len(line[3])]
            
            train_data['text'] = line[5]
            train_data['relation'] = line[4]
            temp1['id'] = line[0]
            temp1['name'] = line[2]
            temp1['pos'] = pos1
            train_data['h'] = temp1
            temp2['id'] = line[1]
            temp2['name'] = line[3]
            temp2['pos'] = pos2
            train_data['t'] = temp2
            json.dump(train_data, f_op)
            f_op.write('\n')
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 将文本训练成为nyt数据集的代码需要考虑以下几个方面: 1. 数据准备:首先需要准备好nyt数据集,该数据集包含了数十万篇文章的文本数据以及它们的标签信息,如实体识别、关系抽取等。我们需要对这些文本数据进行预处理,例如分词、去除停用词等,以便于后续的模型训练。 2. 模型设计:接下来需要设计一个适合处理文本数据的模型。常用的模型有基于词向量的模型(例如Word2Vec、GloVe等)以及基于深度学习的模型(例如LSTM、Transformer等)。不同的模型有着各自的优劣,需要根据具体情况进行选择。 3. 模型训练:我们使用准备好的nyt数据集进行模型训练,将训练数据分为训练集、验证集和测试集。在训练过程中,需要选择适当的优化器、损失函数和评价指标,并对超参数进行调整以达到最佳效果。另外,在使用深度学习模型进行训练时,需要使用GPU加速以提高训练速度。 4. 模型评估:在训练完成后,需要对模型进行评估。常用的评估指标有准确率、召回率、F1值等。在评估过程中,可以使用测试集进行模型测试,并根据测试结果进行模型调整。 5. 模型应用:最后,我们可以将训练好的模型应用到新的文本数据中,例如进行实体识别、关系抽取等任务。在应用模型时,需要注意模型的输入数据格式以及输出结果的解析。 ### 回答2: 首先,需要将NYT数据集下载到本地,并进行预处理。预处理包括分割成训练集、验证集和测试集,并将数据转换为模型可读的格式。转换的方式可以是将每篇文本处理成一个多维向量,其中每个维度代表一个固定的特征。这些特征可以是从文本中提取出的词、句子长度、词频等。经过处理后,每篇文本都表示为一个n维向量。处理后的数据集可以用pickle保存到本地。 接下来需要选择并训练模型。可以使用深度学习的文本分类模型,例如卷积神经网络(CNN)或递归神经网络(RNN)。在训练之前,需要将数据集分成mini-batches,并将它们送入模型进行训练。训练过程可以使用梯度下降算法优化。 经过训练后,可以评估模型的表现。评估的方法包括计算预测准确率、召回率和F1分数等指标。如果模型的表现不够好,可以更改模型架构或优化算法,再次训练。当模型表现足够好时,可以将其保存到本地,以备后续使用。 最后,可以使用该模型进行预测和分类。对于新的文本数据,可以将其送入经过训练的模型并输出其所属的类别。该过程可以通过加载保存的模型并使用已经训练好的参数来实现。 ### 回答3: 将文本训练成为nyt数据集,需要以下步骤: 1. 数据预处理:首先需要将nyt数据集进行预处理,包括去重、清洗、分词、去停用词等操作,将文本转化为可供模型训练的格式。 2. 构建模型:可以采用传统的机器学习模型,如朴素贝叶斯、SVM等,也可以使用深度学习模型,如LSTM、Transformer等。需要针对nyt数据集的特点进行模型的选择和调整。 3. 训练模型:将预处理后的数据输入到模型中,通过梯度下降等优化算法不断调整模型参数,直到达到一定的训练效果。 4. 模型评估:将一部分数据作为测试集,用训练好的模型对测试集进行预测,并计算预测准确率、召回率等指标,评估模型的性能。 5. 预测与应用:将训练好的模型用于新的文本数据预测,可以应用于分类、情感分析、命名实体识别等领域。 以上是训练nyt数据集的基本流程,但具体实现上可能还需要根据具体的需求和情况进行调整和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值