В чем разница между gensim LabeledSentence и TaggedDocument

Пожалуйста, помогите мне понять разницу между тем, как работает TaggedDocument и LabeledSentence из gensim. Моя конечная цель - классификация текста с использованием модели Doc2Vec и любого классификатора. Я читаю этот блог!

class MyLabeledSentences(object):
    def __init__(self, dirname, dataDct={}, sentList=[]):
        self.dirname = dirname
        self.dataDct = {}
        self.sentList = []
    def ToArray(self):       
        for fname in os.listdir(self.dirname):            
            with open(os.path.join(self.dirname, fname)) as fin:
                for item_no, sentence in enumerate(fin):
                    self.sentList.append(LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no]))
        return sentList


class MyTaggedDocument(object):
    def __init__(self, dirname, dataDct={}, sentList=[]):
        self.dirname = dirname
        self.dataDct = {}
        self.sentList = []
    def ToArray(self):       
        for fname in os.listdir(self.dirname):            
            with open(os.path.join(self.dirname, fname)) as fin:
                for item_no, sentence in enumerate(fin):
                    self.sentList.append(TaggedDocument([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no]))
        return sentList

sentences = MyLabeledSentences(some_dir_name)
model_l = Doc2Vec(min_count=1, window=10, size=300, sample=1e-4, negative=5,     workers=7)
sentences_l = sentences.ToArray()
model_l.build_vocab(sentences_l )
for epoch in range(15): # 
    random.shuffle(sentences_l )
    model.train(sentences_l )
    model.alpha -= 0.002  # decrease the learning rate
    model.min_alpha = model_l.alpha 

sentences = MyTaggedDocument(some_dir_name)
model_t = Doc2Vec(min_count=1, window=10, size=300, sample=1e-4, negative=5, workers=7)
sentences_t = sentences.ToArray()
model_l.build_vocab(sentences_t)
for epoch in range(15): # 
    random.shuffle(sentences_t)
    model.train(sentences_t)
    model.alpha -= 0.002  # decrease the learning rate
    model.min_alpha = model_l.alpha

Мой вопрос: model_l.docvecs['some_word'] такой же, как model_t.docvecs['some_word']? Можете ли вы предоставить мне веб-ссылку на хорошие источники, чтобы понять, как работает TaggedDocument или LabeledSentence.


person Rashmi Singh    schedule 16.12.2016    source источник


Ответы (1)


LabeledSentence — это старое, устаревшее имя для того же простого типа объекта для инкапсуляции текстового примера, который теперь называется TaggedDocument. Подойдут любые объекты со свойствами words и tags, каждый из которых представляет собой список. (words всегда представляет собой список строк; tags может быть сочетанием целых чисел и строк, но в наиболее распространенном и наиболее эффективном случае это просто список с одним целым числом идентификатора, начинающимся с 0.)

model_l и model_t будут служить тем же целям, обучаясь на одних и тех же данных с теми же параметрами, используя только разные имена для объектов. Но векторы, которые они будут возвращать для отдельных токенов слов (model['some_word']) или тегов документов (model.docvecs['somefilename_NN']), скорее всего, будут другими — в Word2Vec/Doc2Vec инициализация и выборка обучения случайны, а также вызваны упорядочиванием дрожания из многопоточного обучения.

person gojomo    schedule 19.01.2017