gensim LabeledSentence 和 TaggedDocument 有什么区别
What is the difference between gensim LabeledSentence and TaggedDocument
请帮助我理解 TaggedDocument
和 LabeledSentence
与 gensim
的工作方式之间的区别。我的最终目标是使用 Doc2Vec
模型和任何分类器进行文本分类。我正在关注这个 blog!
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
的工作原理吗?
LabeledSentence
是同一个简单的 object-type 的较旧的已弃用名称,用于封装现在称为 TaggedDocument
的 text-example。任何具有 words
和 tags
属性的对象,每个对象都是一个列表,都可以。 (words
始终是一个字符串列表;tags
可以是整数和字符串的混合,但在常见和 most-efficient 情况下,只是一个具有单个 id 整数的列表,从在 0.)
model_l
和 model_t
将用于相同的目的,使用相同的参数对相同的数据进行训练,只是对象使用不同的名称。但是它们 return 对个体 word-tokens (model['some_word']
) 或 document-tags (model.docvecs['somefilename_NN']
) 的向量可能会有所不同——[=24= 中存在随机性] 初始化和 training-sampling,并由 ordering-jitter 从多线程训练中引入。
请帮助我理解 TaggedDocument
和 LabeledSentence
与 gensim
的工作方式之间的区别。我的最终目标是使用 Doc2Vec
模型和任何分类器进行文本分类。我正在关注这个 blog!
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
的工作原理吗?
LabeledSentence
是同一个简单的 object-type 的较旧的已弃用名称,用于封装现在称为 TaggedDocument
的 text-example。任何具有 words
和 tags
属性的对象,每个对象都是一个列表,都可以。 (words
始终是一个字符串列表;tags
可以是整数和字符串的混合,但在常见和 most-efficient 情况下,只是一个具有单个 id 整数的列表,从在 0.)
model_l
和 model_t
将用于相同的目的,使用相同的参数对相同的数据进行训练,只是对象使用不同的名称。但是它们 return 对个体 word-tokens (model['some_word']
) 或 document-tags (model.docvecs['somefilename_NN']
) 的向量可能会有所不同——[=24= 中存在随机性] 初始化和 training-sampling,并由 ordering-jitter 从多线程训练中引入。