zoukankan      html  css  js  c++  java
  • 神经网络的parser源代码学习(一)

    一:源数据data文件夹。

    进入data 目录,一共有以下几个文件:

    ctb_dev.jsonl:开发集

    ctb_test.jsonl:测试文件,存放用于测试用的句子,存放格式如下所示:该句子对应的动作序列+该句子的分词结果+该句子的词性标签 共1910句

    ctb_train.jsonl:训练文件,存放用于训练模型参数的句子,存放格式和测试文件一样,以句子为单位:该句子对应的动作序列+该句子的分词结果+该句子的词性标签 共16091句

    data_pro_ctb5.py:暂时没看懂这个Python文件的作用。。

    generate_trainData.py:起转换文件格式的作用,真正的语料是ctb的树库语料,要将其转换为ctb_test.jsonl的格式,也就是下图转换为该句子对应的  动作序列+该句子的分词结果+该句子的词性标签

    二:结果数据results文件夹:

    进入results文件夹一共有以下几个文件

    vector_cache文件夹里存放的input_vector.pt:生成的词向量文件

    glove.840B.300d.pt:运行程序生成的词向量文件(为什么是乱码)

    glove.840B.300d.txt:事先训练好放进去的词向量文件,大约有10万个词向量。(如果替换语料的话,需要将这个文件注释或者替换为相应语言的词向量)

    三:torchtext文件夹:东西太多,暂时略过

    四:最后home目录下只剩下一大堆Python文件

    ------------------------------------------------------------------------------------------阅读ctbtrain文件的源代码-----------------------------------------------------------------------------------

    ctbtrain是训练模型参数文件

    开始阅读ctbtrain.py文件代码:

    1. inputs transitions pos分别代表输入训练文件中的词,操作序列,词性标签。

    运行程序打印输出三者的内容:

    inputs:<torchtext.datasets.ctb.TextField object at 0x7f87ce600310>
    transitions:<torchtext.data.Field object at 0x7f87ce5af110>

    inputs.vocab.itos代表什么意思啊???代表的是几个转移动作的标签。

    2.设置词向量的维度,但是不知道具体对应什么样的维度?

    config = args(很重要的一个model)args就是一个parser模型,PyTorch/torchtext SNLI example
    config.n_embed = len(inputs.vocab)
    config.d_out = len(transitions.vocab)
    config.n_cells = config.n_layers

    3.build_vocab函数指的是构建词典,输入均是训练语料。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    evalue是测试文件,主要是评估函数my_evalue( )的实现过程,实现对测试集和开发集的评测,输出的是precision 和 Parser_precision的值。

    spinn函数:定义分类器模型和tree模型。

    util是模型参数的设置文件,打开如下所示

    诸如迭代次数,是否使用GPU等。params.pkl 是什么鬼 打开是乱码

    testlog_lstm_wbud和trainlog_lstm_wbud分别是日志记录文件,记录测试和训练过程中的准确率。不太明白的是这个准确率和evalue函数输出的准备率有啥区别。

    -------------------------------------------------------------------------------model文件---------------------------------------------------------------------------------------------------------------------------

    定义了class SNLIClassifier:

     

    -----------------------------------------------------------------------程序包分析暂时结束,先执行下程序------------------------------------------------------------

    源程序是进行中文的依存分析  我重新训练,打算用英文来知行:

    一:输入训练文件格式如下(为了短期内看到效果,也就是让程序在5小时内完成,我选择语料的规模是500句。):

    二:语料预处理(有个地方没想明白,但从树库语料,如何可以预测出shift-reduce转移动作)

    1.调用generate函数,生成测试文件格式的语料:生成的测试文件语料格式为 原句子的词组+动作序列+词性词组序列(和原来中文的语料不太一样)

    三:训练模型

    1.在训练模型的时候会看到以下文件

    分别为开发集  测试集 训练集  切割文件函数  生成测试集函数

    执行ctbtrain.py会自动调用data文件夹下的训练集  也就是ctb_train.jsonl。

    训练模型需要很久的时间,现在先看一下训练模型的ctbtrain.py文件源代码:(。。。。。。。。。。。。。)

    执行结果:

    前几次执行一直报错(报以下的错)一直不知道什么原因,后来才发现是更改语料后,不能再使用原来预先训练好的词向量。

     最后训练集的规模有500句,开发和测试集各为100,执行了三个小时(中文),实验结果如下所示:

    evalue_test_data:parser_pre: 73.8814317673

    evalue_dev_data:parser_pre: 79.2047531993

    替换为英文语料:500句 执行了六个小时。实验结果如下,和中文一样,迭代了49次

    测试集:parser_pre: 90.2559867878

    开发集:parser_pre: 90.2559867878这里测试集合开发集都一样。

  • 相关阅读:
    getElementsByTagName得到的对象
    小体验
    javascript + sql编写SQL客户端工具tabris
    netcore2.0 ORM框架中如何配置自定义的主外键加载
    教你如何反编译app,拿到加密方式
    编译c语言程序扩展ruby
    在 Windows 上测试 Redis Cluster的集群填坑笔记
    MONO 如何打包 .NET程序独立运行(winform篇)
    vmware安装黑苹果教程
    AntData.ORM框架 之 DotnetCore
  • 原文地址:https://www.cnblogs.com/maowuyu-xb/p/8418363.html
Copyright © 2011-2022 走看看