Использование node.js и обработки естественного языка для обработки нескольких словосочетаний
Я использую очень классную natural библиотеку для node.js.
Я пытаюсь обучить мой классификатор, чтобы он соответствовал фразе user experience
. Моя проблема в том, что я делаю что-то вроде этого:
classifier.addDocument(['user experience'], 'ux');
Он не соответствует 2 фразам слов, я считаю, потому что он символизирует слова. Если я сделаю что-то вроде этого:
classifier.addDocument(['user', 'experience'], 'ux');
Он работает так, как я хочу, но моя проблема в том, что я не хочу просто сопоставлять слово user
, потому что статья может упоминать слово user
несколько раз, и это потенциально не имеет ничего общего с делать с пользовательским опытом, что приведет к неточным классификациям. Итак, мой вопрос в том, как совместить 2 или более словосочетания с использованием НЛП?
Спасибо за помощь.
Ответы
Ответ 1
Вы должны взглянуть на n-граммы, в частности, в этом случае он называется bigram, последовательность из двух токенов.
https://github.com/NaturalNode/natural#bigrams
Я не использовал эту конкретную библиотеку (не думаю, что nodejs - лучший язык для NLP, он все еще находится на ранней стадии, и я бы предложил вам использовать более зрелую библиотеку (NLTK)/language (python) для NLP. Хотя я думаю, это прекрасно, просто для тестирования или небольшого проекта).
В любом случае, судя по руководству, вы могли бы сделать что-то вроде
classifier.addDocument([['user', 'experience']], 'ux');
Добавьте скобки для каждой последовательности, которую вы хотите добавить вместе.
Ответ 2
Возможно, слишком поздно, но...
Я использую Natural, и я думаю, вам не нужно передавать массив, просто выполните:
classifier.addDocument('user experience', 'ux');
Это должно сработать. В основном просто удалите скобки.
Ответ 3
Я думаю, что лучший подход к этому относится к вашему тексту как к массиву объектов. Вот так:
var natural = require('natural');
var classifier = //Here comes the classifier that you had to choose
var trainingData = [{text: 'user experience', label: 'ux'}]
var yourTestData = [];
trainingData.forEach(function(item){
// finally you add the data to classifier
classifier.addDocument(item.text, item.label);
});