SyntaxNetを理解し、学ぼうとしています。コーパスの名前実体認識に SyntaxNet を使用する方法があるかどうかを調べようとしています。サンプルコードまたは役立つリンクをいただければ幸いです。
3 に答える
Syntaxnet は Named Entity Recognition 機能を明示的に提供していませんが、Parsey McParseface は品詞のタグ付けを行い、出力を Co-NLL テーブルとして生成します。
固有名詞はすべて NNP としてタグ付けされます。私は、そのような単純な正規表現識別子を発見しました。<NNP>+
つまり、1 つまたは複数の固有名詞を組み合わせると、ドキュメント内の名前付きエンティティがかなり得られます。もちろん、それは初歩的でルールに基づいていますが、それでも効果的です。
Co-NLL データを demo.sh スクリプト (「/opt/tensorflow/models/syntaxnet/syntaxnet」にあります) から出力ファイルにパイプするには、それを conll2ascii.py にパイプするコードのセクションをコメントアウトします。スクリプトは次のようになります。
PARSER_EVAL=bazel-bin/syntaxnet/parser_eval
MODEL_DIR=syntaxnet/models/parsey_mcparseface
[[ "$1" == "--conll" ]] && INPUT_FORMAT=stdin-conll || INPUT_FORMAT=stdin
$PARSER_EVAL \
--input=$INPUT_FORMAT \
--output=stdout-conll \
--hidden_layer_sizes=64 \
--arg_prefix=brain_tagger \
--graph_builder=structured \
--task_context=$MODEL_DIR/context.pbtxt \
--model_path=$MODEL_DIR/tagger-params \
--slim_model \
--batch_size=1024 \
--alsologtostderr \
| \
$PARSER_EVAL \
--input=stdin-conll \
--output=sample-param \
--hidden_layer_sizes=512,512 \
--arg_prefix=brain_parser \
--graph_builder=structured \
--task_context=$MODEL_DIR/context.pbtxt \
--model_path=$MODEL_DIR/parser-params \
--slim_model \
--batch_size=1024 \
--alsologtostderr
また、上記のファイルで出力パラメーターが sample-param に変更されていることにも注意してください。これを設定します。context.pbtxt ファイル (「/opt/tensorflow/models/syntaxnet/syntaxnet/models/parsey_mcparseface」にあります) に移動し、出力ファイルを指す入力パラメーターを作成します。次のようになります。
input {
name: 'sample-param'
record_format: 'conll-sentence'
Part {
file_pattern: "directory/prepoutput.txt"
}
}
ファイルを保存して閉じ、"/opt/tensorflow/models/syntaxnet" に戻り、syntaxnet チュートリアルの説明に従って syntaxnet/demo.sh を実行します。完了したら、指定された出力フォルダーに移動すると、co-nll 形式のテーブルが作成されます。次に、各エントリを調べて pos タグを識別する単純な反復プログラムを実行できます。これに基づいて、エンティティ認識のために提案された形式のバリエーションを試すことができます。
これが役に立ったことを願っています!