栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

知识图到文本的生成(二)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

知识图到文本的生成(二)

2021SC@SDUSC

继配置好该课题代码实验环境后,小组分工后,后续多篇文章将对 vectorize.py中的代码部分内容进行分析。

代码link:https://github.com/rikdz/GraphWriter

 通过论文大致分析可知,vectorize.py是编码器的一部分,包括原始图向未标记连接图的重构,保留标签信息等。本篇文章将对vectorize.py中dataset类中如下代码进行详细分析。

 def __init__(self, args):
    args.path = args.datadir + args.data
    self.args = args
    '''
    if args.loadvocab:
      with open(args.datadir+"/"+args.loadvocab,'rb') as f:
        print("Loading Vocabs")
        self.fields = dill.load(f)
      self.INP,self.ENT,self.REL,self.TGT,self.OUTP = [x[1] for x in self.fields]
    else:
    '''
    self.mkVocabs(args)
    print("Vocab sizes:")
    for x in self.fields:
      try:
        print(x[0],len(x[1].vocab))
      except:
        pass
        
    '''
      if args.savevocab:
        with open(args.datadir+"/"+args.savevocab,'wb') as f:
          dill.dump(self.fields,f)
    '''

    if not args.eval:
      self.mkiters()

  def build_ent_vocab(self,path,unkat=0):
    ents = ""
    with open(path) as f:
      for l in f:
        ents +=  " "+l.split("t")[1]
    itos = list(set(ents.split(" ")))
    itos[0] == ""; itos[1] == ""
    stoi = {x:i for i,x in enumerate(itos)}
    return itos,stoi

  

首先需要对该类进行初始化,_init_函数实现了这点。它是一个类方法/类函数,类方法是对类中定义的函数的称呼,有别于一般函数的是,它的第一个参数是固定的,表示类实例化后实例本身,后面的参数则可以自由定义。在该函数中,第一个参数为self,即为原始图实例,第二个参数为自由定义的args。

args.path = args.datadir + args.data
self.args = args

设置了args的path属性为args的datadir(数据目录)和data(数据)的拼接。self.args = args,使该类具有函数行为。

 self.mkVocabs(args)
    print("Vocab sizes:")
    for x in self.fields:
      try:
        print(x[0],len(x[1].vocab))
      except:
        pass
        
    '''
      if args.savevocab:
        with open(args.datadir+"/"+args.savevocab,'wb') as f:
          dill.dump(self.fields,f)
    '''

    if not args.eval:
      self.mkiters()

根据数据目录打开数据文件时,会判断文件是否正确打开,当能够成功打开时,数据载入成功,self.mkvocabs(args)记录成功载入的数据。并由一个for循环遍历self的数据域,并分割输出,如果和args打开的数据不相同,则调用mkiters重新迭代(载入)。

def build_ent_vocab(self,path,unkat=0):
    ents = ""
    with open(path) as f:
      for l in f:
        ents +=  " "+l.split("t")[1]
    itos = list(set(ents.split(" ")))
    itos[0] == ""; itos[1] == ""
    stoi = {x:i for i,x in enumerate(itos)}
    return itos,stoi

build_ent_vocab函数实现了创建发送词汇。同理第一个参数为self,path,unkat为自定义参数,并给unkat一个初始值为0,表示未转换。

初始情况下,ents(可以发送的词汇)为空,这时打开path路径,遍历分词逐个于“ ”拼接赋值于ents。itos用于存放 ents根据“ ”分词的列表。采用的是自然语言分类模型,初始化itos第一个值为unk,第二个值为pad,enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,在这里将itos组合为索引序列存放在stoi中,返回是数据对象itos,和索引序列(含数据)stoi。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/325954.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号