想定読者
コンテナへのモデルの転送が必要なせいでビルドに時間がかかるし, モデルの入れ替えにデプロイが必要だし大変だ, という方.
この記事はそうした方向けです.
まずは成果物
作ったものは github にあります.
tf1.9で動作確認しましたが, 使ってる機能も多くないので多少古くても動くかと.
なにをしたのか
tf.contrib.lookup.HashTable
とtf.nn.embedding_lookup
を使ってword2vecをtensorflowに持たせるようにしました.
なぜそんなことをするのか
tensorflow serving にword2vecを持たせたかったからです.
tf-servingとはtensorflowのモデルを良い塩梅にversioningとかしつつ, TensorProtoでのリクエストを受けて推論を実行して結果を返してくれる便利なやつです.詳しくはリンク先参照.
なぜ一回idを経由してvecを取るのか
id -> word
の変換が必要だったからです.
word->vec
しか必要ない場合SimpleWord2VecTfModel
というのもあるのでそちらをどうぞ.
所感
HashTable
の存在を知らなかったせいでserving自体に手を入れかけていたのですが, 既存機能だけでさらっとできて良かった.
servingには最近REST APIも生えたのでブラウザから直接呼び出しもできて便利です.もっと流行って情報が増えて欲しいところ.
自然言語処理パイプラインを全部servingに面倒見て欲しいという気持ちがあり, mecab
の辞書でも同じことがやりたいのですがc++は全然わからないし, servingは大きくて手を入れるのがつらい…
どなたかこれ読んで一緒に作りませんか.