Browse Source

1.更新了loader和pipe的文件说明; 2.修正conll.py中的typo; 3.修改char_embedding的pretrain_char_path的初始化路径为None

tags/v0.4.10
yh 6 years ago
parent
commit
f5571f1769
4 changed files with 37 additions and 14 deletions
  1. +11
    -11
      fastNLP/embeddings/char_embedding.py
  2. +12
    -1
      fastNLP/io/loader/loader.py
  3. +2
    -2
      fastNLP/io/pipe/conll.py
  4. +12
    -0
      fastNLP/io/pipe/pipe.py

+ 11
- 11
fastNLP/embeddings/char_embedding.py View File

@@ -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)


+ 12
- 1
fastNLP/io/loader/loader.py View File

@@ -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):


+ 2
- 2
fastNLP/io/pipe/conll.py View File

@@ -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):


+ 12
- 0
fastNLP/io/pipe/pipe.py View File

@@ -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

Loading…
Cancel
Save