Press "Enter" to skip to content

最强中文自然语言处理工具CKIPtagger

每一位做中文NLP(Natural Language Processing)的朋友大概都用过 Jieba
。分词作为中文NLP工序的第一步,对模型性能影响至鉅。然而,以往可供选择的工具并不多。Jieba虽然分词效果不理想,却几乎是预设的选项。最近台湾中研院开发的CKIPtagger成为了Jieba的挑战者。CKIPtagger不但分词效果更理想,还提供实体识别功能。下文会比较两者的效果和CKIPtagger的使用方式。

 

分词例子

 

我在HK01上随意选择三篇文章,以Jieba和CKIPtagger分别做分词。三篇文章题材不同,其中一篇较多人名地名,看看两者的表现有没有受影响。

 

Example 1 Input:

 

def get_jieba_tokenization(text):
 tokenized = jieba.lcut(text)
 return ' '.join(tokenized)def get_ckiptagger_tokenization(text):
 ckip_tokenized = ws([text])
 return ' '.join(ckip_tokenized[0])text1 = '''2003年沙士一役,港大新发病毒性疾病学讲座教授管轶在广州野味市场的果子狸身上,找到感染人类的沙士冠状病毒,找到元兇遏止疫情扩散,成为沙士抗疫英雄。事隔17年,他本周二三(21、22日),与团队到武汉考察,但找不到源头,「源头被销毁得乾乾净净,这裏似乎不欢迎专家」,他对内地传媒说,估计武汉感染规模大沙士十倍起跳,又说政府不作为,无奈做「逃兵」订机票返港,感到极其无力。'''print (f'jieba result: \n{get_jieba_tokenization(text1)}')
print ('\n')
print (f'ckiptagger result: \n{get_ckiptagger_tokenization(text1)}')

 

Example 1 Output:

 

jieba result: 
2003 年 沙士 一役 , 港大新发 病毒性 疾病 学讲座 教授 管轶 在 广州 野味 市场 的 果子狸 身上 , 找到 感染 人类 的 沙士 冠状 病毒 , 找到 元 兇 遏止 疫情 扩散 , 成为 沙士 抗疫 英雄 。 事隔 17 年 , 他 本周 二三 ( 21 、 22 日 ) , 与 团队 到 武汉 考察 , 但 找 不到 源头 , 「 源头 被 销毁 得 乾 乾净净 , 这 裏 似乎 不欢 迎 专家 」 , 他 对 内 地 传媒 说 , 估计 武汉 感染 规模 大 沙士 十倍 起跳 , 又 说 政府 不作 为 , 无奈 做 「 逃兵 」 订机票 返港 , 感到 极其 无力 。

ckiptagger result: 
2003年 沙士 一 役 , 港大 新发病毒性 疾病学 讲座 教授 管轶 在 广州 野味 市场 的 果子狸 身 上 , 找到 感染 人类 的 沙士 冠状 病毒 , 找到 元兇 遏止 疫情 扩散 , 成为 沙士 抗疫 英雄 。 事 隔 17 年 , 他 本 周 二三 ( 21 、 22日 ) , 与 团队 到 武汉 考察 , 但 找 不 到 源头 , 「 源头 被 销毁 得 乾乾净净 , 这裏 似乎 不 欢迎 专家 」 , 他 对 内地 传媒 说 , 估计 武汉 感染 规模 大 沙士 十 倍 起/span>

 

以上例子可以见到,Jieba在比较长的词语表现欠佳,如将「港大新发病毒性疾病学讲座教授」分成「港大新发 病毒性 疾病 学讲座 教授」。CKIPtagger的长词语分词比较合理。

 

Example 2 Input:

 

