Giter Club home page Giter Club logo

fasthan's Introduction

fastHan

致歉:fastHan的模型因为服务器故障导致参数丢失,暂时停止服务。我们将尽快开始下一版迭代,敬请期待。同时,如果有已经下载或保存参数的朋友,恳请您与我们联系,万分感谢。

简介

fastHan是基于fastNLP与pytorch实现的中文自然语言处理工具,像spacy一样调用方便。

其内核为基于BERT的联合模型,其在15个语料库中进行训练,可处理中文分词、词性标注、依存分析、命名实体识别多项任务。

从fastHan2.0开始,fastHan在原有的基础上,增加了对古汉语分词、古汉语词性标注的处理。此外,fastHan还可以处理中文AMR任务。fastHan在各项任务均有不错表现,在部分数据集上接近甚至超越SOTA模型。

最后,如果您对古汉语分词、词性标注非常感兴趣,您也可以关注实验室另外一个工作bert-ancient-chinese论文)。

For English README, you can click here

引用

如果您在工作中使用了fastHan工具,您可以引用这篇论文: Zhichao Geng, Hang Yan, Xipeng Qiu and Xuanjing Huang, fastHan: A BERT-based Multi-Task Toolkit for Chinese NLP, ACL, 2021.

@inproceedings{geng-etal-2021-fasthan,
  author = {Geng, Zhichao and Yan, Hang and Qiu, Xipeng and Huang, Xuanjing},
  title = {fastHan: A BERT-based Multi-Task Toolkit for Chinese NLP},
  booktitle = {Proceedings of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing: System Demonstrations},
  year = {2021},
  pages = {99--106}, 
  url = {https://aclanthology.org/2021.acl-demo.12}
}

安装指南

fastHan需要以下依赖的包:

  • torch>=1.8.0
  • fastNLP>=1.0.0
    • 特别注意:2.0版本以前的fastHan依赖的fastNLP版本低于1.0.0。
  • transformers>=4.0.0
  • fastHan2.0可能还使用了其他一些常见的包,如果在使用过程中碰见找不到包提示,直接使用pip安装即可。
    • datasets==2.7.0
    • pandas==1.5.1
    • numpy==1.22.2

版本更新:

  • 1.1版本的fastHan与0.5.5版本的fastNLP会导致import error。如果使用1.1版本的fastHan,请使用0.5.0版本的fastNLP。
  • 1.2版本的fastHan修复了fastNLP版本兼容问题。小于等于1.2版本的fastHan在输入句子的首尾包含空格、换行符时会产生BUG。如果字符串首尾包含上述字符,请使用 strip 函数处理输入字符串。
  • 1.3版本的fastHan自动对输入字符串做 strip 函数处理。
  • 1.4版本的fastHan加入用户词典功能(仅限于分词任务)
  • 1.5版本的fastHan
    • 修正了Parsing任务中可能会出现的Value Error
    • 修改结果的返回形式,默认以list的形式返回
    • 可以通过url路径加载模型
  • 1.6版本的fastHan
    • 将用户词典功能扩充到所有任务
    • 可以在返回值中包含位置信息
  • 1.7版本的fastHan
    • 添加finetune功能
  • 2.0版本的fastHan
    • **训练数据集:**新增了《人民日报》数据集、《左传》数据集进行训练
    • **模型架构:**在原来的基础了引入了prompt技术,进一步提升了模型的能力
    • **问题修复:**修复了基础功能当传入的句子过多而导致显存、内存使用量剧增的问题
    • **新增功能:**新增了中文AMR能力

可执行如下命令完成安装:

pip install fastHan

或者可以通过github安装:

git clone [email protected]:fastnlp/fastHan.git
cd fastHan
python setup.py install

快速上手

fastHan的使用极为简单,只需两步:加载模型、将句子输入模型。

加载模型

执行以下代码可以加载fastHan模型

from fastHan import FastHan
model=FastHan()

此时若用户为首次初始化模型,将自动从服务器中下载参数。

fastHan2.0模型基于12层BERT模型,如果需要使用更小的模型,可以下载fastHan2.0之前的版本。

执行以下代码可以加载FastCAMR模型

from fastHan import FastCAMR
camr_model=FastCAMR()

此时若用户为首次初始化模型,将自动从服务器中下载参数。

此外,对于手动下载模型的用户以及保存过微调模型的用户,可以使用模型路径加载模型。下载压缩包并解压后,可将对应路径通过url参数传入。一则使用模型路径加载模型的例子如下:

model=FastHan(url="/remote-home/pywang/finetuned_model")
camr_model=FastCAMR(url="/remote-home/pywang/finetuned_camr_model")

输入句子

模型对句子进行依存分析、命名实体识别的简单例子如下:

sentence="郭靖是金庸笔下的男主角。"
answer=model(sentence)
print(answer)
answer=model(sentence,target="Parsing")
print(answer)
answer=model(sentence,target="NER")
print(answer)

模型将会输出如下信息:

[['郭靖', '是', '金庸', '笔', '下', '的', '男', '主角', '。']]
[[['郭靖', 2, 'top', 'NR'], ['是', 0, 'root', 'VC'], ['金庸', 4, 'nn', 'NR'], ['笔', 5, 'lobj', 'NN'], ['下', 8, 'assmod', 'LC'], ['的', 5, 'assm', 'DEG'], ['男', 8, 'amod', 'JJ'], ['主角', 2, 'attr', 'NN'], ['。', 2, 'punct', 'PU']]]
[[['郭靖', 'NR'], ['金庸', 'NR']]]

可选参数:

  • target: 可在'CWS', 'POS', 'CWS-guwen', 'POS-guwen', 'NER', 'Parsing'六个选项中取值,模型将分别进行中文分词(现代汉语)、词性标注(现代汉语)、中文分词(古代汉语)、词性标注(古代汉语)、命名实体识别、依存分析任务,模型默认进行CWS任务。
    • 词性标注任务包含了分词的信息,而依存分析任务又包含了分词任务。命名实体识别任务相较其他任务独立。
    • 模型的POS、Parsing任务均使用CTB标签集。NER使用msra标签集。
  • use_dict: 是否使用用户词典,默认为False。
  • return_list:是否以list形式传递返回值。默认为True。
  • return_loc: 是否将词的位置信息返回,默认为False。可用于spanF metric的评估。

模型对句子进行中文CAMR的简单例子如下:

sentence = "这样 的 活动 还 有 什么 意义 呢 ?"
answer = camr_model(sentence)
for ans in answer:
    print(ans)

模型将会输出如下信息:

(x5/有-03
        :mod()(x4/还)
        :arg1()(x7/意义
                :mod()(x11/amr-unknown))
        :mode(x12/interrogative)(x13/expressive)
        :time(x2/的)(x3/活动-01
                :arg0-of(x2/的-01)(x1/这样)))

特别注意的是,输入到fastCAMR模型中的句子必须是用空格隔开分词的句子。如果原始的句子并没有经过分词,可以先通过fastHan的分词功能进行分词,在将通过空格分隔开词汇的句子输入到fastCAMR句子中。

切换设备

可使用模型的 set_device 函数,令模型在cuda上运行或切换回cpu,示例如下:

model.set_device('cuda:0')
model.set_device('cpu')
camr_model.set_device('cuda:0')
camr_model.set_device('cpu')

进阶功能

微调模型

用户可以根据自己的需求在新的数据集上进行微调,一则微调的例子如下方所示:

from fastHan import FastHan

model=FastHan()

# train data file path
cws_url='train.dat'

model.set_device(0)
model.finetune(data_path=cws_url,task='CWS',save=True,save_url='finetuned_model')

微调前设置set_device函数可实用GPU加速。微调时需要将用于训练的数据按格式放到一个文件里。

对于CWS任务,则要求每行一条数据,每个词用空格分隔开。

Example:

上海 浦东 开发 与 法制 建设 同步
新华社 上海 二月 十日 电 ( 记者 谢金虎 、 张持坚 )
...

对于NER任务,要求按照MSRA数据集的格式与标签集。

Example:

札 B-NS
幌 E-NS
雪 O
国 O
庙 O
会 O
。 O

主 O
道 O
上 O
的 O
雪 O

...

对于CWS-guwen, 由于训练样本制约, 本模型暂不支持单纯的对古文分词进行训练。

对于POS-guwen, 要求按照如下格式, 每个句子一行。

Example:

春秋/n 左傳/n 定公/nr
元年/t ,/w 春/n ,/w 王/n 正月/t 辛巳/t ,/w 晉/ns 魏舒/nr 合/v 諸侯/n 之/u 大夫/n 于/p 狄泉/ns ,/w 將/d 以/c 城/n 成周/ns 。/w
魏子/nr 蒞政/v 。/w
...

对于POS和dependency parsing,要求按照CTB9的格式与标签集。

Example:

1       印度    _       NR      NR      _       3       nn      _       _
2       海军    _       NN      NN      _       3       nn      _       _
3       参谋长  _       NN      NN      _       5       nsubjpass       _       _
4       被      _       SB      SB      _       5       pass    _       _
5       解职    _       VV      VV      _       0       root    _       _

1       新华社  _       NR      NR      _       7       dep     _       _
2       新德里  _       NR      NR      _       7       dep     _       _
3       12月  _       NT      NT      _       7       dep     _       _
...

该函数有如下参数:

  • data_path: str,用于微调的数据集文件的路径。
  • task:str,此次微调的任务,可选值'CWS','POS','CWS-guwen','POS-guwen','Parsing','NER'。
  • lr:float,微调的学习率。默认取1e-5。
  • n_epochs:int,微调的迭代次数,默认取1。
  • batch_size:int,每个batch的数据数量,默认为8。
  • save:bool,是否保存微调后的模型,默认为False。
  • save_url:str,若保存模型,则此值为保存模型的路径。

camr_model也拥有微调功能,一则微调的例子如下方所示:

from fastHan import FastCAMR

camr_model=FastCAMR()

# train data file path
cws_url='train.dat'

camr_model.set_device(0)
camr_model.finetune(data_path=cws_url,save=True,save_url='finetuned_model')

微调前设置set_device函数可实用GPU加速。微调时需要将用于训练的数据按格式放到一个文件里。

数据集文件的格式要依照中文AMR语料库CAMR1.0的格式, 如下所示。

Example:

# ::id export_amr.1322 ::2017-01-04
# ::snt 这样 的 活动 还 有 什么 意义 呢 ?
# ::wid x1_这样 x2_的 x3_活动 x4_还 x5_有 x6_什么 x7_意义 x8_呢 x9_? x10_
(x5/有-03 
    :mod()(x4/还) 
    :arg1()(x7/意义 
        :mod()(x11/amr-unknown)) 
    :mode()(x2/的) 
    :mod-of(x12/的而)(x1/这样))


# ::id export_amr.1327 ::2017-01-04
# ::snt 并且 还 有 很多 高层 的 人物 哦 !
# ::wid x1_并且 x2_还 x3_有 x4_很多 x5_高层 x6_的 x7_人物 x8_哦 x9_! x10_
(x11/and 
    :op2(x1/并且)(x3/有-03 
        :mod()(x2/还) 
        :arg1()(x7/人物 
            :mod-of(x6/的)(x5/高层) 
            :quant()(x12/-))) 
    :mode()(x13/- 
        :expressive()(x14/-)))
        
...

相关格式的含义请详见中文AMR语料库CAMR1.0的标准。

该函数有如下参数:

  • :param str data_path: 用于微调的数据集文件的路径。

  • :param float lr: 微调的学习率。默认取1e-5。

  • :param int n_epochs: 微调的迭代次数, 默认取1。

  • :param int batch_size: 每个batch的数据数量, 默认为8。

  • :param bool save: 是否保存微调后的模, 默认为False。

  • :param str save_url: 若保存模型,则此值为保存模型的路径。

词典分词

用户可以使用模型的 add_user_dict 函数添加自定义词典,该词典会影响模型在分词任务中的权重分配。进行分词任务时,首先利用词典进行正向、反向最大匹配法进行分词,并将词典方法的分词结果乘上权重系数融入到深度学习模型的结果中。该函数的参数可以是由词组成的list,也可以是文件路径(文件中的内容是由'\n'分隔开的词)。

用户可使用 set_user_dict_weight 函数设置权重系数(若不设置,默认为0.05)。我们在大规模的训练语料库中发现0.05-0.1即可取得较好的结果。条件允许的情况下,用户也可以自行设置验证集、测试集,找到最适合自己任务的权重系数。

添加完用户词典后,需要在调用模型时令 use_dict 参数为True。

用户可调用 remove_user_dict 移除之前添加的用户词典。

使用用户词典影响分词的一则例子如下:

sentence="奥利奥利奥"
print(model(sentence))
model.add_user_dict(["奥利","奥利奥"])
print(model(sentence,use_dict=True))

输出为:

[['奥利奥利奥']]
[['奥利', '奥利奥']]

分词风格

分词风格,指的是训练模型中文分词模块的10个语料库,模型可以区分这10个语料库,设置分词style为S即令模型认为现在正在处理S语料库的分词。所以分词style实际上是与语料库的覆盖面、分词粒度相关的。如本模型默认的CTB语料库分词粒度较细。如果想切换不同的粒度,可以使用模型的 set_cws_style 函数,例子如下:

sentence="一个苹果。"
print(model(sentence,'CWS'))
model.set_cws_style('cnc')
print(model(sentence,'CWS'))

模型将输出如下内容:

[['一', '个', '苹果', '。']]
[['一个', '苹果', '。']]

对语料库的选取参考了下方CWS SOTA模型的论文,共包括:SIGHAN 2005的 MSR、PKU、AS、CITYU 语料库,由山西大学发布的 SXU 语料库,由斯坦福的CoreNLP 发布的 CTB6 语料库,由国家语委公布的 CNC 语料库,由王威廉先生公开的微博树库 WTB,由张梅山先生公开的诛仙语料库 ZX,Universal Dependencies 项目的 UD 语料库。

输入与输出

输入模型的可以是单独的字符串,也可是由字符串组成的列表。在fastHan2.0之前,如果输入的是列表,模型将一次性处理所有输入的字符串,所以请自行控制 batch size。从FastHan2.0开始,将不受输入的list大小的限制。

模型的输出可以是python的list,也可以是fastHan中自定义的Sentence与Token类。模型默认返回list。

如果将"return_list"参数设为False,模型将输出一个由sentence组成的列表,而每个sentence又由token组成。每个token本身代表一个被分好的词,有pos、head、head_label、ner、loc属性,代表了该词的词性、依存关系、命名实体识别信息、起始位置。

一则输入输出的例子如下所示:

sentence=["我爱踢足球。","林丹是冠军"]
answer=model(sentence,'Parsing',return_list=False)
for i,sentence in enumerate(answer):
    print(i)
    for token in sentence:
        print(token,token.pos,token.head,token.head_label)

上述代码将输出如下内容:

0
我 PN 2 nsubj
爱 VV 0 root
踢 VV 2 ccomp
足球 NN 3 dobj
。 PU 2 punct
1
林丹 NR 2 top
是 VC 0 root
冠军 NN 2 attr
! PU 2 punct

可在分词风格中选择'as'、'cityu'进行繁体字分词,这两项为繁体语料库。

此外,由于各项任务共享词表、词嵌入,即使不切换模型的分词风格,模型对繁体字、英文字母、数字均具有一定识别能力。

模型表现

泛化能力测试

对于NLP工具包来说,最重要的就是泛化能力,即在未知数据集里的表现。我们选取了样本较为复杂的Weibo数据集。我们在Weibo的dev集和test集进行了分词测试,并与jieba、THULAC、LTP4.0、SnowNLP进行了对比,对比结果如下(spanF metric)。

数据集 SnowNLP jieba THULAC LTP4.0 base fastHan large fastHan (fine-tuned)
Weibo dev_set 0.7999 0.8319 0.8649 0.9182 0.9314 0.9632
Weibo test_set 0.7965 0.8358 0.8665 0. 9205 0.9338 0.9664

作为可以现成使用的工具,fastHan的准确率相较于SnowNLP、jieba、THULAC有较大提升。相较于LTP 4.0-base,fastHan的准确率更高,且模型更小(262MB:492MB)。 在finetune之后,fastHan的准确率也提升明显。

准确率测试

模型在以下数据集进行训练和准确性测试:

  • CWS:AS, CITYU, CNC, CTB, MSR, PKU, SXU, UDC, WTB, ZX
  • NER:MSRA、OntoNotes
  • POS & Parsing:CTB9

注:模型在训练NER OntoNotes时将其标签集转换为与MSRA一致。

模型在ctb分词语料库的前800句进行了速度测试,平均每句有45.2个字符。测试环境为私人电脑, Intel Core i5-9400f + NVIDIA GeForce GTX 1660ti,batch size取8。经测试依存分析运行速度较慢,其他各项任务运行速度大致相同。。

最终模型取得的表现如下:

任务 CWS POS NER MSRA CWS-guen POS-guwen NER OntoNotes Parsing 速度(句/s),cpu 速度(句/s),gpu
SOTA模型 97.1 93.15 96.09 —— —— 81.82 81.71 —— ——
base模型 97.27 94.88 94.33 —— —— 82.86 76.71 25-55 22-111
large模型 97.41 95.66 95.50 —— —— 83.82 81.38 14-28 21-97
FastHan2.0 97.50 95.92 95.79 93.29 86.53 82.76 81.31 2-10 20-60

表格中单位为百分数。CWS的成绩是10项任务的平均成绩。SOTA模型的数据来自笔者对网上资料及论文的查阅,如有缺漏请指正,不胜感激。

在fastHan2.0中,相关的古汉语处理已经达到了很高的水平,如果您追求更好的性能,并且对BERT以及transformers库有一定的了解,欢迎了解实验室的另外一个工作bert-ancient-chinese

这五项SOTA表现分别来自如下五篇论文:

  1. Huang W, Cheng X, Chen K, et al. Toward Fast and Accurate Neural Chinese Word Segmentation with Multi-Criteria Learning.[J]. arXiv: Computation and Language, 2019.
  2. Hang Yan, Xipeng Qiu, and Xuanjing Huang. "A Graph-based Model for Joint Chinese Word Segmentation and Dependency Parsing." Transactions of the Association for Computational Linguistics 8 (2020): 78-92.
  3. Meng Y, Wu W, Wang F, et al. Glyce: Glyph-vectors for Chinese Character Representations[J]. arXiv: Computation and Language, 2019.
  4. Xiaonan Li, Hang Yan, Xipeng Qiu, and XuanjingHuang. 2020. FLAT: Chinese NER using flat-latticetransformer.InProceedings of the 58th AnnualMeeting of the Association for Computational Lin-guistics, pages 6836–6842, Online. Association forComputational Linguisti

fasthan's People

Contributors

fdugzc avatar jihuai-wpy avatar lsvih avatar xpqiu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fasthan's Issues

模型下载报错,请问可以提供百度网盘下载链接吗?

requests.exceptions.ConnectTimeout: HTTPConnectionPool(host='download.fastnlp.top', port=80): Max retries exceeded with url: /fasthan/fasthan.zip (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x00000173052887C0>, 'Connection to download.fastnlp.top timed out. (connect timeout=None)'))

