ができないっていう話だけど。
ウェザタイのワード自動生成をUnityでも動かせるようにしたいので検討しているのだが、うまい方法がない。
UnityにBarracudaという機能があって、ニューラルネットのパラメータの標準的なフォーマットONNXが使えるらしい。ウェザタイのワード自動生成では、embed層、LSTM層、全結合層のスタンダードな構成なのでPythonの深層学習ライブラリで作るなら割と簡単。
で、まずはkerasのLSTMを使って日本語生成してみた。それ自体はうまくいったのだが、ONNXへの変換でつまる。keras2onnxではそもそもTensorflow2の機能を使っているとダメのようで、disable_v2_behaviorをやってみたりしたが、うまくいかない。
次にPyTorchを試す。こちらも日本語生成自体はうまくいった。ONNX変換もダミーインプットにちょっと試行錯誤がいるが、torch.onnx.exportで変換はできた。が、Unityにもっていくとインポートができない。embedレイヤーが使っているインデックスをサポートしていないっぽい。
追記:Barracudaのプレビュー版にしたらインポートまではできた。
最後、C#で一から作ったライブラリも試してみる。ウェザタイで作ったやつは高速化のため、行列の積にAVXとかSSEとかのSIMD命令を使っているのだが、Unityはマルチプラットフォームなのでそのままは使えない。そういう場合はBurstコンパイラを使うことになるらしいのだが、いろいろ制限があるようで、InvalidOperationExceptionになってしまう。C#で行列の積を実装すればいいはいいのだが、現実的じゃない計算コストがかかってしまう。
てところでいずれも無理。UnityでLSTM動かしている人はまだいないのかな。Pythonで大量に文章を自動生成できるので、100万ワードくらい生成して配布すればまあいいのかもしれないけど。。。