Учитывая много примеров текста, классифицируйте некоторые никогда ранее не виденный текст - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть несколько примеров текстов для конкретных c этикеток. Используя эти данные, я хочу иметь возможность классифицировать новый фрагмент текста для этикетки.

У меня есть от дюжины до ста строк данных, таких как:

Product Description | Price | Batteries | Reviews

The HP notebook is a bargain...., $200, Included, 37
Acer just released a new laptop...., $500, Not Included, 0
Lenovo Thinkpad is hitting the market .., $800, None, 23

и затем для нового текста, подобного этому, я хочу иметь возможность извлекать метки.

Samsung Ultrabook is sleek and new..., $900, n/a, 2 reviews

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

Основной вопрос в том, как научить нейронную сеть множеству примеров метки, а затем обнаружить ее в каком-то новом корпусе?

обновление: это ожидаемый вывод (заказ непредсказуем и может содержать больше элементов, чем указано ниже)

Samsung Ultrabook is sleek and new..., $900, n/a, 2 reviews

, поэтому я буду l oop над каждым предметом, и он должен идентифицировать один из ярлыков ['product description', 'price', 'batteries', 'reviews']. Если на входе метка не найдена, она игнорируется.

1 Ответ

1 голос
/ 07 февраля 2020

Для этого вам нужна модель классификации текста, допустим, вы хотите классифицировать данное описание в одну из меток:

Для обучения:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC

vectorizerPipe = Pipeline([
                     ('tfidf', TfidfVectorizer(stop_words='english',lowercase=True,ngram_range = (1,3),min_df=2,max_df=0.95,sublinear_tf=True)),
                     ('classification', LinearSVC(penalty='l2',loss='hinge')),
                ])
    model=vectorizerPipe.fit(df.loc[:,'product description'], df.loc[:,'label'])
    print('Training done')

Для тестирования:

model.predict(['Acer just released a new laptop...'])

Вы можете изменить параметры TfidfVectorizer и LinearSV C в соответствии с вашими потребностями.

...