模型下载出错,请问可以提供百度网盘下载链接吗?

prefetch_factor

fastNLP\core\dataloaders\torch_dataloader\fdl.py in init(self, dataset, batch_size, shuffle, sampler, batch_sampler, num_workers, collate_fn, pin_memory, drop_last, timeout, worker_init_fn, multiprocessing_context, generator, prefetch_factor, persistent_workers, **kwargs)
150 persistent_workers=persistent_workers)
...
--> 245 raise ValueError('prefetch_factor option could only be specified in multiprocessing.'
246 'let num_workers > 0 to enable multiprocessing, otherwise set prefetch_factor to None.')
247 elif num_workers > 0 and prefetch_factor is None:

ValueError: prefetch_factor option could only be specified in multiprocessing.let num_workers > 0 to enable multiprocessing, otherwise set prefetch_factor to None.

请问词性英文缩写代表什么意义?

您好,非常感谢您开发的这个fastHan,不过在使用过程中,想问问这些词性标注都代表了什么意思呢?

[[['WuLi', 6, 'nsubj', 'NR'], [',', 4, 'punct', 'PU'], ['网络', 4, 'nn', 'NN'], ['流行词', 6, 'dep', 'NN'], [',', 6, 'punct', 'PU'], ['是', 0, 'root', 'VC'], ['韩语', 9, 'nn', 'NN'], ['“', 9, 'punct', 'PU'], ['우리', 12, 'assmod', 'NN'], ['”', 9, 'punct', 'PU'], ['的', 9, 'assm', 'DEG'], ['音译', 6, 'attr', 'NN'], [',', 6, 'punct', 'PU'], ['意思', 15, 'top', 'NN'], ['是', 6, 'conj', 'VC'], ['“', 17, 'punct', 'PU'], ['我们', 21, 'conj', 'PN'], ['”', 17, 'punct', 'PU'], ['、', 21, 'punct', 'PU'], ['“', 21, 'punct', 'PU'], ['我们', 15, 'attr', 'PN'], ['的', 21, 'assm', 'DEG'], ['”', 21, 'punct', 'PU'], ['。', 6, 'punct', 'PU'], ['可以', 37, 'mmod', 'VV'], ['把', 37, 'ba', 'BA'], ['很', 28, 'advmod', 'AD'], ['亲密', 36, 'rcmod', 'VA'], ['的', 28, 'cpm', 'DEC'], ['同辈', 36, 'conj', 'NN'], ['、', 36, 'punct', 'PU'], ['恋人', 36, 'conj', 'NN'], ['、', 36, 'punct', 'PU'], ['喜欢', 36, 'rcmod', 'VV'], ['的', 34, 'cpm', 'DEC'], ['明星', 37, 'nsubj', 'NN'], ['称为', 6, 'conj', 'VV'], [':', 37, 'punct', 'PU'], ['WuLi + ', 40, 'nn', 'NR'], ['名字', 37, 'dobj', 'NN'], ['。', 6, 'punct', 'PU'], ['或者是', 49, 'cc', 'CC'], ['和', 45, 'prep', 'P'], ['自己', 43, 'pobj', 'PN'], ['有', 49, 'rcmod', 'VE'], ['亲属', 47, 'nn', 'NN'], ['关系', 45, 'dobj', 'NN'], ['的', 45, 'cpm', 'DEC'], ['人', 37, 'nsubj', 'NN'], [',', 37, 'punct', 'PU'], ['可以', 56, 'mmod', 'VV'], ['用', 58, 'prep', 'P'], ['우리', 55, 'nn', 'NN'], ['+', 55, 'punct', 'PU'], ['称谓', 52, 'pobj', 'NN'], ['是', 37, 'dep', 'VC'], ['朝鲜语', 55, 'nn', 'NN'], ['交谈', 65, 'rcmod', 'VV'], ['的', 58, 'cpm', 'DEC'], ['一', 61, 'nummod', 'CD'], ['种', 65, 'clf', 'M'], ['常用', 65, 'assmod', 'JJ'], ['的', 62, 'assm', 'DEG'], ['表达', 65, 'nn', 'NN'], ['方式', 56, 'attr', 'NN'], ['。', 6, 'punct', 'PU']], [['台风', 8, 'nsubj', 'NN'], ['(', 5, 'punct', 'PU'], ['英语', 5, 'nsubj', 'NN'], [':', 5, 'punct', 'PU'], ['Typhoon', 8, 'nsubj', 'NR'], [')', 5, 'punct', 'PU'], [',', 8, 'punct', 'PU'], ['属于', 0, 'root', 'VV'], ['热带', 10, 'nn', 'NN'], ['气旋', 13, 'assmod', 'NN'], ['的', 10, 'assm', 'DEG'], ['一', 13, 'nummod', 'CD'], ['种', 8, 'range', 'M'], ['。', 8, 'punct', 'PU'], ['热带', 16, 'nn', 'NN'], ['气旋', 17, 'nsubj', 'NN'], ['是', 8, 'conj', 'VC'], ['发生', 27, 'rcmod', 'VV'], ['在', 18, 'prep', 'P'], ['热带', 22, 'conj', 'NN'], ['或', 22, 'cc', 'CC'], ['副热带', 23, 'nn', 'NN'], ['洋面', 24, 'lobj', 'NN'], ['上', 19, 'plmod', 'LC'], ['的', 18, 'cpm', 'DEC'], ['低压', 27, 'nn', 'NN'], ['涡旋', 17, 'attr', 'NN'], [',', 17, 'punct', 'PU'], ['是', 8, 'conj', 'VC'], ['一', 31, 'nummod', 'CD'], ['种', 39, 'clf', 'M'], ['强大', 39, 'rcmod', 'VA'], ['而', 32, 'cc', 'CC'], ['深厚', 32, 'dep', 'VA'], ['的', 32, 'cpm', 'DEC'], ['“', 39, 'punct', 'PU'], ['热带', 39, 'nn', 'NN'], ['天气', 39, 'nn', 'NN'], ['系统', 29, 'attr', 'NN'], ['”', 39, 'punct', 'PU'], ['。', 8, 'punct', 'PU'], ['我', 43, 'nn', 'PN'], ['国', 65, 'nsubj', 'NN'], ['把', 65, 'ba', 'BA'], ['南海', 48, 'conj', 'NR'], ['与', 48, 'cc', 'CC'], ['西北', 48, 'nn', 'NN'], ['太平洋', 51, 'assmod', 'NR'], ['的', 48, 'assm', 'DEG'], ['热带', 51, 'nn', 'NN'], ['气旋', 65, 'nsubj', 'NN'], ['按', 65, 'prep', 'P'], ['其', 55, 'nn', 'PN'], ['底层', 56, 'nn', 'NN'], ['中心', 56, 'nn', 'NN'], ['附近', 60, 'nn', 'NN'], ['最', 58, 'advmod', 'AD'], ['大', 60, 'amod', 'JJ'], ['平均', 60, 'amod', 'JJ'], ['风力', 64, 'conj', 'NN'], ['(', 62, 'punct', 'PU'], ['风速', 64, 'nn', 'NN'], [')', 62, 'punct', 'PU'], ['大小', 52, 'pobj', 'NN'], ['划分', 8, 'conj', 'VV'], ['为', 65, 'dep', 'VC'], ['6', 68, 'nummod', 'CD'], ['个', 69, 'clf', 'M'], ['等级', 65, 'dobj', 'NN'], [',', 8, 'punct', 'PU'], ['其中', 73, 'nsubj', 'NN'], ['风力', 73, 'nsubj', 'NN'], ['达', 80, 'nsubj', 'VV'], ['12', 75, 'nummod', 'CD'], ['级', 77, 'lobj', 'M'], ['或', 75, 'cc', 'CC'], ['以上', 73, 'loc', 'LC'], ['的', 73, 'cpm', 'DEC'], [',', 65, 'punct', 'PU'], ['统称', 8, 'conj', 'VV'], ['为', 80, 'dep', 'VC'], ['台风', 80, 'dobj', 'NN'], ['。', 8, 'punct', 'PU']]]

