[docs]classEmbedding(AutoConfigurable,ABC):def__init__(self)->None:""" Base class for embedding builders. """super().__init__()
[docs]deftransform(self,**kwargs)->Optional[Callable]:"""Build a transform function for this embedding. Args: **kwargs: Containing vocabs, training etc. Not finalized for now. Returns: A transform function. """returnNone
[docs]defmodule(self,**kwargs)->Optional[nn.Module]:"""Build a module for this embedding. Args: **kwargs: Containing vocabs, training etc. Not finalized for now. Returns: A module. """returnNone
[docs]classConcatModuleList(nn.ModuleList,EmbeddingDim):def__init__(self,*modules:Optional[Iterable[Module]],dropout=None)->None:"""A ``nn.ModuleList`` to bundle several embeddings modules. Args: *modules: Embedding layers. dropout: Dropout applied on the concatenated embedding. """super().__init__(*modules)ifdropout:dropout=IndependentDropout(p=dropout)self.dropout=dropout@propertydefembedding_dim(self)->int:returnsum(embed.embedding_dimforembedinself)defget_output_dim(self)->int:returnsum(embed.get_output_dim()forembedinself)# noinspection PyMethodOverriding
[docs]classEmbeddingList(Embedding):def__init__(self,*embeddings_,embeddings:dict=None,dropout=None)->None:"""An embedding builder to bundle several embedding builders. Args: *embeddings_: A list of embedding builders. embeddings: Deserialization for a dict of embedding builders. dropout: Dropout applied on the concatenated embedding. """# noinspection PyTypeCheckerself.dropout=dropoutself._embeddings:List[Embedding]=list(embeddings_)ifembeddings:foreachinembeddings:ifisinstance(each,dict):each=AutoConfigurable.from_config(each)self._embeddings.append(each)self.embeddings=[e.configforeinself._embeddings]