ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

古汉语NLP四步走:用甲言Jiayan让文言文自动断句、分词与词性标注

古汉语NLP四步走:用甲言Jiayan让文言文自动断句、分词与词性标注 古汉语NLP四步走用甲言Jiayan让文言文自动断句、分词与词性标注【免费下载链接】Jiayan甲言专注于古代汉语(古汉语/古文/文言文/文言)处理的NLP工具包支持文言词库构建、分词、词性标注、断句和标点。Jiayan, the 1st NLP toolkit designed for Classical Chinese, supports lexicon construction, tokenizing, POS tagging, sentence segmentation and punctuation.项目地址: https://gitcode.com/gh_mirrors/ji/Jiayan面对一部没有句读的古籍影印本数千字的文言要靠人工逐句断句、逐词标注一部十万字的文献往往要耗掉研究者数周时间——这是古籍数字化中最磨人的环节。古汉语NLP工具包「甲言Jiayan」正是冲着这个痛点而来它是第一个专门为文言文设计的开源解决方案用几行代码即可完成自动断句、加标点、分词与词性标注。通用NLP工具为何在文言文面前频频失灵可以把现在的通用中文NLP工具想象成一位只受过现代普通话训练的读者现代汉语里词的边界清晰句子自带标点可一旦切换到文言文它立刻变得举步维艰。原因主要有三点词的体系完全不同。文言文以单字词为绝对主体通用工具的词表里根本没有内圣外王老聃这类组合于是经常把一个整体硬生生拆散。虚词几乎失联。之、乎、者、也、焉、哉……这些虚词在现代汉语里接近消失通用词性标注器面对它们只能靠猜。训练语料里没有句读。古籍大多以无标点的白文流传通用工具连基本的停顿位置都定位不了。举个直观的例子同样是内圣外王之道这六个字通用工具常常切出内/圣/外/王之道或故内/圣外王这类结果——对熟悉古文的读者来说这等于把一个完整概念劈成了散件。甲言Jiayan第一个为古汉语而生的NLP工具包甲言取甲骨文言之意定位非常清晰不做现代汉语的附庸而是从零为文言文搭一套处理体系。它把五件事打包进了一个 Python 包里词库构建——用无监督方式从古籍全文里自动挖词产出带统计信息的文言词典分词——基于字符级隐马尔可夫模型与 N-gram 语言模型无需词典也能切词词性标注——基于条件随机场并配了一套文言专属的标签体系断句——基于字符级 CRF识别白文中的句读位置标点——在断句结果之上叠加一层 CRF补上逗号、句号、感叹号等现代标点。整条处理链路是白文原文 → 断句 → 加标点 → 分词 → 词性标注 → 结构化结果。接下来我们就用一段真实的古文把这条链路完整走一遍。四步走演示一段无标点古文的全流程处理下面这段选自《庄子》的白文就是典型的处理对象天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也第一步断句与标点先让句读归位把这段白文交给断句模型它会先切出一个个语义完整的小单元天下大乱 | 贤圣不明 | 道德不一 | 天下多得一察焉以自好 | 譬如耳目 | 皆有所明 | ……。紧接着标点模型在这基础上补上现代标点天下大乱贤圣不明道德不一天下多得一察焉以自好譬如耳目皆有所明不能相通犹百家众技也……断句的核心是字符级 CRF 序列标注并引入了点互信息PMI与 t 检验值作为特征——这两个指标专门用来衡量某个位置前后是不是一个天然停顿点。第二步分词把内圣外王当整体切出来分词器接到已带标点的句子后效果是这样的输入片段甲言Jiayan常见通用工具内圣外王之道内圣外王 / 之 / 道内 / 圣 / 外 / 王之道甲言把内圣外王作为一个整体保留而通用工具往往拆得七零八落。这套字符级 HMM 分词方案把哪里是词边界当成一个序列标注问题来解再用 kenlm 语言模型计算每个字符出现在词首、词中、词尾的概率最后通过维特比算法挑出最合理的一种切法无需任何人工词表。第三步词性标注给每个词贴上语法身份证把切好的词串喂给词性标注器每个词都会得到一个标签。例如天下(n) / 大乱(a) / (wp) / 贤圣(n) / 不(d) / 明(a) / (wp) / 道德(n) / 不(d) / 一(m) / 。(wp)其中n表示名词、a形容词、d副词、m数词、wp标点。这套标签体系共有三十余类连地名、人名、专名、拟声词都有专门标记比通用工具的名词/动词两板斧精细得多。第四步词库构建从语料里自动挖一部词典这一步是甲言的特色功能。把一部古籍全文比如《庄子》丢给PMIEntropyLexiconConstructor它会自动统计出每个候选词的词频、PMI 值、左右邻接熵并输出成一张 CSV 词表。实际效果令人惊喜天下、圣人、万物、老聃、仁义这类文言高频词会被自动识别出来根本不需要人工标注。挖出来的词典还能反哺分词环节用于有词典的最大概率路径分词形成建词库—用词库的闭环。效果如何一组数据与横向对比下表汇总了甲言在四项核心任务上的参考指标以及与通用汉语工具的大致差距任务核心技术甲言指标通用工具参考值分词字符级 HMM N-gram92.3%通常低于 70%断句字符级 CRFF1 达 89.7%几乎没有现成方案词性标注词级 CRF88.5%通常低于 60%自动标点层叠 CRF87.2%几乎没有现成方案需要说明的是古汉语分词目前没有公开的标准测试集这些数字是在项目自有评测集上的结果但纵向对比的意义依然明显同样是文言文专用工具的底线常常就是通用工具的上限。三分钟上手从安装到跑通第一个示例安装依赖与准备模型先把仓库克隆到本地并安装依赖git clone https://gitcode.com/gh_mirrors/ji/Jiayan cd Jiayan pip install jiayan pip install https://github.com/kpu/kenlm/archive/master.zip安装完成后按项目 README 的说明下载四个预训练文件放到项目目录jiayan.klm语言模型、pos_model词性标注模型、cut_model断句模型、punc_model标点模型。准备工作就算齐了。跑通分词、断句与标点下面这段代码演示了核心主流程一共只有几行from jiayan import load_lm, CharHMMTokenizer, CRFSentencizer, CRFPunctuator lm load_lm(jiayan.klm) # 第一步加载语言模型 text 天下大乱贤圣不明道德不一天下多得一察焉以自好 print(list(CharHMMTokenizer(lm).tokenize(text))) # 分词 sent CRFSentencizer(lm) # 断句 sent.load(cut_model) print(sent.sentencize(text)) punc CRFPunctuator(lm, cut_model) # 加标点 punc.load(punc_model) print(punc.punctuate(text))白话解释加载一次语言模型后分词、断句、标点三个组件共用它分别输出切好的词、切好的短句和带标点的完整句子。跑通词性标注词性标注不依赖语言模型单独加载即可from jiayan import CRFPOSTagger postagger CRFPOSTagger() postagger.load(pos_model) print(postagger.postag([天下, 大乱, , 贤圣, 不, 明]))白话解释把分词结果当成词串传进去返回的就是一串与之一一对应的词性标签。更多完整示例都集中在jiayan/examples.py里包括训练自定义模型、批量处理等写法可以直接参照运行。三个贴近真实工作的应用场景场景一古籍点校与数字化整理痛点出版社、图书馆的古籍整理项目靠人工给白文断句标点一部书动辄几周人力。做法OCR 扫描得到白文文本后先交给甲言做断句和标点再由校对人员逐页复核修正把精力集中在疑难句上。效率收益原本需要数天的工作压缩到几小时人力从逐字断句解放为抽样校核。场景二文言文课堂教学痛点备课要逐字逐句手切词、手标词性还要做词频统计来找教学重点十分琐碎。做法一键对课文分词并标注词性直接生成带标注的教学讲义课上让学生把内圣外王之道等句子的分词结果与通用工具结果对比理解为什么古文要这样切。效率收益备课时间大幅缩短课堂从老师讲给学生听变成学生看着结果讨论互动性更强。场景三历史文献的量化研究痛点研究者想统计某部著作的高频词、词汇共现关系靠人工建语料库门槛极高。做法先用词库构建工具对目标文献自动成词再配合分词器批量处理全文输出词频表与共现数据用于风格识别、历时语言研究。效率收益从读文献升级为算文献个人研究者也能负担起大规模的文本统计分析。使用中常见的坑与对策遇到繁体文本怎么办当前模型基于简体语料训练暂不支持繁体。建议先用 OpenCC 把输入转成简体处理完成后再转回繁体。超长古籍怎么处理建议把全文按卷、按篇切分每批不超过 5000 字再送入模型既稳定又省内存。生僻词、领域词识别不准用词库构建功能针对目标文献生成自定义词典再结合有词典分词模式准确率会有明显提升。想训练自己的模型examples.py里已经写好了断句、标点、词性标注三个任务的训练入口准备好自己的标注语料即可重新训练。现在就可以开始的四件小事想让文言文处理真正自动化你只需要按顺序完成四步克隆仓库并安装依赖、下载预训练模型、跑通第一段白文、再用词库构建功能为你的研究语料建一部专属词典。当那些沉睡千年的句子第一次被机器读出句读、标上词性研究者与古人的对话方式就从这十几行代码悄然改变了。【免费下载链接】Jiayan甲言专注于古代汉语(古汉语/古文/文言文/文言)处理的NLP工具包支持文言词库构建、分词、词性标注、断句和标点。Jiayan, the 1st NLP toolkit designed for Classical Chinese, supports lexicon construction, tokenizing, POS tagging, sentence segmentation and punctuation.项目地址: https://gitcode.com/gh_mirrors/ji/Jiayan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表