我在网上查了,发现不全,还有就是这四个属性 '级', 77, 'lobj', 'M' 分别代表什么意思呢?期待您的解答。

PySpark环境下分词+POS标注会有ValueError的报错

我在PySpark环境下使用FastHan进行大量微博语料的分词。由于我只想保留具有实意的词语,因此同时根据POS进行了筛选,只保留动词、副词、名词和形容词。小样本测验时,下面的代码能够完全正常执行并产生期待的结果,但是推广到全样本时,分词的步骤不知为何会产生ValueError的报错。

from pyspark.sql.functions import col, pandas_udf
from fastHan import FastHan
import pandas as pd
import regex

model = FastHan(model_type="large")
model.set_cws_style("wtb")

def tokenize(text):
  return [token.word for token in model(text, target="Parsing")[0] if token.pos in ["VA", "VC", "VE", "VV", "NR", "NT", "NN", "AD" "JJ", "FW"] and regex.search(r"\p{Han}", token.word)]
  
def tokenize_func(text: pd.Series) -> pd.Series:
  return text.map(lambda x: tokenize(x))
 
tokenizeText = pandas_udf(tokenize_func, returnType=ArrayType(StringType()))

df = df.withColumn(
  "tokens",
  tokenizeText(col("text"))
)
Job aborted due to stage failure: Task 148 in stage 12.0 failed 4 times, most recent failure: Lost task 148.3 in stage 12.0 (TID 21915, 10.139.64.10, executor 8): org.apache.spark.api.python.PythonException: 'ValueError: 69 is not in list', from <command-613965902721761>, line 6. Full traceback below:
Traceback (most recent call last):
  File "/databricks/spark/python/pyspark/worker.py", line 676, in main
    process()
  File "/databricks/spark/python/pyspark/worker.py", line 668, in process
    serializer.dump_stream(out_iter, outfile)
  File "/databricks/spark/python/pyspark/sql/pandas/serializers.py", line 284, in dump_stream
    timely_flush_timeout_ms=self.timely_flush_timeout_ms)
  File "/databricks/spark/python/pyspark/sql/pandas/serializers.py", line 97, in dump_stream
    for batch in iterator:
  File "/databricks/spark/python/pyspark/sql/pandas/serializers.py", line 274, in init_stream_yield_batches
    for series in iterator:
  File "/databricks/spark/python/pyspark/worker.py", line 489, in mapper
    result = tuple(f(*[a[o] for o in arg_offsets]) for (arg_offsets, f) in udfs)
  File "/databricks/spark/python/pyspark/worker.py", line 489, in <genexpr>
    result = tuple(f(*[a[o] for o in arg_offsets]) for (arg_offsets, f) in udfs)
  File "/databricks/spark/python/pyspark/worker.py", line 112, in <lambda>
    verify_result_type(f(*a)), len(a[0])), arrow_return_type)
  File "/databricks/spark/python/pyspark/util.py", line 109, in wrapper
    return f(*args, **kwargs)
  File "<command-613965902721761>", line 9, in tokenize_func
  File "/databricks/python/lib/python3.7/site-packages/pandas/core/series.py", line 3630, in map
    new_values = super()._map_values(arg, na_action=na_action)
  File "/databricks/python/lib/python3.7/site-packages/pandas/core/base.py", line 1154, in _map_values
    new_values = map_f(values, mapper)
  File "pandas/_libs/lib.pyx", line 2327, in pandas._libs.lib.map_infer
  File "<command-613965902721761>", line 9, in <lambda>
  File "<command-613965902721761>", line 6, in tokenize
  File "/databricks/python/lib/python3.7/site-packages/fastHan/FastModel.py", line 405, in __call__
    ans.append(self._parsing(head_preds,label_preds,pos_label,sentence[i]))
  File "/databricks/python/lib/python3.7/site-packages/fastHan/FastModel.py", line 294, in _parsing
    head=lengths.index(head)
