小白一枚,买了新书,想训练出自定义的命名实体识别模型;参照了第八章战斗机的例子,但是没出现我所期待的结果,请各位大佬指点一下;代码如下:
public class DemoPlane
{
static String PLANE_CORPUS ="D:\\hanlp\\HanlpData\\data-for-1.7.4\\data\\test\\Per-D.txt";
static String PLANE_MODEL = PLANE_CORPUS.replace("Per-D.txt", "model.bin");
public static void main(String[] args) throws IOException
{
NERTrainer nerTrainer = new NERTrainer();
nerTrainer.tagSet.nerLabels.clear();
nerTrainer.tagSet.nerLabels.add("Pro");
nerTrainer.tagSet.nerLabels.add("City");
nerTrainer.tagSet.nerLabels.add("Dist");
nerTrainer.tagSet.nerLabels.add("Cstre");
nerTrainer.tagSet.nerLabels.add("Comm");
nerTrainer.tagSet.nerLabels.add("Road");
nerTrainer.tagSet.nerLabels.add("Biud");
nerTrainer.tagSet.nerLabels.add("RoomNum");
nerTrainer.tagSet.nerLabels.add("Other");
PerceptronNERecognizer recognizer = new PerceptronNERecognizer(nerTrainer.train(PLANE_CORPUS, PLANE_MODEL).getModel());
// 在NER预测前,需要一个分词器,最好训练自同源语料库
LinearModel cwsModel = new CWSTrainer().train(PLANE_CORPUS, PLANE_MODEL.replace("model.bin", "cws.bin")).getModel();
PerceptronSegmenter segmenter = new PerceptronSegmenter(cwsModel);
PerceptronLexicalAnalyzer analyzer = new PerceptronLexicalAnalyzer(segmenter, new PerceptronPOSTagger(), recognizer);
analyzer.enableTranslatedNameRecognize(false).enableCustomDictionary(false);
System.out.println(analyzer.analyze("广东省深圳市南山区南头街道龙屋新村二十巷702房。"));
}
}
部分标注数据如下:
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 143号/StreNum 兰园/Biud 10栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 金湾西二路/Road 2019号/StreNum 深圳湾出入境检验检疫局/Biud 2栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 海月路/Road 43号/StreNum 招商海月花园-一期/Biud 22栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 工业九路/Road 28号/StreNum 壹间/Biud 9栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 工业九路/Road 28号/StreNum 壹间/Biud 15栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 62号/StreNum 榆桂小区/Biud 46栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 143号/StreNum 兰园/Biud 1栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 62号/StreNum 榆桂小区/Biud 23栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 62号/StreNum 榆桂小区/Biud 28栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 后海大街/Road 招商服务大厦/Biud 2栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 62号/StreNum 榆桂小区/Biud 9栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 143号/StreNum 兰园/Biud 9栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 工业九路/Road 28号/StreNum 壹间/Biud 16栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 62号/StreNum 榆桂小区/Biud 33栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 工业九路/Road 28号/StreNum 壹间/Biud 8栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 爱榕路/Road 62号/StreNum 榆桂小区/Biud 45栋/RoomNum
广东省/Pro 深圳市/City 南山区/Dist 招商街道/Cstre 工业九路/Road 28号/StreNum 壹间/Biud 18栋/RoomNum
代码运行后的结果如下:
广东省/ns 深圳市/ns 南山区/ns 南头街道/ns 龙屋新村二十巷/ns 702房。/m
分词效果是可以的,但是没有出现我自定义的命名实体标签;是哪个环节出现了问题呢?
另:语料数据1.4w条,总大小1.6mb,训练出的分词模型183kb,命名实体模型才8kb.
end