Использование 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);  
});