ValueError: 69 is not in list

	at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.handlePythonException(PythonRunner.scala:599)
	at org.apache.spark.sql.execution.python.PythonArrowOutput$$anon$1.read(PythonArrowOutput.scala:99)
	at org.apache.spark.sql.execution.python.PythonArrowOutput$$anon$1.read(PythonArrowOutput.scala:49)
	at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:552)
	at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37)
	at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:489)
	at scala.collection.Iterator$$anon$10.hasNext(Iterator.scala:458)
	at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIteratorForCodegenStage1.processNext(Unknown Source)
	at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
	at org.apache.spark.sql.execution.WholeStageCodegenExec$$anon$1.hasNext(WholeStageCodegenExec.scala:733)
	at org.apache.spark.sql.execution.columnar.CachedRDDBuilder$$anon$1.hasNext(InMemoryRelation.scala:132)
	at org.apache.spark.storage.memory.MemoryStore.putIterator(MemoryStore.scala:221)
	at org.apache.spark.storage.memory.MemoryStore.putIteratorAsValues(MemoryStore.scala:299)
	at org.apache.spark.storage.BlockManager.$anonfun$doPutIterator$1(BlockManager.scala:1376)
	at org.apache.spark.storage.BlockManager.org$apache$spark$storage$BlockManager$$doPut(BlockManager.scala:1303)
	at org.apache.spark.storage.BlockManager.doPutIterator(BlockManager.scala:1367)
	at org.apache.spark.storage.BlockManager.getOrElseUpdate(BlockManager.scala:1187)
	at org.apache.spark.rdd.RDD.getOrCompute(RDD.scala:367)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:318)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:60)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:356)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:320)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:60)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:356)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:320)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:60)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:356)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:320)
	at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:60)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:356)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:320)
	at org.apache.spark.shuffle.ShuffleWriteProcessor.write(ShuffleWriteProcessor.scala:59)
	at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99)
	at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:52)
	at org.apache.spark.scheduler.Task.doRunTask(Task.scala:144)
	at org.apache.spark.scheduler.Task.run(Task.scala:117)
	at org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$9(Executor.scala:662)
	at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1581)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:665)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

