`

开源自然语言处理工具包hanlp中CRF分词实现详解

 
阅读更多

[align=center;" align="center]

CRF简介

[gerative-discriminative.png]

这类耗时的任务,还是交给了用C++实现的CRF++。关于CRF++输出的CRF模型,请参考《CRF++模型格式说明》。

解码采用维特比算法实现。并且稍有改进,用中文伪码与白话描述如下:

如何计算一个字的某个标签的分数呢?某个字根据CRF模型提供的模板生成了一系列特征函数,这些函数的输出值乘以该函数的权值最后求和得出了一个分数。该分数只是“点函数”的得分,还需加上“边函数”的得分。边函数在本分词模型中简化为f(s’,s),其中s’为前一个字的标签,s为当前字的标签。于是该边函数就可以用一个4*4的矩阵描述,相当于HMM中的转移概率。

实例



[img]http://dl2.iteye.com/upload/attachment/0131/5720/120ec50c-b4a1-324f-88e8-a8abdc861963.png" alt="[/img]



null表示分词器还没有对该字标注。

上面说了这么多,其实我的实现非常简练:

[img]http://dl2.iteye.com/upload/attachment/0131/5722/b01f6645-b76b-395c-84a2-efad72b1e624.jpg" alt="[/img]


[img]http://dl2.iteye.com/upload/attachment/0131/5724/1f87fd23-8996-3445-b4dd-3b1d48fb02e5.jpg" alt="[/img]
 

[img]http://dl2.iteye.com/upload/attachment/0131/5726/ec1200f1-e786-3696-a5f8-d44028f3e3f0.jpg" alt="[/img]





标注结果


[img]http://dl2.iteye.com/upload/attachment/0131/5728/aac46b8a-6889-38d9-a405-20bb50ef1a7c.jpg" alt="[/img]



最终处理

将BEMS该合并的合并,得到:

然后将词语送到词典中查询一下,没查到的暂时当作nx,并记下位置(因为这是个新词,为了表示它的特殊性,最后词性设为null),再次使用维特比标注词性:

新词识别

CRF对新词有很好的识别能力,比如:

segment.enablePartOfSpeechTagging(true);

输出

CRF标注结果

看   S  

穆   B  

兰   M  

吗   S  





[/align]

 

  • 大小: 4.8 KB
  • 大小: 48.8 KB
  • 大小: 59.4 KB
  • 大小: 21.9 KB
  • 大小: 8 KB
分享到:
评论

相关推荐

    CRF 分词算法

    总结,CRF分词算法通过结合上下文信息,有效地解决了自然语言处理中的分词问题。"crfparser_0.10"是一个实用的工具,为开发者提供了直接应用和学习CRF的途径。通过理解其内部机制并实践操作,我们可以进一步提升分词...

    基于CRF++的中文分词 数据+CRF++工具+java源码

    中文分词是自然语言处理(NLP)中的基础步骤,它涉及到将连续的汉字序列切分成具有独立语义的词语,是理解和分析中文文本的关键。在给定的资源中,"基于CRF++的中文分词"是一个用于中文文本分词的解决方案,它结合了...

    src_seg(java).rar_java 分词_中文文本分词_分词 java_分词算法

    2. HanLP:由福州大学与自然语言处理实验室开发,提供了分词、词性标注、命名实体识别等功能。 3. IK Analyzer:一个开源的Java分词器,适用于Lucene、Solr等全文检索引擎。 4. SmartChineseAnalyzer:基于Apache ...

    PHP 版简易中文分词.tar.gz

    中文分词是自然语言处理中的重要环节,尤其在中文文本分析、信息检索、机器翻译等领域起着至关重要的作用。PHP作为一种广泛使用的服务器端脚本语言,虽然在处理复杂计算和大规模数据时可能不如Java或Python那样高效...

    实验2-中文分词实验.zip

    中文分词是自然语言处理(NLP)领域中的基础环节,对于理解和处理中文文本至关重要。在这个“实验2-中文分词实验”中,我们将深入探讨中文分词的基本原理、常用算法以及其实验过程。 一、中文分词的重要性 与英语...

    word分词源码

    其中,分词是自然语言处理(NLP)的基础步骤,它将连续的文本序列切分成有意义的词语单元,为后续的语义分析、情感分析、关键词提取等任务提供基础。本篇文章将深入探讨“word分词”这一主题,并基于GitHub上的开源...

    python自然语言处理(中文版)

    ### Python自然语言处理(中文版) #### 知识点概览 1. **自然语言处理基础** - 定义与重要性 - 应用场景 - 关键技术与方法 2. **Python在自然语言处理中的应用** - Python语言特性 - NTLK库介绍 - 其他...

    自然语料处理

    ### 自然语言处理中的命名实体识别与CRF++工具应用 #### 一、自然语言处理简介 自然语言处理(Natural Language Processing, NLP)是一门融合计算机科学领域、人工智能以及语言学领域的交叉学科,旨在让计算机能够...

    ansj_seg.zip

    在中文自然语言处理领域,分词是至关重要的第一步,它将连续的汉字序列切分成具有语义的词汇单元。ANSJ(A New Smart Chinese Java)分词库正是这样一款高效、开源的中文分词工具,尤其适用于大规模文本的处理。本篇...

    ltp_data-v3.4.0

    LTP是哈尔滨工业大学自然语言处理研究团队开发的一套开源的中文自然语言处理工具包,广泛应用于文本分析、信息抽取、情感分析等任务。而“ltp_data-v3.4.0”则是该平台的数据模型,包含了训练好的模型和相关的语料库...

    ansj5.1.1.rar (最新稳定版本_含源码)

    ANSJ,全称为“Ansj分词”,是由国内开发者杨尚川开发的一款高效、开源的中文分词和自然语言处理库。该库在中文信息处理领域具有广泛的影响力,尤其在分词、词性标注、命名实体识别等方面表现出色。本次我们关注的是...

    Natural-Language-Processing-in-TensorFlow

    《TensorFlow中的自然语言处理详解》 在当今的AI领域,自然语言处理(NLP)已经成为了一个不可或缺的部分,它使得机器能够理解、解释和生成人类语言。TensorFlow,作为谷歌开发的强大深度学习框架,为NLP任务提供了...

Global site tag (gtag.js) - Google Analytics