답변을 기다리는 데 오래 기다렸습니다. 스탠포드 코어를 사용하여 완성 할 수있는 방법을 찾아 내지 못했습니다. 그러나 임무는 완수되었습니다. 나는 LingPipe NLP 라이브러리를 동일하게 사용했다. 다른 사람이 그 혜택을 볼 수 있기 때문에 여기에 답을 인용하십시오.
개발자 또는 연구원 또는 어떤 경우에 대비하여 다이빙하기 전에 Lingpipe licencing을 확인하십시오.
링 파이프는 다양한 NER 방법을 제공합니다. I는 사전뿐만 아니라 통계 학적 방법을 사용했다 등
1) 사전 기반 NER
2) 통계 NER (HMM 기반)
3) 규칙 기반 NER.
첫 번째는 직접 조회 방식이고 두 번째는 교육 기반입니다.
사전 기반 NER에 대한 예는 here
statstical 접근 방식은 교육 파일을 필요로 찾을 수 있습니다. 다음 형식으로 파일을 사용했습니다. -
<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());
}
}
}
코드 의례 : 대답은 기본적 인용 예에 제시되어있다 구글 :)
친애하는 @Arn은 n-gram을 위해 NER를 교육하는 데 성공 했습니까? 나는 과학에서 교육 : 교육, 전자 공학 : 교육에서와 같은 교육을 훈련하고 싶다. 나를 안내 해줄 수 있니? 감사합니다 –
@KhalidUsman, 문의 해 주셔서 감사합니다. 나는 이것을 달성하기 위해 아래와 같이 LingPipe를 사용했다. 꽤 괜찮은 양의 훈련 데이터 세트로 아주 잘 작동했습니다. 모든 모델은 학습 자료를 제공하는 데 얼마나 효과가 있는지에 따라 문제가 없습니다. –