Hi Thomas,
Firstly, thank you for taking the time to provide this (and apologies for the slow reply, I’ve been away) - it’s incredibly helpful.
I haven’t implemented it yet but if I’ve understood correctly you are relying on the word to number mapping being done in such a way that all the out of vocab words are at the bottom of the embedding matrix? If this is the case is it not possible to set-up things to have two embedding matrices?
For example if we end up constructing the word to number mapping for a vocab of 75k with 25k words with no pre-trained word vectors could we do something like:

All words with pre-trained embeddings have numbers less than 50,000.
All out of vocab words have numbers 50,000 and above
Have 2 embedding matrices, one with 50,001 rows and one with 25,001 rows.
On the forward pass: Any numbers in the sentences above 50k set to value 50,000 (e.g. they’ll get row 50,001 in the pre-trained embeddings) and then point to pre-trained embeddings to grab pre-trained word vectors.
Also on forward pass: alongside this (with a copy of the data?) set any numbers less than 50k to 25,000 (e.g. they’ll get row 25,001 in the trained embeddings) and subtract 50,000 from all the word numbers. Point this to the embedding matrix I wish to train.

That said the ideal would be not to have to mess about with the way the word to number mapping is done.
Apologies if I’ve missed the boat and thanks again for your help.
Mark