一个非知识库的中文分词算法实现

目前,公司正在做一个简历系统,简单的讲,就是方便HR MM们筛选简历。

  刚开始听到这个需求的时候,感觉挺简单,没啥东西。但是开会后,发现麻雀虽小,五脏俱全,自然语言处理需要的东西一个都少不了。
  其中有一个关键点,涉及到一个信息抽取和命名实体识别的问题。我算是发现了,这个命名实体识别,只要是个NLP项目,差不多就躲不过去了。这个值得花点功夫好好研究下,后面会写一个命名实体识别的算法总结报告,先立一个flag!~

嗯,细化到这个HR系统中,就是来发现每个简历中的技能名称,方便后续的简历和JD的匹配。这样,技能发现的问题抽象为一个命名实体识别的问题。ok,到这一步,就有眉目了。

  越来越发现,这个英文比中文省事多了,没有分词这一项(会不会中国人的智商就是从小学中文练出来的?)。
  好,现在到了分词这一项,分好了词,命名实体识别完成大半了。不就分词吗?现在这么多分词工具,jieba,thulac,ltp等等,用这些就可以吗?
  好像行。但是,想到的不足地方是,这些分词工具,都是根据自己的知识库来训练切分,很多词语应该作为一个整体,它可能就给切碎了,我们可不可以在切词这块,差不多就完成命名实体的整体切分呢?
  其实,说到底,我们想用自己的语料,切的更符合我们的心意。

  针对这个问题,我也搜了不少信息。我在知乎上,看到刘知远总结的两个要素特别好:(1)确定词汇边界;(2)确定语义。
  最后在csdn上找到一个“基于大规模语料的新词发现算法”的Blog,感觉这个可以拿来试一试,最后实现了这个算法,总体感觉还不错,算是完成了这一小步。趁着还没忘干净,赶紧来总结总结。
  这个算法还是非常有趣的,但也是以上总结的两条:
(1)、确定词语内聚程度;
(2)、确定词语的外部边界。
  • 内聚程度

      就是计算这个“字的组合”到底是不是一个词。举个例子:“科技”,“科”这个字在语料中出现的概率为p1,“技”这个字在预料中出现的概率为p2,“科技”在预料中出现的概率为p3,则:p3/(p2*p1)的结果越大,越说明,这两个字成词的可能性越大,也就是内聚成都越高。

  • 边界问题

      一个“字的组合”如果是一个词语,那么它的左右的可选择性会比较多,这样自然可以想到熵了,计算它的左右信息熵,如果都比较大,就说明成词的可能性比较大了。如果左边熵和右边熵差距比较大,这个词就比较有争议了。

    我在实现这个算法的时候,遇到几个问题:

    1. 编码问题
        包括stop_symbol的处理问题,就是去除标点等一些非中文字符,还有utf-8的转码问题,这个看似简单,却比较烦人;

    2. 参数问题
         写完代码之后,聚合度设置多少比较合适,还有熵的问题。第一个问题,还好一点,语料充足的情况下,多试试几个就好;针对第二个问题,我的做法是设置左熵和右熵都大于某个值,而这个值的设定有两个不明确的地方:  
      (1)、左右是否应该一致?
      (2)、不同长度的词语是否设置不同的参数?
        这个后续有时间可以深入一下。

最后我对红楼梦的语料跑了一下,截取了一部分结果如下:

侍者 师父 秦钟 宝钗 哥有角只 市俗 议事厅 狐腿 时辰 神弄鬼 厉声 试试 三镶 攒珠 坟烧 在堂屋里 风吹 衰草 蓬莱 照例 晚饭后 请那先生 罗列 听唿 收拾 回头吩咐 些风波 欠身 入宫 茜香 往外书房 打擂台 藏藏 输赢 太太和姨 养活 今抄没 救了我们 算帐 珍珠 拥炉 还没有歇 手里拿着 腻腻 峰下 煎药 轻易 世交 石榴红 泥鳅 朱红 系金陵 年八十 发财 顾不得 尘世中 去世的老 复聚 往秋爽斋 私情 坐了竹椅 坐褥 抚琴 沿上坐 果菜与 十分 希世 胆量 执事摆 林姑娘 给你娶 大红羽 既蒙 未发之 亲戚朋友 洗了就完 尤氏婆媳 汗巾 霞帔 破落户 出北门 规谏 嫉妒 嘁嘁喳喳 有三五十 有话只管 症候 才把心 名曰 逼死 石呆子 工部员外 怕他嫌 单管各 疏散 披头散发 户人家 吐舌 饰穿戴 何妨 加奖 带领家下 点头微笑 俗缘 惺惺 进入院 潦倒 几两银子 袱包 菱角 太监跪 太医院 三尺 缀锦阁 韶华 问一问 阶矶 早归入 ……

  应该说有一定效果,参数如果再细致一些,效果会比这个好。


  我的实现算法地址:GitHub

  有啥问题可以留言,欢迎大家一起交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值