Как использовать doc2vec для назначения меток для набора данных enron - PullRequest
0 голосов
/ 24 сентября 2019

Я использую набор данных электронной почты enron.Я должен назначить 5 ярлыков этим классам, а именно: оценка, повышение, send_document, request_for_document, meeting_invites.Теперь я использовал doc2vec, чтобы назначить ему метки, используя:

emails_df['tokenized_sents'] = emails_df.iloc[0:1000].apply(lambda row: nltk.word_tokenize(row['content']), axis=1)

common_texts = [
                ['We' ,'were', 'impressed', 'with' ,'the' ,'work', 'produced' ,'by' ,'you' ,'and' ,'you' ,'showed' ,'leadership', 'qualities' ,'that' 'the' ,'rest' ,'of' ,'the', 'team' ,'could' ,'look', 'up' ,'to'],

                ['Finish' ,'the' ,'financial' ,'analysis', 'report', 'that' ,'was' ,'started' ,'last' ,'week'],

                ['Please', 'find', 'attached'],

                ['Looking', 'forward', 'to' ,'hearing' ,'from', 'you'],

                ['The' , 'meeting', 'will', 'take', 'place', 'on', 'Wednesday'],

                ['forwarded', 'to', 'xx']



    ]
documents = [TaggedDocument(doc, [i]) for i, doc in enumerate(common_texts)]
labels = []
#print (documents)

model = Doc2Vec(documents, size=5, window=3, min_count=1, workers=4)
#Persist a model to disk:

from gensim.test.utils import get_tmpfile
fname = get_tmpfile("my_doc2vec_model")

#print (fname)
#output: C:\Users\userABC\AppData\Local\Temp\my_doc2vec_model

#load model from saved file
model.save(fname)
model = Doc2Vec.load(fname)  
# you can continue training with the loaded model!
#If you’re finished training a model (=no more updates, only querying, reduce memory usage), you can do:

model.delete_temporary_training_data(keep_doctags_vectors=True, keep_inference=True)

#Infer vector for a new document:
#Here our text paragraph just 2 words
c=0
for i in emails_df['tokenized_sents']: 
    vector = model.infer_vector(i)
    c=c+1
    import operator
    index, value = max(enumerate(vector), key=operator.itemgetter(1))
    labels.append(index)

Здесь, emails_df - это просто фрейм данных, для которого я читаю emails.csv.Мне не нужен идеальный этикетировщик, но мне нужно что-то стоящее.В каком направлении мне теперь идти, чтобы немного его улучшить?(учитывая, что я впервые узнал о doc2vec)

Редактировать: Объяснение: Я создал common_texts как вектор объектов, который содержит предложения, принадлежащие каждому классу.Затем я применяю doc2vec, а затем использую его функцию infer_vector для генерации сходства

1 Ответ

0 голосов
/ 24 сентября 2019

Doc2Vec требуется много данных для обучения полезных векторов "плотного встраивания" для текстов.Маловероятно, что это даст хорошие результаты, если использовать только несколько коротких обучающих текстов, например, 6 коротких common_texts - даже если вы уменьшите размер вектора до 5 измерений.

(Опубликовано Doc2Vec В работе часто используются обучающие документы от десятков тысяч до миллионов для обучения векторов документов с размерами 100-1000.)

Но, кроме того, эти векторы делают не имеют каждое из своих индивидуальных измерений как интерпретируемые категории.Скорее, они являются «плотными» векторами, где нет априорного назначения значения отдельным осям.Вместо этого все учебные документы «упакованы» в общее пространство, где их относительные расстояния или относительные направления могут указывать на силу отношений.

Таким образом, ваш код для выбора метки для каждого документа на основе того, какой размер его вектора-документа является наибольшим положительным значением, является бессмысленным неправильным использованием векторов Doc2Vec -стиля.

Это помогло бы более четко сформулировать ваши реальные цели: какие ярлыки вы пытаетесь назначить и почему?

В частности, было бы более целесообразно:

  • обучить модель Doc2Vec на все тексты сообщений электронной почты

  • если у вас есть известные ярлыки для некоторых писем, но вы хотите определить ярлыки для других писем, то используйте векторы документов в качестве входных данных для отдельного шага «классификации».

  • , если у вас нет известных ярлыков, но вы хотите узнать, какие виды естественных группировок могут существовать в электронных письмах, как смоделировано Doc2Vec, тогда вы будете использоватьвекторы документации в качестве входных данных для отдельного шага «кластеризации», а затем для дальнейшего изучения / анализа полученных кластеров, чтобы определить, подходят ли они для ваших нужд или выявить закономерности, интересные для вашего проекта.

(Существует множество примеров онлайновых обучающих программ, использующих инструменты машинного обучения Python для классификации электронных писем из набора данных Enron. Я бы предложил успешно проработать один или несколько из них, даже если они неНе используйте Doc2Vec - чтобы понять общее обучение классификатора, затем тестирование классификатора и, наконец, процесс применения классификатора. Только тогда рассмотрите Doc2Vec как дополнительный источник «функций», добавляемых к усилиям по классификации.)

...