引言:
因为在工作之中接触到NER,并且可以有需要NER的地方。在此总结一些相关资料与自己的理解。
什么是命名实体识别
此段原文:
http://blog.csdn.net/dvstream/article/details/17784293
命名实体识别(Named Entity Recognition, NER),又称作“专名识别”,主要任务是识别出文本中的人名、地名等专有名称和有意义的时间、日期等数量短语并加以归类。对很多文本挖掘任务来说,命名实体识别系统是重要的组成部分:一方面,命名实体识别可以帮助识别未登录词,而根据SIGHAN Bakeoff的数据评测结果,未登录词造成的分词精度损失远大于歧义;另一方面,对关键词提取等任务来说,命名实体的类别是非常有用的文本特征。
命名实体是命名实体识别的研究主体,一般包括3大类(实体类、时间类和数字类)和7小类(人名、地名、机构名、时间、日期、货币和百分比)命名实体。当然对于某些特定的应用场景,也可以把产品名、电影电视剧名、编程类库名等作为命名实体的类别。时间、日期、货币等实体识别通常可以采用模式匹配的方式获得较好的识别效果,而人名、地名、机构名的识别方法则比较复杂。
命名实体识别的过程通常分两步:识别实体边界、确定实体类别。英语中的命名实体具有比较明显的形态标志,如人名、地名等实体中的每个词的第一个字母要大写等,所以实体边界识别相对来说比较容易。中文内在的特殊性决定了在文本处理时首先必须进行词法分析,中文命名实体识别的难度要比英文的难度大。
一个完善的命名实体识别系统应该是词典、规则、统计学习的方法相结合。
1. 可以对原始文本进行细粒度的分词,多个连续的单字可以作为命名实体的候选结果;识别文本中的“”以及《》等配对的标点符号,当中的文本也可以作为候选结果。
2. 挖掘各个领域的专名词典,对候选结果进行前向最大匹配,匹配到的很有可能是各个类别的命名实体。
3. 利用隐马尔科夫链(HMM)、最大熵(ME)、条件随机场(CRF)等统计模型进行识别,www.nilday.com/命名实体识别调研/ 有各个模型的效果总结。
NER的一些应用场景
上面提到了, NER主要是将句子之中的一些关键词提取出来。 比如:机构、时间、名称等等。
在我们的实际应用之中, 也有一些需要使用NER增强的场景。
比如:
I want to buy a cup of coffee
那么程序就需要能够自动识别:
- 意图是买东西
- 买的对象是
coffee
所以, 有人说知识图谱的NER是150分类,或者更多。。。
目前一些第三方Service
下面都是一些能够直接试用的服务:
- Stanford
有中文、英文,可以下载SDK,免费。
http://nlp.stanford.edu:8080/ner/process -
Microsoft AI:
https://azure.microsoft.com/zh-cn/services/cognitive-services/entity-linking-intelligence-service/
需要付费。 不过看起来还不支持国内账号, 需要国外手机号、信用卡来注册才行。 -
Cognitive Computation Group
http://cogcomp.org/page/demo_view/ner
测试了一个我们实际的例子:How to upgrade Dr.Cleaner
很遗憾, 没有任何一个API / Service 能正确的识别出 Dr.Cleaner
这个产品。
第三方SDK
- 首选还是Stanford的OpenNLP
注: NLTK也是基于Stanford的模型 - scipy:
自称“工业级”,而NLTK是“科研用” - 中文的:
- Java: Ansj / HanNLP
- Python: FoolNLTK
注:
- 貌似python中文分词的首先jieba还没有NER的功能
- 目前NER都有一些新词发现的功能, 但是不可避免的, 如果想适应自己的业务, 还是需要提供相应的词库。
本文原创,原文链接:http://www.flyml.net/2018/01/02/deepnlp-learn-ner/
文章评论