[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-fastnlp--fastHan":3,"similar-fastnlp--fastHan":98},{"id":4,"github_repo":5,"name":6,"description_en":7,"description_zh":8,"ai_summary_zh":8,"readme_en":9,"readme_zh":10,"quickstart_zh":11,"use_case_zh":12,"hero_image_url":13,"owner_login":14,"owner_name":15,"owner_avatar_url":16,"owner_bio":17,"owner_company":18,"owner_location":18,"owner_email":19,"owner_twitter":18,"owner_website":18,"owner_url":20,"languages":21,"stars":26,"forks":27,"last_commit_at":28,"license":29,"difficulty_score":30,"env_os":31,"env_gpu":32,"env_ram":33,"env_deps":34,"category_tags":43,"github_topics":49,"view_count":30,"oss_zip_url":18,"oss_zip_packed_at":18,"status":58,"created_at":59,"updated_at":60,"faqs":61,"releases":97},3648,"fastnlp\u002FfastHan","fastHan","fastHan是基于fastNLP与pytorch实现的中文自然语言处理工具，像spacy一样调用方便。","fastHan 是一款专为中文自然语言处理打造的高效工具，基于 fastNLP 与 PyTorch 构建，旨在让开发者像使用 Spacy 处理英文一样便捷地处理中文。它核心采用 BERT 联合模型架构，在 15 个语料库上训练而成，能够一站式解决中文分词、词性标注、依存分析及命名实体识别等多项基础任务。\n\n特别值得一提的是，fastHan 不仅精通现代汉语，从 2.0 版本起更拓展了对古汉语的分词与词性标注能力，并支持中文抽象语义表示（AMR）任务，部分性能表现甚至接近或超越了当时的最先进模型。其独特的技术亮点在于引入 Prompt 技术增强模型理解力，并提供灵活的用户词典功能，允许用户自定义词汇以适配特定领域需求。\n\n这款工具非常适合 NLP 领域的研究人员、算法工程师以及需要快速集成中文处理能力的应用开发者使用。无论是进行学术研究、数据标注，还是构建实际的上层应用，fastHan 都能通过极简的 API 调用（仅需加载模型与输入句子两步）大幅降低开发门槛。尽管目前因服务器故障暂时停止在线参数下载服务，但其开源代码与架构设计依然为中文 NLP 社区提供了宝贵的参考与实践方案。","# fastHan\n\n\n**致歉：fastHan的模型因为服务器故障导致参数丢失，暂时停止服务。我们将尽快开始下一版迭代，敬请期待。同时，如果有已经下载或保存参数的朋友，恳请您与我们联系，万分感谢。**\n\n\n## 简介\nfastHan是基于[fastNLP](https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP)与pytorch实现的中文自然语言处理工具，像spacy一样调用方便。\n\n其内核为基于BERT的联合模型，其在15个语料库中进行训练，可处理中文分词、词性标注、依存分析、命名实体识别多项任务。\n\n从fastHan2.0开始，fastHan在原有的基础上，增加了对古汉语分词、古汉语词性标注的处理。此外，fastHan还可以处理中文AMR任务。fastHan在各项任务均有不错表现，在部分数据集上接近甚至超越SOTA模型。\n\n**最后，如果您对古汉语分词、词性标注非常感兴趣，您也可以关注实验室另外一个工作[bert-ancient-chinese](https:\u002F\u002Fblog.csdn.net\u002FJi_Huai\u002Farticle\u002Fdetails\u002F125209985)（[论文](https:\u002F\u002Faclanthology.org\u002F2022.lt4hala-1.25\u002F)）。**\n\nFor English README, you can click [here](https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fblob\u002Fmaster\u002FREADME.EN.md)\n\n## 引用\n\n如果您在工作中使用了fastHan工具，您可以引用这篇[论文](https:\u002F\u002Farxiv.org\u002Fabs\u002F2009.08633)：\nZhichao Geng, Hang Yan, Xipeng Qiu and Xuanjing Huang, fastHan: A BERT-based Multi-Task Toolkit for Chinese NLP, ACL, 2021.\n\n```\n@inproceedings{geng-etal-2021-fasthan,\n  author = {Geng, Zhichao and Yan, Hang and Qiu, Xipeng and Huang, Xuanjing},\n  title = {fastHan: A BERT-based Multi-Task Toolkit for Chinese NLP},\n  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},\n  year = {2021},\n  pages = {99--106}, \n  url = {https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.12}\n}\n```\n\n## 安装指南\n\nfastHan需要以下依赖的包：\n\n- torch>=1.8.0\n- fastNLP>=1.0.0\n  - 特别注意：**2.0版本以前**的fastHan依赖的fastNLP版本低于1.0.0。\n- transformers>=4.0.0\n- **fastHan2.0可能还使用了其他一些常见的包，如果在使用过程中碰见`找不到包`提示，直接使用pip安装即可。**\n  - datasets==2.7.0\n  - pandas==1.5.1\n  - numpy==1.22.2\n\n\n**版本更新:**\n\n- 1.1版本的fastHan与0.5.5版本的fastNLP会导致import error。如果使用1.1版本的fastHan，请使用0.5.0版本的fastNLP。\n- 1.2版本的fastHan修复了fastNLP版本兼容问题。小于等于1.2版本的fastHan在输入句子的首尾包含**空格、换行**符时会产生BUG。如果字符串首尾包含上述字符，请使用 strip 函数处理输入字符串。\n- 1.3版本的fastHan自动对输入字符串做 strip 函数处理。\n- 1.4版本的fastHan加入用户词典功能（仅限于分词任务）\n- 1.5版本的fastHan\n  - 修正了Parsing任务中可能会出现的Value Error\n  - 修改结果的返回形式，默认以list的形式返回\n  - 可以通过url路径加载模型\n- 1.6版本的fastHan\n  - 将用户词典功能扩充到所有任务\n  - 可以在返回值中包含位置信息\n- 1.7版本的fastHan\n  - 添加finetune功能\n- **2.0版本的fastHan**\n  - **训练数据集：**新增了《人民日报》数据集、《左传》数据集进行训练\n  - **模型架构：**在原来的基础了引入了prompt技术，进一步提升了模型的能力\n  - **问题修复：**修复了基础功能当传入的句子过多而导致显存、内存使用量剧增的问题\n  - **新增功能：**新增了中文AMR能力\n\n\n可执行如下命令完成安装：\n\n```\npip install fastHan\n```\n\n或者可以通过github安装：\n```\ngit clone git@github.com:fastnlp\u002FfastHan.git\ncd fastHan\npython setup.py install\n```\n\n## **快速上手**\nfastHan的使用极为简单，只需两步：加载模型、将句子输入模型。\n\n**加载模型**\n\n执行以下代码可以加载**fastHan模型**：\n\n```\nfrom fastHan import FastHan\nmodel=FastHan()\n```\n此时若用户为首次初始化模型，将自动从服务器中下载参数。\n\nfastHan2.0模型基于12层BERT模型，如果需要使用更小的模型，可以下载fastHan2.0之前的版本。\n\n\n\n执行以下代码可以加载**FastCAMR模型**：\n\n```\nfrom fastHan import FastCAMR\ncamr_model=FastCAMR()\n```\n\n此时若用户为首次初始化模型，将自动从服务器中下载参数。\n\n\n\n此外，对于手动下载模型的用户以及保存过微调模型的用户，可以使用模型路径加载模型。下载压缩包并解压后，可将对应路径通过url参数传入。一则使用模型路径加载模型的例子如下：\n\n```\nmodel=FastHan(url=\"\u002Fremote-home\u002Fpywang\u002Ffinetuned_model\")\ncamr_model=FastCAMR(url=\"\u002Fremote-home\u002Fpywang\u002Ffinetuned_camr_model\")\n```\n\n\n\n **输入句子**\n\n模型对句子进行依存分析、命名实体识别的简单例子如下：\n\n```\nsentence=\"郭靖是金庸笔下的男主角。\"\nanswer=model(sentence)\nprint(answer)\nanswer=model(sentence,target=\"Parsing\")\nprint(answer)\nanswer=model(sentence,target=\"NER\")\nprint(answer)\n```\n模型将会输出如下信息：\n\n```\n[['郭靖', '是', '金庸', '笔', '下', '的', '男', '主角', '。']]\n[[['郭靖', 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']]]\n[[['郭靖', 'NR'], ['金庸', 'NR']]]\n```\n可选参数：\n- **target**: 可在'CWS', 'POS', 'CWS-guwen', 'POS-guwen', 'NER', 'Parsing'六个选项中取值，模型将分别进行中文分词（现代汉语）、词性标注（现代汉语）、中文分词（古代汉语）、词性标注（古代汉语）、命名实体识别、依存分析任务，模型默认进行CWS任务。\n  - 词性标注任务包含了分词的信息，而依存分析任务又包含了分词任务。命名实体识别任务相较其他任务独立。\n  - 模型的POS、Parsing任务均使用CTB标签集。NER使用msra标签集。\n- **use_dict**: 是否使用用户词典，默认为False。\n- **return_list**：是否以list形式传递返回值。默认为True。\n- **return_loc**: 是否将词的位置信息返回，默认为False。可用于spanF metric的评估。\n\n\n\n模型对句子进行中文CAMR的简单例子如下：\n\n```\nsentence = \"这样 的 活动 还 有 什么 意义 呢 ？\"\nanswer = camr_model(sentence)\nfor ans in answer:\n    print(ans)\n```\n\n模型将会输出如下信息：\n\n```\n(x5\u002F有-03\n        :mod()(x4\u002F还)\n        :arg1()(x7\u002F意义\n                :mod()(x11\u002Famr-unknown))\n        :mode(x12\u002Finterrogative)(x13\u002Fexpressive)\n        :time(x2\u002F的)(x3\u002F活动-01\n                :arg0-of(x2\u002F的-01)(x1\u002F这样)))\n```\n\n特别注意的是，输入到fastCAMR模型中的句子必须是用空格隔开分词的句子。如果原始的句子并没有经过分词，可以先通过fastHan的分词功能进行分词，在将通过空格分隔开词汇的句子输入到fastCAMR句子中。\n\n**切换设备**\n\n可使用模型的 set_device 函数，令模型在cuda上运行或切换回cpu，示例如下：\n\n```\nmodel.set_device('cuda:0')\nmodel.set_device('cpu')\ncamr_model.set_device('cuda:0')\ncamr_model.set_device('cpu')\n```\n## **进阶功能**\n\n**微调模型**\n\n用户可以根据自己的需求在新的数据集上进行微调，一则微调的例子如下方所示：\n```\nfrom fastHan import FastHan\n\nmodel=FastHan()\n\n# train data file path\ncws_url='train.dat'\n\nmodel.set_device(0)\nmodel.finetune(data_path=cws_url,task='CWS',save=True,save_url='finetuned_model')\n```\n微调前设置set_device函数可实用GPU加速。微调时需要将用于训练的数据按格式放到一个文件里。\n\n对于CWS任务，则要求每行一条数据，每个词用空格分隔开。\n\nExample:\n\n    上海 浦东 开发 与 法制 建设 同步\n    新华社 上海 二月 十日 电 （ 记者 谢金虎 、 张持坚 ）\n    ...\n\n对于NER任务，要求按照MSRA数据集的格式与标签集。\n\nExample:\n\n    札 B-NS\n    幌 E-NS\n    雪 O\n    国 O\n    庙 O\n    会 O\n    。 O\n    \n    主 O\n    道 O\n    上 O\n    的 O\n    雪 O\n    \n    ...\n\n对于CWS-guwen, 由于训练样本制约, 本模型暂不支持单纯的对古文分词进行训练。\n\n对于POS-guwen, 要求按照如下格式, 每个句子一行。\n\nExample:\n\n```\n春秋\u002Fn 左傳\u002Fn 定公\u002Fnr\n元年\u002Ft ，\u002Fw 春\u002Fn ，\u002Fw 王\u002Fn 正月\u002Ft 辛巳\u002Ft ，\u002Fw 晉\u002Fns 魏舒\u002Fnr 合\u002Fv 諸侯\u002Fn 之\u002Fu 大夫\u002Fn 于\u002Fp 狄泉\u002Fns ，\u002Fw 將\u002Fd 以\u002Fc 城\u002Fn 成周\u002Fns 。\u002Fw\n魏子\u002Fnr 蒞政\u002Fv 。\u002Fw\n...\n```\n\n对于POS和dependency parsing，要求按照CTB9的格式与标签集。\n\nExample:\n\n    1       印度    _       NR      NR      _       3       nn      _       _\n    2       海军    _       NN      NN      _       3       nn      _       _\n    3       参谋长  _       NN      NN      _       5       nsubjpass       _       _\n    4       被      _       SB      SB      _       5       pass    _       _\n    5       解职    _       VV      VV      _       0       root    _       _\n    \n    1       新华社  _       NR      NR      _       7       dep     _       _\n    2       新德里  _       NR      NR      _       7       dep     _       _\n    3       １２月  _       NT      NT      _       7       dep     _       _\n    ...\n\n该函数有如下参数：\n- **data_path**:\tstr，用于微调的数据集文件的路径。\n- **task**：str，此次微调的任务，可选值'CWS','POS','CWS-guwen','POS-guwen','Parsing','NER'。\n- **lr**：float，微调的学习率。默认取1e-5。\n- **n_epochs**：int，微调的迭代次数，默认取1。\n- **batch_size**:int，每个batch的数据数量，默认为8。\n- **save**:bool，是否保存微调后的模型，默认为False。\n- **save_url**:str，若保存模型，则此值为保存模型的路径。\n\n\n\n**camr_model也拥有微调功能**，一则微调的例子如下方所示：\n\n```\nfrom fastHan import FastCAMR\n\ncamr_model=FastCAMR()\n\n# train data file path\ncws_url='train.dat'\n\ncamr_model.set_device(0)\ncamr_model.finetune(data_path=cws_url,save=True,save_url='finetuned_model')\n```\n\n微调前设置set_device函数可实用GPU加速。微调时需要将用于训练的数据按格式放到一个文件里。\n\n数据集文件的格式要依照中文AMR语料库CAMR1.0的格式, 如下所示。\n\nExample:\n\n```\n# ::id export_amr.1322 ::2017-01-04\n# ::snt 这样 的 活动 还 有 什么 意义 呢 ？\n# ::wid x1_这样 x2_的 x3_活动 x4_还 x5_有 x6_什么 x7_意义 x8_呢 x9_？ x10_\n(x5\u002F有-03 \n    :mod()(x4\u002F还) \n    :arg1()(x7\u002F意义 \n        :mod()(x11\u002Famr-unknown)) \n    :mode()(x2\u002F的) \n    :mod-of(x12\u002F的而)(x1\u002F这样))\n\n\n# ::id export_amr.1327 ::2017-01-04\n# ::snt 并且 还 有 很多 高层 的 人物 哦 ！\n# ::wid x1_并且 x2_还 x3_有 x4_很多 x5_高层 x6_的 x7_人物 x8_哦 x9_！ x10_\n(x11\u002Fand \n    :op2(x1\u002F并且)(x3\u002F有-03 \n        :mod()(x2\u002F还) \n        :arg1()(x7\u002F人物 \n            :mod-of(x6\u002F的)(x5\u002F高层) \n            :quant()(x12\u002F-))) \n    :mode()(x13\u002F- \n        :expressive()(x14\u002F-)))\n        \n...\n```\n\n相关格式的含义请详见中文AMR语料库CAMR1.0的标准。\n\n该函数有如下参数：\n\n- :param str data_path:  用于微调的数据集文件的路径。\n\n- :param float lr:     微调的学习率。默认取1e-5。\n\n- :param int n_epochs:   微调的迭代次数, 默认取1。\n\n- :param int batch_size:  每个batch的数据数量, 默认为8。\n\n-  :param bool save:    是否保存微调后的模, 默认为False。\n\n- :param str save_url:   若保存模型，则此值为保存模型的路径。\n\n**词典分词**\n\n用户可以使用模型的 add_user_dict 函数添加自定义词典，该词典会影响模型在分词任务中的权重分配。进行分词任务时，首先利用词典进行正向、反向最大匹配法进行分词，并将词典方法的分词结果乘上权重系数融入到深度学习模型的结果中。该函数的参数可以是由词组成的list，也可以是文件路径（文件中的内容是由'\\n'分隔开的词）。\n\n用户可使用 set_user_dict_weight 函数设置权重系数（若不设置，默认为0.05）。我们在大规模的训练语料库中发现0.05-0.1即可取得较好的结果。条件允许的情况下，用户也可以自行设置验证集、测试集，找到最适合自己任务的权重系数。\n\n添加完用户词典后，需要在调用模型时令 use_dict 参数为True。\n\n用户可调用 remove_user_dict 移除之前添加的用户词典。\n\n使用用户词典影响分词的一则例子如下：\n```\nsentence=\"奥利奥利奥\"\nprint(model(sentence))\nmodel.add_user_dict([\"奥利\",\"奥利奥\"])\nprint(model(sentence,use_dict=True))\n```\n输出为：\n```\n[['奥利奥利奥']]\n[['奥利', '奥利奥']]\n```\n\n**分词风格**\n\n分词风格，指的是训练模型中文分词模块的10个语料库，模型可以区分这10个语料库，设置分词style为S即令模型认为现在正在处理S语料库的分词。所以分词style实际上是与语料库的覆盖面、分词粒度相关的。如本模型默认的CTB语料库分词粒度较细。如果想切换不同的粒度，可以使用模型的 set_cws_style 函数，例子如下：\n\n>\n```\nsentence=\"一个苹果。\"\nprint(model(sentence,'CWS'))\nmodel.set_cws_style('cnc')\nprint(model(sentence,'CWS'))\n```\n模型将输出如下内容：\n\n```\n[['一', '个', '苹果', '。']]\n[['一个', '苹果', '。']]\n```\n对语料库的选取参考了下方CWS SOTA模型的论文，共包括：SIGHAN 2005的 MSR、PKU、AS、CITYU 语料库，由山西大学发布的 SXU 语料库，由斯坦福的CoreNLP 发布的 CTB6 语料库，由国家语委公布的 CNC 语料库，由王威廉先生公开的微博树库 WTB，由张梅山先生公开的诛仙语料库 ZX，Universal Dependencies 项目的 UD 语料库。\n\n**输入与输出**\n\n输入模型的可以是单独的字符串，也可是由字符串组成的列表。在fastHan2.0之前，如果输入的是列表，模型将一次性处理所有输入的字符串，所以请自行控制 batch size。从FastHan2.0开始，将不受输入的list大小的限制。\n\n模型的输出可以是python的list，也可以是fastHan中自定义的Sentence与Token类。模型默认返回list。\n\n如果将\"return_list\"参数设为False，模型将输出一个由sentence组成的列表，而每个sentence又由token组成。每个token本身代表一个被分好的词，有pos、head、head_label、ner、loc属性，代表了该词的词性、依存关系、命名实体识别信息、起始位置。\n\n一则输入输出的例子如下所示：\n\n```\nsentence=[\"我爱踢足球。\",\"林丹是冠军\"]\nanswer=model(sentence,'Parsing',return_list=False)\nfor i,sentence in enumerate(answer):\n    print(i)\n    for token in sentence:\n        print(token,token.pos,token.head,token.head_label)\n```\n上述代码将输出如下内容：\n\n```\n0\n我 PN 2 nsubj\n爱 VV 0 root\n踢 VV 2 ccomp\n足球 NN 3 dobj\n。 PU 2 punct\n1\n林丹 NR 2 top\n是 VC 0 root\n冠军 NN 2 attr\n！ PU 2 punct\n```\n可在分词风格中选择'as'、'cityu'进行繁体字分词，这两项为繁体语料库。\n\n此外，由于各项任务共享词表、词嵌入，即使不切换模型的分词风格，模型对繁体字、英文字母、数字均具有一定识别能力。\n\n## **模型表现**\n\n**泛化能力测试**\n\n对于NLP工具包来说，最重要的就是泛化能力，即在未知数据集里的表现。我们选取了样本较为复杂的Weibo数据集。我们在Weibo的dev集和test集进行了分词测试，并与jieba、THULAC、LTP4.0、SnowNLP进行了对比，对比结果如下（spanF metric）。\n\n 数据集 | SnowNLP | jieba | THULAC | LTP4.0 base | fastHan large | fastHan (fine-tuned) \n--- | --- | --- | --- | --- | --- | ---\nWeibo dev_set|0.7999|0.8319 |0.8649|0.9182|0.9314 |0.9632\nWeibo test_set|0.7965 | 0.8358 | 0.8665 | 0. 9205 | 0.9338 | 0.9664\n\n作为可以现成使用的工具，fastHan的准确率相较于SnowNLP、jieba、THULAC有较大提升。相较于LTP 4.0-base，fastHan的准确率更高，且模型更小（262MB：492MB）。\n在finetune之后，fastHan的准确率也提升明显。\n\n**准确率测试**\n\n模型在以下数据集进行训练和准确性测试：\n\n- CWS：AS, CITYU, CNC, CTB, MSR, PKU, SXU, UDC, WTB, ZX\n- NER：MSRA、OntoNotes\n- POS & Parsing：CTB9\n\n注：模型在训练NER OntoNotes时将其标签集转换为与MSRA一致。\n\n模型在ctb分词语料库的前800句进行了速度测试，平均每句有45.2个字符。测试环境为私人电脑， Intel Core i5-9400f + NVIDIA GeForce GTX 1660ti，batch size取8。经测试依存分析运行速度较慢，其他各项任务运行速度大致相同。。\n\n最终模型取得的表现如下：\n\n\n任务 | CWS | POS | NER MSRA | CWS-guen | POS-guwen | NER OntoNotes | Parsing | 速度(句\u002Fs),cpu|速度(句\u002Fs)，gpu\n---|---|--- |--- |--- |--- |---|---|---|---\nSOTA模型 | 97.1 | 93.15 | 96.09 | —— | —— | 81.82 | 81.71 |——|——\nbase模型 | 97.27 | 94.88 | 94.33 | —— | —— | 82.86 | 76.71 |25-55|22-111\nlarge模型 | 97.41 | 95.66 | 95.50 | —— | —— | 83.82| 81.38 |14-28|21-97\nFastHan2.0 | 97.50 | 95.92 | 95.79 | 93.29 | 86.53 | 82.76 | 81.31 |2-10|20-60\n\n表格中单位为百分数。CWS的成绩是10项任务的平均成绩。SOTA模型的数据来自笔者对网上资料及论文的查阅，如有缺漏请指正，不胜感激。\n\n**在fastHan2.0中，相关的古汉语处理已经达到了很高的水平，如果您追求更好的性能，并且对BERT以及transformers库有一定的了解，欢迎了解实验室的另外一个工作[bert-ancient-chinese](https:\u002F\u002Fblog.csdn.net\u002FJi_Huai\u002Farticle\u002Fdetails\u002F125209985)。**\n\n这五项SOTA表现分别来自如下五篇论文：\n\n1. 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.\n2. 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.\n3. Meng Y, Wu W, Wang F, et al. Glyce: Glyph-vectors for Chinese Character Representations[J]. arXiv: Computation and Language, 2019.\n4. 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\n\n","# fastHan\n\n\n**致歉：fastHan的模型因为服务器故障导致参数丢失，暂时停止服务。我们将尽快开始下一版迭代，敬请期待。同时，如果有已经下载或保存参数的朋友，恳请您与我们联系，万分感谢。**\n\n\n## 简介\nfastHan是基于[fastNLP](https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP)与pytorch实现的中文自然语言处理工具，像spacy一样调用方便。\n\n其内核为基于BERT的联合模型，其在15个语料库中进行训练，可处理中文分词、词性标注、依存分析、命名实体识别多项任务。\n\n从fastHan2.0开始，fastHan在原有的基础上，增加了对古汉语分词、古汉语词性标注的处理。此外，fastHan还可以处理中文AMR任务。fastHan在各项任务均有不错表现，在部分数据集上接近甚至超越SOTA模型。\n\n**最后，如果您对古汉语分词、词性标注非常感兴趣，您也可以关注实验室另外一个工作[bert-ancient-chinese](https:\u002F\u002Fblog.csdn.net\u002FJi_Huai\u002Farticle\u002Fdetails\u002F125209985)（[论文](https:\u002F\u002Faclanthology.org\u002F2022.lt4hala-1.25\u002F)）。**\n\nFor English README, you can click [here](https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fblob\u002Fmaster\u002FREADME.EN.md)\n\n## 引用\n\n如果您在工作中使用了fastHan工具，您可以引用这篇[论文](https:\u002F\u002Farxiv.org\u002Fabs\u002F2009.08633)：\nZhichao Geng, Hang Yan, Xipeng Qiu and Xuanjing Huang, fastHan: A BERT-based Multi-Task Toolkit for Chinese NLP, ACL, 2021.\n\n```\n@inproceedings{geng-etal-2021-fasthan,\n  author = {Geng, Zhichao and Yan, Hang and Qiu, Xipeng and Huang, Xuanjing},\n  title = {fastHan: A BERT-based Multi-Task Toolkit for Chinese NLP},\n  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},\n  year = {2021},\n  pages = {99--106}, \n  url = {https:\u002F\u002Faclanthology.org\u002F2021.acl-demo.12}\n}\n```\n\n## 安装指南\n\nfastHan需要以下依赖的包：\n\n- torch>=1.8.0\n- fastNLP>=1.0.0\n  - 特别注意：**2.0版本以前**的fastHan依赖的fastNLP版本低于1.0.0。\n- transformers>=4.0.0\n- **fastHan2.0可能还使用了其他一些常见的包，如果在使用过程中碰见`找不到包`提示，直接使用pip安装即可。**\n  - datasets==2.7.0\n  - pandas==1.5.1\n  - numpy==1.22.2\n\n\n**版本更新:**\n\n- 1.1版本的fastHan与0.5.5版本的fastNLP会导致import error。如果使用1.1版本的fastHan，请使用0.5.0版本的fastNLP。\n- 1.2版本的fastHan修复了fastNLP版本兼容问题。小于等于1.2版本的fastHan在输入句子的首尾包含**空格、换行**符时会产生BUG。如果字符串首尾包含上述字符，请使用 strip 函数处理输入字符串。\n- 1.3版本的fastHan自动对输入字符串做 strip 函数处理。\n- 1.4版本的fastHan加入用户词典功能（仅限于分词任务）\n- 1.5版本的fastHan\n  - 修正了Parsing任务中可能会出现的Value Error\n  - 修改结果的返回形式，默认以list的形式返回\n  - 可以通过url路径加载模型\n- 1.6版本的fastHan\n  - 将用户词典功能扩充到所有任务\n  - 可以在返回值中包含位置信息\n- 1.7版本的fastHan\n  - 添加finetune功能\n- **2.0版本的fastHan**\n  - **训练数据集：**新增了《人民日报》数据集、《左传》数据集进行训练\n  - **模型架构：**在原来的基础了引入了prompt技术，进一步提升了模型的能力\n  - **问题修复：**修复了基础功能当传入的句子过多而导致显存、内存使用量剧增的问题\n  - **新增功能：**新增了中文AMR能力\n\n\n可执行如下命令完成安装：\n\n```\npip install fastHan\n```\n\n或者可以通过github安装：\n```\ngit clone git@github.com:fastnlp\u002FfastHan.git\ncd fastHan\npython setup.py install\n```\n\n## **快速上手**\nfastHan的使用极为简单，只需两步：加载模型、将句子输入模型。\n\n**加载模型**\n\n执行以下代码可以加载**fastHan模型**：\n\n```\nfrom fastHan import FastHan\nmodel=FastHan()\n```\n此时若用户为首次初始化模型，将自动从服务器中下载参数。\n\nfastHan2.0模型基于12层BERT模型，如果需要使用更小的模型，可以下载fastHan2.0之前的版本。\n\n\n\n执行以下代码可以加载**FastCAMR模型**：\n\n```\nfrom fastHan import FastCAMR\ncamr_model=FastCAMR()\n```\n\n此时若用户为首次初始化模型，将自动从服务器中下载参数。\n\n\n\n此外，对于手动下载模型的用户以及保存过微调模型的用户，可以使用模型路径加载模型。下载压缩包并解压后，可将对应路径通过url参数传入。一则使用模型路径加载模型的例子如下：\n\n```\nmodel=FastHan(url=\"\u002Fremote-home\u002Fpywang\u002Ffinetuned_model\")\ncamr_model=FastCAMR(url=\"\u002Fremote-home\u002Fpywang\u002Ffinetuned_camr_model\")\n```\n\n\n\n **输入句子**\n\n模型对句子进行依存分析、命名实体识别的简单例子如下：\n\n```\nsentence=\"郭靖是金庸笔下的男主角。\"\nanswer=model(sentence)\nprint(answer)\nanswer=model(sentence,target=\"Parsing\")\nprint(answer)\nanswer=model(sentence,target=\"NER\")\nprint(answer)\n```\n模型将会输出如下信息：\n\n```\n[['郭靖', '是', '金庸', '笔', '下', '的', '男', '主角', '。']]\n[[['郭靖', 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']]]\n[[['郭靖', 'NR'], ['金庸', 'NR']]]\n```\n可选参数：\n- **target**: 可在'CWS', 'POS', 'CWS-guwen', 'POS-guwen', 'NER', 'Parsing'六个选项中取值，模型将分别进行中文分词（现代汉语）、词性标注（现代汉语）、中文分词（古代汉语）、词性标注（古代汉语）、命名实体识别、依存分析任务，模型默认进行CWS任务。\n  - 词性标注任务包含了分词的信息，而依存分析任务又包含了分词任务。命名实体识别任务相较其他任务独立。\n  - 模型的POS、Parsing任务均使用CTB标签集。NER使用msra标签集。\n- **use_dict**: 是否使用用户词典，默认为False。\n- **return_list**：是否以list形式传递返回值。默认为True。\n- **return_loc**: 是否将词的位置信息返回，默认为False。可用于spanF metric的评估。\n\n\n\n模型对句子进行中文CAMR的简单例子如下：\n\n```\nsentence = \"这样 的 活动 还 有 什么 意义 呢 ？\"\nanswer = camr_model(sentence)\nfor ans in answer:\n    print(ans)\n```\n\n模型将会输出如下信息：\n\n```\n(x5\u002F有-03\n        :mod()(x4\u002F还)\n        :arg1()(x7\u002F意义\n                :mod()(x11\u002Famr-unknown))\n        :mode(x12\u002Finterrogative)(x13\u002Fexpressive)\n        :time(x2\u002F的)(x3\u002F活动-01\n                :arg0-of(x2\u002F的-01)(x1\u002F这样)))\n```\n\n特别注意的是，输入到fastCAMR模型中的句子必须是用空格隔开分词的句子。如果原始的句子并没有经过分词，可以先通过fastHan的分词功能进行分词，在将通过空格分隔开词汇的句子输入到fastCAMR句子中。\n\n**切换设备**\n\n可使用模型的 set_device 函数，令模型在cuda上运行或切换回cpu，示例如下：\n\n```\nmodel.set_device('cuda:0')\nmodel.set_device('cpu')\ncamr_model.set_device('cuda:0')\ncamr_model.set_device('cpu')\n```\n## **进阶功能**\n\n**微调模型**\n\n用户可以根据自己的需求在新的数据集上进行微调，一则微调的例子如下方所示：\n```\nfrom fastHan import FastHan\n\nmodel=FastHan()\n\n# train data file path\ncws_url='train.dat'\n\nmodel.set_device(0)\nmodel.finetune(data_path=cws_url,task='CWS',save=True,save_url='finetuned_model')\n```\n微调前设置set_device函数可实用GPU加速。微调时需要将用于训练的数据按格式放到一个文件里。\n\n对于CWS任务，则要求每行一条数据，每个词用空格分隔开。\n\nExample:\n\n    上海 浦东 开发 与 法制 建设 同步\n    新华社 上海 二月 十日 电 （ 记者 谢金虎 、 张持坚 ）\n    ...\n\n对于NER任务，要求按照MSRA数据集的格式与标签集。\n\nExample:\n\n    札 B-NS\n    扇 E-NS\n    雪 O\n    国 O\n    庙 O\n    会 O\n    。 O\n    \n    主 O\n    道 O\n    上 O\n    的 O\n    雪 O\n    \n    ...\n\n对于CWS-guwen, 由于训练样本制约, 本模型暂不支持单纯的对古文分词进行训练。\n\n对于POS-guwen, 要求按照如下格式, 每个句子一行。\n\nExample:\n\n```\n春秋\u002Fn 左傳\u002Fn 定公\u002Fnr\n元年\u002Ft ，\u002Fw 春\u002Fn ，\u002Fw 王\u002Fn 正月\u002Ft 辛巳\u002Ft ，\u002Fw 晉\u002Fns 魏舒\u002Fnr 合\u002Fv 諸侯\u002Fn 之\u002Fu 大夫\u002Fn 于\u002Fp 狄泉\u002Fns ，\u002Fw 將\u002Fd 以\u002Fc 城\u002Fn 成周\u002Fns 。\u002Fw\n魏子\u002Fnr 蒞政\u002Fv 。\u002Fw\n...\n```\n\n对于POS和dependency parsing，要求按照CTB9的格式与标签集。\n\nExample:\n\n    1       印度    _       NR      NR      _       3       nn      _       _\n    2       海军    _       NN      NN      _       3       nn      _       _\n    3       参謀長  _       NN      NN      _       5       nsubjpass       _       _\n    4       被      _       SB      SB      _       5       pass    _       _\n    5       解職    _       VV      VV      _       0       root    _       _\n    \n    1       新華社  _       NR      NR      _       7       dep     _       _\n    2       新德里  _       NR      NR      _       7       dep     _       _\n    3       １２月  _       NT      NT      _       7       dep     _       _\n    ...\n\n该函数有如下参数：\n- **data_path**:\tstr，用于微调的数据集文件的路径。\n- **task**：str，此次微调的任务，可选值'CWS','POS','CWS-guwen','POS-guwen','Parsing','NER'。\n- **lr**：float，微调的学习率。默认取1e-5。\n- **n_epochs**：int，微调的迭代次数，默认取1。\n- **batch_size**:int，每个batch的数据数量，默认为8。\n- **save**:bool，是否保存微调后的模型，默认为False。\n- **save_url**:str，若保存模型，则此值为保存模型的路径。\n\n\n\n**camr_model也拥有微调功能**，一则微调的例子如下方所示：\n\n```\nfrom fastHan import FastCAMR\n\ncamr_model=FastCAMR()\n\n# train data file path\ncws_url='train.dat'\n\ncamr_model.set_device(0)\ncamr_model.finetune(data_path=cws_url,save=True,save_url='finetuned_model')\n```\n\n微调前设置set_device函数可实用GPU加速。微调时需要将用于训练的数据按格式放到一个文件里。\n\n数据集文件的格式要依照中文AMR语料库CAMR1.0的格式, 如下所示。\n\nExample:\n\n```\n# ::id export_amr.1322 ::2017-01-04\n# ::snt 这样 的 活動 近乎 無意義 啊？\n# ::wid x1_這樣 x2_的 x3_活動 x4_還 x5_有 x6_什麼 x7_意義 x8_呢 x9_？ x10_\n(x5\u002F有-03 \n    :mod()(x4\u002F還) \n    :arg1()(x7\u002F意義 \n        :mod()(x11\u002Famr-unknown)) \n    :mode()(x2\u002F的) \n    :mod-of(x12\u002F的而)(x1\u002F這樣))\n\n\n# ::id export_amr.1327 ::2017-01-04\n\n# ::snt 并且 还 有 很多 高层 的 人物 哦 ！\n# ::wid x1_并且 x2_还 x3_有 x4_很多 x5_高层 x6_的 x7_人物 x8_哦 x9_！ x10_\n(x11\u002Fand \n    :op2(x1\u002F并且)(x3\u002F有-03 \n        :mod()(x2\u002F还) \n        :arg1()(x7\u002F人物 \n            :mod-of(x6\u002F的)(x5\u002F高层) \n            :quant()(x12\u002F-))) \n    :mode()(x13\u002F- \n        :expressive()(x14\u002F-)))\n        \n...\n```\n\n相关格式的含义请详见中文AMR语料库CAMR1.0的标准。\n\n该函数有如下参数：\n\n- :param str data_path:  用于微调的数据集文件的路径。\n\n- :param float lr:     微调的学习率。默认取1e-5。\n\n- :param int n_epochs:   微调的迭代次数, 默认取1。\n\n- :param int batch_size:  每个batch的数据数量, 默认为8。\n\n-  :param bool save:    是否保存微调后的模, 默认为False。\n\n- :param str save_url:   若保存模型，则此值为保存模型的路径。\n\n**词典分词**\n\n用户可以使用模型的 add_user_dict 函数添加自定义词典，该词典会影响模型在分词任务中的权重分配。进行分词任务时，首先利用词典进行正向、反向最大匹配法进行分词，并将词典方法的分词结果乘上权重系数融入到深度学习模型的结果中。该函数的参数可以是由词组成的list，也可以是文件路径（文件中的内容是由'\\n'分隔开的词）。\n\n用户可使用 set_user_dict_weight 函数设置权重系数（若不设置，默认为0.05）。我们在大规模的训练语料库中发现0.05-0.1即可取得较好的结果。条件允许的情况下，用户也可以自行设置验证集、测试集，找到最适合自己任务的权重系数。\n\n添加完用户词典后，需要在调用模型时令 use_dict 参数为True。\n\n用户可调用 remove_user_dict 移除之前添加的用户词典。\n\n使用用户词典影响分词的一则例子如下：\n```\nsentence=\"奥利奥利奥\"\nprint(model(sentence))\nmodel.add_user_dict([\"奥利\",\"奥利奥\"])\nprint(model(sentence,use_dict=True))\n```\n输出为：\n```\n[['奥利奥利奥']]\n[['奥利', '奥利奥']]\n```\n\n**分词风格**\n\n分词风格，指的是训练模型中文分词模块的10个语料库，模型可以区分这10个语料库，设置分词style为S即令模型认为现在正在处理S语料库的分词。所以分词style实际上是与语料库的覆盖面、分词粒度相关的。如本模型默认的CTB语料库分词粒度较细。如果想切换不同的粒度，可以使用模型的 set_cws_style 函数，例子如下：\n\n>\n```\nsentence=\"一个苹果。\"\nprint(model(sentence,'CWS'))\nmodel.set_cws_style('cnc')\nprint(model(sentence,'CWS'))\n```\n模型将输出如下内容：\n\n```\n[['一', '个', '苹果', '。']]\n[['一个', '苹果', '。']]\n```\n对语料库的选取参考了下方CWS SOTA模型的论文，共包括：SIGHAN 2005的 MSR、PKU、AS、CITYU 语料库，由山西大学发布的 SXU 语料库，由斯坦福的CoreNLP 发布的 CTB6 语料库，由国家语委公布的 CNC 语料库，由王威廉先生公开的微博树库 WTB，由张梅山先生公开的诛仙语料库 ZX，Universal Dependencies 项目的 UD 语料库。\n\n**输入与输出**\n\n输入模型的可以是单独的字符串，也可是由字符串组成的列表。在fastHan2.0之前，如果输入的是列表，模型将一次性处理所有输入的字符串，所以请自行控制 batch size。从FastHan2.0开始，将不受输入的list大小的限制。\n\n模型的输出可以是python的list，也可以是fastHan中自定义的Sentence与Token类。模型默认返回list。\n\n如果将\"return_list\"参数设为False，模型将输出一个由sentence组成的列表，而每个sentence又由token组成。每个token本身代表一个被分好的词，有pos、head、head_label、ner、loc属性，代表了该词的词性、依存关系、命名实体识别信息、起始位置。\n\n一则输入输出的例子如下所示：\n\n```\nsentence=[\"我爱踢足球。\",\"林丹是冠军\"]\nanswer=model(sentence,'Parsing',return_list=False)\nfor i,sentence in enumerate(answer):\n    print(i)\n    for token in sentence:\n        print(token,token.pos,token.head,token.head_label)\n```\n上述代码将输出如下内容：\n\n```\n0\n我 PN 2 nsubj\n爱 VV 0 root\n踢 VV 2 ccomp\n足球 NN 3 dobj\n。 PU 2 punct\n1\n林丹 NR 2 top\n是 VC 0 root\n冠军 NN 2 attr\n！ PU 2 punct\n```\n可在分词风格中选择'as'、'cityu'进行繁体字分词，这两项为繁体语料库。\n\n此外，由于各项任务共享词表、词嵌入，即使不切换模型的分词风格，模型对繁体字、英文字母、数字均具有一定识别能力。\n\n## **模型表现**\n\n**泛化能力测试**\n\n对于NLP工具包来说，最重要的就是泛化能力，即在未知数据集里的表现。我们选取了样本较为复杂的Weibo数据集。我们在Weibo的dev集和test集进行了分词测试，并与jieba、THULAC、LTP4.0、SnowNLP进行了对比，对比结果如下（spanF metric）。\n\n 数据集 | SnowNLP | jieba | THULAC | LTP4.0 base | fastHan large | fastHan (fine-tuned) \n--- | --- | --- | --- | --- | --- | ---\nWeibo dev_set|0.7999|0.8319 |0.8649|0.9182|0.9314 |0.9632\nWeibo test_set|0.7965 | 0.8358 | 0.8665 | 0. 9205 | 0.9338 | 0.9664\n\n作为可以现成使用的工具，fastHan的准确率相较于SnowNLP、jieba、THULAC有较大提升。相较于LTP 4.0-base，fastHan的准确率更高，且模型更小（262MB：492MB）。\n在finetune之后，fastHan的准确率也提升明显。\n\n**准确率测试**\n\n模型在以下数据集进行训练和准确性测试：\n\n- CWS：AS, CITYU, CNC, CTB, MSR, PKU, SXU, UDC, WTB, ZX\n- NER：MSRA、OntoNotes\n- POS & Parsing：CTB9\n\n注：模型在训练NER OntoNotes时将其标签集转换为与MSRA一致。\n\n模型在ctb分词语料库的前800句进行了速度测试，平均每句有45.2个字符。测试环境为私人电脑， Intel Core i5-9400f + NVIDIA GeForce GTX 1660ti，batch size取8。经测试依存分析运行速度较慢，其他各项任务运行速度大致相同。。\n\n最终模型取得的表现如下：\n\n\n任务 | CWS | POS | NER MSRA | CWS-guen | POS-guwen | NER OntoNotes | Parsing | 速度(句\u002Fs),cpu|速度(句\u002Fs)，gpu\n---|---|--- |--- |--- |--- |---|---|---|---\nSOTA模型 | 97.1 | 93.15 | 96.09 | —— | —— | 81.82 | 81.71 |——|——\nbase模型 | 97.27 | 94.88 | 94.33 | —— | —— | 82.86 | 76.71 |25-55|22-111\nlarge模型 | 97.41 | 95.66 | 95.50 | —— | —— | 83.82| 81.38 |14-28|21-97\nFastHan2.0 | 97.50 | 95.92 | 95.79 | 93.29 | 86.53 | 82.76 | 81.31 |2-10|20-60\n\n表格中单位为百分数。CWS的成绩是10项任务的平均成绩。SOTA模型的数据来自笔者对网上资料及论文的查阅，如有缺漏请指正，不胜感激。\n\n**在fastHan2.0中，相关的古汉语处理已经达到了很高的水平，如果您追求更好的性能，并且对BERT以及transformers库有一定的了解，欢迎了解实验室的另外一个工作[bert-ancient-chinese](https:\u002F\u002Fblog.csdn.net\u002FJi_Huai\u002Farticle\u002Fdetails\u002F125209985)。**\n\n这五项SOTA表现分别来自如下五篇论文：\n\n1. 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.\n2. 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.\n3. Meng Y, Wu W, Wang F, et al. Glyce: Glyph-vectors for Chinese Character Representations[J]. arXiv: Computation and Language, 2019.\n4. 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 快速上手指南\n\n## 环境准备\n\n在开始使用前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：Linux \u002F macOS \u002F Windows\n*   **Python 版本**：建议 Python 3.7+\n*   **核心依赖**：\n    *   `torch` >= 1.8.0\n    *   `fastNLP` >= 1.0.0 (注意：fastHan 2.0+ 必须使用此版本)\n    *   `transformers` >= 4.0.0\n*   **其他常见依赖**（若安装时报错缺失，请手动安装）：\n    *   `datasets` == 2.7.0\n    *   `pandas` == 1.5.1\n    *   `numpy` == 1.22.2\n\n> **注意**：fastHan 2.0 模型基于 12 层 BERT 架构。首次运行加载模型时会自动下载参数，请确保网络连接通畅。目前官方模型参数因服务器故障暂时无法下载，如有本地保存的参数可直接通过路径加载。\n\n## 安装步骤\n\n推荐使用 pip 进行安装：\n\n```bash\npip install fastHan\n```\n\n或者通过 GitHub 源码安装：\n\n```bash\ngit clone git@github.com:fastnlp\u002FfastHan.git\ncd fastHan\npython setup.py install\n```\n\n> **国内加速提示**：若下载速度较慢，建议使用国内镜像源安装依赖：\n> ```bash\n> pip install fastHan -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n## 基本使用\n\nfastHan 的使用非常简洁，主要分为**加载模型**和**输入句子**两步。它支持中文分词、词性标注、依存分析、命名实体识别以及古汉语处理和中文 AMR 任务。\n\n### 1. 加载模型\n\n初始化模型时，若本地无参数，将自动尝试从服务器下载（当前服务暂停中，需使用本地已有参数或等待恢复）。\n\n```python\nfrom fastHan import FastHan\n\n# 加载主模型 (支持分词、POS、NER、Parsing 等)\nmodel = FastHan()\n\n# 若需使用中文 AMR 功能，加载专用模型\nfrom fastHan import FastCAMR\ncamr_model = FastCAMR()\n```\n\n**自定义模型路径加载**（适用于本地已下载或微调后的模型）：\n```python\n# 通过 url 参数指定本地解压后的模型文件夹路径\nmodel = FastHan(url=\"\u002Fpath\u002Fto\u002Fyour\u002Ffinetuned_model\")\ncamr_model = FastCAMR(url=\"\u002Fpath\u002Fto\u002Fyour\u002Ffinetuned_camr_model\")\n```\n\n### 2. 执行任务\n\n默认情况下，模型执行中文分词（CWS）任务。可通过 `target` 参数切换任务类型。\n\n**支持的任务类型 (`target`)**：\n*   `'CWS'`: 现代汉语分词 (默认)\n*   `'POS'`: 现代汉语词性标注 (包含分词信息)\n*   `'NER'`: 命名实体识别\n*   `'Parsing'`: 依存句法分析 (包含分词和 POS 信息)\n*   `'CWS-guwen'`: 古汉语分词\n*   `'POS-guwen'`: 古汉语词性标注\n\n#### 示例代码\n\n```python\nsentence = \"郭靖是金庸笔下的男主角。\"\n\n# 1. 默认任务：中文分词\nanswer = model(sentence)\nprint(answer) \n# 输出：[['郭靖', '是', '金庸', '笔', '下', '的', '男', '主角', '。']]\n\n# 2. 依存句法分析\nanswer = model(sentence, target=\"Parsing\")\nprint(answer)\n\n# 3. 命名实体识别\nanswer = model(sentence, target=\"NER\")\nprint(answer)\n# 输出：[[['郭靖', 'NR'], ['金庸', 'NR']]]\n```\n\n#### 常用参数说明\n*   `target`: 指定任务类型，默认为 `'CWS'`。\n*   `use_dict`: 是否启用用户词典，默认为 `False`。\n*   `return_list`: 是否以 list 格式返回结果，默认为 `True`。\n*   `return_loc`: 是否返回词语位置信息，默认为 `False`。\n\n### 3. 中文 AMR 使用示例\n\n**注意**：输入给 `FastCAMR` 的句子必须是**已分词且用空格分隔**的字符串。\n\n```python\nfrom fastHan import FastCAMR\n\ncamr_model = FastCAMR()\n# 输入需为空格分隔的分词结果\nsentence = \"这样 的 活动 还 有 什么 意义 呢 ？\"\n\nanswer = camr_model(sentence)\nfor ans in answer:\n    print(ans)\n```\n\n### 4. 设备切换与进阶技巧\n\n**切换运行设备 (CPU\u002FGPU)**\n```python\n# 切换到 GPU\nmodel.set_device('cuda:0')\ncamr_model.set_device('cuda:0')\n\n# 切换回 CPU\nmodel.set_device('cpu')\n```\n\n**使用用户词典优化分词**\n```python\n# 添加自定义词典\nmodel.add_user_dict([\"奥利\", \"奥利奥\"])\n\n# 调用时开启 use_dict\nsentence = \"奥利奥利奥\"\nresult = model(sentence, use_dict=True)\nprint(result)\n# 输出：[['奥利', '奥利奥']]\n```\n\n**切换分词风格 (粒度)**\n模型支持多种语料库风格（如 'ctb', 'cnc', 'msr' 等），可改变分词粒度。\n```python\nsentence = \"一个苹果。\"\n\n# 默认风格 (较细粒度)\nprint(model(sentence, 'CWS')) \n# [['一', '个', '苹果', '。']]\n\n# 切换为 CNC 风格 (较粗粒度)\nmodel.set_cws_style('cnc')\nprint(model(sentence, 'CWS'))\n# [['一个', '苹果', '。']]\n```","某数字人文研究团队正在构建一个涵盖现代新闻与古代典籍的混合语料库，需要高效提取实体关系并解析句法结构。\n\n### 没有 fastHan 时\n- **多模型堆叠繁琐**：处理分词、词性标注和依存分析需分别调用不同工具，代码耦合度高且维护困难。\n- **古今汉语割裂**：缺乏统一方案同时处理现代白话文与《左传》等古籍，需为古汉语单独训练或寻找小众模型。\n- **开发效率低下**：类似 Spacy 的便捷接口缺失，每次预处理都要编写大量胶水代码来对齐不同任务的输出格式。\n- **语义理解浅层**：难以直接获取中文抽象意义表示（AMR），限制了深层语义推理任务的开展。\n\n### 使用 fastHan 后\n- **一站式多任务处理**：通过 `model(sentence, target=\"Parsing\")` 等简单指令，单次加载即可按需切换分词、NER 或依存分析任务。\n- **古今语言通吃**：利用内置的古汉语模块（`CWS-guwen`），无需额外配置即可流畅解析“郭靖是金庸笔下的主角”与《左传》片段。\n- **调用如 Spacy 般丝滑**：基于 BERT 的联合模型架构让初始化仅需两行代码，默认返回列表格式结果，大幅缩短原型开发周期。\n- **深度语义增强**：集成 FastCAMR 模型支持中文 AMR 生成，为问答系统和知识图谱构建提供了更丰富的语义图结构。\n\nfastHan 以“一个模型搞定古今中文 NLP 全链路”的能力，将原本复杂的预处理流程简化为标准化调用，显著提升了研发效率。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffastnlp_fastHan_100d66c3.png","fastnlp","fastNLP","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Ffastnlp_a030d277.png","由复旦大学的自然语言处理（NLP）团队发起的国产自然语言处理开源项目",null,"xpqiu@fudan.edu.cn","https:\u002F\u002Fgithub.com\u002Ffastnlp",[22],{"name":23,"color":24,"percentage":25},"Python","#3572A5",100,762,88,"2026-04-02T07:22:01","Apache-2.0",2,"未说明","非必需，支持 CUDA 加速（示例使用 GTX 1660ti），具体显存和 CUDA 版本未说明","未说明（提及处理过多句子会导致内存剧增）",{"notes":35,"python":31,"dependencies":36},"1. 重要提示：官方模型参数因服务器故障丢失，服务暂时停止，需自行拥有参数文件或等待新版迭代。2. fastHan 2.0 基于 12 层 BERT 模型，旧版本模型更小。3. 首次运行会自动下载模型参数。4. 进行中文 AMR 任务时，输入句子必须是用空格分隔的分词结果。5. 注意 fastHan 与 fastNLP 的版本兼容性（1.1 版 fastHan 需搭配 0.5.0 版 fastNLP）。",[37,38,39,40,41,42],"torch>=1.8.0","fastNLP>=1.0.0","transformers>=4.0.0","datasets==2.7.0","pandas==1.5.1","numpy==1.22.2",[44,45,46,47,48],"图像","音频","视频","语言模型","开发框架",[14,50,51,52,53,54,55,56,57],"python","pytorch","parser","cws","pos","ner","joint-model","bert","ready","2026-03-27T02:49:30.150509","2026-04-06T06:45:34.773013",[62,67,72,77,82,87,92],{"id":63,"question_zh":64,"answer_zh":65,"source_url":66},16713,"模型自动下载失败或报错，是否有单独的下载地址？","如果遇到自动下载报错，建议尝试使用 1.8 版本而非 2.0 版本。维护者曾修复过下载服务器问题，如果仍然无法下载，可以检查网络连接或代理设置。对于手动放置模型，通常模型会下载到用户目录下的缓存文件夹，具体路径取决于操作系统和 FastHan 的版本配置。若服务器暂时不可用，可等待维护者修复或尝试在其他网络环境下下载。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fissues\u002F4",{"id":68,"question_zh":69,"answer_zh":70,"source_url":71},16714,"在没有 CUDA 的 CPU 环境下初始化模型报错怎么办？","如果在纯 CPU 环境（如 Mac 或未安装 GPU 的机器）运行时报错 'Attempting to deserialize object on a CUDA device'，这是因为模型默认尝试加载到 GPU。解决方法有两种：1. 降级使用 1.x 版本；2. 修改代码，在加载模型状态字典时指定 map_location。代码示例：self.model.load_state_dict(torch.load(model_path, map_location=torch.device('cpu')))。确保将 device 设置为您当前的运行设备。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fissues\u002F41",{"id":73,"question_zh":74,"answer_zh":75,"source_url":76},16715,"在 PySpark 环境下进行分词和 POS 标注时出现 ValueError 报错如何解决？","在 PySpark 中使用 Large 模型进行 Parsing（依存分析）可能会因数据兼容性问题导致 ValueError。如果只需要词性标注（POS）而不需要依存树，建议将模式改为 \"POS\"，即调用 model(text, target=\"POS\")，这样可以避免报错。此外，检查输入文本中是否包含特殊字符（如全角空格 \\u3000），建议将其替换为普通空格，因为这些字符可能不在词表中从而影响性能或导致错误。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fissues\u002F20",{"id":78,"question_zh":79,"answer_zh":80,"source_url":81},16716,"如何指定本地已下载的模型路径来加载模型，而不是让程序自动下载？","目前版本的 FastHan 主要通过 model_type 参数自动管理模型下载，直接通过文件路径加载自定义位置模型的功能在旧版本中支持有限。维护者表示该功能已在计划中，会在后续版本更新中增加支持，允许用户指定本地模型路径。在当前版本中，模型通常被下载到用户主目录的特定缓存路径下，若需移动模型，可能需要等待新版本支持或通过修改源代码实现。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fissues\u002F18",{"id":83,"question_zh":84,"answer_zh":85,"source_url":86},16717,"连接服务器下载模型时出现 ProxyError 或连接超时怎么办？","如果出现 'ProxyError' 或 'Remote end closed connection' 等网络错误，通常是因为代理设置问题或官方服务器暂时波动。首先检查您的网络代理配置（如 HTTP_PROXY 环境变量），尝试关闭代理或直接连接。其次，这可能是服务器端临时故障，维护者通常会尽快修复，请稍后重试。如果问题持续，可以尝试在新浏览器窗口直接访问模型链接测试连通性。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fissues\u002F10",{"id":88,"question_zh":89,"answer_zh":90,"source_url":91},16718,"FastHan 输出的词性标签（如 NR, VV, EM, AS 等）代表什么含义？","FastHan 在词性标注（POS）和依存分析上使用的是 CTB9（Chinese Treebank 9）语料库标准。具体的标签含义可以参考 CTB 项目的官方指南。您可以访问 https:\u002F\u002Fwww.cs.brandeis.edu\u002F~clp\u002Fctb\u002F 查看详细的标签定义文档。例如，NR 代表专有名词，VV 代表动词，NN 代表普通名词等。对于不常见的标签（如 EM, AS），同样可以在该网站的 guidelines 中找到解释。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fissues\u002F6",{"id":93,"question_zh":94,"answer_zh":95,"source_url":96},16719,"为什么在服务器上运行速度比本地慢很多？","运行速度慢通常与服务器 CPU 性能有关，即使核心数多，单核性能或指令集优化可能不如本地高性能 PC。如果可能，建议使用 GPU 加速运行以提升效率。此外，确保服务器环境配置正确，没有过多的后台进程占用资源。对于特定的词性标注疑问，同样参考 CTB9 标准文档以确认是否为模型预期输出。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastHan\u002Fissues\u002F26",[],[99,109,117,125,133,144],{"id":100,"name":101,"github_repo":102,"description_zh":103,"stars":104,"difficulty_score":105,"last_commit_at":106,"category_tags":107,"status":58},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[48,44,108],"Agent",{"id":110,"name":111,"github_repo":112,"description_zh":113,"stars":114,"difficulty_score":30,"last_commit_at":115,"category_tags":116,"status":58},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,"2026-04-05T11:33:21",[48,108,47],{"id":118,"name":119,"github_repo":120,"description_zh":121,"stars":122,"difficulty_score":30,"last_commit_at":123,"category_tags":124,"status":58},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[48,44,108],{"id":126,"name":127,"github_repo":128,"description_zh":129,"stars":130,"difficulty_score":30,"last_commit_at":131,"category_tags":132,"status":58},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[48,47],{"id":134,"name":135,"github_repo":136,"description_zh":137,"stars":138,"difficulty_score":30,"last_commit_at":139,"category_tags":140,"status":58},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[44,141,46,142,108,143,47,48,45],"数据工具","插件","其他",{"id":145,"name":146,"github_repo":147,"description_zh":148,"stars":149,"difficulty_score":105,"last_commit_at":150,"category_tags":151,"status":58},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[108,44,48,47,143]]