Как отфильтровать кучу немаркированных данных статьи, используя мою слабую модель по сходству слов в python? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть 9000 образцов без меток, я хочу, чтобы это был бинарный класс (0 и 1)

Кроме того, у меня есть 500 помеченных образцов, принадлежащих положительному классу (метка = 1), и нет образцов для отрицательной метки класса = 0.

Я знаю, что невозможно маркировать 9000 образцов с 0 и 1, используя модель, обученную только на 500 положительных образцах.

Таким образом, я хотел бы реализовать подход «сходства» для классификации 9000 выборок на основе их «сходства слов» с 500 положительными выборками. Чтобы извлечь аналогичные данные из данных 9000, я могу пометить их как 1. Таким образом, остальные данные из набора данных 9000 можно пометить как класс 0.

так вопрос, можно ли его отфильтровать? если так, как я могу отфильтровать его по сходству слова с питоном?

спасибо за ваш ответ, надеюсь, у меня есть решение :)

1 Ответ

0 голосов
/ 20 ноября 2018

Да, это возможно.Вы можете использовать doc2vec (я предлагаю библиотеку gensim для python), чтобы создать векторное пространство для слов в ваших 500 положительных документах.Используя это представление, можно запросить сходство между новыми выборками (выборка из вас 9000 выборок) и набором корпоративных данных (500 выборок).Если вы считаете сходство «достаточно похожим», вы можете пометить его как 1.

Для хорошего учебника и кода обратитесь к: https://markroxor.github.io/gensim/static/notebooks/doc2vec-IMDB.html

, вы можете пропустить «Методы прогнозной оценки», вероятно,самый интересный для вас раздел: «Кажется ли закрытые документы более связанными, чем отдаленные?»

РЕДАКТИРОВАТЬ: ответ на комментарий.Да, я использовал код некоторое время назад (я не очень хорошо помню, если у меня были ошибки).Реализация кода, который я использовал, приведена ниже.Пожалуйста, учтите, что я использовал машину с 8 ядрами

def labelize_tweets_ug(tweets,label):
   result = []
   prefix = label
   for i, t in zip(tweets.index, tweets):
       result.append(TaggedDocument(t.split(), [prefix + '_%s' % i]))
   return result

# all_x is a list of tweets
all_x_w2v = labelize_tweets_ug(all_x, 'all')
cores = multiprocessing.cpu_count()


model_ug_cbow = Word2Vec(sg=0, size=100, negative=5, window=2, min_count=2, 
workers=cores, alpha=0.065, min_alpha=0.065)
model_ug_cbow.build_vocab([x.words for x in tqdm(all_x_w2v)])

for epoch in range(30):
    model_ug_cbow.train(utils.shuffle([x.words for x in tqdm(all_x_w2v)]),total_examples=len(all_x_w2v), epochs=1)
    model_ug_cbow.alpha -= 0.002
    model_ug_cbow.min_alpha = model_ug_cbow.alpha
...