`

HanLP-最短路径分词

 
阅读更多

 

今天介绍的内容是最短路径分词。最近换回了thinkpad x1,原因是mac的13.3寸的屏幕看代码实在是不方便,也可能是人老了吧,^_^。等把HanLP词法分析介绍结束后,还是会换回macbook pro的。个人有强迫症,只要看或写Java或C/C++代码或者用开发机的化,还是喜欢在windows下工作。看论文特别是理论的研究还是习惯用mac了。感觉开发还是windows比较顺手,理论研究还是mac比较顺手。

基本思想:首先根据词典,找出字串中所有可能的词(也称全切分),然后构造词语切分有向无环图(也称作粗分词图或粗分词网)。每个词对应图中的一条有向边。若赋给相应的边长一个权值(该权值可以是常数,也可以是所构成的词的属性值),然后根据该切分图,在起点到终点的所有路径中,求出长度值(包括权值)为最短的一条路径,这条路径上包含的词就是该句子的切分结果。若每个结点处记录N个最短路径值,则该方法也称N-最短路径算法。

为进一步提高切分精度,在词典中增加词的属性值,即给每个词也给权重。这样每个词在汉字串中的权重不同(即构成的有向图的边不为等长)。最简单的词的权重可以用词频表示,高频词的权重大,低频词的权重小。具体的权重值可以通过大规模语料库获得。

虽然HanLP中提供了dijkstra算法的实现,但是当前HanLP中最短路径分词使用的是viterbi算法。

例子:他说的确实在理



 

 

遍历计算过程和回溯分词过程

 



 

1) node列与to列

node列的词语为粗分词网中所有的词,to列为在node列为词word_node的情况下,后边接的所有可能的词word_to。第1个词语前边有一个“始”词,最后一个词语后边有一个“末”词。

2) begin2node_w的计算

表示从“始”到node词的最短路径权值。可以从待计算值所在行的node列读取出word词,在to列中以待计算值所在行开始向上查找word,找到word所在行后(以首次遇到的词为准),begin2to_w列所对应的值就是待计算值。见图中下划线。第一个词对“始-他”的begin2node_w的值为0。

3) node2to_w的计算

 

node+w构成的2gram串的概率,也就是转移概率,计算公式为

 



 

计算的HanLP代码为https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/utility/MathUtility.java calculateWeight(Vertex from, Vertex to)。“始”的频次取为MAX_FREQUENCY,“始-他”的共现频次值为“他”作为句首的频次,“理-末”的共现频次值为“理”作为句末的频次。

4) begin2to_w_n的计算

表示从“始”到to词的最短路径权值。begin2to_w_n = begin2node_w + node2to_w。

5) begin2to_w_o

表示记录在to词下的,到to词的最短路径权值,它的初始值为0,之后由begin2to_w来更新。

6) from

表示词语to的前驱词。

 



 

可以看表中(7,9),(8,10),(11,13),(12,14),(15,16),(17,18)成对行来验证该公式,其中只有(17.18)行满足了第3个式子。

6)和(7)的HanLP实现代码https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/seg/common/Vertex.java updateFrom(Vertex from)

8) 回溯确定分词路径

“末”开始向前回溯,末->理->在->确实->的->说->他,可以看表中黄色单元格进行验证。

经过(6)、(7)两步,可以确保粗分词网中任意词的前驱都是最短路径的。

遍历计算过程和回溯过程的HanLP代码https://github.com/hankcs/HanLP/blob/master/src/main/java/com/hankcs/hanlp/seg/Viterbi/ViterbiSegment.java viterbi(WordNet wordNet)

 



 

  • 大小: 154.2 KB
  • 大小: 24.3 KB
  • 大小: 74.9 KB
  • 大小: 73.3 KB
  • 大小: 34.5 KB
分享到:
评论

相关推荐

    读书笔记2之中文分词流程HanLP

    **细分阶段**,HanLP结合命名实体识别的结果,再次对词图进行分词,利用Dijkstra最短路径算法优化分词结果。 最后,**词性标注**阶段,HanLP使用Viterbi算法对分词结果进行词性标注,这是为了提供更丰富的语义信息...

    中文分词算法技术分享PPT

    本文档是技术分享的PPT,详解深入讲解了三种中文分词算法,包知ik、mmseg、hanlp。文档中还分析了ik的岐义消除规则相关代码,以及hanlp最短路径算法原理及代码实现。

    HanLP自然语言处理

    它支持多种分词模式,如精确模式、最短路径模式、基于依存关系的分词等,以满足不同场景的需求。 2. **词性标注**:HanLP能够自动标注每个词汇的词性,如名词、动词、形容词等,这对于后续的句法分析和语义理解至关...

    C#中文分词技术源码

    常见的分词算法有正向最大匹配法(Forward Maximum Matching, FMM)、逆向最大匹配法(Backward Maximum Matching, BMM)、最短路径算法(Shortest Path Algorithm, SPA)等。 C#实现中文分词时,可以使用.NET ...

    Lucene中文分词器组件

    1. **IK Analyzer**:IK Analyzer是一个开源的、基于Java实现的中文分词工具,支持多种分词模式,包括精确模式、全模式、最短路径模式等。它可以根据实际需求进行自定义配置,如添加自定义词汇表,以提高分词准确性...

    毕业设计python完成三个过程PDF的识别与分析信息抽取构建知识图谱信息检索基于知识图源码谱.zip

    5. **信息检索**:基于知识图谱的信息检索通常涉及到图遍历算法,如广度优先搜索(BFS)、深度优先搜索(DFS),以及路径查找算法如最短路径算法(Dijkstra)。同时,可能用到图数据库如`Neo4j`,以及查询语言如...

    中英文文档的相似度计算

    6. **算法应用**:除了基础的预处理和相似度计算,可能还会涉及更复杂的算法,如K-means聚类、LSH(Locality Sensitive Hashing)用于近似相似度搜索,或者使用图论中的最短路径算法来找出文档间的关联。 7. **编程...

Global site tag (gtag.js) - Google Analytics