MSTParser工具使用

最近做实验用到一个句法分析工具 MSTParser,关于句法分析的工具,目前使用比较多的是 Stanford 的工具,资料也容易找,但是这个MSTParser,资料是真的难找啊。我的任务是用这个工具测试对一些藏语数据建立句法树,由于资料比较少,所以也只是参考了官网README文件和一些远古时期的博客,在这里记录一下使用的过程(Windows环境下),方便日后查阅。

1.安装

1.1 官网 & 文档

首先看一下工具的官网(页面非常简洁的网站):Minimum-Spanning Tree Parser
可以看到,目前是 Version 0.2,实在是比较老的一个工具,在 Downloads 部分提供了下载链接,下载解压即可。
关于这个工具的说明:MSTParser README
这个链接在 Downloads 链接的下面。整体来说,这个说明文档还是写的很好的,在安装阶段,可以按照文档的第一部分 Compiling 的指导来进行,不过注意这个工具的使用是默认在 Linux 的环境下的,所以它提供的命令都是 Linux 命令,在 Windows 下使用的时候要注意改一下。

1.2 条件

使用这个工具首先要确保安装了 Java 环境,一般都有安装的吧,如果没有,那么去 Oracle 官网上下载一个就成,这个可以在cmd下输入java 指令来看一下,如果输出了一堆信息,那么就是安装了JDK,按照文档,要注意一下 Java 的版本,要求是 Java 1.4 或者 1.5,我是用的是 Java 1.8 ,也可以正常使用。

1.3 编译

首先要在 CMD 下进入到你解压的文件夹下,应该是 XXX/MSTParser这样的形式,注意cmd下进入某个盘直接输入 D:这样的形式就可以了,然后进入某个文件夹的时候,则需要使用 cd 命令,在进入这个文件夹后,使用命令:

javac -classpath ".;lib/trove.jar" mstparser/DependencyParser.java

进行编译,这地方要注意,官网上给出的命令中间是使用的:,但是在windows环境下要改成;分号才能运行 这就像我们运行 java 文件一样,运行命令之后,可以看到 mstparser 文件夹生成了很多 .class 文件。

至此,完成了工具的安装,接下来就可以使用 MSTParser 进行训练分析了。

2.训练 & 测试

2.1 数据格式

数据格式在官方文档中 3a 部分的 Input data format 部分介绍的比较详细了,如果还不是特别明白,可以找到 data 文件夹,文件夹下有官方提供的测试数据,其中 .ulab这就是无标签数据,.lab这就是有标签数据。使用记事本或者 notepad可以看一下数据的区别,只是关系有无而已。当然,如果我们要训练自己的模型,也必须要按照这样的格式。

2.2 训练 & 测试 & 评估

首先跟上面安装一样, 在 cmd 环境下进入到你解压的文件夹下。
整个工具的命令实际上非常简单,只有三个命令分别用来训练、测试和评估, 所以直接依次在这里介绍了
训练

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser train train-file:data/train.ulab model-name:dep.model 

这里还是要注意 .;lib/XXXX部分要改成;(英文分号),否在无法在 windows 环境下运行,参数文档中也有介绍,其实就是 train -file后面跟的是训练数据,这里的数据使用的文件格式是.ulab.lab ,实际上我们也可以使用 .txt 文件,第二个需要制定的参数是 训练的模型,写在model-name:的后面,训练完成之后可以看到相应的文件夹下保存了这个模型,像这样,就是在 MSTParser 文件夹下直接保存了 dep.model 模型文件。
除了上面最基础的两个参数,这里也提供了一些参数进行调整,例如 迭代次数设置,解码类型设置以及是否输出树形表示等等,我用到的也只是迭代次数而已,具体参考文档吧,使用的时候像上面一样即可,例如改变默认的迭代次数:

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser train train-file:data/train.ulab model-name:dep.model training-iterations:20

测试

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser test test-file:data/test.ulab output-file:out.txt 

这里要提供的参数也有两个,第一个是 test-file 后面是你的测试数据文件,output-file 文件提供的是数据,这是根据你的模型对测试数据进行的输出,这个输出的数据文档中没有介绍,不过根据我测试的数据,这里应该是输出两个内容,分别是词语之间的关系和词语位置的序号,也就是数据中的第三行和第四行,当然这是 labeled 的数据,如果是 unlabeled 的数据,就只生成词语位置序号了。

评估
命令:

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser eval gold-file:data/test.ulab

这里的评估就是对测试数据的准确度进行了评价,所以传入的数据 gold-file:还是之前的测试数据文件,运行之后可以看到有正确数据数量和准确率等信息输出。

也可以直接使用一行命令直接运行上面的所有过程:

java -classpath ".;lib/trove.jar" -Xmx1800m mstparser.DependencyParser 
  train train-file:data/train.ulab model-name:dep.model 
  test test-file:data/test.ulab output-file:out.txt 
  eval gold-file:data/test.ulab

文档中还提到了在新的数据上进行运行模型,这其实就是与测试过程一致了,直接使用测试的命令,改动一下数据文件就可以了。
这里给出一个实际运行test之后的输出结果:

官方文档中并没有提到这些数值代表什么,所以有必要在这里说明一下:

  • Tokens 表示所有的句子中一共有多少分词,这里也就是单词了
  • Correct 这个好理解,就是把所有的分词看作词袋,统计所有依存弧正确的分词,也就是一条数据中最下面的那些数字(不是第三行的标签数据)
  • Unlabeled Accuracy 其实就是常说的 UAS(unlabeled attachment score)所有依存弧正确的分词数量 / 总分词数量,也就是Correct / Token
  • Unlabeled Complete Correct 表示整条数据所有的依存弧都正确的数据的比例 ,注意是整条数据所有的依存弧全部标记正确,这样算作一条数据,也就是 = 整条数据所有的依存弧全部标记正确的数据条数 / 总数据条数
  • Labeled Accuracy 也就是对应的 LAS(labeled attachment score),注意这个计算方式是 依存弧和标签全部正确的分词数 / 总词数,不单单要求标签正确
  • Labeled Complete Correct 与上面的对应

3.注意点

虽然整个工具的使用命令很简单,但是在使用的过程中还是遇到了一些问题,在这里总结一下:

  • 一定要记得一开始提到的把冒号改成英文分号之后再运行
  • 注意数据的格式问题,除了每条数据严格按照官方文档的数据格式来写之外,注意两条数据之间一定要使用空行来隔开,否则会报java的NumberFormatException和ArrayIndexOutOfBoundsException,而且再数据量很大的情况下很难找到(当然你可以使用二分的思想来进行查找hhh,我就是这么用的)
  • 第三点是注意开头结尾的空行,要记得删掉,不然也会容易抛出空字符串之类的异常

暂时就这些~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章