FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Googleの言語構文解析ツールSyntaxNetを試行(インストール)

またしてもTensorFlow系の派生形ツールが登場した。SyntaxNetというツールらしい。 いわゆる自然言語構文を解析するツールで、解析精度はGoogleいわくかなり高い。

Google Open Source Blog: Announcing SyntaxNet: The World’s Most Accurate Parser Goes Open Source

www.itmedia.co.jp

githubで公開されたのはTensorFlowに統合されたSyntaxNetフレームワークと、英文に最適化された構文解析ツールParsey McParsefaceというパッケージ。 Parsey McParsefaceについては良く分からないが、SyntaxNetを英語構文向けに最適化したという話なのかな?

SyntaxNetのインストール手順

試行した環境はUbuntu 14.04LTS on Vagrantだ。新しいVagrant仮想マシンを作成してそのうえで行った。

models/syntaxnet at master · tensorflow/models · GitHub

Bazelのインストール

Googleのビルド環境はほとんどBazelに統合されているのだろうか。まずはBazel-0.2.2をインストールする。 現在公開されている最新のBazel-0.2.2.bではダメらしい。

Installing Bazel - Bazel

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer

$ sudo apt-get install pkg-config zip g++ zlib1g-dev unzip

Pythonもインストールしておく。

$ sudo apt-get install python python-dev python-pip python-numpy

さらに各種パッケージをインストールしておく。

apt-get install swig

SyntaxNetのビルド

これもインストールマニュアルに従えばよい。ただしかなりハマったのだが、メモリが4GB程度では全くビルドできない。Memoryが足りずに途中でコンパイルに失敗したため、仮想マシンの数を1つに絞り、12GBのメモリを割り当てるとビルドができるようになった。ビルドにはおよそ30分かかった。

$ git clone --recursive https://github.com/tensorflow/models.git
$ cd models/syntaxnet/tensorflow
$ ./configure
$ cd ..
$ bazel test syntaxnet/... util/utf8/...
...

At global scope:
cc1plus: warning: unrecognized command line option "-Wno-self-assign" [enabled by default]
INFO: From Compiling external/tf/tensorflow/core/util/memmapped_file_system_writer.cc [for host]:
external/tf/tensorflow/core/util/memmapped_file_system_writer.cc: In function 'tensorflow::StringPiece tensorflow::{anonymous}::EncodeUint64LittleEndian(tensorflow::uint64, char*)':
external/tf/tensorflow/core/util/memmapped_file_system_writer.cc:86:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for (int i = 0; i < sizeof(uint64); ++i) {
                                    ^
INFO: From Compiling external/tf/tensorflow/core/lib/strings/numbers.cc [for host]:
external/tf/tensorflow/core/lib/strings/numbers.cc: In function 'bool tensorflow::strings::safe_strtou64(tensorflow::StringPiece, tensorflow::uint64*)':
external/tf/tensorflow/core/lib/strings/numbers.cc:164:37: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if ((kuint64max - digit) / 10 < result) {
                                     ^
INFO: Elapsed time: 746.872s, Critical Path: 709.78s
//syntaxnet:arc_standard_transitions_test                                PASSED in 0.1s
//syntaxnet:beam_reader_ops_test                                         PASSED in 11.9s
//syntaxnet:graph_builder_test                                           PASSED in 9.7s
//syntaxnet:lexicon_builder_test                                         PASSED in 0.8s
//syntaxnet:parser_features_test                                         PASSED in 0.1s
//syntaxnet:parser_trainer_test                                          PASSED in 40.3s
//syntaxnet:reader_ops_test                                              PASSED in 2.8s
//syntaxnet:sentence_features_test                                       PASSED in 0.0s
//syntaxnet:shared_store_test                                            PASSED in 0.5s
//syntaxnet:tagger_transitions_test                                      PASSED in 0.0s
//syntaxnet:text_formats_test                                            PASSED in 0.8s
//util/utf8:unicodetext_unittest                                         PASSED in 0.0s

$

Getting Startedを実行してみる

以下のように文章を渡してみる。

$ echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh
I syntaxnet/term_frequency_map.cc:101] Loaded 46 terms from syntaxnet/models/parsey_mcparseface/label-map.

...

すごい勢いでログを吐き始めた。最後に、以下のように出力される。

INFO:tensorflow:Read 1 documents
Input: Bob brought the pizza to Alice .
Parse:
brought VBD ROOT
 +-- Bob NNP nsubj
 +-- pizza NN dobj
 |   +-- the DT det
 +-- to IN prep
 |   +-- Alice NNP pobj
 +-- . . punct

おお、解析できている。