text2 = '''农曆新年将至,又是逗利是的时候,打工仔也可望收到开工利是。滙丰连续第二年向本港员工派发电子利是,每位500元,将在员工下一个出粮日透过出粮户口发放。滙丰香港区行政总裁施颖茵向香港员工发出电邮,宣布派发电子利是的消息。她于电邮内表示,十分感谢同事对公司print (f'jieba result: \n{get_jieba_tokenization(text2)}')
print ('\n')
print (f'ckiptagger result: \n{get_ckiptagger_tokenization(text2)}')

 

Example 2 Output:

 

jieba result: 
农 曆 新年 将至 , 又 是 逗利 是 的 时候 , 打工仔 也 可望 收到 开工利 是 。 滙 丰连续 第二年 向 本港 员 工派 发电子 利是 , 每位 500 元 , 将在员 工下 一个 出 粮日 透过 出 粮户口 发放 。 滙 丰 香港 区 行政 总裁 施颖茵 向 香港 员工 发出 电邮 , 宣布 派 发电子利 是 的 消息 。 她 于 电邮内 表示 , 十分 感谢 同事 对 公司 及 客户 无限 的 贡献及 投入 , 即使 前景 仍有 不确 定性 , 她 有 信心 克服 挑战 , 今年 再创 繁荣 。 滙 丰发言人 回覆 传媒查 询时 称 , 滙 丰 希望 藉 着农 曆 新年 , 感谢 各 同事 过去 一年 的 努力 。 跟 去年 一样 , 该行 将会 向 每位 香港 员 工派 发 500 元 的 电子利 是 , 在 各 同事 下一个 出 粮日 透过 出 粮户口 发放 。

ckiptagger result: 
农曆 新年 将 至 , 又 是 逗利 是 的 时候 , 打工仔 也 可望 收到 开工利 是 。 滙丰 连续 第二 年 向 本 港 员工 派发 电子 利 是 , 每 位 500 元 , 将 在 员工 下 一 个 出粮日 透过 出粮 户口 发放 。 滙丰 香港区 行政 总裁 施颖茵 向 香港 员工 发出 电邮 , 宣布派发 电子 利 是 的 消息 。 她 于 电邮 内 表示 , 十分 感谢 同事 对 公司 及 客户 无限 的 贡献 及 投入 , 即使 前景 仍 有 不确定性 , 她 有 信心 克服 挑战 , 今年 再 创 繁荣 。 滙丰 发言人 回覆 传媒 查询 时 称 , 滙丰 希望 藉着 农曆 新年 , 感谢 各 同事 过去 一 年 的 努力 。 跟 去年 一样 , 该 行 将 会 向 每 位 香港 员工派发 500 元 的 电子利 是 , 在 各 同事 下 一 个 出粮日 透过 出粮 户口 发放 。

 

Jieba连「农曆新年」都分错,而且无法认到「滙丰」。

 

Example 3 Input:

 

text3 = '''大阪、京都、奈良、神户是亲子游的热门路线,其实除了京阪神,从大阪玩到鸟取也是不错选择!官方早/span>print (f'jieba result: \n{get_jieba_tokenization(text3)}')
print ('\n')
print (f'ckiptagger result: \n{get_ckiptagger_tokenization(text3)}')

 

Example 3 Output:

 

jieba result: 
大阪 、 京都 、 奈良 、 神户 是 亲子游 的 热门 路线 , 其实 除了 京 阪神 , 从 大阪 玩到 鸟取 也 是 不错 选择 ! 官方 早前 推出 鸟取 1000 円 巴士 优惠 , 由 大阪 难波往 鸟取 只 需 1000 円 , 大阪 Open Jaw 玩鸟取 一流 , 加上 适逢 鸟 取红楚 蟹 季开锣 , 平食 海产 、 鸟取 和 牛 、 21 世纪 梨 … … 还有 必去 鸟取 砂丘 、 鬼 太郎 商店 街及 小朋友 最爱的 柯南 博物 馆 等 , 大人 小朋友 都 玩 得 满足 !

ckiptagger result: 
大阪 、 京都 、 奈良 、 神户 是 亲子 游 的 热门 路线 , 其实 除了 京阪神 , 从 大阪 玩 到 鸟取 也 是 不错 选择 ! 官方 早前 推出 鸟取 1000 円 巴士 优惠 , 由 大阪 难波 往 鸟取 只 需 1000 円 , 大阪 Open Jaw 玩 鸟 取 一流 , 加上 适逢 鸟取 红楚蟹季 开锣 , 平食 海产 、 鸟取 和 牛 、 21世纪 梨 … … 还 有 必 去 鸟取 砂丘 、 鬼太郎 商店街 及 小朋友 最爱 的 柯南 博物馆 等 , 大人 小朋友 都 玩 得 满足 !

 

这篇文章比较多地名同专有名词, CKIPtagger大致上都认到,例如「京阪神」、「难波」。而Jieba就认不到。

 

命名实体识别

 

除了分词外,CKIPtagger还有命名实体识别(named entity recognition)能力。比如说如果想抽取第三篇文的地名:

 

tokenized_result = ws([text3])
pos_result = pos(tokenized_result)entity_result = ner(tokenized_result, pos_result)
print (entity_result)

 

结果非常準确:

 

{(0, 2, 'GPE', '大阪'),
 (3, 5, 'GPE', '京都'),
 (6, 8, 'GPE', '奈良'),
 (9, 11, 'GPE', '神户'),
 (25, 28, 'GPE', '京阪神'),
 (30, 32, 'GPE', '大阪'),
 (34, 36, 'GPE', '鸟取'),
 (49, 51, 'GPE', '鸟取'),
 (51, 55, 'CARDINAL', '1000'),
 (62, 64, 'GPE', '大阪'),
 (64, 66, 'GPE', '难波'),
 (67, 69, 'GPE', '鸟取'),
 (71, 75, 'CARDINAL', '1000'),
 (77, 87, 'GPE', '大阪Open Jaw'),
 (97, 99, 'GPE', '鸟取'),
 (111, 113, 'GPE', '鸟取'),
 (116, 120, 'DATE', '21世纪'),
 (127, 129, 'GPE', '鸟取'),
 (145, 150, 'FAC', '柯南博物馆')}

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注