code: def get_language_model(
      arch,  # Function or class that can generate a language model architecture
      vocab_sz: int,  # Size of the vocabulary
      config: dict = None,  # Model configuration dictionary
      drop_mult: float = 1.0,  # Multiplicative factor to scale all dropout probabilities in `config`
  ) -> (
      SequentialRNN
  ):  # Language model with `arch` encoder and linear decoder
      "Create a language model from `arch` and its `config`."
      meta = _model_meta[arch]
      config = ifnone(config, meta["config_lm"]).copy()
      for k in config.keys():
          if k.endswith("_p"):
              config[k] *= drop_mult
      tie_weights, output_p, out_bias = map(
          config.pop, ["tie_weights", "output_p", "out_bias"]
      )
      init = config.pop("init") if "init" in config else None
      encoder = arch(vocab_sz, **config)
      enc = encoder.encoder if tie_weights else None
      decoder = LinearDecoder(
          vocab_sz,
          config[meta["hid_name"]],
          output_p,
          tie_encoder=enc,
          bias=out_bias,
      )
      model = SequentialRNN(encoder, decoder)
      return model if init is None else model.apply(init)
  
imports: from __future__ import annotations
  from ...data.all import *
  from ..core import *
  from .awdlstm import *
label_desc: Use image node_id 1 for calling a global function with example usage: get_language_model(arch, vocab_sz, config, drop_mult) and returns: unknown