Driver stacktrace:

我不明白其中在调用FastHan过程中的ValueError: 69 is not in list是如何产生的。之前测试的几次尝试中也出现过相同的报错,只是数字不是69, 是1,是10等等不一样的数字。求大佬解答。

CWS fine-tuning

Is it possible to fine-tune fastHan model for the CWS task? The most preferable option would be a class method (something like model.fine_tune(new_sentences, correct_segmentation)). Loading the model via pytorch and training it or any other options would be also OK.

If that's possible, in what way exactly? How does the input look like? (e.g. "csv-file with two columns: 1. sentence 2. expected list of tokens") Does it depend on the dataset used for original training? (e.g. for fine-tuning model trained on PKU I should use an input format A, while for fine-tuning WTB I should use B)

If not, are you planning to add such an option?

[来自作者] fastHan repo情况说明

大家好,我是fastHan论文以及第一代版本的作者。目前我已经从实验室毕业,但了解到当前没有人继续维护本项目。目前看到许多用户反映2.x无法下载、使用的问题,我决定继续维护第一代与第二代fastHan。目前的情况是,原先用于存放权重的文件服务器已经停用,第一代第二代模型均无法直接下载。后续我计划将文件权重放到huggingface或其他地方,可供用户直接加载。

由于我已经参加工作,只能在周末抽空更新,预计进度不会太快。欢迎有能力有时间的小伙伴提PR,大家一起为项目做出贡献。之前做本项目的时候,我对开源社区的模式不太了解,做的不是特别规范。后面希望能尽量改进,方便大家阅读、贡献。

