大数据人|大数据第一社区

 找回密码
 注册会员

扫一扫,访问微社区

查看: 745|回复: 0
打印 上一主题 下一主题

HanLP-最短路径分词

[复制链接]
  • TA的每日心情

    2018-9-28 11:05
  • 签到天数: 1 天

    [LV.1]初来乍到

    109

    主题

    109

    帖子

    570

    积分

    高级会员

    Rank: 4

    积分
    570
    跳转到指定楼层
    楼主
    发表于 2019-6-5 11:08:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    今天介绍的内容是最短路径分词。最近换回了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/ ... ty/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/ ... /common/Vertex.java updateFrom(Vertex from)
    8) 回溯确定分词路径
    “末”开始向前回溯,末->理->在->确实->的->说->他,可以看表中黄色单元格进行验证。
    经过(6)、(7)两步,可以确保粗分词网中任意词的前驱都是最短路径的。
    遍历计算过程和回溯过程的HanLP代码https://github.com/hankcs/HanLP/ ... ViterbiSegment.java viterbi(WordNet wordNet)


    困啊,想睡觉的呢
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条


    id="mn_portal" >首页Portalid="mn_P18" onmouseover="navShow('P18')">应用id="mn_P15" onmouseover="navShow('P15')">技术id="mn_P37" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">前沿id="mn_P36" onmouseover="navShow('P36')">宝箱id="mn_P61" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">专栏id="mn_P65" >企业id="mn_Nd633" >导航 折叠导航 关注微信 关注微博 关注我们

    QQ|广告服务|关于我们|Archiver|手机版|小黑屋|大数据人 ( 鄂ICP备14012176号-2  

    GMT+8, 2024-5-20 22:59 , Processed in 0.293714 second(s), 33 queries .

    Powered by 小雄! X3.2

    © 2014-2020 bigdataer Inc.

    快速回复 返回顶部 返回列表