ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

复现经典:用dict_build实现Matrix67互信息+左右熵新词发现算法

复现经典:用dict_build实现Matrix67互信息+左右熵新词发现算法 复现经典用dict_build实现Matrix67互信息左右熵新词发现算法【免费下载链接】dict_build自动构建中文词库http://www.matrix67.com/blog/archives/5044项目地址: https://gitcode.com/gh_mirrors/di/dict_build在自然语言处理中新词发现算法一直是中文分词领域的经典难题。今天要介绍的dict_build是一个用 Java 实现的自动构建中文词库工具它完整复现了 Matrix67 博客中经典的互信息左右熵新词发现算法无需任何标注语料和分词词典仅凭一段原始文本就能自动挖掘出高价值的新词堪称无监督分词的入门神器。本文将从算法原理、快速上手、源码结构三个角度带你彻底看懂这套经典方案。什么是互信息左右熵新词发现算法Matrix67 在其经典博文中提出了一套无监督新词发现思路一个字符串是否能成为词可以从内部黏合度和外部自由度两个维度来判断。内部黏合度字与字之间结合得是否紧密紧密到可以当作一个整体外部自由度这个整体前后能搭配的字是否足够多样多样说明它边界清晰、独立成词。这套思路不需要分词词典、不需要标注语料属于典型的无监督新词发现算法非常适合从小说、新闻、电商评论、招聘 JD 等垂直语料中挖掘领域新词。互信息衡量词内部的黏合度**互信息PMI**衡量的是两个或多个字共同出现的概率与各自独立出现概率的比值。比值越大说明这些字绑定越强越像一个词。例如西和门经常一起出现且西门内部结合紧密它的互信息值就会显著偏高。左右熵衡量词边界的自由度左右熵分别统计一个候选词左边和右边出现过的不同字符的分布情况。熵值越高说明该词左右搭配越丰富、边界越独立。比如的、了这类高频虚词左右搭配极其丰富但它们本身不算新词需要靠其他条件过滤。dict_build 在实现时正是把互信息、左右熵、位置成词概率、ngram 频率四者结合起来综合判定成词条件非常严谨相关逻辑集中在 FastBuilder.java 中。dict_build 快速上手一键自动构建中文词库第一步获取并打包程序首先获取项目源码git clone https://gitcode.com/gh_mirrors/di/dict_build项目采用 Gradle 构建仓库中同时保留了 pom.xml 便于 Maven 用户使用可以使用gradle distTar打出一个可直接运行的 tar 包仓库根目录也提供了现成的 dict_build-0.0.3.tar解压即可使用。第二步运行新词发现工具解压后进入 bin 目录把原始语料文件的绝对路径作为参数传入即可./dict_build 你的数据文件的绝对路径注意数据文件必须是 UTF-8 编码每行一段文本即可无需任何预处理。程序的完整入口在 Main.java它会依次完成 ngram 统计、左右熵计算、合并与成词抽取。第三步解读输出结果运行结束后会在数据文件同目录生成words_sort.data每一行有五列信息列含义词抽取出的候选新词词频该词在语料中的出现次数互信息内部黏合度指标值越高越像词左右熵边界自由度指标值越高边界越清晰位置成词概率首尾位置成词概率用于过滤垃圾词以《西游记》为例抽取效果相当惊艳八戒 1807 7.88874324889826 2.00952580557629 0.36441586280814575 师父 1632 7.507794640198696 3.745294449785798 0.1371395690812608 唐僧 1003 7.076815597050832 4.350465172292435 0.43277723258096173不需要任何词典八戒师父唐僧这些核心人物词就被自动挖掘出来了。同样地《金瓶梅》中能抽到西门庆潘金莲《全宋词》中能抽到东风江南相思等高频意象词甚至在拉勾 JD 语料中能抽到数据分析互联网相关专业这类领域词。源码结构解析读懂经典实现想要深入理解这套新词发现算法的工程实现可以重点看这几个模块Main.java程序入口串联整个流水线FastBuilder.java核心实现v0.0.3 起用radix tree基数树替代了原来的 ternary search tree大幅提升查找性能并加入了日志输出展示抽取进度CounterMap.java并发安全的计数工具用于统计左右相邻字符分布PosProbability.java从搜狗词典统计单字的位置成词概率生成 pos_prop.txtTernaryTree.java旧版实现已标记 Deprecated适合对比学习另外项目还内置了com/fasterxml/sort/外部排序模块用于处理超大语料的磁盘排序这也是它能处理 GB 级文本的原因。常见问题大文件内存不足怎么办如果数据文件较大可能出现 Out Of Memory。macOS 和 Linux 用户可以这样调整 JVM 堆内存2G 可根据机器实际情况调整export JAVA_OPTS-Xmx2G ./dict_build 你的数据文件的绝对路径写在最后dict_build 用不到几百行的核心代码就把Matrix67 互信息左右熵新词发现算法完整落地还兼顾了大语料的工程可行性。对于想学习新词发现算法、无监督分词原理或者需要快速从垂直语料中构建自定义词典的开发者来说它都是一份不可多得的经典参考实现。动手 clone 一份源码跑起来你也能轻松体验机器自动学词的乐趣。【免费下载链接】dict_build自动构建中文词库http://www.matrix67.com/blog/archives/5044项目地址: https://gitcode.com/gh_mirrors/di/dict_build创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表