使用Stanford NLP训练n-gram NER
named-entity-recognition
nlp
opennlp
stanford-nlp
8
0

最近,我一直在尝试使用Stanford Core NLP训练n-gram实体。我遵循了以下教程-http://nlp.stanford.edu/software/crf-faq.shtml#b

这样,我就只能指定unigram标记及其所属的类。谁能引导我通过,以便将其扩展为n-gram。我正在尝试从聊天数据集中提取已知的实体,例如电影名称。

如果我误解了斯坦福教程,并且可以将其用于n-gram培训,请指导我。

我所坚持的是以下属性

#structure of your training file; this tells the classifier
#that the word is in column 0 and the correct answer is in
#column 1
map = word=0,answer=1

例如,这里的第一列是单词(字母),第二列是实体

CHAPTER O
I   O
Emma    PERS
Woodhouse   PERS

现在,我需要将诸如HulkTitanic等已知实体(例如电影名称)训练为电影,使用这种方法将很容易。但是如果我需要训练, 我知道你去年夏天婴儿节那天做了什么,最好的方法是什么?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

我面临着为自动域标记ngram短语的同样挑战。我一直在寻找一种有效的关键字映射,可以在以后的阶段用于创建训练文件。通过为映射文件提供正则表达式(ngram组件术语)及其对应的标签,我最终在NLP管道中使用了regexNER。请注意,在这种情况下无法实现NER机器学习。希望此信息对某人有所帮助!

收藏
评论

答案基本上是在您引用的示例中给出的,其中“ Emma Woodhouse”是一个名称。我们提供的默认模型使用IO编码,并假设同一类的相邻标记是同一实体的一部分。在许多情况下,这几乎总是正确的,并使模型更简单。但是,如果您不想这样做,则可以使用其他标签编码来训练NER模型,例如常用的IOB编码,您可以在其中标记事物:

Emma    B-PERSON
Woodhouse    I-PERSON

然后,可以表示相同类别但不是相同实体的相邻令牌。

收藏
评论

在这里等待答案已经很久了。我还无法弄清楚使用Stanford Core完成它的方法。但是任务完成了。我已经使用了LingPipe NLP库。只是在这里引用答案,因为,我认为其他人也可以从中受益。

如果您是开发人员或研究人员,或者曾经使用过什么,请在下潜之前查看Lingpipe的许可以进行实施。

Lingpipe提供了各种NER方法。

1)基于字典的NER

2)统计NER(基于HMM)

3)基于规则的NER等

我已经使用了字典以及统计方法。

第一个是直接查找方法,第二个是基于培训的方法。

可以在此处找到基于字典的NER的示例

统计方法需要培训文件。我已使用以下格式的文件-

<root>
<s> data line with the <ENAMEX TYPE="myentity">entity1</ENAMEX>  to be trained</s>
...
<s> with the <ENAMEX TYPE="myentity">entity2</ENAMEX>  annotated </s>
</root>

然后,我使用以下代码训练实体。

import java.io.File;
import java.io.IOException;

import com.aliasi.chunk.CharLmHmmChunker;
import com.aliasi.corpus.parsers.Muc6ChunkParser;
import com.aliasi.hmm.HmmCharLmEstimator;
import com.aliasi.tokenizer.IndoEuropeanTokenizerFactory;
import com.aliasi.tokenizer.TokenizerFactory;
import com.aliasi.util.AbstractExternalizable;

@SuppressWarnings("deprecation")
public class TrainEntities {

    static final int MAX_N_GRAM = 50;
    static final int NUM_CHARS = 300;
    static final double LM_INTERPOLATION = MAX_N_GRAM; // default behavior

    public static void main(String[] args) throws IOException {
        File corpusFile = new File("inputfile.txt");// my annotated file
        File modelFile = new File("outputmodelfile.model"); 

        System.out.println("Setting up Chunker Estimator");
        TokenizerFactory factory
            = IndoEuropeanTokenizerFactory.INSTANCE;
        HmmCharLmEstimator hmmEstimator
            = new HmmCharLmEstimator(MAX_N_GRAM,NUM_CHARS,LM_INTERPOLATION);
        CharLmHmmChunker chunkerEstimator
            = new CharLmHmmChunker(factory,hmmEstimator);

        System.out.println("Setting up Data Parser");
        Muc6ChunkParser parser = new Muc6ChunkParser();  
        parser.setHandler( chunkerEstimator);

        System.out.println("Training with Data from File=" + corpusFile);
        parser.parse(corpusFile);

        System.out.println("Compiling and Writing Model to File=" + modelFile);
        AbstractExternalizable.compileTo(chunkerEstimator,modelFile);
    }

}

为了测试NER,我使用了以下课程

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Set;

import com.aliasi.chunk.Chunk;
import com.aliasi.chunk.Chunker;
import com.aliasi.chunk.Chunking;
import com.aliasi.util.AbstractExternalizable;

public class Recognition {
    public static void main(String[] args) throws Exception {
        File modelFile = new File("outputmodelfile.model");
        Chunker chunker = (Chunker) AbstractExternalizable
                .readObject(modelFile);
        String testString="my test string";
            Chunking chunking = chunker.chunk(testString);
            Set<Chunk> test = chunking.chunkSet();
            for (Chunk c : test) {
                System.out.println(testString + " : "
                        + testString.substring(c.start(), c.end()) + " >> "
                        + c.type());

        }
    }
}

代码礼貌:Google :)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号