当前位置: 首页 > 知识库问答 >
问题:

有没有可能训练Stanford NER系统识别更多命名实体类型?

卢嘉誉
2023-03-14

我现在正在使用一些NLP库(stanford和nltk)stanford我看到了演示部分,只是想问一下是否可以使用它来识别更多的实体类型。

因此,目前斯坦福大学的NER系统(如演示所示)可以将实体识别为个人(姓名)、组织或位置。但被认可的组织仅限于大学或一些大型组织。我想知道我是否可以使用它的API来编写更多实体类型的程序,比如如果我输入的是“Apple”或“Square”,它就可以识别出它是一家公司。

我必须制作自己的训练集吗?

此外,如果我想提取实体及其相互之间的关系,我觉得应该使用斯坦福依赖解析器。我的意思是,首先提取命名实体和其他标记为“名词”的部分,并找出它们之间的关系。

我说得对吗?

谢谢

共有3个答案

祁博涛
2023-03-14

似乎你想训练你的定制模型。

下面是一个详细的教程,包含完整的代码:

https://dataturks.com/blog/stanford-core-nlp-ner-training-java-example.php?s=so

训练数据格式

训练数据作为文本文件传递,其中每行是一个单词标签对。行中的每个单词都应该以“word\t标签”的格式进行标记,单词和标签名称之间用一个制表符“\t”分隔。对于文本句子,我们应该将其分解为单词,并在训练文件中为每个单词添加一行。为了标记下一行的开始,我们在培训文件中添加了一个空行。

这是输入训练文件的示例

hp  Brand
spectre ModelName
x360    ModelName

home    Category
theater Category
system  0

horizon ModelName
zero    ModelName
dawn    ModelName
ps4 0

根据您的域,您可以自动或手动构建这样的数据集。手动构建这样的数据集可能非常痛苦,像NER注释工具这样的工具可以帮助简化这个过程。

列车模型

public void trainAndWrite(String modelOutPath, String prop, String trainingFilepath) {
   Properties props = StringUtils.propFileToProperties(prop);
   props.setProperty("serializeTo", modelOutPath);

   //if input use that, else use from properties file.
   if (trainingFilepath != null) {
       props.setProperty("trainFile", trainingFilepath);
   }

   SeqClassifierFlags flags = new SeqClassifierFlags(props);
   CRFClassifier<CoreLabel> crf = new CRFClassifier<>(flags);
   crf.train();

   crf.serializeClassifier(modelOutPath);
}

使用模型生成标记:

public void doTagging(CRFClassifier model, String input) {
    input = input.trim();
    System.out.println(input + "=>"  +  model.classifyToString(input));
}  

希望这有帮助。

太叔富
2023-03-14

你可以很容易地训练自己的数据集。

在斯坦福NER常见问题解答中,第一个问题是如何训练我们自己的NER模型

链接是http://nlp.stanford.edu/software/crf-faq.shtml

例如,你可以给出训练数据,比如

O
Microsoft ORG的产品OBJ

同样,你也可以建立自己的训练数据,建立一个模型,然后使用它来获得所需的输出

盖夕
2023-03-14

是的,你需要自己的训练器材。经过预培训的斯坦福模型只会将“斯坦福”一词识别为命名实体,因为他们已经在将该词(或根据他们使用的功能集非常相似的词,我不知道是什么)标记为命名实体的数据上进行了培训。

一旦你有了更多的数据,你需要把它放在这个问题和斯坦福大学教程中描述的正确格式中。

 类似资料:
  • 问题内容: 好的,我有以下代码来训练来自OpenNLP的NER标识符 我不知道我是否做错了什么,如果缺少什么,但是分类不起作用。我认为train.txt错误。 *发生 *的错误 是所有令牌仅被分类为一种类型。 我的train.txt数据类似于以下示例,但是条目的变化和数量更多。另一件事是,我每次都从文本中逐字逐句地查找,而不是所有标记。 有人可以证明我做错了吗? 问题答案: 您的训练数据不正确。

  • 问题内容: 我正在寻找Java的简单但“足够好”的命名实体识别库(和字典),我正在处理电子邮件和文档并提取一些“基本信息”,例如:名称,地点,地址和日期 我一直在环顾四周,大多数似乎都是沉重的一面和完整的NLP项目。 有什么建议吗? 问题答案: 顺便说一句,我最近遇到了OpenCalais,它似乎具有我要照顾的功能。

  • 我尝试过很多NER工具(OpenNLP、斯坦福NER、LingPipe、Dbpedia Spotlight等)。 但我一直回避的是一个基于地名录/词典的NER系统,在该系统中,我的自由文本与预定义实体名称列表匹配,并返回可能的匹配项。 这样我就可以拥有各种列表,如PERSON、ORGANIZATION等。我可以动态更改列表并获得不同的提取。这将大大减少训练时间(因为它们中的大多数都基于最大熵模型,

  • 我想使用NLP工具从意大利文本中提取名称和数字。 遗憾的是,斯坦福德NLP和Apache OpenNLP都没有为意大利人提供模型。 我能找到一个,或者找到训练数据来制造一个吗?(至少15000句)

  • 本文向大家介绍检测20类物体,多少张训练集,怎么训练相关面试题,主要包含被问及检测20类物体,多少张训练集,怎么训练时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 多分类问题,保证各类别的样例比,提取特征,用libsvm等做多分类。

  • 我正在尝试使用这个简短的实体识别教程来学习NER。但我无法成功运行代码。我在现场提供了一个入口。这里提到的txt文件。 我收到错误。 请帮帮我。先谢谢你。