Классификатор текста с разделением слов с использованием классификатора StanfordNLP

После довольно успешного старта в Стэнфордском НЛП (и с немецким модулем) я попробовал классифицировать числовые данные. Это также закончилось с хорошими результатами.

По крайней мере, я попытался настроить классификатор для категоризации текстовых документов (как писем, так и отсканированных документов), но это было довольно неприятно. Что я хочу сделать, так это работать с классификатором на базе слов, а не с n-граммами. В моем учебном файле есть два столбца: первый с категорией текста, второй с самим текстом, без вкладок и разделителей строк.

Файл свойств имеет следующее содержимое:

1.splitWordsWithPTBTokenizer=true
1.splitWordsRegexp=false
1.splitWordsTokenizerRegexp=false
1.useSplitWords=true

Но когда я начинаю тренировать классификатор вот так...

    ColumnDataClassifier cdc = new ColumnDataClassifier("classifier.properties");
    Classifier<String, String> classifier =
        cdc.makeClassifier(cdc.readTrainingExamples("data.train"));

... затем я получаю много строк, начинающихся со следующей подсказки:

[main] INFO edu.stanford.nlp.classify.ColumnDataClassifier - Warning: regexpTokenize pattern false didn't match on 

Мои вопросы:

1) Есть идеи, что не так с моими свойствами? Думаю, с моим тренировочным файлом все в порядке.

2) Я хочу использовать слова/токены, которые я получил от CoreNLP, с немецкой моделью. Это возможно?

Спасибо за любые ответы!


person Christian    schedule 14.07.2016    source источник


Ответы (2)


Нумерация правильная, вам не нужно ставить двойки в начале строк, как говорится в другом ответе. 1 означает первый столбец data, а не первый столбец в вашем файле обучения (который является категорией). Варианты с 2. в начале будут для второго столбца данных или третьего столбца в вашем файле обучения, которого у вас нет.

Я не знаю об использовании слов/токенов, которые вы получили от CoreNLP, но мне также потребовалось некоторое время, чтобы узнать, как использовать словесные n-граммы, поэтому, возможно, для некоторых людей это будет полезно:

# regex for splitting on whitespaces
1.splitWordsRegexp=\\s+

# enable word n-grams, just like character n-grams are used
1.useSplitWordNGrams=true

# range of values of n for your n-grams. (1-grams to 4-grams in this example)
1.minWordNGramLeng=1
1.maxWordNGramLeng=4

# use word 1-grams (just single words as features), obsolete if you're using
# useSplitWordNGrams with minWordNGramLeng=1
1.useSplitWords=true

# use adjacent word 2-grams, obsolete if you're using
# useSplitWordNGrams with minWordNGramLeng<=2 and maxWordNGramLeng>=2
1.useSplitWordPairs=true

# use word 2-grams in every possible combination, not just adjacent words
1.useAllSplitWordPairs=true

# same as the pairs but 3-grams, also not just adjacent words
1.useAllSplitWordTriples=true

для получения дополнительной информации см. http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/classify/ColumnDataClassifier.html

person Community    schedule 14.03.2017

Вы говорите, что в вашем учебном файле есть два столбца: первый с категорией текста, второй с самим текстом. Исходя из этого, ваш файл свойств неверен, потому что вы добавляете правила в первую колонку.

Измените свои свойства, чтобы они применялись к столбцу, где текст выглядит следующим образом:

2.splitWordsWithPTBTokenizer=true
2.splitWordsRegexp=false
2.splitWordsTokenizerRegexp=false
2.useSplitWords=true

Кроме того, я бы посоветовал работать через вики Software/Classifier/20 Newsgroups, здесь показаны некоторые практические примеры того, как работать со Стэнфордским классификатором и как настраивать параметры через файл свойств.

person tkja    schedule 18.07.2016
comment
Большое спасибо, я попробую оба в ближайшие дни. - person Christian; 18.07.2016
comment
Извините, но использование столбца номер 2 вместо 1 приводит к исключению: java.lang.RuntimeException: Ошибка: в строке слишком мало столбцов, разделенных табуляцией (2) для 3 столбцов, требуемых указанными свойствами: abc def [...] Looks так как я должен прочитать связанное с вами руководство. - person Christian; 22.07.2016
comment
Взгляните на исходный код, где возникает это исключение, по адресу grepcode.com/file/repo1.maven.org/maven2/edu.stanford.nlp/ , что-то может быть не так с вашим вход. У вас есть только два столбца, разделенные табуляцией? Нет вкладки в самих данных? Я очень рекомендую работать через вики, там показано, как шаг за шагом использовать классификатор Stanford NLP. - person tkja; 22.07.2016