Как можно обучить нейронную сеть для классификации текста в уже существующие классификации? - PullRequest
1 голос
/ 05 октября 2019

У меня есть набор данных, похожий на следующий, который выглядит как магазин типа Walmart.

+-----------------------------------------------------+------------------+------------------+------------------+-----+
|                     Description                     | Classification 1 | Classification 2 | Classification 3 | ... |
+-----------------------------------------------------+------------------+------------------+------------------+-----+
| iphone 7 order# :123595                             | Electronic       | Cell Phone       | Apple            |     |
| purchase of samsung galaxy s10 reference 32-2345    | Electronic       | Cell Phone       | Samsung          |     |
| dell 13" 500gb ssd intel i7                         | Electronic       | Laptop           | Dell             |     |
| tablet 15cm for chris t price $199.76               | Electronic       | Tablet           | NULL             |     |
| ...                                                 | ...              | ...              | ...              |     |
| 50x rolley chairs for office supplied by home depot | Supplies         | Furniture        | Chairs           |     |
| electrician cost for new building                   | Supplies         | Electrical       | Work             |     |
+-----------------------------------------------------+------------------+------------------+------------------+-----+

Эта форма набора данных довольно большая, с несколькими тысячами (может быть,> 100 000) строк и, может быть, 50+столбцы.

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

Таким образом, модель, основанная на вышеуказанном наборе данных, должна принять описание, которого она раньше не видела, и правильноклассифицируйте этот элемент, например: iphone 11 $999.99 => Electronic, Cell Phone, Apple.

В настоящее время я планирую использовать описание для классификации в качестве первого шага, чтобы упростить его, однако есть и другие столбцы, например, кто предоставил элемент, который мог бы помочьклассифицируйте, например, если элемент был предоставлен Apple или AT&T, его, скорее всего, классифицируют как Cell Phone.

Я думаю реализовать нейронную сеть для этого. Я реализовал нейронную сеть раньше, но только на типичных примерах (например, система для определения чисел 0-9 [набор данных MINST] или для идентификации одежды), поэтому я понимаю теорию работы нейронных сетей (веса, смещения, градиентного спуска, обратное распространение и т. д.) Однако я борюсь за то, как реализовать эту идею, которая у меня есть сейчас.

Вот мои мысли на данный момент:

  1. Я хочучтобы использовать Python, с tenorflow2.0 + keras.

  2. Мне нужен способ конвертировать текст в числовой формат. Кажется, есть несколько вариантов, таких как word2vec, но я не уверен, что это лучший вариант.

  3. Сколько нейронов должно быть в моем базовом слое? (При распознавании чисел каждое изображение имеет размер 28 * 28, поэтому базовый слой 28 * 28 имеет большой смысл, здесь я не уверен)

  4. Сколько скрытых слоев?

  5. Сколько выходных слоев? (Если у меня будет один для каждой отдельной комбинации классификаций, то есть один для
    Electronic, Cell Phone, Samsung, один для Electronic, Cell Phone, Apple и т. Д. Это приведет к выходному слою из тысяч нейронов, я не уверен, возможно ли это /посоветовали?

Я не ищу полных ответов, на самом деле я знаю, что это на самом деле невозможно, учитывая предоставленную информацию. Вместо этого я ищу рекомендации / предложения покак поступить с этой проблемой от кого-то более опытного, возможно, на самом деле, скорее всего, есть вещи, которые я пока не рассматриваю.

1 Ответ

0 голосов
/ 05 октября 2019

Я занимаюсь проблемами НЛП уже почти 5 лет, и вот мои предложения.

Я хочу использовать Python с tenorflow2.0 + keras.

Да, Keras было бы хорошим вариантом для реализации вашего решения. Это должно быть довольно просто сделать с Keras.

Мне нужен способ конвертировать текст в числовой формат. Кажется, есть несколько вариантов, таких как word2vec, но я не уверен, что это лучший вариант.

Да, векторы слов определенно улучшат производительность вашей модели. Но если вы хотите более наивное решение, вы можете попробовать onehot vectors . Я бы порекомендовал начать с однообразных векторов, а затем, когда у вас есть рабочее решение, улучшить его, используя векторы слов. Таким образом, вы уверены, что вначале вы не будете слишком усложнять, упрощая отладку, если в реализации что-то пойдет не так).

PS: word2vec довольно стар, сейчас есть лучшие альтернативытакие как GloVe и FastText .

Сколько нейронов должно иметь мой базовый слой? (При распознавании чисел каждое изображение имеет размер 28 * 28, поэтому базовый слой 28 * 28 имеет большой смысл, здесь я не уверен)

Это зависит от размера вашего словарного запаса. Как я уже говорил ранее, независимо от того, используете вы векторы слов или нет, вам придется преобразовывать слова в однообразные векторы. А длина однофотонного вектора определяется размером словаря.

Сколько скрытых слоев?

Это очень сложный вопрос. Вам нужно будет попробовать разные архитектуры и найти оптимальную, если вы ищете оптимальную структуру (например, с помощью оптимизации гиперпараметров).

Сколько выходных слоев?

Думаю, что этохитрый (главным образом потому, что прогнозирование тегов не в моей области знаний). Но я могу сказать вам две вещи:

  1. Есть выходной слой со всеми возможными категориями. Но, как вы можете себе представить, кто-то должен придумать категории. И тогда, если у вас есть большой набор тегов, вы получите большой слой прогнозирования Softmax. Но вы можете смягчить это, используя что-то вроде отрицательной выборки.

  2. Вы можете сделать это только с одним выходным слоем с фиксированным словарем (например, электроника, телефон, ноутбук и т. Д.). Однако вам нужно иметь фиксированный набор тегов (то есть словарь), который вы хотите предсказать. Затем вы можете использовать модель LSTM , чтобы предсказать произвольное количество тегов для данного описания. Вы можете создать произвольное количество тегов в качестве выходных данных, потому что вы можете продолжать прогнозировать один временной шаг за один раз, используя модель LSTM.

Но теперь вы предполагаете временную зависимость между тегами (в порядке их появления), которая может привести к забавным результатам. Например, если у вас одно и то же описание, но есть две разные серии тегов (например, электроника, телефон, Samsung и электроника, Samsung, телефон), это может привести к путанице в модели.

...