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

使用命名实体的列车模型

施季
2023-03-14

我正在使用命名实体重新识别器查看斯坦福corenlp。我有不同类型的输入文本,我需要将其标记到我自己的实体中。所以我开始训练我自己的模型,但它似乎不起作用。

例如:我的输入文本字符串是“关于丰田陆地巡洋舰1956-1987黄金投资组合的49篇杂志文章之书”http://t.co/EqxmY1VmLg http://t.co/F0Vefuoj9Q"

我通过这些例子来训练自己的模型,只寻找一些我感兴趣的单词。

我jane-austen-emma-ch1.tsv长这样

Toyota  PERS
Land Cruiser    PERS

从上面的输入文本中,我只对这两个词感兴趣。一个是丰田,另一个是陆地巡洋舰。

austin.prop是这样的

trainFile = jane-austen-emma-ch1.tsv
serializeTo = ner-model.ser.gz
map = word=0,answer=1
useClassFeature=true
useWord=true
useNGrams=true
noMidNGrams=true
useDisjunctive=true
maxNGramLeng=6
usePrev=true
useNext=true
useSequences=true
usePrevSequences=true
maxLeft=1
useTypeSeqs=true
useTypeSeqs2=true
useTypeySequences=true
wordShape=chris2useLC

运行以下命令生成ner-model.ser.gz文件

Java-cpstanford-corenlp-3.4.1.jaredu.stanford.nlp.ie.crf.CRFhtml" target="_blank">分类器-propausten.prop

public static void main(String[] args) {
        String serializedClassifier = "edu/stanford/nlp/models/ner/english.muc.7class.distsim.crf.ser.gz";
        String serializedClassifier2 = "C:/standford-ner/ner-model.ser.gz";
        try {
            NERClassifierCombiner classifier = new NERClassifierCombiner(false, false, 
                    serializedClassifier2,serializedClassifier);
            String ss = "Book of 49 Magazine Articles on Toyota Land Cruiser 1956-1987 Gold Portfolio http://t.co/EqxmY1VmLg http://t.co/F0Vefuoj9Q";
            System.out.println("---");
            List<List<CoreLabel>> out = classifier.classify(ss);
            for (List<CoreLabel> sentence : out) {
              for (CoreLabel word : sentence) {
                System.out.print(word.word() + '/' + word.get(AnswerAnnotation.class) + ' ');
              }
              System.out.println();
            }

        } catch (ClassCastException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

这是我得到的结果

Book/PERS of/PERS 49/O Magazine/PERS Articles/PERS on/O Toyota/PERS Land/PERS Cruiser/PERS 1956-1987/PERS Gold/O Portfolio/PERS http://t.co/EqxmY1VmLg/PERS http://t.co/F0Vefuoj9Q/PERS

我认为这是错误的。我正在寻找丰田/PERS和陆地巡洋舰/PERS(这是一款多值的汽车)。

谢谢你的帮助。任何帮助都是非常感激的。

共有2个答案

冯阳云
2023-03-14

NERClassifier*是单词级的,也就是说,它标记单词,而不是短语。鉴于此,分类器的性能似乎很好。如果需要,可以将构成短语的单词连字符。所以在你的标签示例和测试示例中,你会把“陆地巡洋舰”改为“陆地巡洋舰”。

申屠秦斩
2023-03-14

我认为您还应该在trainFile中添加0实体的示例。正如您所给出的,trainFile对于学习来说太简单了,它需要0PERSON两个示例,所以它不会将所有内容都注释为PERSON。你不是在教它关于你不感兴趣的实体。比如说:

Toyota  PERS
of    0
Portfolio    0
49    0

等等

此外,对于短语级识别,你应该查看regexner,在那里你可以有模式(模式对我们有好处)。我正在使用API进行这项工作,我有以下代码:

Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, regexner");
props.put("regexner.mapping", customLocationFilename);

使用以下customLocationFileName

Make Believe Town   figure of speech    ORGANIZATION
( /Hello/ [{ ner:PERSON }]+ )   salut   PERSON
Bachelor of (Arts|Laws|Science|Engineering) DEGREE
( /University/ /of/ [{ ner:LOCATION }] )    SCHOOL

文本:你好,玛丽·凯勒出生于7月4日,获得理学学士学位。部分发票(100000欧元,约40%)是我们于8月15日从假镇仓库运至伦敦大学的C27655货物。INV2345用于余额。。客户联系人(Sigourney Weaver)表示,他们将按照通常的信用条款(30天)支付这笔款项

我得到的输出

Hello Mary Keller is a salut
4th of July is a DATE
Bachelor of Science is a DEGREE
$ 100,000 is a MONEY
40 % is a PERCENT
15th August is a DATE
University of London is a ORGANIZATION
Make Believe Town is a figure of speech
Sigourney Weaver is a PERSON
30 days is a DURATION

有关如何做到这一点的更多信息,您可以查看让我前进的示例。

 类似资料:
  • 有人能指出openNLP NameFinder模块使用的算法吗?代码很复杂,只有很少的文档记录,并且将其作为黑匣子(提供默认模型)使用给我的印象是它主要是启发式的。以下是一些输入和输出示例: 输入: 约翰·史密斯很沮丧。 约翰·史密斯很沮丧。 巴拉克·奥巴马感到沮丧。 乌戈·查韦斯很沮丧。(不再) 杰夫·阿特伍德很沮丧。 刘冰对openNLP NER模块感到失望。 诺姆·乔姆斯基对这个世界感到沮丧

  • 问题 你需要使用命名实体来替代 HTML 标签: <br/> => &lt;br/&gt; 解决方案 htmlEncode = (str) -> str.replace /[&<>"']/g, ($0) -> "&" + {"&":"amp", "<":"lt", ">":"gt", '"':"quot", "'":"#39"}[$0] + ";" htmlEncode('<a hr

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

  • 我是JPA 2.1的新手,最近才开始使用命名实体图。对于我的项目,我正在JPA 2.1中映射以下关系: 顺序 我想指示JPA加入并正确获取所有需要的数据。到目前为止,这对订单来说完美无缺 - 以下是我的实体(省略了getter和setter): 次序 订单明细 产品 产品线

  • 问题内容: 我使用NLTK从文本中提取命名实体: 但是我不知道如何将这些实体保存到列表中?例如– 谢谢。 问题答案: 返回嵌套对象,因此您必须遍历该对象才能到达网元。 看看带有正则表达式的命名实体识别:NLTK

  • 我最近发现了命名实体图,我正试图以一种干净、干燥的方式实现它们。 我不确定的是(通过JPA和Spring数据文档阅读还没有回答)使用的名称的范围。是它们所定义的类的私有,还是我可以这样做: 车站在哪里。Route中的深子图是指Stop中的命名实体图。 谢谢!