Подтвердить что ты не робот

Обучение собственной модели в opennlp

Мне сложно создать мою собственную модель openNLP. Может ли кто-нибудь сказать мне, как создать модель. Как сделать тренировки.

Каким должен быть вход и где будет сохранен файл модели вывода.

4b9b3361

Ответ 1

https://opennlp.apache.org/docs/1.5.3/manual/opennlp.html

Этот сайт очень полезен, показывает как в коде, так и с использованием приложения OpenNLP для обучения моделей для всех разных типов, таких как извлечение сущности и часть речи и т.д.

Я мог бы привести несколько примеров кода здесь, но страница очень понятна для использования.

Теория мудр:

По существу вы создаете файл, в котором перечислены материалы, которые вы хотите обучить

например.

Спорт [whitespace] это страница о футболе, регби и т.д.

Политика [whitespace] - это страница о том, что премьер-министр Тони Блэр.

Формат описан на странице выше (каждая модель ожидает другой формат). как только вы создали этот файл, вы запускаете его через API или приложение opennlp (через командную строку), и он генерирует .bin файл. После того, как у вас есть этот .bin файл, вы можете загрузить его в модель и начать использовать его (согласно api на вышеуказанном веб-сайте).

Ответ 3

Сначала вам нужно подготовить данные с требуемым Entity.

Отношения должны быть отделены новым символом строки (\n). Значения должны быть отделены от и теги пространственным символом.
Предположим, вы хотите создать модель сущности медицины, поэтому данные должны быть примерно такими:

<START:medicine> Augmentin-Duo <END> is a penicillin antibiotic that contains two medicines - <START:medicine> amoxicillin trihydrate <END> and 
<START:medicine> potassium clavulanate <END>. They work together to kill certain types of bacteria and are used to treat certain types of bacterial infections.

Например, вы можете ссылаться на образец набор данных. Для получения лучших результатов учебные данные должны содержать не менее 15000 предложений.

Далее вы можете использовать Opennlp TokenNameFinderTrainer. Выходной файл будет в формате .bin.

Вот пример: Написание пользовательской модели NameFinder в OpenNLP

Для получения дополнительной информации см. документацию Opennlp

Ответ 4

Скопируйте данные в данные и запустите код ниже, чтобы получить свой собственный mymodel.bin.

Может ссылаться на данные = https://github.com/mccraigmccraig/opennlp/blob/master/src/test/resources/opennlp/tools/namefind/AnnotatedSentencesWithTypes.txt

public class Training {
       static String onlpModelPath = "mymodel.bin";
       // training data set
       static String trainingDataFilePath = "data.txt";

       public static void main(String[] args) throws IOException {
                       Charset charset = Charset.forName("UTF-8");
                       ObjectStream<String> lineStream = new PlainTextByLineStream(
                                                       new FileInputStream(trainingDataFilePath), charset);
                       ObjectStream<NameSample> sampleStream = new NameSampleDataStream(
                                                       lineStream);
                       TokenNameFinderModel model = null;
                       HashMap<String, Object> mp = new HashMap<String, Object>();
                       try {
                              //         model = NameFinderME.train("en","drugs", sampleStream, Collections.<String,Object>emptyMap(),100,4) ;
                                       model=  NameFinderME.train("en", "drugs", sampleStream, Collections. emptyMap());
                       } finally {
                                       sampleStream.close();
                       }
                       BufferedOutputStream modelOut = null;
                       try {
                                       modelOut = new BufferedOutputStream(new FileOutputStream(onlpModelPath));
                                       model.serialize(modelOut);
                       } finally {
                                       if (modelOut != null)
                                                       modelOut.close();
                       }
       }
}