mindtext.embeddings.char_embedding

该文件包含的是针对character的Embedding,是基于CNN的character embedding。与其它Embedding一样,这里的输入也是单词的tokens而不需要使用单词中字符的tokens来获取对应的字符嵌入表示。

class mindtext.embeddings.char_embedding.CNNCharEmbedding (vocab: Vocabulary, embed_size: int = 50, char_emb_size: int = 50, dropout: float = 0.1, filter_nums: List[int] = (30,), kernel_sizes: List[int] = (3,), pool_method: str = ‘max’, activation: str = ‘relu’, min_char_freq: int = 1, pre_train_char_embed: Optional[str] = None, requires_grad: bool = True, include_word_start_end: bool = True)

使用卷积神经网络(CNN)生成字符嵌入(char embedding)。其结构为:embedding(x) -> dropout(x) -> CNN(x) -> activation(x) -> pool(x) -> fc(x) -> Dropout(x)。对于不同的kernel大小的fitler,其结果是拼接起来,然后通过一层全连接层,最后输出字符嵌入表示。

Example

>>> import mindspore
>>> from mindtext.common.data.vocabulary import Vocabulary
>>> from mindtext.embeddings.char_embedding import CNNCharEmbedding
>>> vocab = Vocabulary()
>>> vocab.update("The whether is good .".split())
>>> vocab.build_vocab()
>>> embed = CNNCharEmbedding(vocab, embed_size=50)
>>> words = mindspore.Tensor([[vocab.to_index(word) for word in "The whether is good .".split()]])
>>> outputs = embed(words)
>>> outputs.shape
>>> # (1, 5, 50)

init (vocab: Vocabulary, embed_size: int = 50, char_emb_size: int = 50, dropout: float = 0.1, filter_nums: List[int] = (30,), kernel_sizes: List[int] = (3,), pool_method: str = ‘max’, activation: str = ‘relu’, min_char_freq: int = 1, pre_train_char_embed: Optional[str] = None, requires_grad: bool = True, include_word_start_end: bool = True)

参数

  • vocab (Vocabulary): 词表。

  • embed_size (int): character embedding的输出维度大小,默认值为50

  • char_emb_size (int): 字符嵌入的维度大小。字符是从vocab中生成的。默认值为50

  • dropout (float): 对CNNCharEmbedding后的输出进行dropout。默认值为0.1

  • filter_nums (List[int]): filter的数量。长度需要和kernels一致。默认值为(30,)

  • kernel_sizes (List[int]): 卷积核的大小。默认值为(3,)

  • pool_method (str): 把字符表示合成为一个表示时所用的池化方法。支持最大池化max和平均池化avg。默认值为max

  • activation (str): 激活函数,支持relusigmoidtanh或者自定义函数。默认值relu

  • min_char_freq (int):字符出现的最少次数。默认值为1

  • pre_train_char_embed (str, optional): 有两种方式调用预训练好的character embedding:1)是传入embedding文件夹 (一个以.txt作为后缀的文件)或文件路径;2)是传入embedding的名称,第2种情况将自动查看缓存中是否存在该模型,没有的话将自动下载(华为云实现后)。如果输入为None则使用embedding_dim的维度随机初始化一个embedding。

  • requires_grad (bool): 是否更新权重。默认值为True

  • include_word_start_end (bool): 是否在每个单词开始的字符前和结束的字符前增加特殊符合。

construct (words: mindspore.Tensor):

输入words的tokens后,生成对应的字符嵌入表示。

参数:

  • words (mindspore.Tensor): 单词的tokens,shape为(batch_size, seq_len)。

返回:

  • mindspore.Tensor: 字符嵌入表示,shape为(batch_size, seq_len, embed_size)。