提交 2a9648b6 编写于 作者: K kinghuin 提交者: wuzewu

Support 1.4 (#234)

* optimize nltk
上级 f6a20bbd
...@@ -33,20 +33,27 @@ inputs, outputs, program = module.context(trainable=True, max_seq_len=128) ...@@ -33,20 +33,27 @@ inputs, outputs, program = module.context(trainable=True, max_seq_len=128)
``` ```
其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。 其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。
如果想尝试BERT模型,只需要更换Module中的`name`参数即可. PaddleHub还提供BERT等模型可供选择, 模型对应的加载示例如下:
PaddleHub还提供BERT模型可供选择, 所有模型对应的加载示例如下:
模型名 | PaddleHub Module 模型名 | PaddleHub Module
---------------------------------- | :------: ---------------------------------- | :------:
ERNIE, Chinese | `hub.Module(name='ernie')` ERNIE, Chinese | `hub.Module(name='ernie')`
ERNIE tiny, Chinese | `hub.Module(name='ernie_tiny')`
ERNIE 2.0 Base, English | `hub.Module(name='ernie_v2_eng_base')`
ERNIE 2.0 Large, English | `hub.Module(name='ernie_v2_eng_large')`
BERT-Base, Uncased | `hub.Module(name='bert_uncased_L-12_H-768_A-12')` BERT-Base, Uncased | `hub.Module(name='bert_uncased_L-12_H-768_A-12')`
BERT-Large, Uncased | `hub.Module(name='bert_uncased_L-24_H-1024_A-16')` BERT-Large, Uncased | `hub.Module(name='bert_uncased_L-24_H-1024_A-16')`
BERT-Base, Cased | `hub.Module(name='bert_cased_L-12_H-768_A-12')` BERT-Base, Cased | `hub.Module(name='bert_cased_L-12_H-768_A-12')`
BERT-Large, Cased | `hub.Module(name='bert_cased_L-24_H-1024_A-16')` BERT-Large, Cased | `hub.Module(name='bert_cased_L-24_H-1024_A-16')`
BERT-Base, Multilingual Cased | `hub.Module(nane='bert_multi_cased_L-12_H-768_A-12')` BERT-Base, Multilingual Cased | `hub.Module(nane='bert_multi_cased_L-12_H-768_A-12')`
BERT-Base, Chinese | `hub.Module(name='bert_chinese_L-12_H-768_A-12')` BERT-Base, Chinese | `hub.Module(name='bert_chinese_L-12_H-768_A-12')`
BERT-wwm, Chinese | `hub.Module(name='bert_wwm_chinese_L-12_H-768_A-12')`
BERT-wwm-ext, Chinese | `hub.Module(name='bert_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-24_H-1024_A-16')`
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可.
```python ```python
# 更换name参数即可无缝切换BERT中文模型, 代码示例如下 # 更换name参数即可无缝切换BERT中文模型, 代码示例如下
module = hub.Module(name="bert_chinese_L-12_H-768_A-12") module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
......
...@@ -31,11 +31,37 @@ ...@@ -31,11 +31,37 @@
### Step1: 加载预训练模型 ### Step1: 加载预训练模型
```python ```python
module = hub.Module(name="bert_uncased_L-12_H-768_A-12") module = hub.Module(name="ernie")
inputs, outputs, program = module.context(trainable=True, max_seq_len=128) inputs, outputs, program = module.context(trainable=True, max_seq_len=128)
``` ```
其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。 其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。
PaddleHub还提供BERT等模型可供选择, 模型对应的加载示例如下:
模型名 | PaddleHub Module
---------------------------------- | :------:
ERNIE, Chinese | `hub.Module(name='ernie')`
ERNIE tiny, Chinese | `hub.Module(name='ernie_tiny')`
ERNIE 2.0 Base, English | `hub.Module(name='ernie_v2_eng_base')`
ERNIE 2.0 Large, English | `hub.Module(name='ernie_v2_eng_large')`
BERT-Base, Uncased | `hub.Module(name='bert_uncased_L-12_H-768_A-12')`
BERT-Large, Uncased | `hub.Module(name='bert_uncased_L-24_H-1024_A-16')`
BERT-Base, Cased | `hub.Module(name='bert_cased_L-12_H-768_A-12')`
BERT-Large, Cased | `hub.Module(name='bert_cased_L-24_H-1024_A-16')`
BERT-Base, Multilingual Cased | `hub.Module(nane='bert_multi_cased_L-12_H-768_A-12')`
BERT-Base, Chinese | `hub.Module(name='bert_chinese_L-12_H-768_A-12')`
BERT-wwm, Chinese | `hub.Module(name='bert_wwm_chinese_L-12_H-768_A-12')`
BERT-wwm-ext, Chinese | `hub.Module(name='bert_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-24_H-1024_A-16')`
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可.
```python
# 更换name参数即可无缝切换BERT中文模型, 代码示例如下
module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
```
### Step2: 准备数据集并使用RegressionReader读取数据 ### Step2: 准备数据集并使用RegressionReader读取数据
```python ```python
dataset = hub.dataset.GLUE("STS-B") dataset = hub.dataset.GLUE("STS-B")
......
...@@ -34,15 +34,27 @@ inputs, outputs, program = module.context(trainable=True, max_seq_len=128) ...@@ -34,15 +34,27 @@ inputs, outputs, program = module.context(trainable=True, max_seq_len=128)
``` ```
其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。 其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。
如果想尝试BERT模型,只需要更换Module中的`name`参数即可. PaddleHub还提供BERT等模型可供选择, 模型对应的加载示例如下:
PaddleHub还提供BERT模型可供选择, 所有模型对应的加载示例如下:
模型名 | PaddleHub Module 模型名 | PaddleHub Module
---------------------------------- | :------: ---------------------------------- | :------:
ERNIE, Chinese | `hub.Module(name='ernie')` ERNIE, Chinese | `hub.Module(name='ernie')`
ERNIE tiny, Chinese | `hub.Module(name='ernie_tiny')`
ERNIE 2.0 Base, English | `hub.Module(name='ernie_v2_eng_base')`
ERNIE 2.0 Large, English | `hub.Module(name='ernie_v2_eng_large')`
BERT-Base, Uncased | `hub.Module(name='bert_uncased_L-12_H-768_A-12')`
BERT-Large, Uncased | `hub.Module(name='bert_uncased_L-24_H-1024_A-16')`
BERT-Base, Cased | `hub.Module(name='bert_cased_L-12_H-768_A-12')`
BERT-Large, Cased | `hub.Module(name='bert_cased_L-24_H-1024_A-16')`
BERT-Base, Multilingual Cased | `hub.Module(nane='bert_multi_cased_L-12_H-768_A-12')`
BERT-Base, Chinese | `hub.Module(name='bert_chinese_L-12_H-768_A-12')` BERT-Base, Chinese | `hub.Module(name='bert_chinese_L-12_H-768_A-12')`
BERT-wwm, Chinese | `hub.Module(name='bert_wwm_chinese_L-12_H-768_A-12')`
BERT-wwm-ext, Chinese | `hub.Module(name='bert_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-24_H-1024_A-16')`
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可.
```python ```python
# 更换name参数即可无缝切换BERT中文模型, 代码示例如下 # 更换name参数即可无缝切换BERT中文模型, 代码示例如下
module = hub.Module(name="bert_chinese_L-12_H-768_A-12") module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
...@@ -54,7 +66,9 @@ dataset = hub.dataset.MSRA_NER() ...@@ -54,7 +66,9 @@ dataset = hub.dataset.MSRA_NER()
reader = hub.reader.SequenceLabelReader( reader = hub.reader.SequenceLabelReader(
dataset=dataset, dataset=dataset,
vocab_path=module.get_vocab_path(), vocab_path=module.get_vocab_path(),
max_seq_len=128) max_seq_len=128,
sp_model_path=module.get_spm_path(),
word_dict_path=module.get_word_dict_path())
``` ```
其中数据集的准备代码可以参考 [msra_ner.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/msra_ner.py) 其中数据集的准备代码可以参考 [msra_ner.py](https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.2/paddlehub/dataset/msra_ner.py)
...@@ -65,6 +79,10 @@ reader = hub.reader.SequenceLabelReader( ...@@ -65,6 +79,10 @@ reader = hub.reader.SequenceLabelReader(
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
`module.sp_model_path` 若module为ernie_tiny则返回对应的子词切分模型,否则返回None
`module.word_dict_path` 若module为ernie_tiny则返回对应的词语切分模型,否则返回None
SequenceLabelReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. SequenceLabelReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`.
**NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 **NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
......
...@@ -58,12 +58,12 @@ inputs, outputs, program = module.context(trainable=True, max_seq_len=128) ...@@ -58,12 +58,12 @@ inputs, outputs, program = module.context(trainable=True, max_seq_len=128)
``` ```
其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。 其中最大序列长度`max_seq_len`是可以调整的参数,建议值128,根据任务文本长度不同可以调整该值,但最大不超过512。
如果想尝试BERT模型,只需要更换Module中的`name`参数即可. PaddleHub还提供BERT等模型可供选择, 模型对应的加载示例如下:
PaddleHub还提供BERT模型可供选择, 所有模型对应的加载示例如下:
模型名 | PaddleHub Module 模型名 | PaddleHub Module
---------------------------------- | :------: ---------------------------------- | :------:
ERNIE, Chinese | `hub.Module(name='ernie')` ERNIE, Chinese | `hub.Module(name='ernie')`
ERNIE tiny, Chinese | `hub.Module(name='ernie_tiny')`
ERNIE 2.0 Base, English | `hub.Module(name='ernie_v2_eng_base')` ERNIE 2.0 Base, English | `hub.Module(name='ernie_v2_eng_base')`
ERNIE 2.0 Large, English | `hub.Module(name='ernie_v2_eng_large')` ERNIE 2.0 Large, English | `hub.Module(name='ernie_v2_eng_large')`
BERT-Base, Uncased | `hub.Module(name='bert_uncased_L-12_H-768_A-12')` BERT-Base, Uncased | `hub.Module(name='bert_uncased_L-12_H-768_A-12')`
...@@ -72,8 +72,13 @@ BERT-Base, Cased | `hub.Module(name='bert_cased_L-12_H-768_A-1 ...@@ -72,8 +72,13 @@ BERT-Base, Cased | `hub.Module(name='bert_cased_L-12_H-768_A-1
BERT-Large, Cased | `hub.Module(name='bert_cased_L-24_H-1024_A-16')` BERT-Large, Cased | `hub.Module(name='bert_cased_L-24_H-1024_A-16')`
BERT-Base, Multilingual Cased | `hub.Module(nane='bert_multi_cased_L-12_H-768_A-12')` BERT-Base, Multilingual Cased | `hub.Module(nane='bert_multi_cased_L-12_H-768_A-12')`
BERT-Base, Chinese | `hub.Module(name='bert_chinese_L-12_H-768_A-12')` BERT-Base, Chinese | `hub.Module(name='bert_chinese_L-12_H-768_A-12')`
BERT-wwm, Chinese | `hub.Module(name='bert_wwm_chinese_L-12_H-768_A-12')`
BERT-wwm-ext, Chinese | `hub.Module(name='bert_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-12_H-768_A-12')`
RoBERTa-wwm-ext-large, Chinese | `hub.Module(name='roberta_wwm_ext_chinese_L-24_H-1024_A-16')`
更多模型请参考[PaddleHub官网](https://www.paddlepaddle.org.cn/hub?filter=hot&value=1)
如果想尝试BERT模型,只需要更换Module中的`name`参数即可.
```python ```python
# 更换name参数即可无缝切换BERT中文模型, 代码示例如下 # 更换name参数即可无缝切换BERT中文模型, 代码示例如下
module = hub.Module(name="bert_chinese_L-12_H-768_A-12") module = hub.Module(name="bert_chinese_L-12_H-768_A-12")
...@@ -85,7 +90,9 @@ dataset = hub.dataset.ChnSentiCorp() ...@@ -85,7 +90,9 @@ dataset = hub.dataset.ChnSentiCorp()
reader = hub.reader.ClassifyReader( reader = hub.reader.ClassifyReader(
dataset=dataset, dataset=dataset,
vocab_path=module.get_vocab_path(), vocab_path=module.get_vocab_path(),
max_seq_len=128) max_seq_len=128,
sp_model_path=module.get_spm_path(),
word_dict_path=module.get_word_dict_path())
metrics_choices = ["acc"] metrics_choices = ["acc"]
``` ```
...@@ -97,6 +104,10 @@ metrics_choices = ["acc"] ...@@ -97,6 +104,10 @@ metrics_choices = ["acc"]
`max_seq_len` 需要与Step1中context接口传入的序列长度保持一致 `max_seq_len` 需要与Step1中context接口传入的序列长度保持一致
`module.sp_model_path` 若module为ernie_tiny则返回对应的子词切分模型,否则返回None
`module.word_dict_path` 若module为ernie_tiny则返回对应的词语切分模型,否则返回None
ClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`. ClassifyReader中的`data_generator`会自动按照模型对应词表对数据进行切词,以迭代器的方式返回ERNIE/BERT所需要的Tensor格式,包括`input_ids``position_ids``segment_id`与序列对应的mask `input_mask`.
**NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。 **NOTE**: Reader返回tensor的顺序是固定的,默认按照input_ids, position_ids, segment_id, input_mask这一顺序返回。
......
...@@ -36,3 +36,4 @@ MODULE_HOME = os.path.join(gen_hub_home(), "modules") ...@@ -36,3 +36,4 @@ MODULE_HOME = os.path.join(gen_hub_home(), "modules")
CACHE_HOME = os.path.join(gen_hub_home(), "cache") CACHE_HOME = os.path.join(gen_hub_home(), "cache")
DATA_HOME = os.path.join(gen_hub_home(), "dataset") DATA_HOME = os.path.join(gen_hub_home(), "dataset")
CONF_HOME = os.path.join(gen_hub_home(), "conf") CONF_HOME = os.path.join(gen_hub_home(), "conf")
THIRD_PARTY_HOME = os.path.join(gen_hub_home(), "thirdparty")
...@@ -9,20 +9,28 @@ v4: fixed segmentation issues ...@@ -9,20 +9,28 @@ v4: fixed segmentation issues
''' '''
from __future__ import print_function from __future__ import print_function
from collections import OrderedDict from collections import OrderedDict
import os
import re import re
import json
import nltk import nltk
import sys
try: from paddlehub.common.dir import THIRD_PARTY_HOME
nltk.data.find('tokenizers/punkt') from paddlehub.common.downloader import default_downloader
except LookupError:
print("Downloading nltk punkt") _PUNKT_URL = "https://paddlehub.bj.bcebos.com/paddlehub-thirdparty/punkt.tar.gz"
nltk.download('punkt')
# split Chinese with English # split Chinese with English
def mixed_segmentation(in_str, rm_punc=False): def mixed_segmentation(in_str, rm_punc=False):
nltk_path = os.path.join(THIRD_PARTY_HOME, "nltk_data")
tokenizers_path = os.path.join(nltk_path, "tokenizers")
punkt_path = os.path.join(tokenizers_path, "punkt")
if not os.path.exists(punkt_path):
default_downloader.download_file_and_uncompress(
url=_PUNKT_URL, save_path=tokenizers_path, print_progress=True)
nltk.data.path.append(nltk_path)
in_str = str(in_str).lower().strip() in_str = str(in_str).lower().strip()
segs_out = [] segs_out = []
temp_str = "" temp_str = ""
......
...@@ -15,3 +15,4 @@ tb-paddle ...@@ -15,3 +15,4 @@ tb-paddle
tensorboard >= 1.15 tensorboard >= 1.15
cma == 2.7.0 cma == 2.7.0
sentencepiece sentencepiece
nltk
...@@ -14,3 +14,4 @@ tb-paddle ...@@ -14,3 +14,4 @@ tb-paddle
tensorboard >= 1.15 tensorboard >= 1.15
cma == 2.7.0 cma == 2.7.0
sentencepiece sentencepiece
nltk
...@@ -33,7 +33,7 @@ max_version, mid_version, min_version = python_version() ...@@ -33,7 +33,7 @@ max_version, mid_version, min_version = python_version()
REQUIRED_PACKAGES = [ REQUIRED_PACKAGES = [
'six >= 1.10.0', 'protobuf >= 3.6.0', 'pyyaml', 'Pillow', 'requests', 'six >= 1.10.0', 'protobuf >= 3.6.0', 'pyyaml', 'Pillow', 'requests',
'tb-paddle', 'tensorboard >= 1.15', 'cma == 2.7.0', 'flask >= 1.1.0', 'tb-paddle', 'tensorboard >= 1.15', 'cma == 2.7.0', 'flask >= 1.1.0',
'sentencepiece' 'sentencepiece', 'nltk'
] ]
if max_version < 3: if max_version < 3:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册