Hanlp自然语言处理工具之词法分析器
本章是接前两篇《分词工具Hanlp基于感知机的中文分词框架》和《基于结构化感知机的词性标注与命名实体识别框架》的。本系统将同时进行中文分词、词性标注与命名实体识别3个任务的子系统称为“词法分析器”。
加载
对应的类为PerceptronLexicalAnalyzer,其构造方法为递增的3个模型地址:
l public PerceptronLexicalAnalyzer(String cwsModelFile) throws IOException
l public PerceptronLexicalAnalyzer(String cwsModelFile, String posModelFile) throws IOException
l public PerceptronLexicalAnalyzer(String cwsModelFile, String posModelFile, String nerModelFile) throws IOException
用户根据自己要进行的任务,训练3个模型中的任意个数,然后灵活传入此类构造即可。此处假设训练了3个模型,那么传入这3个模型的路径即可构造词法分析器:
public void testCWSandPOSandNER() throws Exception
{
PerceptronLexicalAnalyzer segmenter = new PerceptronLexicalAnalyzer(Config.CWS_MODEL_FILE, Config.POS_MODEL_FILE, Config.NER_MODEL_FILE);
}
分析
词法分析器的分析接口如下:
public static final String SENTENCE = "香港特别行政区的张朝阳说商品和服务是三原县鲁桥食品厂的主营业务";
public void testCWSandPOSandNER() throws Exception
{
PerceptronLexicalAnalyzer segmenter = new PerceptronLexicalAnalyzer(Config.CWS_MODEL_FILE, Config.POS_MODEL_FILE, Config.NER_MODEL_FILE);
Sentence sentence = segmenter.analyze(SENTENCE);
System.out.println(sentence);
}
正常情况下输出:
[香港/ns 特别/a 行政区/n]/ns 的/n 张朝阳/nr 说/v 商品/n 和/c 服务/vn 是/v [三原县/ns 鲁桥/nz 食品厂/n]/nt 的/z 主营/vn 业务/n
Sentence结构是一个对人民日报语料格式的实现,用户可以方便地用for循环去遍历单词,用instanceof来判断单词属于复合词还是简单词。此处演示输出句子中所有复合词内部的简单词:
for (IWord word : sentence)
{
if (word instanceof CompoundWord)
System.out.println(((CompoundWord) word).innerList);
}
结果:
[香港/ns, 特别/a, 行政区/n]
[三原县/ns, 鲁桥/nz, 食品厂/n]
通过此结构,我们可以捕捉语言的复合结构(简单词构成复合词)。此结构输出为文本后满足人民日报2014语料格式,形成了一个语料与文本之间的闭环。
与HanLP旧接口的兼容
本系统依然兼容HanLP的seg接口,与analyze接口比较如下:
System.out.println(segmenter.seg(SENTENCE));
System.out.println(segmenter.analyze(SENTENCE));
输出:
[香港特别行政区/ns, 的/n, 张朝阳/nr, 说/v, 商品/n, 和/c, 服务/vn, 是/v, 三原县鲁桥食品厂/nt, 的/z, 主营/vn, 业务/n]
[香港/ns 特别/a 行政区/n]/ns 的/n 张朝阳/nr 说/v 商品/n 和/c 服务/vn 是/v [三原县/ns 鲁桥/nz 食品厂/n]/nt 的/z 主营/vn 业务/n
注意上面两个结果中的命名实体有着本质的不同,seg接口无法输出层次结构,而analyze接口可以。
在线学习
本框架另一个特色功能是“在线学习”,或称“增量训练”。其适用场景如下: 线上系统的统计模型依然会犯错误,但重新训练的代价过大(比如耗时长,没有语料等等)。本系统支持在线学习新知识,实时修正统计模型的错误。这里举一个分词的例子,人民日报1998年1月份训练出来的模型无法分对“下雨天地面积水”这个句子:
PerceptronSegmenter segmenter = new PerceptronSegmenter(Config.CWS_MODEL_FILE);
System.out.println(segmenter.segment("下雨天地面积水"));
输出:
[下雨, 天地, 面积, 水]
但本系统支持在线学习这个句子的正确分词方式:
segmenter.learn("下雨天 地面 积水");
System.out.println(segmenter.segment("下雨天地面积水"));
通过learn接口,感知机模型学习到了这个句子的正确分词方式,并输出了正确结果:
[下雨天, 地面, 积水]
对于类似的句子,也拥有了举一反三的泛化能力:
System.out.println(segmenter.segment("下雨天地面积累了很多水"));
输出:
[下雨天, 地面, 积累, 了, 很多, 水]
词性标注器和命名实体识别器也有类似的learn接口,用户可举一反三类似地调用,不再赘述。
模型压缩与持久化
在线学习或训练后的模型可以序列化到某个路径,其接口是:
/**
* @param ratio 压缩比c(压缩掉的体积,压缩后体积变为1-c)
* @return
*/
public LinearModel compress(final double ratio)
/**
* 保存到路径
*
* @param modelFile
* @throws IOException
*/
public void save(String modelFile, final double ratio) throws IOException
比如压缩比为0.1,则压缩后的体积为原来的0.9。此处的“体积”指的是特征数量,并不一定等于文件体积。
命令行接口
如上文所述,本框架中的功能可以通过命令行调用:
$ java -cp hanlp.jar com.hankcs.hanlp.model.perceptron.Main
缺少必需参数: -model
用法: com.hankcs.hanlp.model.perceptron.Main
-task [TaskType] 任务类型:CWS|POS|NER (CWS)
-train [flag] 执行训练任务
-test [flag] 执行预测任务
-evaluate [flag] 执行评估任务
-model [String] 模型文件路径
-input [String] 输入文本路径
-result [String] 结果保存路径
-gold [String] 标准分词语料
-reference [String] 训练集
-development [String] 开发集
-iter [Integer] 迭代次数 (5)
-compressRatio [Double] 模型压缩比率 (0.0)
-thread [int] 线程数 (8)
当用户按照上文所述训练了1到3个模型后,可以通过命令行接口交互式地观察效果:
$ java -cp target/hanlp-1.6.0.jar:src/main/resources com.hankcs.hanlp.model.perceptron.Main -test
商品和服务
商品/n 和/c 服务/vn
上海华安工业(集团)公司董事长谭旭光和秘书胡花蕊来到美国纽约现代艺术博物馆参观
[上海/ns 华安/nz 工业/n (/w 集团/n )/w 公司/n]/nt 董事长/n 谭旭光/nr 和/c 秘书/n 胡花蕊/nr 来到/v [美国/ns 纽约/ns 现代/t 艺术/n 博物馆/n]/ns 参观/v
l 默认加载配置文件指定的模型,可以通过-model your/cws.bin,your/pos.bin,your/ner.bin指定别的模型。
l 还可以将输入输出重定向到文件,形成一个pipeline。
l 更多信息,请参考《编译运行》。
未来工作
l 英文和数字最好要做特殊处理。
l 与hanlp-lucene-plugin的集成。
l 集成自定义词典。
l 索引分词等功能。
l 重构出新的分词、词性标注与命名实体识别接口,统一所有分词器,并逐步淘汰旧接口。
文章摘自:HanLP: Han Language Processing ——开源自由的汉语言处理包
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【安防】5G+AR推动公共安防行业变革
原标题:5G+AR推动公共安防行业变革 戴上智能警用头盔,快速识别面前经过的人,同时眼前会立即出现相应的身份信息,多个人同时也丝毫不受影响;甚至站立某个路口时,可以轻而易举的看到下一个路口的情况,洞悉一切。 安防行业一直受制于低带宽、低速率的传输系统,智能安防时代也是一直受困于没有得到实质改变的网络传输系统,尤其是目前,在智慧城市建设中,随着海量视频监控数据的不断产生,现有的通讯技术无法满足智能安防所需多节点链接、海量视频数据传输的需求。面向超高速、高可靠、低时延等特性而开展研制的5G技术,恰好能够满足智能安防发展所提出的诉求。 AR和VR一直被行业公认为是5G时代最值得期待的应用场景之一,由于5G“东风”未至,AR/VR产业一直未实现全面爆发,如今随着5G商用进程加快,AR/VR在商用领域的大规模普及将迎来爆发点。在众多充满期待的应用场景中,以视频监控图像应用为核心的智能安防将可能成为5G应用爆发的重要场景。 5G究竟是什么? 若将2G、3G、4G前几代移动通信技术比作不断加宽道路,5G则是在继续修宽高速路的同时,对路进行规划,实现分流,提高利用效率。国际电信联盟ITU的相关技术规范...
- 下一篇
云栖科技评论89期:谁是下一个“智能手机”?
点击订阅《云栖科技评论期刊》 【卷首语】谁是下一个“智能手机”? 苹果公司宣布调降2019财年第一季度财务预测的新闻瞬间承包了媒体所有的关注点,虽然新的预估值840亿美元仅比原先估计的890-930亿美元有5.6~9.6%的下修幅度,但“苹果不行了”“iPhone卖不出去了”以及“iPhone销量下滑因为中国市场”等新闻仍然让苹果公司身处舆论漩涡。 针对媒体和华尔街的质疑,库克不断强调:尽管面临这些挑战,苹果在中国的业务依旧前景光明,他同时表示“苹果的产品在客户中有很强的追随力,消费者的参与度和满意度都很高。”言外之意,苹果公司所面临的困难只是暂时的,中国市场销售疲软只是偶发情况,“苹果公司的发展不会进入长期下行周期”。 外界媒体和华尔街的分析师们更关心的则是“苹果是否失去了创新能力?”他们中的大多数人认为近年来 iPhon
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19