Q:目前如何最快得使用到fastHan模型?
A:目前最快的方法是从百度网盘中下载第一代fastHan的权重并使用,请参考 #38 中的方法
请注意,若你的需求为分词、命名实体识别、词性标注、依存分析,一代、二代的性能较为接近,请放心使用一代模型。

Q:第一代fastHan迁移huggingface的难点?
A:第一代fastHan加载模型部分基于fastNLP开发,无法直接适配huggingface。需要修改加载模型逻辑,甚至修改模型.bin文件中参数路径。

Q:第二代fastHan迁移huggingface难点?
A:fastHan二代模型的权重位于实验室服务器,但我已连不上校园网,需要找同学帮忙导出。且我不了解二代的AMR部分,需要一定的时间来阅读代码并上手。

在初始化模型的时候怎么选择CPU运行模式下的模型 ?

在头一次初始化后,程序自动下载模型,但是在使用时缺提示没有CUDA 不能load模型。

所以像请问在哪可以直接下载CPU的模型 或者有什么设置吗

134     if not torch.cuda.is_available():

--> 135 raise RuntimeError('Attempting to deserialize object on a CUDA '
136 'device but torch.cuda.is_available() is False. '
137 'If you are running on a CPU-only machine, '

RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.

关于Ner下标的问题

生成式的Ner最难的如何输出下标,现在demo里只有结果,是直接回找么? 感觉会有偏差

吐槽一下分词的准确性

fastHan:

['谢谢', '邀', '请', '前', '面有', '人说不', '知', '道', '马', '飞', '飞是', '谁,', '特地', '百', '度', '一下。', '马飞飞', '原', '名彭逸', '飞', '庆', '经也', '是一', '职', '业', '选', '手', '但并', '没', '能有', '什', '大造化', '在俱', '乐部', '合', '约', '限', '制', '下,', '只能', '终', '日', '雪藏', '就在此', '时被', '卢', '本伟', '发掘', '直播', '天赋', '开', '始', '尝试', '带', '他进', '行', '双人直', '播。', '马', '飞飞', '原', '先的', 'I', 'D', '飞飞', '在直', '播', '中被', '观', '众带', '节', '奏', '指出', '他爱', '拍', '老板', '马', '屁,', '被观', '众老', '爷', '称', '作马', '屁', '飞', '节', '奏', '带', '多了', '干', '脆认', '名字,', '改', '马飞', '飞了', '作者:', 'B', 'en', 'n', 'u\n链接:', 'h', 'ttps://www.zhihu.com/question/264483756/answer/28431', '10', '5\n来', '源:知', '著', '作权', '作者', '商业', '转载', '请联', '系作', '获', '得授', '权,', '非', '商业', '转载', '请']

jieba:

['谢谢', '邀请', '有人', '说', '马飞飞', '特地', '百度', '…', '…', '马飞飞', '原名', '彭逸飞', '重庆', '职业', '选手', '没能', '造化', '俱乐部', '合约', '只能', '终日', '雪藏', '卢本伟', '发掘', '直播', '天赋', '尝试', '带', '双人', '直播', '马飞飞', '原先', 'ID', '飞飞', '直播', '中', '观众', '带', '节奏', '指出', '爱', '拍', '老板', '马屁', '观众', '老爷', '称作', '马屁', '飞', '节奏', '带', '干脆', '认下', '名字', '改叫', '马飞飞', '作者', 'Bennu', '链接', 'https', 'www', 'zhihu', 'question', '264483756', 'answer', '284311005', '来源', '知乎', '著作权', '作者', '商业', '转载', '请', '作者', '授权', '非商业', '转载', '请', '注明', '出处']

当然,我在切割后过滤了停用词,但是这个效果对比未免有点太夸张了,是样本的错吗?

Tesla-T4(16G)finetune修改batch_size时总是被Killed

image
实际显存占用率也不高,自身分词数据只有120M大小, 修改batch_size=16或者32时均被Killed,只能使用源码batch_size=8.
使用Tesla-T4训练1个Epoch都需要一周时间~~ 有没有大佬遇到这种问题该怎么解

模型下载报错

ConnectionError: HTTPConnectionPool(host='download.fastnlp.top', port=80): Max retries exceeded with url: /fasthan/fasthan.zip (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fd4f2aecfd0>: Failed to establish a new connection: [Errno 110] Connection timed out'))

是下载服务器又挂了吗?请问有没有其他的下载2.0版本的模型的方式呢?

Which directory to place the downloaded file?

Which directory to place the "fasthan_base.zip"

/opt/anaconda3/lib/python3.7/site-packages/fastNLP/io
(base) [limkh@tarcbda io]$ ls -lrt
total 72
-rw-rw-r--. 1 limkh limkh 2365 Dec 14 12:03 init.py
-rw-rw-r--. 1 limkh limkh 20393 Dec 14 12:03 file_utils.py
-rw-rw-r--. 1 limkh limkh 5376 Dec 14 12:03 file_reader.py
-rw-rw-r--. 1 limkh limkh 8656 Dec 14 12:03 embed_loader.py
-rw-rw-r--. 1 limkh limkh 18920 Dec 14 12:03 data_bundle.py
-rw-rw-r--. 1 limkh limkh 3543 Dec 14 12:03 utils.py
-rw-rw-r--. 1 limkh limkh 1499 Dec 14 12:03 model_io.py
drwxrwxr-x. 3 limkh limkh 223 Dec 14 12:03 loader
drwxrwxr-x. 3 limkh limkh 208 Dec 14 12:03 pipe
drwxrwxr-x. 2 limkh limkh 232 Dec 14 12:03 pycache
(base) [limkh@tarcbda io]$

I think firewall in the network block it, whereas I can download base through another network. The following is the error:

File "/opt/anaconda3/lib/python3.7/site-packages/fastNLP/io/file_utils.py", line 459, in get_from_cache
raise HTTPError(f"Status code:{req.status_code}. Fail to download from {url}.")
requests.exceptions.HTTPError: Status code:403. Fail to download from http://212.129.155.247/fasthan/fasthan_base.zip.

模型训练

感谢你杰出的工作,请问对于具体的模型的训练能否具体说明呢?比如数据的格式,模型的加载等

finetune Parsing任务不会自动finetune cws和pos任务

尊敬的作者:

您好。我发现一个很有提升价值的点。

如果我直接做parsing的finetune, 然后在测试集上看效果, 发现分词的效果很不好, 照理来说不应该这样, 所以我猜测Parsing任务没有包含cws和pos的finetune, 但是照理来说parsing的标签是包含了cws和pos的信息的.

我先执行cws的finetune再执行parsing的finetune发现test集合上的分词效果很好.

所以我理解在执行更高级的任务的时候, 可以先从最低级的任务开始finetune, 而且是自动完成这个过程.

即如果finetune Parsing, 则先finetune cws, 然后finetune pos, 最后finetune parsing

如果finetune pos, 则先finetune cws, 再finetune pos

作者您怎么看?

实现方法请教

您好,感谢fasthan开源,尝试了一下感觉效果非常好,想请教一下现在论文是否已经发布在一些预印本网站上如arxiv等。希望学习一下训练方式和实现方式,感谢!

内存溢出

求问:频繁调用,所占内存越来越大,最后程序被kill,这是为什么??

url模型路径调用错误

from fastHan import FastHan
model = FastHan(url="D:/code/term weight/Q2/fasthan_large")
sentence = "诺基亚(NOKIA)105 新 黑色 直板按键 移动2G手机 老人老年手机 学生备用功能机 超长待机 双卡双待"
answer = model(sentence)
print(answer)

报错:
Traceback (most recent call last):
File "D:/code/term weight/Q2/segment.py", line 40, in
model = FastHan(url="D:/code/term weight/Q2/fasthan_large")
File "E:\python\lib\site-packages\fastHan\FastModel.py", line 121, in init
self.model.load_state_dict(model_state_dict)
File "E:\python\lib\site-packages\torch\nn\modules\module.py", line 1223, in load_state_dict
raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(self.class.name, "\n\t".join(error_msgs)))
RuntimeError: Error(s) in loading state_dict for CharModel:
Unexpected key(s) in state_dict: "embed.model.encoder.encoder.layer.4.attention.self.query.weight", "embed.model.encoder.encoder.layer.4.attention.self.query.bias", "embed.model.encoder.encoder.layer.4.attention.self.key.weight", "embed.model.encoder.encoder.layer.4.attention.self.key.bias", "embed.model.encoder.encoder.layer.4.attention.self.value.weight", "embed.model.encoder.encoder.layer.4.attention.self.value.bias", "embed.model.encoder.encoder.layer.4.attention.output.dense.weight", "embed.model.encoder.encoder.layer.4.attention.output.dense.bias", "embed.model.encoder.encoder.layer.4.attention.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.4.attention.output.LayerNorm.bias", "embed.model.encoder.encoder.layer.4.intermediate.dense.weight", "embed.model.encoder.encoder.layer.4.intermediate.dense.bias", "embed.model.encoder.encoder.layer.4.output.dense.weight", "embed.model.encoder.encoder.layer.4.output.dense.bias", "embed.model.encoder.encoder.layer.4.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.4.output.LayerNorm.bias", "embed.model.encoder.encoder.layer.5.attention.self.query.weight", "embed.model.encoder.encoder.layer.5.attention.self.query.bias", "embed.model.encoder.encoder.layer.5.attention.self.key.weight", "embed.model.encoder.encoder.layer.5.attention.self.key.bias", "embed.model.encoder.encoder.layer.5.attention.self.value.weight", "embed.model.encoder.encoder.layer.5.attention.self.value.bias", "embed.model.encoder.encoder.layer.5.attention.output.dense.weight", "embed.model.encoder.encoder.layer.5.attention.output.dense.bias", "embed.model.encoder.encoder.layer.5.attention.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.5.attention.output.LayerNorm.bias", "embed.model.encoder.encoder.layer.5.intermediate.dense.weight", "embed.model.encoder.encoder.layer.5.intermediate.dense.bias", "embed.model.encoder.encoder.layer.5.output.dense.weight", "embed.model.encoder.encoder.layer.5.output.dense.bias", "embed.model.encoder.encoder.layer.5.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.5.output.LayerNorm.bias", "embed.model.encoder.encoder.layer.6.attention.self.query.weight", "embed.model.encoder.encoder.layer.6.attention.self.query.bias", "embed.model.encoder.encoder.layer.6.attention.self.key.weight", "embed.model.encoder.encoder.layer.6.attention.self.key.bias", "embed.model.encoder.encoder.layer.6.attention.self.value.weight", "embed.model.encoder.encoder.layer.6.attention.self.value.bias", "embed.model.encoder.encoder.layer.6.attention.output.dense.weight", "embed.model.encoder.encoder.layer.6.attention.output.dense.bias", "embed.model.encoder.encoder.layer.6.attention.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.6.attention.output.LayerNorm.bias", "embed.model.encoder.encoder.layer.6.intermediate.dense.weight", "embed.model.encoder.encoder.layer.6.intermediate.dense.bias", "embed.model.encoder.encoder.layer.6.output.dense.weight", "embed.model.encoder.encoder.layer.6.output.dense.bias", "embed.model.encoder.encoder.layer.6.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.6.output.LayerNorm.bias", "embed.model.encoder.encoder.layer.7.attention.self.query.weight", "embed.model.encoder.encoder.layer.7.attention.self.query.bias", "embed.model.encoder.encoder.layer.7.attention.self.key.weight", "embed.model.encoder.encoder.layer.7.attention.self.key.bias", "embed.model.encoder.encoder.layer.7.attention.self.value.weight", "embed.model.encoder.encoder.layer.7.attention.self.value.bias", "embed.model.encoder.encoder.layer.7.attention.output.dense.weight", "embed.model.encoder.encoder.layer.7.attention.output.dense.bias", "embed.model.encoder.encoder.layer.7.attention.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.7.attention.output.LayerNorm.bias", "embed.model.encoder.encoder.layer.7.intermediate.dense.weight", "embed.model.encoder.encoder.layer.7.intermediate.dense.bias", "embed.model.encoder.encoder.layer.7.output.dense.weight", "embed.model.encoder.encoder.layer.7.output.dense.bias", "embed.model.encoder.encoder.layer.7.output.LayerNorm.weight", "embed.model.encoder.encoder.layer.7.output.LayerNorm.bias".

分词 粒度问题

支持 basic 和 fhrase粒度吗?
CWS:AS, CITYU, CNC, CTB, MSR, PKU, SXU, UDC, WTB, ZX
是通过设置这个来决定切词粒度吗?有更具体的说明吗

执行POS finetune出错

image
image

作者您好,执行pos finetune的时候出错,应该是数据集处理有点问题,我看pos和parsing都用同样的打标格式, 所以就task参数改了值,其它没改

加载模型的时候报错

安装了fastHan后,
使用一下命令
from fastHan import FastHan
model=FastHan()

然后发生报错: No such file or directory: 'C:\Users\win\.fastNLP\fasthan\fasthan\fasthan-model.pth'

请问这是什么原因呢?谢谢~

Parsing微调报错

您好,我按照您的要求将微调数据集的内容设置为:
1 印度 印度 NR NR _ 3 nn _ _
2 海军 海军 NN NN _ 3 nn _ _
3 参谋长 参谋长 NN NN _ 5 nsubjpass _ _
4 被 被 SB SB _ 5 pass _ _
5 解职 解职 VV VV _ 0 root _ _
但是依然报错:
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 3 dimensions. The detected shape was (2, 5, 2) + inhomogeneous part.
请求答疑

Chinese Dependency Parsing的SOTA模型

作者您好:

我看了一下chinese dependency parsing在paperswithcode上的SOTA模型

显示是这一篇Glyce: Glyph-vectors for Chinese Character Representations

它的dependency parsing的分数89 L , 90.2 U, 而本项目readme中的文档中写的dependency parsing的SOTA的准确率没有这个高, 请问readme中是参考的哪篇的数据?

调用模型报错

requests.exceptions.ProxyError: HTTPConnectionPool(host='127.0.0.1', port=7890): Max retries exceeded with url: http://212.129.155.247/fasthan/fasthan_base.zip (Caused by ProxyError('Cannot connect to proxy.', RemoteDisconnected('Remote end closed connection without response')))
zsh: terminated env PYTHONIOENCODING=UTF-8 PYTHONUNBUFFERED=1 --default --client --host

添加用户词典后报错

RuntimeError: The size of tensor a (39) must match the size of tensor b (34) at non-singleton dimension 1

全是中文时,能正常分词
image

句子中加入英文单词后就报错
image

use_dict改成False后也能正常分词
image

期待新版本能处理超过512的长句!

在做长句的分词时,我通常会先根据中文标点符号分句,再对句子碎片进行分词。然而,在部分场景下,用中文标点分出来的句子仍然很长。其原因当然与语料作者没有按照正常中文书面语使用习惯有关,处理的方法当然可以用长度硬拆,但是这样会在数据预处理阶段引入误差。如果作者能解决长句的分词问题就太好啦!

NER模型是否会支持fine-tune和自定义字典

老师您好,感谢您的工作和分享!
看到目前有base和larege两个模型,想请教下老师,这两个模型是否能支持fine-tune呢?另外,fastnlp中的训练好的模型,能否再次直接载入?
同时看到一些开源工作,不少有支持添加自定义字典,老师您这边会考虑吗?
谢谢

想请问下你们的CWS是如何测试的?

首先感谢大佬们分享。
我想请问你下你们的CWS是怎么测试得到的F值?
看到test.py里面有写了一些数据,但是不知道这些测试数据具体是怎样的形式。不知道方便分享一下测试的代码或者数据吗?

[QUESTION] how to use as segmenter/tokenizer

Hello, thanks for this interesting project!
Currently in my nlp pipelines I'm using Jieba / Mecab as chinese / segmenter and japanese/tokenizer modules.
Is it safe to use FastHan as a replacement of Mecab han tokenizer?

Thank you!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.