需要找出实体识别的算法

数据挖掘 机器学习 命名实体识别
2022-03-11 18:03:06

我是命名实体识别的新手。我需要从语料库中提取一些特定数据。

两个语料库示例:

嗨,Rajesh Das 想买这辆车。Rakesh Das 将使用这辆车。

嗨,Rakesh Das 是 Rajesh Das 的兄弟。Rajesh Das 会买这辆车。

从上面的这些示例中,我需要提取买家姓名。所以很明显,靠近购买字的名字将是买家的名字。对于两个语料库,Rajesh Das 的位置是不同的。我无法弄清楚提取买家姓名需要实施哪种算法。

我关注了实现 SpaCy 和 NLTK的https://towardsdatascience.com/named-entity-recognition-with-nltk-and-spacy-8c4a7d88e7da帖子。它只提供所有名单。有人可以告诉我如何获得买家姓名吗?

3个回答

我建议你使用斯坦福 NLP 工具他们有一个专门用于NER的库。它们都是用 Java 编写的,但nltk为它们提供了 Python 包装器。您可以使用以下命令调用它:

from nltk.tag.stanford import StanfordNERTagger

当然,您必须安装 Java。据我了解,斯坦福模块是最好的公开 NLP 工具。值得一试。还有一个名为的独立 python 模块stanfordnlp,其中包含一个 NER 标记器。

或者,您可以尝试使用共指解析模型。它们可从斯坦福大学 CoreNLP的库中获得,这是斯坦福大学的另一个免费软件。

所有 stanford 工具都非常好,但文件却出奇地重。

spacy还有一个基于 LSTM 模型的称为NeuralCoref 4.0的共指子模块。他们的开发人员这是最先进的。我从未尝试过,但我肯定会,因为它看起来很有希望。

更新:图书馆neuralcoref对于共指解析任务来说绝对是很棒的。它由 Huggingface (!) 开发并基于 SpaCy。这是一个非常强大的工具,快速且易于使用,我强烈建议使用斯坦福 CoreNLP 的替代品。

您可以使用FindTextualAnswer.

FindTextualAnswer["Hi, Rajesh Das want to buy this car. Rakesh Das will use this car.",
 "Who wants to buy the car?",
 TargetDevice -> "GPU"]

“拉杰什达斯”

FindTextualAnswer["Hi, Rakesh Das is brother of Rajesh Das. Rajesh Das will buy this car.",
 "Who wants to buy the car?",
 TargetDevice -> "GPU"]

“拉杰什达斯”

希望他的帮助。

对于这种任务,如果尝试构建您的自定义 ner 模型会更好。对于参考,您可以查看我的 kaggle 笔记本以获得 ner 的自定义模型,这将使​​您在设计自己的数据集和准备数据集以进行建模时抢占先机。

Kaggle 笔记本链接