diff --git a/fastNLP/embeddings/char_embedding.py b/fastNLP/embeddings/char_embedding.py index 955e08c9..1f3a9234 100644 --- a/fastNLP/embeddings/char_embedding.py +++ b/fastNLP/embeddings/char_embedding.py @@ -36,8 +36,8 @@ class CNNCharEmbedding(TokenEmbedding): >>> # torch.Size([1, 5,50]) :param vocab: 词表 - :param embed_size: 该word embedding的大小,默认值为50. - :param char_emb_size: character的embed的大小。character是从vocab中生成的。默认值为50. + :param embed_size: 该CNNCharEmbedding的输出维度大小,默认值为50. + :param char_emb_size: character的embed的维度。character是从vocab中生成的。默认值为50. :param float word_dropout: 以多大的概率将一个词替换为unk。这样既可以训练unk也是一定的regularize。 :param float dropout: 以多大的概率drop分布式表示与char embedding的输出。 :param filter_nums: filter的数量. 长度需要和kernels一致。默认值为[40, 30, 20]. @@ -45,13 +45,13 @@ class CNNCharEmbedding(TokenEmbedding): :param pool_method: character的表示在合成一个表示时所使用的pool方法,支持'avg', 'max'. :param activation: CNN之后使用的激活方法,支持'relu', 'sigmoid', 'tanh' 或者自定义函数. :param min_char_freq: character的最少出现次数。默认值为2. - :param pre_train_char_embed:可以有两种方式调用预训练好的static embedding:第一种是传入embedding文件夹(文件夹下应该只有一个 + :param pre_train_char_embed:可以有两种方式调用预训练好的character embedding:第一种是传入embedding文件夹(文件夹下应该只有一个 以.txt作为后缀的文件)或文件路径;第二种是传入embedding的名称,第二种情况将自动查看缓存中是否存在该模型,没有的话将自动下载。 如果输入为None则使用embedding_dim的维度随机初始化一个embedding. """ def __init__(self, vocab: Vocabulary, embed_size: int=50, char_emb_size: int=50, word_dropout:float=0, dropout:float=0.5, filter_nums: List[int]=(40, 30, 20), kernel_sizes: List[int]=(5, 3, 1), - pool_method: str='max', activation='relu', min_char_freq: int=2, pre_train_char_embed: str=''): + pool_method: str='max', activation='relu', min_char_freq: int=2, pre_train_char_embed: str=None): super(CNNCharEmbedding, self).__init__(vocab, word_dropout=word_dropout, dropout=dropout) for kernel in kernel_sizes: @@ -93,8 +93,8 @@ class CNNCharEmbedding(TokenEmbedding): torch.LongTensor([self.char_vocab.to_index(c) for c in word]) self.word_lengths[index] = len(word) # self.char_embedding = nn.Embedding(len(self.char_vocab), char_emb_size) - if len(pre_train_char_embed): - self.char_embedding = StaticEmbedding(self.char_vocab, pre_train_char_embed) + if pre_train_char_embed: + self.char_embedding = StaticEmbedding(self.char_vocab, model_dir_or_name=pre_train_char_embed) else: self.char_embedding = nn.Embedding(len(self.char_vocab), char_emb_size) @@ -189,8 +189,8 @@ class LSTMCharEmbedding(TokenEmbedding): >>> # torch.Size([1, 5,50]) :param vocab: 词表 - :param embed_size: embedding的大小。默认值为50. - :param char_emb_size: character的embedding的大小。默认值为50. + :param embed_size: LSTMCharEmbedding的输出维度。默认值为50. + :param char_emb_size: character的embedding的维度。默认值为50. :param float word_dropout: 以多大的概率将一个词替换为unk。这样既可以训练unk也是一定的regularize。 :param dropout: 以多大概率drop character embedding的输出以及最终的word的输出。 :param hidden_size: LSTM的中间hidden的大小,如果为bidirectional的,hidden会除二,默认为50. @@ -198,13 +198,13 @@ class LSTMCharEmbedding(TokenEmbedding): :param activation: 激活函数,支持'relu', 'sigmoid', 'tanh', 或者自定义函数. :param min_char_freq: character的最小出现次数。默认值为2. :param bidirectional: 是否使用双向的LSTM进行encode。默认值为True。 - :param pre_train_char_embed:可以有两种方式调用预训练好的static embedding:第一种是传入embedding文件夹(文件夹下应该只有一个 + :param pre_train_char_embed:可以有两种方式调用预训练好的character embedding:第一种是传入embedding文件夹(文件夹下应该只有一个 以.txt作为后缀的文件)或文件路径;第二种是传入embedding的名称,第二种情况将自动查看缓存中是否存在该模型,没有的话将自动下载。 如果输入为None则使用embedding_dim的维度随机初始化一个embedding. """ def __init__(self, vocab: Vocabulary, embed_size: int=50, char_emb_size: int=50, word_dropout:float=0, dropout:float=0.5, hidden_size=50,pool_method: str='max', activation='relu', min_char_freq: int=2, - bidirectional=True, pre_train_char_embed: str=''): + bidirectional=True, pre_train_char_embed: str=None): super(LSTMCharEmbedding, self).__init__(vocab) assert hidden_size % 2 == 0, "Only even kernel is allowed." @@ -245,7 +245,7 @@ class LSTMCharEmbedding(TokenEmbedding): torch.LongTensor([self.char_vocab.to_index(c) for c in word]) self.word_lengths[index] = len(word) # self.char_embedding = nn.Embedding(len(self.char_vocab), char_emb_size) - if len(pre_train_char_embed): + if pre_train_char_embed: self.char_embedding = StaticEmbedding(self.char_vocab, pre_train_char_embed) else: self.char_embedding = nn.Embedding(len(self.char_vocab), char_emb_size) diff --git a/fastNLP/io/loader/loader.py b/fastNLP/io/loader/loader.py index 296714bf..89628196 100644 --- a/fastNLP/io/loader/loader.py +++ b/fastNLP/io/loader/loader.py @@ -14,6 +14,12 @@ class Loader: pass def _load(self, path: str) -> DataSet: + """ + 给定一个路径,返回读取的DataSet。 + + :param str path: 路径 + :return: DataSet + """ raise NotImplementedError def load(self, paths: Union[str, Dict[str, str]] = None) -> DataBundle: @@ -53,7 +59,12 @@ class Loader: data_bundle = DataBundle(datasets=datasets) return data_bundle - def download(self): + def download(self)->str: + """ + 自动下载该数据集 + + :return: 下载后解压目录 + """ raise NotImplementedError(f"{self.__class__} cannot download data automatically.") def _get_dataset_path(self, dataset_name): diff --git a/fastNLP/io/pipe/conll.py b/fastNLP/io/pipe/conll.py index 0379a45b..7d55dd29 100644 --- a/fastNLP/io/pipe/conll.py +++ b/fastNLP/io/pipe/conll.py @@ -111,7 +111,7 @@ class Conll2003NERPipe(_NERPipe): :param: str encoding_type: target列使用什么类型的encoding方式,支持bioes, bio两种。 :param bool lower: 是否将words小写化后再建立词表,绝大多数情况都不需要设置为True。 - :param int target_pad_val: target的padding值,target这一列pad的位置值为target_pad_val。默认为-100。 + :param int target_pad_val: target的padding值,target这一列pad的位置值为target_pad_val。默认为0。 """ def process_from_file(self, paths) -> DataBundle: @@ -140,7 +140,7 @@ class OntoNotesNERPipe(_NERPipe): :param: str encoding_type: target列使用什么类型的encoding方式,支持bioes, bio两种。 :param bool lower: 是否将words小写化后再建立词表,绝大多数情况都不需要设置为True。 - :param int target_pad_val: target的padding值,target这一列pad的位置值为target_pad_val。默认为-100。 + :param int target_pad_val: target的padding值,target这一列pad的位置值为target_pad_val。默认为0。 """ def process_from_file(self, paths): diff --git a/fastNLP/io/pipe/pipe.py b/fastNLP/io/pipe/pipe.py index 76cc00ec..a2b74301 100644 --- a/fastNLP/io/pipe/pipe.py +++ b/fastNLP/io/pipe/pipe.py @@ -3,7 +3,19 @@ from .. import DataBundle class Pipe: def process(self, data_bundle: DataBundle) -> DataBundle: + """ + 对输入的DataBundle进行处理,然后返回该DataBundle。 + + :param data_bundle: 需要处理的DataBundle对象 + :return: + """ raise NotImplementedError def process_from_file(self, paths) -> DataBundle: + """ + 传入文件路径,生成处理好的DataBundle对象。paths支持的路径形式可以参考 `fastNLP.io.loader.Loader.load()` + + :param paths: + :return: DataBundle + """ raise NotImplementedError