美文网首页
(三)分词技术及开源分词器

(三)分词技术及开源分词器

作者: 天生smile | 来源:发表于2018-12-04 09:43 被阅读0次

        分词是绝大部分自然语言处理的第一步,我们主要从序列标注的角度介绍下HMM如何实现分词的,然后介绍Hanlp和海量分词两个工具包在python环境下进行分词。在NLP中,分词,词性标注和实体命名识别都属于序列标注任务,也就是对序列的每个token进行分类,对于分词任务,难点如下:

  1.新词发现

              未登录词(人名、机构名、商标名、公司名称)

  2.词典与算法优先级

                 我们 中信 仰 佛教 的 人

  3.歧义(颗粒度、交集等)

                  股份 有限公司 、郑州天和服装厂

分词的算法大致分为两种:

1.基于词典的分词算法  

            正向最大匹配算法

            逆向最大匹配算法

             双向匹配分词法

2.基于统计的机器学习算法

            HMM、CRF、SVM、LSTM+CRF

这里列出一些开源的分词系统:

            中科院计算所NLPIR    ansj分词器     哈工大的LTP    清华大学    斯坦福分词器      Hanlp分词器

             结巴分词     KCWS分词器(字嵌入+Bi-LSTM+CRF)   ZPar    IKAnalyzer

接下来采取理论与代码相结合的方式,介绍HMM分词器的使用:

在这里我直接抠了两张之前做PPT的图:

这两张图比较简单,这里我们暂时只考虑最简单的一阶马尔科夫模型。

第二张图中的A,B向量也就是我们需要从训练师数据中获得的内容,下面从代码的角度对这个问题进行说明:

1.数据准备——已分好词的语料

2.根据语料统计转移概率矩阵A和混淆矩阵B,这里进行详细说明

    - 对于每个词我们都会按照如下方式为他打上标签:

  - 根据语料我们会统计四个参数:

        1.label的转移概率矩阵,也就是A矩阵:

        2.每个词中的字出现过的状态:

        例如“,”就只有s这一种状态

        3.接下来就统计每个状态对应的每个字出现过的频率,利用这个频次计算混淆概率B

        4.计算下每个label出现的次数

        5.统计下y0,也就是初始状态的概率,显然M,E不可能出现在开头

        将上述统计值转为频率值,就是最开始PPT中的A,B,y0矩阵

上述的统计值就是我们得到的HMM模型参数,接下来就利用维特比算法来进行decode,维特比的原理大致如下:

注意网上好多HMM的维特比解码算法是错误的,无法处理未登录词,主要是对于未登录词的处理,详细过程见代码。

这里可以看一下分词结果!

这只是一个练手的小Demo。

使用海量分词

这里给出海量分词的下载路径,里面的doc文件夹有python接口的使用方式,详细例子见代码hlseg/test.py,这里有些注意事项:

- 使用海量分词首先要设置JDK,注意红色部分的说明

- 黄色部分就是压缩包中的lib下的文件路径

- test.py 中给出了分词添加字典和控制分词粒度的代码

相关文章

网友评论

      本文标题:(三)分词技术及开源分词器

      本文链接:https://www.haomeiwen.com/subject/fqwecqtx.html