59801
文章校正タスクにEncoderDecoderモデルを用いています.  
Decoderの出力次元は語彙数になると思うのですが, その場合大きすぎてメモリエラーを起こします.  
そのため語彙のうち低頻度語をUNKに置き換えているのですが, それでは文章校正タスクに不適のように感じてしまいます.  
できれば語彙数を削らずに学習したいのですが, 効果的な手法はありますでしょうか？
CC BY-SA 4.0
2019-10-18T03:53:16.853
59778
2019-10-19T04:40:09.217
36246
question
python
EncoderDecoderモデルにおけるOOVの扱い
単語ベースの語彙ではなく、BPEを使えば良いのでは。sentencepieceのようなツールでBPEを訓練する方法があります。  
<https://github.com/google/sentencepiece>

BPEは、単語ではなく、アルゴリズムによってコーパスから指定の語彙数になるまで分割する方法です。この語彙数はよく、8000〜32000程度を指定されます。訓練に利用したコーパス内では少ない語彙数のまま未知語をなくすことができます。  
<https://qiita.com/taku910/items/7e52f1e58d0ea6e7859c>

語彙数依存のニューラルネット系モデルを作成する場合は、基本的にsentencepieceのようなツールによってサブワードを用います。翻訳モデルにおいても、sentencepieceは一般的に用いられています。例えば、fairseqはsentencepieceに対応しています。  
<https://github.com/pytorch/fairseq/issues/459>
CC BY-SA 4.0
2019-10-19T04:27:52.083
59801
2019-10-19T04:40:09.217
2019-10-19T04:40:09.217
59778
answer