@@ -1,7 +0,0 @@ | |||||
fastNLP.io.loader.conll module | |||||
============================== | |||||
.. automodule:: fastNLP.io.loader.conll | |||||
:members: | |||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,7 +0,0 @@ | |||||
fastNLP.io.loader.coreference module | |||||
==================================== | |||||
.. automodule:: fastNLP.io.loader.coreference | |||||
:members: | |||||
:undoc-members: | |||||
:show-inheritance: |
@@ -1,5 +1,5 @@ | |||||
fastNLP.transformers.torch package | fastNLP.transformers.torch package | ||||
============================= | |||||
================================== | |||||
.. automodule:: fastNLP.transformers.torch | .. automodule:: fastNLP.transformers.torch | ||||
:members: | :members: | ||||
@@ -35,14 +35,14 @@ class Event: | |||||
:param value: Trainer 的 callback 时机; | :param value: Trainer 的 callback 时机; | ||||
:param every: 每触发多少次才真正运行一次; | :param every: 每触发多少次才真正运行一次; | ||||
:param once: 在第一次运行后时候再次执行; | |||||
:param once: 是否仅运行一次; | |||||
:param filter_fn: 输入参数的应该为 ``(filter, trainer)``,其中 ``filter`` 对象中包含了 `filter.num_called` 和 | :param filter_fn: 输入参数的应该为 ``(filter, trainer)``,其中 ``filter`` 对象中包含了 `filter.num_called` 和 | ||||
`filter.num_executed` 两个变量分别获取当前被调用了多少次,真正执行了多少次;``trainer`` 对象即为当前正在运行的 Trainer; | `filter.num_executed` 两个变量分别获取当前被调用了多少次,真正执行了多少次;``trainer`` 对象即为当前正在运行的 Trainer; | ||||
""" | """ | ||||
every: Optional[int] | every: Optional[int] | ||||
once: Optional[int] | |||||
once: Optional[bool] | |||||
def __init__(self, value: str, every: Optional[int] = None, once: Optional[int] = None, | |||||
def __init__(self, value: str, every: Optional[int] = None, once: Optional[bool] = None, | |||||
filter_fn: Optional[Callable] = None): | filter_fn: Optional[Callable] = None): | ||||
self.every = every | self.every = every | ||||
self.once = once | self.once = once | ||||
@@ -68,7 +68,6 @@ class Event: | |||||
return Event(value='on_after_trainer_initialized', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_after_trainer_initialized', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_sanity_check_begin(every=None, once=None, filter_fn=None): | def on_sanity_check_begin(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_sanity_check_begin` 时触发; | 当 Trainer 运行到 :func:`on_sanity_check_begin` 时触发; | ||||
@@ -85,7 +84,6 @@ class Event: | |||||
return Event(value='on_sanity_check_begin', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_sanity_check_begin', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_sanity_check_end(every=None, once=None, filter_fn=None): | def on_sanity_check_end(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_sanity_check_end` 时触发; | 当 Trainer 运行到 :func:`on_sanity_check_end` 时触发; | ||||
@@ -101,7 +99,6 @@ class Event: | |||||
return Event(value='on_sanity_check_end', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_sanity_check_end', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_train_begin(every=None, once=None, filter_fn=None): | def on_train_begin(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_train_begin` 时触发; | 当 Trainer 运行到 :func:`on_train_begin` 时触发; | ||||
@@ -117,7 +114,6 @@ class Event: | |||||
return Event(value='on_train_begin', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_train_begin', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_train_end(every=None, once=None, filter_fn=None): | def on_train_end(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_train_end` 时触发; | 当 Trainer 运行到 :func:`on_train_end` 时触发; | ||||
@@ -133,7 +129,6 @@ class Event: | |||||
return Event(value='on_train_end', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_train_end', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_train_epoch_begin(every=None, once=None, filter_fn=None): | def on_train_epoch_begin(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_train_epoch_begin` 时触发; | 当 Trainer 运行到 :func:`on_train_epoch_begin` 时触发; | ||||
@@ -149,7 +144,6 @@ class Event: | |||||
return Event(value='on_train_epoch_begin', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_train_epoch_begin', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_train_epoch_end(every=None, once=None, filter_fn=None): | def on_train_epoch_end(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_train_epoch_end` 时触发; | 当 Trainer 运行到 :func:`on_train_epoch_end` 时触发; | ||||
@@ -165,7 +159,6 @@ class Event: | |||||
return Event(value='on_train_epoch_end', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_train_epoch_end', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_fetch_data_begin(every=None, once=None, filter_fn=None): | def on_fetch_data_begin(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_fetch_data_begin` 时触发; | 当 Trainer 运行到 :func:`on_fetch_data_begin` 时触发; | ||||
@@ -181,7 +174,6 @@ class Event: | |||||
return Event(value='on_fetch_data_begin', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_fetch_data_begin', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_fetch_data_end(every=None, once=None, filter_fn=None): | def on_fetch_data_end(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_fetch_data_end` 时触发; | 当 Trainer 运行到 :func:`on_fetch_data_end` 时触发; | ||||
@@ -197,7 +189,6 @@ class Event: | |||||
return Event(value='on_fetch_data_end', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_fetch_data_end', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_train_batch_begin(every=None, once=None, filter_fn=None): | def on_train_batch_begin(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_train_batch_begin` 时触发; | 当 Trainer 运行到 :func:`on_train_batch_begin` 时触发; | ||||
@@ -213,7 +204,6 @@ class Event: | |||||
return Event(value='on_train_batch_begin', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_train_batch_begin', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_train_batch_end(every=None, once=None, filter_fn=None): | def on_train_batch_end(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_train_batch_end` 时触发; | 当 Trainer 运行到 :func:`on_train_batch_end` 时触发; | ||||
@@ -229,7 +219,6 @@ class Event: | |||||
return Event(value='on_train_batch_end', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_train_batch_end', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_exception(every=None, once=None, filter_fn=None): | def on_exception(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_exception` 时触发; | 当 Trainer 运行到 :func:`on_exception` 时触发; | ||||
@@ -245,7 +234,6 @@ class Event: | |||||
return Event(value='on_exception', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_exception', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_save_model(every=None, once=None, filter_fn=None): | def on_save_model(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_save_model` 时触发; | 当 Trainer 运行到 :func:`on_save_model` 时触发; | ||||
@@ -261,7 +249,6 @@ class Event: | |||||
return Event(value='on_save_model', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_save_model', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_load_model(every=None, once=None, filter_fn=None): | def on_load_model(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_load_model` 时触发; | 当 Trainer 运行到 :func:`on_load_model` 时触发; | ||||
@@ -277,7 +264,6 @@ class Event: | |||||
return Event(value='on_load_model', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_load_model', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_save_checkpoint(every=None, once=None, filter_fn=None): | def on_save_checkpoint(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_save_checkpoint` 时触发; | 当 Trainer 运行到 :func:`on_save_checkpoint` 时触发; | ||||
@@ -293,7 +279,6 @@ class Event: | |||||
return Event(value='on_save_checkpoint', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_save_checkpoint', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_load_checkpoint(every=None, once=None, filter_fn=None): | def on_load_checkpoint(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_load_checkpoint` 时触发; | 当 Trainer 运行到 :func:`on_load_checkpoint` 时触发; | ||||
@@ -309,7 +294,6 @@ class Event: | |||||
return Event(value='on_load_checkpoint', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_load_checkpoint', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_load_checkpoint(every=None, once=None, filter_fn=None): | def on_load_checkpoint(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_load_checkpoint` 时触发; | 当 Trainer 运行到 :func:`on_load_checkpoint` 时触发; | ||||
@@ -325,7 +309,6 @@ class Event: | |||||
return Event(value='on_load_checkpoint', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_load_checkpoint', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_before_backward(every=None, once=None, filter_fn=None): | def on_before_backward(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_before_backward` 时触发; | 当 Trainer 运行到 :func:`on_before_backward` 时触发; | ||||
@@ -341,7 +324,6 @@ class Event: | |||||
return Event(value='on_before_backward', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_before_backward', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_after_backward(every=None, once=None, filter_fn=None): | def on_after_backward(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_after_backward` 时触发; | 当 Trainer 运行到 :func:`on_after_backward` 时触发; | ||||
@@ -357,7 +339,6 @@ class Event: | |||||
return Event(value='on_after_backward', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_after_backward', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_before_optimizers_step(every=None, once=None, filter_fn=None): | def on_before_optimizers_step(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_before_optimizers_step` 时触发; | 当 Trainer 运行到 :func:`on_before_optimizers_step` 时触发; | ||||
@@ -373,7 +354,6 @@ class Event: | |||||
return Event(value='on_before_optimizers_step', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_before_optimizers_step', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_after_optimizers_step(every=None, once=None, filter_fn=None): | def on_after_optimizers_step(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_after_optimizers_step` 时触发; | 当 Trainer 运行到 :func:`on_after_optimizers_step` 时触发; | ||||
@@ -389,7 +369,6 @@ class Event: | |||||
return Event(value='on_after_optimizers_step', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_after_optimizers_step', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_before_zero_grad(every=None, once=None, filter_fn=None): | def on_before_zero_grad(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_before_zero_grad` 时触发; | 当 Trainer 运行到 :func:`on_before_zero_grad` 时触发; | ||||
@@ -405,7 +384,6 @@ class Event: | |||||
return Event(value='on_before_zero_grad', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_before_zero_grad', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_after_zero_grad(every=None, once=None, filter_fn=None): | def on_after_zero_grad(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_after_zero_grad` 时触发; | 当 Trainer 运行到 :func:`on_after_zero_grad` 时触发; | ||||
@@ -421,7 +399,6 @@ class Event: | |||||
return Event(value='on_after_zero_grad', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_after_zero_grad', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_evaluate_begin(every=None, once=None, filter_fn=None): | def on_evaluate_begin(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_evaluate_begin` 时触发; | 当 Trainer 运行到 :func:`on_evaluate_begin` 时触发; | ||||
@@ -437,7 +414,6 @@ class Event: | |||||
return Event(value='on_evaluate_begin', every=every, once=once, filter_fn=filter_fn) | return Event(value='on_evaluate_begin', every=every, once=once, filter_fn=filter_fn) | ||||
@staticmethod | @staticmethod | ||||
def on_evaluate_end(every=None, once=None, filter_fn=None): | def on_evaluate_end(every=None, once=None, filter_fn=None): | ||||
""" | """ | ||||
当 Trainer 运行到 :func:`on_evaluate_end` 时触发; | 当 Trainer 运行到 :func:`on_evaluate_end` 时触发; | ||||
@@ -105,7 +105,7 @@ __all__ = [ | |||||
"BQCorpusPipe", | "BQCorpusPipe", | ||||
"RenamePipe", | "RenamePipe", | ||||
"GranularizePipe", | "GranularizePipe", | ||||
"MachingTruncatePipe", | |||||
"TruncateBertPipe", | |||||
"CMRC2018BertPipe", | "CMRC2018BertPipe", | ||||
@@ -52,7 +52,7 @@ __all__ = [ | |||||
"BQCorpusPipe", | "BQCorpusPipe", | ||||
"RenamePipe", | "RenamePipe", | ||||
"GranularizePipe", | "GranularizePipe", | ||||
"MachingTruncatePipe", | |||||
"TruncateBertPipe", | |||||
"CMRC2018BertPipe", | "CMRC2018BertPipe", | ||||
@@ -74,7 +74,7 @@ from .conll import Conll2003Pipe, iob2, iob2bioes | |||||
from .cws import CWSPipe | from .cws import CWSPipe | ||||
from .matching import MatchingBertPipe, RTEBertPipe, SNLIBertPipe, QuoraBertPipe, QNLIBertPipe, MNLIBertPipe, \ | from .matching import MatchingBertPipe, RTEBertPipe, SNLIBertPipe, QuoraBertPipe, QNLIBertPipe, MNLIBertPipe, \ | ||||
MatchingPipe, RTEPipe, SNLIPipe, QuoraPipe, QNLIPipe, MNLIPipe, CNXNLIBertPipe, CNXNLIPipe, BQCorpusBertPipe, \ | MatchingPipe, RTEPipe, SNLIPipe, QuoraPipe, QNLIPipe, MNLIPipe, CNXNLIBertPipe, CNXNLIPipe, BQCorpusBertPipe, \ | ||||
LCQMCPipe, BQCorpusPipe, LCQMCBertPipe, RenamePipe, GranularizePipe, MachingTruncatePipe | |||||
LCQMCPipe, BQCorpusPipe, LCQMCBertPipe, RenamePipe, GranularizePipe, TruncateBertPipe | |||||
from .pipe import Pipe | from .pipe import Pipe | ||||
from .qa import CMRC2018BertPipe | from .qa import CMRC2018BertPipe | ||||
@@ -94,7 +94,7 @@ class CLSBasePipe(Pipe): | |||||
def process_from_file(self, paths) -> DataBundle: | def process_from_file(self, paths) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -154,7 +154,7 @@ class YelpFullPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None) -> DataBundle: | def process_from_file(self, paths=None) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -184,7 +184,7 @@ class YelpPolarityPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -214,7 +214,7 @@ class AGsNewsPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -244,7 +244,7 @@ class DBPediaPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -328,7 +328,7 @@ class SSTPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -358,7 +358,7 @@ class SST2Pipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -421,7 +421,7 @@ class IMDBPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -518,7 +518,7 @@ class ChnSentiCorpPipe(Pipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -622,7 +622,7 @@ class THUCNewsPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -713,7 +713,7 @@ class WeiboSenti100kPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -737,7 +737,7 @@ class MRPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -763,7 +763,7 @@ class R8Pipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -789,7 +789,7 @@ class R52Pipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -815,7 +815,7 @@ class OhsumedPipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -841,7 +841,7 @@ class NG20Pipe(CLSBasePipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -104,7 +104,7 @@ class Conll2003NERPipe(_NERPipe): | |||||
def process_from_file(self, paths) -> DataBundle: | def process_from_file(self, paths) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -193,7 +193,7 @@ class Conll2003Pipe(Pipe): | |||||
def process_from_file(self, paths): | def process_from_file(self, paths): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -221,7 +221,7 @@ class OntoNotesNERPipe(_NERPipe): | |||||
def process_from_file(self, paths): | def process_from_file(self, paths): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -343,7 +343,7 @@ class MsraNERPipe(_CNNERPipe): | |||||
def process_from_file(self, paths=None) -> DataBundle: | def process_from_file(self, paths=None) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -379,7 +379,7 @@ class PeopleDailyPipe(_CNNERPipe): | |||||
def process_from_file(self, paths=None) -> DataBundle: | def process_from_file(self, paths=None) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -415,7 +415,7 @@ class WeiboNERPipe(_CNNERPipe): | |||||
def process_from_file(self, paths=None) -> DataBundle: | def process_from_file(self, paths=None) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -164,7 +164,7 @@ class GraphBuilderBase: | |||||
def build_graph_from_file(self, path: str): | def build_graph_from_file(self, path: str): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的scipy_sparse_matrix对象。paths支持的路径形式可以参考 ::meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的scipy_sparse_matrix对象。paths支持的路径形式可以参考 ::meth:`fastNLP.io.Loader.load` | |||||
:param path: | :param path: | ||||
:return: scipy_sparse_matrix | :return: scipy_sparse_matrix | ||||
@@ -185,7 +185,7 @@ class MRPmiGraphPipe(GraphBuilderBase): | |||||
def build_graph(self, data_bundle: DataBundle): | def build_graph(self, data_bundle: DataBundle): | ||||
r""" | r""" | ||||
:param data_bundle: 需要处理的 :class:`fastNLP.io.DataBundle` 对象。 | |||||
:param data_bundle: 需要处理的 :class:`~fastNLP.io.DataBundle` 对象。 | |||||
:return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | :return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | ||||
""" | """ | ||||
self._get_doc_edge(data_bundle) | self._get_doc_edge(data_bundle) | ||||
@@ -219,7 +219,7 @@ class R8PmiGraphPipe(GraphBuilderBase): | |||||
def build_graph(self, data_bundle: DataBundle): | def build_graph(self, data_bundle: DataBundle): | ||||
r""" | r""" | ||||
:param data_bundle: 需要处理的 :class:`fastNLP.io.DataBundle` 对象。 | |||||
:param data_bundle: 需要处理的 :class:`~fastNLP.io.DataBundle` 对象。 | |||||
:return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | :return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | ||||
""" | """ | ||||
self._get_doc_edge(data_bundle) | self._get_doc_edge(data_bundle) | ||||
@@ -253,7 +253,7 @@ class R52PmiGraphPipe(GraphBuilderBase): | |||||
def build_graph(self, data_bundle: DataBundle): | def build_graph(self, data_bundle: DataBundle): | ||||
r""" | r""" | ||||
:param data_bundle: 需要处理的 :class:`fastNLP.io.DataBundle` 对象。 | |||||
:param data_bundle: 需要处理的 :class:`~fastNLP.io.DataBundle` 对象。 | |||||
:return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | :return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | ||||
""" | """ | ||||
self._get_doc_edge(data_bundle) | self._get_doc_edge(data_bundle) | ||||
@@ -287,7 +287,7 @@ class OhsumedPmiGraphPipe(GraphBuilderBase): | |||||
def build_graph(self, data_bundle: DataBundle): | def build_graph(self, data_bundle: DataBundle): | ||||
r""" | r""" | ||||
:param data_bundle: 需要处理的 :class:`fastNLP.io.DataBundle` 对象。 | |||||
:param data_bundle: 需要处理的 :class:`~fastNLP.io.DataBundle` 对象。 | |||||
:return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | :return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | ||||
""" | """ | ||||
self._get_doc_edge(data_bundle) | self._get_doc_edge(data_bundle) | ||||
@@ -321,7 +321,7 @@ class NG20PmiGraphPipe(GraphBuilderBase): | |||||
def build_graph(self, data_bundle: DataBundle): | def build_graph(self, data_bundle: DataBundle): | ||||
r""" | r""" | ||||
:param data_bundle: 需要处理的 :class:`fastNLP.io.DataBundle` 对象。 | |||||
:param data_bundle: 需要处理的 :class:`~fastNLP.io.DataBundle` 对象。 | |||||
:return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | :return: 返回 ``csr`` 类型的稀疏矩阵图;包含训练集,验证集,测试集,在图中的 index 。 | ||||
""" | """ | ||||
self._get_doc_edge(data_bundle) | self._get_doc_edge(data_bundle) | ||||
@@ -1,5 +1,3 @@ | |||||
r"""undocumented""" | |||||
__all__ = [ | __all__ = [ | ||||
"CWSPipe" | "CWSPipe" | ||||
] | ] | ||||
@@ -135,7 +133,7 @@ def _find_and_replace_digit_spans(line): | |||||
class CWSPipe(Pipe): | class CWSPipe(Pipe): | ||||
r""" | r""" | ||||
对CWS数据进行预处理, 处理之后的数据,具备以下的结构 | |||||
对 **CWS** 数据进行处理,处理之后 :class:`~fastNLP.core.DataSet` 中的内容如下: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "raw_words", "chars", "target", "seq_len" | :header: "raw_words", "chars", "target", "seq_len" | ||||
@@ -144,30 +142,21 @@ class CWSPipe(Pipe): | |||||
"2001年 新年 钟声...", "[8, 9, 9, 7, ...]", "[0, 1, 1, 1, 2...]", 20 | "2001年 新年 钟声...", "[8, 9, 9, 7, ...]", "[0, 1, 1, 1, 2...]", 20 | ||||
"...", "[...]","[...]", . | "...", "[...]","[...]", . | ||||
dataset的print_field_meta()函数输出的各个field的被设置成input和target的情况为:: | |||||
+-------------+-----------+-------+--------+---------+ | |||||
| field_names | raw_words | chars | target | seq_len | | |||||
+-------------+-----------+-------+--------+---------+ | |||||
| is_input | False | True | True | True | | |||||
| is_target | False | False | True | True | | |||||
| ignore_type | | False | False | False | | |||||
| pad_value | | 0 | 0 | 0 | | |||||
+-------------+-----------+-------+--------+---------+ | |||||
:param dataset_name: data 的名称,支持 ``['pku', 'msra', 'cityu'(繁体), 'as'(繁体), None]`` | |||||
:param encoding_type: ``target`` 列使用什么类型的 encoding 方式,支持 ``['bmes', 'segapp']`` 两种。``"我 来自 复旦大学..."`` 这句话 ``bmes``的 | |||||
tag为 ``[S, B, E, B, M, M, E...]`` ; ``segapp`` 的 tag 为 ``[seg, app, seg, app, app, app, seg, ...]`` 。 | |||||
:param replace_num_alpha: 是否将数字和字母用特殊字符替换。 | |||||
:param bigrams: 是否增加一列 ``bigrams`` 。 ``bigrams`` 会对原文进行如下转化: ``['复', '旦', '大', '学', ...]->["复旦", "旦大", ...]`` 。如果 | |||||
设置为 ``True`` ,返回的 :class:`~fastNLP.core.DataSet` 将有一列名为 ``bigrams`` ,且已经转换为了 index 并设置为 input,对应的词表可以通过 | |||||
``data_bundle.get_vocab('bigrams')`` 获取。 | |||||
:param trigrams: 是否增加一列 ``trigrams`` 。 ``trigrams`` 会对原文进行如下转化 ``['复', '旦', '大', '学', ...]->["复旦大", "旦大学", ...]`` 。 | |||||
如果设置为 ``True`` ,返回的 :class:`~fastNLP.core.DataSet` 将有一列名为 ``trigrams`` ,且已经转换为了 index 并设置为 input,对应的词表可以通过 | |||||
``data_bundle.get_vocab('trigrams')`` 获取。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | """ | ||||
def __init__(self, dataset_name=None, encoding_type='bmes', replace_num_alpha=True, | |||||
bigrams=False, trigrams=False, num_proc: int = 0): | |||||
r""" | |||||
:param str,None dataset_name: 支持'pku', 'msra', 'cityu', 'as', None | |||||
:param str encoding_type: 可以选择'bmes', 'segapp'两种。"我 来自 复旦大学...", bmes的tag为[S, B, E, B, M, M, E...]; segapp | |||||
的tag为[seg, app, seg, app, app, app, seg, ...] | |||||
:param bool replace_num_alpha: 是否将数字和字母用特殊字符替换。 | |||||
:param bool bigrams: 是否增加一列bigram. bigram的构成是['复', '旦', '大', '学', ...]->["复旦", "旦大", ...] | |||||
:param bool trigrams: 是否增加一列trigram. trigram的构成是 ['复', '旦', '大', '学', ...]->["复旦大", "旦大学", ...] | |||||
""" | |||||
def __init__(self, dataset_name: str=None, encoding_type: str='bmes', replace_num_alpha: bool=True, | |||||
bigrams: bool=False, trigrams: bool=False, num_proc: int = 0): | |||||
if encoding_type == 'bmes': | if encoding_type == 'bmes': | ||||
self.word_lens_to_tags = _word_lens_to_bmes | self.word_lens_to_tags = _word_lens_to_bmes | ||||
else: | else: | ||||
@@ -220,7 +209,7 @@ class CWSPipe(Pipe): | |||||
def process(self, data_bundle: DataBundle) -> DataBundle: | def process(self, data_bundle: DataBundle) -> DataBundle: | ||||
r""" | r""" | ||||
可以处理的DataSet需要包含raw_words列 | |||||
``data_bunlde`` 中的 :class:`~fastNLP.core.DataSet` 应该包含 ``raw_words`` : | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "raw_words" | :header: "raw_words" | ||||
@@ -276,7 +265,7 @@ class CWSPipe(Pipe): | |||||
def process_from_file(self, paths=None) -> DataBundle: | def process_from_file(self, paths=None) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -1,5 +1,3 @@ | |||||
r"""undocumented""" | |||||
__all__ = [ | __all__ = [ | ||||
"MatchingBertPipe", | "MatchingBertPipe", | ||||
"RTEBertPipe", | "RTEBertPipe", | ||||
@@ -21,7 +19,7 @@ __all__ = [ | |||||
"BQCorpusPipe", | "BQCorpusPipe", | ||||
"RenamePipe", | "RenamePipe", | ||||
"GranularizePipe", | "GranularizePipe", | ||||
"MachingTruncatePipe", | |||||
"TruncateBertPipe", | |||||
] | ] | ||||
from functools import partial | from functools import partial | ||||
@@ -31,14 +29,13 @@ from .utils import get_tokenizer | |||||
from ..data_bundle import DataBundle | from ..data_bundle import DataBundle | ||||
from ..loader.matching import SNLILoader, MNLILoader, QNLILoader, RTELoader, QuoraLoader, BQCorpusLoader, CNXNLILoader, \ | from ..loader.matching import SNLILoader, MNLILoader, QNLILoader, RTELoader, QuoraLoader, BQCorpusLoader, CNXNLILoader, \ | ||||
LCQMCLoader | LCQMCLoader | ||||
# from ...core._logger import log | |||||
# from ...core.const import Const | # from ...core.const import Const | ||||
from ...core.vocabulary import Vocabulary | from ...core.vocabulary import Vocabulary | ||||
class MatchingBertPipe(Pipe): | class MatchingBertPipe(Pipe): | ||||
r""" | r""" | ||||
Matching任务的Bert pipe,输出的DataSet将包含以下的field | |||||
**Matching** 任务的 Bert pipe ,处理之后 :class:`~fastNLP.core.DataSet` 中的内容如下: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "raw_words1", "raw_words2", "target", "words", "seq_len" | :header: "raw_words1", "raw_words2", "target", "words", "seq_len" | ||||
@@ -47,29 +44,17 @@ class MatchingBertPipe(Pipe): | |||||
"This site includes a...", "The Government Executive...", 0, "[11, 12, 13,...]", 5 | "This site includes a...", "The Government Executive...", 0, "[11, 12, 13,...]", 5 | ||||
"...", "...", ., "[...]", . | "...", "...", ., "[...]", . | ||||
words列是将raw_words1(即premise), raw_words2(即hypothesis)使用"[SEP]"链接起来转换为index的。 | |||||
words列被设置为input,target列被设置为target和input(设置为input以方便在forward函数中计算loss, | |||||
如果不在forward函数中计算loss也不影响,fastNLP将根据forward函数的形参名进行传参). | |||||
dataset的print_field_meta()函数输出的各个field的被设置成input和target的情况为:: | |||||
+-------------+------------+------------+--------+-------+---------+ | |||||
| field_names | raw_words1 | raw_words2 | target | words | seq_len | | |||||
+-------------+------------+------------+--------+-------+---------+ | |||||
| is_input | False | False | False | True | True | | |||||
| is_target | False | False | True | False | False | | |||||
| ignore_type | | | False | False | False | | |||||
| pad_value | | | 0 | 0 | 0 | | |||||
+-------------+------------+------------+--------+-------+---------+ | |||||
``words`` 列是将 ``raw_words1`` (即 ``premise`` ), ``raw_words2`` (即 ``hypothesis`` )使用 ``[SEP]`` | |||||
链接起来转换为 index 的。``words`` 列被设置为 input, ``target`` 列被设置为 target 和 input (设置为 input 以 | |||||
方便在 :func:`forward` 函数中计算 loss,如果不在也不影响, **fastNLP** 将根据 :func:`forward` 函数的形参名进行 | |||||
传参)。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | """ | ||||
def __init__(self, lower=False, tokenizer: str = 'raw', num_proc: int = 0): | def __init__(self, lower=False, tokenizer: str = 'raw', num_proc: int = 0): | ||||
r""" | |||||
:param bool lower: 是否将word小写化。 | |||||
:param str tokenizer: 使用什么tokenizer来将句子切分为words. 支持spacy, raw两种。raw即使用空格拆分。 | |||||
""" | |||||
super().__init__() | super().__init__() | ||||
self.lower = bool(lower) | self.lower = bool(lower) | ||||
@@ -89,9 +74,9 @@ class MatchingBertPipe(Pipe): | |||||
dataset.apply_field(self.tokenizer, field_name=field_name, new_field_name=new_field_name, num_proc=self.num_proc) | dataset.apply_field(self.tokenizer, field_name=field_name, new_field_name=new_field_name, num_proc=self.num_proc) | ||||
return data_bundle | return data_bundle | ||||
def process(self, data_bundle): | |||||
def process(self, data_bundle: DataBundle): | |||||
r""" | r""" | ||||
输入的data_bundle中的dataset需要具有以下结构: | |||||
``data_bunlde`` 中的 :class:`~fastNLP.core.DataSet` 应该具备以下结构: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "raw_words1", "raw_words2", "target" | :header: "raw_words1", "raw_words2", "target" | ||||
@@ -100,7 +85,7 @@ class MatchingBertPipe(Pipe): | |||||
"...","..." | "...","..." | ||||
:param data_bundle: | :param data_bundle: | ||||
:return: | |||||
:return: 处理后的 ``data_bundle`` | |||||
""" | """ | ||||
for dataset in data_bundle.datasets.values(): | for dataset in data_bundle.datasets.values(): | ||||
if dataset.has_field('target'): | if dataset.has_field('target'): | ||||
@@ -164,9 +149,16 @@ class MatchingBertPipe(Pipe): | |||||
class RTEBertPipe(MatchingBertPipe): | class RTEBertPipe(MatchingBertPipe): | ||||
""" | |||||
处理 **RTE** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -176,9 +168,16 @@ class RTEBertPipe(MatchingBertPipe): | |||||
class SNLIBertPipe(MatchingBertPipe): | class SNLIBertPipe(MatchingBertPipe): | ||||
""" | |||||
处理 **SNLI** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -188,9 +187,16 @@ class SNLIBertPipe(MatchingBertPipe): | |||||
class QuoraBertPipe(MatchingBertPipe): | class QuoraBertPipe(MatchingBertPipe): | ||||
""" | |||||
处理 **Quora** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths): | def process_from_file(self, paths): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -200,9 +206,16 @@ class QuoraBertPipe(MatchingBertPipe): | |||||
class QNLIBertPipe(MatchingBertPipe): | class QNLIBertPipe(MatchingBertPipe): | ||||
""" | |||||
处理 **QNNLI** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -212,9 +225,16 @@ class QNLIBertPipe(MatchingBertPipe): | |||||
class MNLIBertPipe(MatchingBertPipe): | class MNLIBertPipe(MatchingBertPipe): | ||||
""" | |||||
处理 **MNLI** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -225,7 +245,7 @@ class MNLIBertPipe(MatchingBertPipe): | |||||
class MatchingPipe(Pipe): | class MatchingPipe(Pipe): | ||||
r""" | r""" | ||||
Matching任务的Pipe。输出的DataSet将包含以下的field | |||||
**Matching** 任务的 Pipe,处理之后 :class:`~fastNLP.core.DataSet` 中的内容如下: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "raw_words1", "raw_words2", "target", "words1", "words2", "seq_len1", "seq_len2" | :header: "raw_words1", "raw_words2", "target", "words1", "words2", "seq_len1", "seq_len2" | ||||
@@ -234,21 +254,14 @@ class MatchingPipe(Pipe): | |||||
"This site includes a...", "The Government Executive...", 0, "[11, 12, 13,...]", "[2, 7, ...]", 6, 7 | "This site includes a...", "The Government Executive...", 0, "[11, 12, 13,...]", "[2, 7, ...]", 6, 7 | ||||
"...", "...", ., "[...]", "[...]", ., . | "...", "...", ., "[...]", "[...]", ., . | ||||
words1是premise,words2是hypothesis。其中words1,words2,seq_len1,seq_len2被设置为input;target被设置为target | |||||
和input(设置为input以方便在forward函数中计算loss,如果不在forward函数中计算loss也不影响,fastNLP将根据forward函数 | |||||
的形参名进行传参)。 | |||||
dataset的print_field_meta()函数输出的各个field的被设置成input和target的情况为:: | |||||
+-------------+------------+------------+--------+--------+--------+----------+----------+ | |||||
| field_names | raw_words1 | raw_words2 | target | words1 | words2 | seq_len1 | seq_len2 | | |||||
+-------------+------------+------------+--------+--------+--------+----------+----------+ | |||||
| is_input | False | False | False | True | True | True | True | | |||||
| is_target | False | False | True | False | False | False | False | | |||||
| ignore_type | | | False | False | False | False | False | | |||||
| pad_value | | | 0 | 0 | 0 | 0 | 0 | | |||||
+-------------+------------+------------+--------+--------+--------+----------+----------+ | |||||
``words1`` 是 ``premise`` ,``words2`` 是 ``hypothesis`` 。其中 ``words1`` , ``words2`` , ``seq_len1``, ``seq_len2`` | |||||
被设置为 input; ``target`` 列被设置为 target 和 input (设置为 input 以 | |||||
方便在 :func:`forward` 函数中计算 loss,如果不在也不影响, **fastNLP** 将根据 :func:`forward` 函数的形参名进行 | |||||
传参)。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | """ | ||||
def __init__(self, lower=False, tokenizer: str = 'raw', num_proc: int = 0): | def __init__(self, lower=False, tokenizer: str = 'raw', num_proc: int = 0): | ||||
@@ -276,9 +289,9 @@ class MatchingPipe(Pipe): | |||||
dataset.apply_field(self.tokenizer, field_name=field_name, new_field_name=new_field_name, num_proc=self.num_proc) | dataset.apply_field(self.tokenizer, field_name=field_name, new_field_name=new_field_name, num_proc=self.num_proc) | ||||
return data_bundle | return data_bundle | ||||
def process(self, data_bundle): | |||||
def process(self, data_bundle: DataBundle): | |||||
r""" | r""" | ||||
接受的DataBundle中的DataSet应该具有以下的field, target列可以没有 | |||||
``data_bunlde`` 中的 :class:`~fastNLP.core.DataSet` 应该具备以下结构,可以没有 ``target`` 列: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "raw_words1", "raw_words2", "target" | :header: "raw_words1", "raw_words2", "target" | ||||
@@ -287,8 +300,8 @@ class MatchingPipe(Pipe): | |||||
"This site includes a...", "The Government Executive...", "not_entailment" | "This site includes a...", "The Government Executive...", "not_entailment" | ||||
"...", "..." | "...", "..." | ||||
:param ~fastNLP.DataBundle data_bundle: 通过loader读取得到的data_bundle,里面包含了数据集的原始数据内容 | |||||
:return: data_bundle | |||||
:param data_bundle: | |||||
:return: 处理后的 ``data_bundle`` | |||||
""" | """ | ||||
data_bundle = self._tokenize(data_bundle, ['raw_words1', 'raw_words2'], | data_bundle = self._tokenize(data_bundle, ['raw_words1', 'raw_words2'], | ||||
['words1', 'words2']) | ['words1', 'words2']) | ||||
@@ -337,9 +350,16 @@ class MatchingPipe(Pipe): | |||||
class RTEPipe(MatchingPipe): | class RTEPipe(MatchingPipe): | ||||
""" | |||||
处理 **RTE** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -349,9 +369,16 @@ class RTEPipe(MatchingPipe): | |||||
class SNLIPipe(MatchingPipe): | class SNLIPipe(MatchingPipe): | ||||
""" | |||||
处理 **SNLI** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -361,9 +388,16 @@ class SNLIPipe(MatchingPipe): | |||||
class QuoraPipe(MatchingPipe): | class QuoraPipe(MatchingPipe): | ||||
""" | |||||
处理 **Quora** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths): | def process_from_file(self, paths): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -373,9 +407,16 @@ class QuoraPipe(MatchingPipe): | |||||
class QNLIPipe(MatchingPipe): | class QNLIPipe(MatchingPipe): | ||||
""" | |||||
处理 **QNLI** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -385,9 +426,16 @@ class QNLIPipe(MatchingPipe): | |||||
class MNLIPipe(MatchingPipe): | class MNLIPipe(MatchingPipe): | ||||
""" | |||||
处理 **MNLI** 数据。 | |||||
:param lower: 是否对输入进行小写化。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['spacy', 'raw']`` 。``'raw'`` 表示使用空格作为切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -397,12 +445,18 @@ class MNLIPipe(MatchingPipe): | |||||
class LCQMCPipe(MatchingPipe): | class LCQMCPipe(MatchingPipe): | ||||
def __init__(self, tokenizer='cn=char', num_proc=0): | |||||
""" | |||||
处理 **LCQMC** 数据。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['cn-char']`` ,按字分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, tokenizer='cn-char', num_proc=0): | |||||
super().__init__(tokenizer=tokenizer, num_proc=num_proc) | super().__init__(tokenizer=tokenizer, num_proc=num_proc) | ||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -415,12 +469,18 @@ class LCQMCPipe(MatchingPipe): | |||||
class CNXNLIPipe(MatchingPipe): | class CNXNLIPipe(MatchingPipe): | ||||
""" | |||||
处理 **XNLI Chinese** 数据。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['cn-char']`` ,按字分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, tokenizer='cn-char', num_proc=0): | def __init__(self, tokenizer='cn-char', num_proc=0): | ||||
super().__init__(tokenizer=tokenizer, num_proc=num_proc) | super().__init__(tokenizer=tokenizer, num_proc=num_proc) | ||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -434,12 +494,18 @@ class CNXNLIPipe(MatchingPipe): | |||||
class BQCorpusPipe(MatchingPipe): | class BQCorpusPipe(MatchingPipe): | ||||
""" | |||||
处理 **BQ Corpus** 数据。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['cn-char']`` ,按字分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, tokenizer='cn-char', num_proc=0): | def __init__(self, tokenizer='cn-char', num_proc=0): | ||||
super().__init__(tokenizer=tokenizer, num_proc=num_proc) | super().__init__(tokenizer=tokenizer, num_proc=num_proc) | ||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -452,6 +518,13 @@ class BQCorpusPipe(MatchingPipe): | |||||
class RenamePipe(Pipe): | class RenamePipe(Pipe): | ||||
""" | |||||
重命名数据集的 Pipe ,经过处理后会将数据集中的 ``chars``, ``raw_chars1`` 等列重命名为 ``words``, | |||||
``raw_words1``,反之亦然。 | |||||
:param task: 任务类型,可选 ``['cn-nli', 'cn-nli-bert']`` 。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, task='cn-nli', num_proc=0): | def __init__(self, task='cn-nli', num_proc=0): | ||||
super().__init__() | super().__init__() | ||||
self.task = task | self.task = task | ||||
@@ -459,7 +532,7 @@ class RenamePipe(Pipe): | |||||
def process(self, data_bundle: DataBundle): # rename field name for Chinese Matching dataset | def process(self, data_bundle: DataBundle): # rename field name for Chinese Matching dataset | ||||
""" | """ | ||||
:param data_bundle: | |||||
:return: 处理后的 ``data_bundle`` | :return: 处理后的 ``data_bundle`` | ||||
""" | """ | ||||
if (self.task == 'cn-nli'): | if (self.task == 'cn-nli'): | ||||
@@ -497,6 +570,16 @@ class RenamePipe(Pipe): | |||||
class GranularizePipe(Pipe): | class GranularizePipe(Pipe): | ||||
""" | |||||
将数据集中 ``target`` 列中的 tag 按照一定的映射进行重命名,并丢弃不在映射中的 tag。 | |||||
:param task: 任务类型,目前仅支持 ``['XNLI']``。 | |||||
- ``'XNLI'`` -- 将 ``neutral``, ``entailment``, ``contradictory``, ``contradiction`` 分别 | |||||
映射为 0, 1, 2, 3; | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, task=None, num_proc=0): | def __init__(self, task=None, num_proc=0): | ||||
super().__init__() | super().__init__() | ||||
self.task = task | self.task = task | ||||
@@ -520,7 +603,7 @@ class GranularizePipe(Pipe): | |||||
def process(self, data_bundle: DataBundle): | def process(self, data_bundle: DataBundle): | ||||
""" | """ | ||||
:param data_bundle: | |||||
:return: 处理后的 ``data_bundle`` | :return: 处理后的 ``data_bundle`` | ||||
""" | """ | ||||
task_tag_dict = { | task_tag_dict = { | ||||
@@ -532,28 +615,19 @@ class GranularizePipe(Pipe): | |||||
raise RuntimeError(f"Only support {task_tag_dict.keys()} task_tag_map.") | raise RuntimeError(f"Only support {task_tag_dict.keys()} task_tag_map.") | ||||
return data_bundle | return data_bundle | ||||
class MachingTruncatePipe(Pipe): # truncate sentence for bert, modify seq_len | |||||
def __init__(self): | |||||
super().__init__() | |||||
def process(self, data_bundle: DataBundle): | |||||
""" | |||||
:return: None | |||||
""" | |||||
for name, dataset in data_bundle.datasets.items(): | |||||
pass | |||||
return None | |||||
class LCQMCBertPipe(MatchingBertPipe): | class LCQMCBertPipe(MatchingBertPipe): | ||||
def __init__(self, tokenizer='cn=char', num_proc=0): | |||||
""" | |||||
处理 **LCQMC** 数据 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['cn-char']`` ,按字分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, tokenizer='cn-char', num_proc=0): | |||||
super().__init__(tokenizer=tokenizer, num_proc=num_proc) | super().__init__(tokenizer=tokenizer, num_proc=num_proc) | ||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -567,12 +641,18 @@ class LCQMCBertPipe(MatchingBertPipe): | |||||
class BQCorpusBertPipe(MatchingBertPipe): | class BQCorpusBertPipe(MatchingBertPipe): | ||||
""" | |||||
处理 **BQ Corpus** 数据。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['cn-char']`` ,按字分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, tokenizer='cn-char', num_proc=0): | def __init__(self, tokenizer='cn-char', num_proc=0): | ||||
super().__init__(tokenizer=tokenizer, num_proc=num_proc) | super().__init__(tokenizer=tokenizer, num_proc=num_proc) | ||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -586,12 +666,18 @@ class BQCorpusBertPipe(MatchingBertPipe): | |||||
class CNXNLIBertPipe(MatchingBertPipe): | class CNXNLIBertPipe(MatchingBertPipe): | ||||
""" | |||||
处理 **XNLI Chinese** 数据。 | |||||
:param tokenizer: 使用哪种 tokenize 方式将数据切成单词。支持 ``['cn-char']`` ,按字分词。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, tokenizer='cn-char', num_proc=0): | def __init__(self, tokenizer='cn-char', num_proc=0): | ||||
super().__init__(tokenizer=tokenizer, num_proc=num_proc) | super().__init__(tokenizer=tokenizer, num_proc=num_proc) | ||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -606,6 +692,13 @@ class CNXNLIBertPipe(MatchingBertPipe): | |||||
class TruncateBertPipe(Pipe): | class TruncateBertPipe(Pipe): | ||||
""" | |||||
对数据进行截断的 **Pipe** 。该 **Pipe** 将会寻找每条数据中的第一个分隔符 ``[SEP]`` ,对其前后的数据分别进行截断。 | |||||
对于中文任务会将前后的文本分别截断至长度 **250** ,对于英文任务会分别截断至 **215** 。 | |||||
:param task: 任务类型,可选 ``['cn', 'en']`` ,分别表示 **中文任务** 和 **英文任务** 。 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | |||||
def __init__(self, task='cn', num_proc=0): | def __init__(self, task='cn', num_proc=0): | ||||
super().__init__() | super().__init__() | ||||
self.task = task | self.task = task | ||||
@@ -631,7 +724,7 @@ class TruncateBertPipe(Pipe): | |||||
def process(self, data_bundle: DataBundle) -> DataBundle: | def process(self, data_bundle: DataBundle) -> DataBundle: | ||||
""" | """ | ||||
:param data_bundle: | |||||
:return: 处理后的 ``data_bundle`` | :return: 处理后的 ``data_bundle`` | ||||
""" | """ | ||||
for name in data_bundle.datasets.keys(): | for name in data_bundle.datasets.keys(): | ||||
@@ -1,5 +1,3 @@ | |||||
r"""undocumented""" | |||||
__all__ = [ | __all__ = [ | ||||
"Pipe", | "Pipe", | ||||
] | ] | ||||
@@ -9,31 +7,36 @@ from fastNLP.io.data_bundle import DataBundle | |||||
class Pipe: | class Pipe: | ||||
r""" | r""" | ||||
Pipe是fastNLP中用于处理DataBundle的类,但实际是处理DataBundle中的DataSet。所有Pipe都会在其process()函数的文档中指出该Pipe可处理的DataSet应该具备怎样的格式;在Pipe | |||||
文档中说明该Pipe返回后DataSet的格式以及其field的信息;以及新增的Vocabulary的信息。 | |||||
:class:`Pipe` 是 **fastNLP** 中用于处理 :class:`~fastNLP.io.DataBundle` 的类,但实际是处理其中的 :class:`~fastNLP.core.DataSet` 。 | |||||
所有 ``Pipe`` 都会在其 :meth:`process` 函数的文档中指出该 ``Pipe`` 可处理的 :class:`~fastNLP.core.DataSet` 应该具备怎样的格式;在 | |||||
``Pipe`` 文档中说明该 ``Pipe`` 返回后 :class:`~fastNLP.core.DataSet` 的格式以及其 field 的信息;以及新增的 :class:`~fastNLP.core.Vocabulary` | |||||
的信息。 | |||||
一般情况下Pipe处理包含以下的几个过程,(1)将raw_words或raw_chars进行tokenize以切分成不同的词或字; | |||||
(2) 再建立词或字的 :class:`~fastNLP.Vocabulary` , 并将词或字转换为index; (3)将target列建立词表并将target列转为index; | |||||
一般情况下 **Pipe** 处理包含以下的几个过程: | |||||
1. 将 ``raw_words`` 或 ``raw_chars`` 进行 tokenize 以切分成不同的词或字; | |||||
2. 建立词或字的 :class:`~fastNLP.core.Vocabulary` ,并将词或字转换为 index; | |||||
3. 将 ``target`` 列建立词表并将 ``target`` 列转为 index; | |||||
Pipe中提供了两个方法 | |||||
**Pipe** 中提供了两个方法: | |||||
-process()函数,输入为DataBundle | |||||
-process_from_file()函数,输入为对应Loader的load函数可接受的类型。 | |||||
- :meth:`process` 函数,输入为 :class:`~fastNLP.io.DataBundle` | |||||
- :meth:`process_from_file` 函数,输入为对应 :meth:`fastNLP.io.Loader.load` 函数可接受的类型。 | |||||
""" | """ | ||||
def process(self, data_bundle: DataBundle) -> DataBundle: | def process(self, data_bundle: DataBundle) -> DataBundle: | ||||
r""" | r""" | ||||
对输入的DataBundle进行处理,然后返回该DataBundle。 | |||||
对输入的 ``data_bundle`` 进行处理,然后返回该 ``data_bundle`` | |||||
:param ~fastNLP.DataBundle data_bundle: 需要处理的DataBundle对象 | |||||
:param data_bundle: | |||||
:return: 处理后的 ``data_bundle`` | :return: 处理后的 ``data_bundle`` | ||||
""" | """ | ||||
raise NotImplementedError | raise NotImplementedError | ||||
def process_from_file(self, paths: str) -> DataBundle: | def process_from_file(self, paths: str) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -1,5 +1,5 @@ | |||||
r""" | r""" | ||||
本文件中的Pipe主要用于处理问答任务的数据。 | |||||
本文件中的 **Pipe** 主要用于处理问答任务的数据。 | |||||
""" | """ | ||||
@@ -78,32 +78,20 @@ def _concat_clip(data_bundle, max_len, concat_field_name='raw_chars'): | |||||
class CMRC2018BertPipe(Pipe): | class CMRC2018BertPipe(Pipe): | ||||
r""" | r""" | ||||
处理之后的DataSet将新增以下的field(传入的field仍然保留) | |||||
处理 **CMRC2018** 的数据,处理之后 :class:`~fastNLP.core.DataSet` 中新增的内容如下(原有的 field 仍然保留): | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "context_len", "raw_chars", "target_start", "target_end", "chars" | :header: "context_len", "raw_chars", "target_start", "target_end", "chars" | ||||
492, ['范', '廷', '颂... ], 30, 34, "[21, 25, ...]" | |||||
491, ['范', '廷', '颂... ], 41, 61, "[21, 25, ...]" | |||||
492, "['范', '廷', '颂... ]", 30, 34, "[21, 25, ...]" | |||||
491, "['范', '廷', '颂... ]", 41, 61, "[21, 25, ...]" | |||||
".", "...", "...","...", "..." | ".", "...", "...","...", "..." | ||||
raw_words列是context与question拼起来的结果(连接的地方加入了[SEP]),words是转为index的值, target_start为答案start的index,target_end为答案end的index | |||||
(闭区间);context_len指示的是words列中context的长度。 | |||||
其中各列的meta信息如下: | |||||
.. code:: | |||||
+-------------+-------------+-----------+--------------+------------+-------+---------+ | |||||
| field_names | context_len | raw_chars | target_start | target_end | chars | answers | | |||||
+-------------+-------------+-----------+--------------+------------+-------+---------| | |||||
| is_input | False | False | False | False | True | False | | |||||
| is_target | True | True | True | True | False | True | | |||||
| ignore_type | False | True | False | False | False | True | | |||||
| pad_value | 0 | 0 | 0 | 0 | 0 | 0 | | |||||
+-------------+-------------+-----------+--------------+------------+-------+---------+ | |||||
``raw_chars`` 列是 ``context`` 与 ``question`` 拼起来的结果(连接的地方加入了 ``[SEP]`` ), ``chars`` 是转为 | |||||
index 的值, ``target_start`` 为答案开始的位置, ``target_end`` 为答案结束的位置(闭区间); ``context_len`` | |||||
指示的是 ``chars`` 列中 context 的长度。 | |||||
:param max_len: | |||||
""" | """ | ||||
def __init__(self, max_len=510): | def __init__(self, max_len=510): | ||||
@@ -112,10 +100,10 @@ class CMRC2018BertPipe(Pipe): | |||||
def process(self, data_bundle: DataBundle) -> DataBundle: | def process(self, data_bundle: DataBundle) -> DataBundle: | ||||
r""" | r""" | ||||
传入的DataSet应该具备以下的field | |||||
``data_bunlde`` 中的 :class:`~fastNLP.core.DataSet` 应该包含 ``raw_words`` : | |||||
.. csv-table:: | .. csv-table:: | ||||
:header:"title", "context", "question", "answers", "answer_starts", "id" | |||||
:header: "title", "context", "question", "answers", "answer_starts", "id" | |||||
"范廷颂", "范廷颂枢机(,),圣名保禄·若瑟()...", "范廷颂是什么时候被任为主教的?", ["1963年"], ["30"], "TRAIN_186_QUERY_0" | "范廷颂", "范廷颂枢机(,),圣名保禄·若瑟()...", "范廷颂是什么时候被任为主教的?", ["1963年"], ["30"], "TRAIN_186_QUERY_0" | ||||
"范廷颂", "范廷颂枢机(,),圣名保禄·若瑟()...", "1990年,范廷颂担任什么职务?", ["1990年被擢升为天..."], ["41"],"TRAIN_186_QUERY_1" | "范廷颂", "范廷颂枢机(,),圣名保禄·若瑟()...", "1990年,范廷颂担任什么职务?", ["1990年被擢升为天..."], ["41"],"TRAIN_186_QUERY_1" | ||||
@@ -139,7 +127,7 @@ class CMRC2018BertPipe(Pipe): | |||||
def process_from_file(self, paths=None) -> DataBundle: | def process_from_file(self, paths=None) -> DataBundle: | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -1,4 +1,3 @@ | |||||
r"""undocumented""" | |||||
import os | import os | ||||
import numpy as np | import numpy as np | ||||
from functools import partial | from functools import partial | ||||
@@ -20,21 +19,23 @@ TAG_UNK = "X" | |||||
class ExtCNNDMPipe(Pipe): | class ExtCNNDMPipe(Pipe): | ||||
r""" | r""" | ||||
对CNN/Daily Mail数据进行适用于extractive summarization task的预处理,预处理之后的数据,具备以下结构: | |||||
对 **CNN/Daily Mail** 数据进行适用于 ``extractive summarization task`` 的预处理,预处理之后的数据具备以下结构: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "text", "summary", "label", "publication", "text_wd", "words", "seq_len", "target" | :header: "text", "summary", "label", "publication", "text_wd", "words", "seq_len", "target" | ||||
"['I got new tires from them and... ','...']", "['The new tires...','...']", "[0, 1]", "cnndm", "[['I','got',...'.'],...,['...']]", "[[54,89,...,5],...,[9,43,..,0]]", "[1,1,...,0]", "[0,1,...,0]" | |||||
"['Don't waste your time. We had two...','...']", "['Time is precious','...']", "[1]", "cnndm", "[['Don't','waste',...,'.'],...,['...']]", "[[5234,653,...,5],...,[87,234,..,0]]", "[1,1,...,0]", "[1,1,...,0]" | |||||
"['...']", "['...']", "[]", "cnndm", "[[''],...,['']]", "[[],...,[]]", "[]", "[]" | |||||
:param vocab_size: 词表大小 | |||||
:param sent_max_len: 句子最大长度,不足的句子将 padding ,超出的将截断 | |||||
:param doc_max_timesteps: 文章最多句子个数,不足的将 padding,超出的将截断 | |||||
:param vocab_path: 外部词表路径 | |||||
:param domain: 是否需要建立 domain 词表 | |||||
:param num_proc: 处理数据时使用的进程数目。 | |||||
""" | """ | ||||
def __init__(self, vocab_size, sent_max_len, doc_max_timesteps, vocab_path=None, domain=False, num_proc=0): | |||||
r""" | |||||
:param vocab_size: int, 词表大小 | |||||
:param sent_max_len: int, 句子最大长度,不足的句子将padding,超出的将截断 | |||||
:param doc_max_timesteps: int, 文章最多句子个数,不足的将padding,超出的将截断 | |||||
:param vocab_path: str, 外部词表路径 | |||||
:param domain: bool, 是否需要建立domain词表 | |||||
""" | |||||
def __init__(self, vocab_size: int, sent_max_len: int, doc_max_timesteps: int, vocab_path=None, domain=False, num_proc=0): | |||||
self.vocab_size = vocab_size | self.vocab_size = vocab_size | ||||
self.vocab_path = vocab_path | self.vocab_path = vocab_path | ||||
self.sent_max_len = sent_max_len | self.sent_max_len = sent_max_len | ||||
@@ -44,23 +45,24 @@ class ExtCNNDMPipe(Pipe): | |||||
def process(self, data_bundle: DataBundle): | def process(self, data_bundle: DataBundle): | ||||
r""" | r""" | ||||
传入的DataSet应该具备如下的结构 | |||||
``data_bunlde`` 中的 :class:`~fastNLP.core.DataSet` 应该具备以下结构: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "text", "summary", "label", "publication" | :header: "text", "summary", "label", "publication" | ||||
["I got new tires from them and... ","..."], ["The new tires...","..."], [0, 1], "cnndm" | |||||
["Don't waste your time. We had two...","..."], ["Time is precious","..."], [1], "cnndm" | |||||
["..."], ["..."], [], "cnndm" | |||||
"['I got new tires from them and... ','...']", "['The new tires...','...']", "[0, 1]", "cnndm" | |||||
"['Don't waste your time. We had two...','...']", "['Time is precious','...']", "[1]", "cnndm" | |||||
"['...']", ['...']", "[]", "cnndm" | |||||
:param data_bundle: | :param data_bundle: | ||||
:return: 处理后的 ``data_bundle`` | |||||
:return: 处理后的 ``data_bundle``,新增以下列: | |||||
.. csv-table:: | .. csv-table:: | ||||
:header: "text_wd", "words", "seq_len", "target" | :header: "text_wd", "words", "seq_len", "target" | ||||
[["I","got",..."."],...,["..."]], [[54,89,...,5],...,[9,43,..,0]], [1,1,...,0], [0,1,...,0] | |||||
[["Don't","waste",...,"."],...,["..."]], [[5234,653,...,5],...,[87,234,..,0]], [1,1,...,0], [1,1,...,0] | |||||
[[""],...,[""]], [[],...,[]], [], [] | |||||
"[['I','got',...'.'],...,['...']]", "[[54,89,...,5],...,[9,43,..,0]]", "[1,1,...,0]", "[0,1,...,0]" | |||||
"[['Don't','waste',...,'.'],...,['...']]", "[[5234,653,...,5],...,[87,234,..,0]]", "[1,1,...,0]", "[1,1,...,0]" | |||||
"[[''],...,['']]", "[[],...,[]]", "[]", "[]" | |||||
""" | """ | ||||
if self.vocab_path is None: | if self.vocab_path is None: | ||||
@@ -117,7 +119,7 @@ class ExtCNNDMPipe(Pipe): | |||||
def process_from_file(self, paths=None): | def process_from_file(self, paths=None): | ||||
r""" | r""" | ||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load()` | |||||
传入文件路径,生成处理好的 :class:`~fastNLP.io.DataBundle` 对象。``paths`` 支持的路径形式可以参考 :meth:`fastNLP.io.Loader.load` | |||||
:param paths: | :param paths: | ||||
:return: | :return: | ||||
@@ -1,5 +1,3 @@ | |||||
r"""undocumented""" | |||||
__all__ = [ | __all__ = [ | ||||
"iob2", | "iob2", | ||||
"iob2bioes", | "iob2bioes", | ||||
@@ -17,10 +15,10 @@ from pkg_resources import parse_version | |||||
def iob2(tags: List[str]) -> List[str]: | def iob2(tags: List[str]) -> List[str]: | ||||
r""" | r""" | ||||
检查数据是否是合法的IOB数据,如果是IOB1会被自动转换为IOB2。两种格式的区别见 | |||||
检查数据是否是合法的 ``IOB`` 数据,如果是 ``IOB1`` 会被自动转换为 ``IOB2`` 。两种格式的区别见 | |||||
https://datascience.stackexchange.com/questions/37824/difference-between-iob-and-iob2-format | https://datascience.stackexchange.com/questions/37824/difference-between-iob-and-iob2-format | ||||
:param tags: 需要转换的tags | |||||
:param tags: 需要转换的 tags | |||||
""" | """ | ||||
for i, tag in enumerate(tags): | for i, tag in enumerate(tags): | ||||
if tag == "O": | if tag == "O": | ||||
@@ -41,8 +39,9 @@ def iob2(tags: List[str]) -> List[str]: | |||||
def iob2bioes(tags: List[str]) -> List[str]: | def iob2bioes(tags: List[str]) -> List[str]: | ||||
r""" | r""" | ||||
将iob的tag转换为bioes编码 | |||||
:param tags: | |||||
将 ``iob`` 的 tag 转换为 ``bioes`` 编码 | |||||
:param tags: 需要转换的 tags | |||||
:return: | :return: | ||||
""" | """ | ||||
new_tags = [] | new_tags = [] | ||||
@@ -69,9 +68,10 @@ def iob2bioes(tags: List[str]) -> List[str]: | |||||
def get_tokenizer(tokenize_method: str, lang='en'): | def get_tokenizer(tokenize_method: str, lang='en'): | ||||
r""" | r""" | ||||
:param str tokenize_method: 获取tokenzier方法 | |||||
:param str lang: 语言,当前仅支持en | |||||
:return: tokenize函数 | |||||
:param tokenize_method: 获取 tokenzier 方法,支持 ``['spacy', 'raw', 'cn-char']`` 。``'raw'`` 表示使用空格作为切分, ``'cn-char'`` 表示 | |||||
按字符切分,``'spacy'`` 则使用 :mod:`spacy` 库进行分词。 | |||||
:param lang: :mod:`spacy` 使用的语言,当前仅支持 ``'en'`` 。 | |||||
:return: tokenize 函数 | |||||
""" | """ | ||||
tokenizer_dict = { | tokenizer_dict = { | ||||
'spacy': None, | 'spacy': None, | ||||