-
Notifications
You must be signed in to change notification settings - Fork 10.9k
1.7.2 版本中 CustomDictionary.insert 对 NLPTokenizer 无效? #1143
Copy link
Copy link
Closed
Labels
Description
注意事项
请确认下列注意事项:
- 我已仔细阅读下列文档,都没有找到答案:
- 我已经通过Google和issue区检索功能搜索了我的问题,也没有找到答案。
- 我明白开源社区是出于兴趣爱好聚集起来的自由社区,不承担任何责任或义务。我会礼貌发言,向每一个帮助我的人表示感谢。
- 我在此括号内输入x打钩,代表上述事项确认完毕。
版本号
当前最新版本号是:1.7.2
我使用的版本是:1.7.2
我的问题
非常感谢这个项目,对NLP的理解深入了很多,我之前用的版本是1.6.4,基本只用了我认为最核心稳定的以统计模型(StandardTokenizer「ViterbiSegment」)为主,规则(CustomDictionary)为辅的中文分词服务。
这样虽然高效、稳定,但随着遇到问题复杂性的提高,我逐渐发现已不能满足我nlp任务上一些需求,比如对未 insert 到 CustomDictionary 的「机构名」、「人名」识别较差,再比如没能好好利用到 parseDependency。
在看到HanLP 公开了在线演示的1亿级语料训练的分词模型后,非常兴奋想要好好的利用起来。虽然我已经看过好几遍首页及wiki、FAQ、以及相关 issues,但可能由于基础较差,对 HanLP 的诸多「特性」理解不深,不知道该如何用好,总感觉各个功能间总是“鱼与熊掌不可兼得”。
于是想在这里集中整理一下我的问题:
- 版本1.7.2 与 版本1.6.4,它们的默认 HanLP.segment(StandardTokenizer) 效果是一样的吗?它们都是基于98年人民日报标注语料的统计模型分词吗?
- HanLP.segment 分词结果中的“词性”(包括人名和地名)是怎么来?都是根据 CoreDictionary 和 CustomDictionary 中确定来的吗?所以这里并不涉及到 HMM、CRF 对吗?所以虽然一个词可能会有多个词性,但在 HanLP.segment 结果中每个词一定是一个固定的词性?
- 版本1.7.2 利用亿级语料训练的分词模型只是应用到了 NLPTokenizer 上吗?parseDependency 也是基于这个语料吗?还是说 parseDependency 是基于 NLPTokenizer 的结果?
- “自定义词典在所有分词器中都有效”,但我发现 1.7.2 版本中利用 CustomDictionary.insert 后并未生效,但修改
dictionary/custom/机构名词典.txt后确实会生效,相关代码在下面。 - 相同的句子在在线演示上与1.7.2版本的 NLPTokenizer 结果不同,相关代码在下面。
复现问题
步骤
- 首先……
- 然后……
- 接着……
触发代码
public void testIssue1234() throws Exception
{
# 问题 4
NLPTokenizer.ANALYZER.enableCustomDictionary(true);
CustomDictionary.insert("钟正", "nr 1");
CustomDictionary.insert("财新智库莫尼塔研究", "ntc 1");
System.out.println(HanLP.segment("财新智库莫尼塔研究董事长、首席经济学家钟正生表示"));
System.out.println(NLPTokenizer.analyze("财新智库莫尼塔研究董事长、首席经济学家钟正生表示"));
# 问题 5
NLPTokenizer.ANALYZER.enableCustomDictionary(false);
// 注意观察下面两个“希望”的词性、两个“晚霞”的词性
System.out.println(NLPTokenizer.analyze("支援臺灣正體香港繁體:微软公司於1975年3月1日由比爾·蓋茲和保羅·艾倫創立。"));
}
期望输出
# 问题 4
# 此部分我理解 “钟/n, 正生/v” 的切分方式
[财新智库莫尼塔研究/ntc, 董事长/nnt, 、/w, 首席/n, 经济学家/nnt, 钟/n, 正生/v, 表示/v]
# 此部分应该是“财新智库莫尼塔研究/ntc” 和 “[钟/n, 正生/v]/nr”
财新智库莫尼塔研究/ntc 董事长/nnt 、/w 首席/n 经济学家/n [钟/n, 正生/v]/nr 表示/v
# 问题 5
# “比爾·蓋茲” 应该是 nr
支援/v [臺灣/ns 正體/n 香港/ns 繁體/n]/nt :/w [微软/nt 公司/n]/nt 於/p 1975年/t 3月/t 1日/t 由/p 比爾·蓋茲/nr 和/c 保羅·艾倫/nr 創立/v 。/w
实际输出
# 问题 4
# 此部分没问题
[财新智库莫尼塔研究/ntc, 董事长/nnt, 、/w, 首席/n, 经济学家/nnt, 钟/n, 正生/v, 表示/v]
# 此部分 CustomDictionary.insert 后对 NLPTokenizer 未生效, 而且为什么“董事长”词性是 n 而不是 nnt?而且为什么不是“[钟/n, 正生/v]/nr”
[财新/j 智库/n 莫尼塔/n 研究/vn 董事长/n]/nt 、/w 首席/n 经济学家/n 钟正生/nr 表示/v
# 问题 5
# 注意 “比爾·蓋茲/nz”
支援/v [臺灣/ns 正體/n 香港/ns 繁體/n]/nt :/w [微软/nt 公司/n]/nt 於/p 1975年/t 3月/t 1日/t 由/p 比爾·蓋茲/nz 和/c 保羅·艾倫/nr 創立/v 。/w
而在线演示中是正确的 nr
其他信息
Reactions are currently unavailable