关于hanlp2.1 的模型,如果只是分词和词性标注,是否有更小的模型

通过hanlp下载模型时,屡次失败,最后 还是通过浏览器直接下载完成的。

3.20%, 35.4 MB/1.1 GB, 5.8 MB/s, ETA 3 m 3 s Download failed due to timeout(‘timed out’). Please download it to /root/.hanlp/mtl/ud_ontonotes_tok_pos_lem_fea_ner_srl_dep_sdp_con_xlm_base_20210114_005825.zip by yourself. e.g.

记得去年2.0刚发布的时候,分词和词性标注模型都还挺小的。如果只是分词和词性标注,现在还有没有新版的小模型呢:grinning_face_with_smiling_eyes::question:

可能是由于Python的下载函数没有断点续传功能,同时大陆的民用网路又很差造成的。至少在海外aws、google和普通机房里,我从来没遇到过下载失败。如果你知道什么好用的第三方下载库,可以推荐一下。

2.0发布的大多数LSTM+FastText的模型,不算FastText的确很小,如果算上FastText,也得有4G。后来发布的ALBERT体积算小的,但小模型一般准确率要低几个点,有得有失。2.0也发布过BERT-BASE模型,也得有个500MB吧。

2.1利用的多语种xlm_base模型光Transformer本身就将近1个G,毕竟要编码104种语言,所有语言光subword embedding就很大。另外,Facebook也没有发布更小的XLM模型。不过你可以试试UD_ONTONOTES_TOK_POS_LEM_FEA_NER_SRL_DEP_SDP_CON_MT5_SMALL,基于Google的MT5_SMALL,大约700MB。

至于中文模型,OPEN_TOK_POS_NER_SRL_DEP_SDP_CON_ELECTRA_SMALL_ZH可以做到85MB左右,应该算小的吧。再缩小准确率下降就很严重了,没什么价值。

2.1主打多任务联合学习,的确没有发布仅含分词+词性标注的模型。不过你可以通过删除其他任务来达到仅保留分词+词性标注的目的:

最终结果就很像1.x时代的词法分析了:

2021年/NT HanLPv2.1/NR 为/P 生产/NN 环境/NN 带来/VV 次/DT 世代/NN 最/AD 先进/VA 的/DEC 多/CD 语种/NN NLP/NN 技术/NN 。/PU
up主/NN 来到/VV 北京/NR 立方庭/NR 参观/VV 自然/NN 语义/NN 科技/NN 公司/NN 。/PU
2 Likes

另外, 在 ud_ontonotes_tok_pos_lem_fea_ner_srl_dep_sdp_con_xlm_base_20210114_00582
里面实际上并没有 pos 任务 :thinking:

config.json

...
"task_names": [
    "tok",
    "ud",
    "ner",
    "srl",
    "sdp/dm",
    "sdp/pas",
    "sdp/psd",
    "con"
  ],
...

多语种模型的pos、lem、fea、dep合并进了ud,为了节省训练时间。你可以自己训练:

3 个帖子已被合并到了现有主题:hanlp是否可以先下载预训练模型在本地加载

1 个帖子被拆分到新主题:Specify which annotation to use , 并没有打出 pku 的 词性

我在删除其他任务后,保存模型,再次加载模型后报错:

HanLP.save(’/root/.hanlp/ner/close_ner_model’)
HanLP.load(’/root/.hanlp/ner/close_ner_model’)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/anaconda3/envs/hanlp/lib/python3.6/site-packages/hanlp/common/torch_component.py", line 174, in load
    self.load_vocabs(save_dir)
  File "/root/anaconda3/envs/hanlp/lib/python3.6/site-packages/hanlp/components/mtl/multi_task_learning.py", line 760, in load_vocabs
    task.load_vocabs(save_dir, f'{task_name}_{filename}')
  File "/root/anaconda3/envs/hanlp/lib/python3.6/site-packages/hanlp/common/torch_component.py", line 147, in load_vocabs
    self.vocabs.load_vocabs(save_dir, filename)
  File "/root/anaconda3/envs/hanlp/lib/python3.6/site-packages/hanlp/common/transform.py", line 136, in load_vocabs
    vocabs.load_json(os.path.join(save_dir, filename))
  File "/root/anaconda3/envs/hanlp/lib/python3.6/site-packages/hanlp_common/structure.py", line 64, in load_json
    item = load_json(path)
  File "/root/anaconda3/envs/hanlp/lib/python3.6/site-packages/hanlp_common/io.py", line 29, in load_json
    with open(path, encoding='utf-8') as src:
FileNotFoundError: [Errno 2] No such file or directory: '/root/.hanlp/ner/close_ner_model/con_vocabs.json'

提供colab复现代码

1 Like

感谢反馈,已经修复,请升级 pip install hanlp -U

推理的时候报错:

已经修复: