Я новичок в doc2ve c. У меня есть фрейм данных с двумя столбцами: один - это идентификатор (patent_number
), другой - очищенный и токенизированный текст (clean_description
). Для каждого идентификатора мне нужно сгенерировать в 3-м столбце (max_similarity
) максимальное значение сходства clean_description
с подмножеством clean_description
, принадлежащим идентификаторам в списке с именем patents_snow_banch
, который идентифицирует подмножество -dataframe. Вот выдержка из 7528 наблюдений во фрейме данных:
clean_description patent_number
0 ['detailed', 'description', 'preferred', 'embodied'] 3930647
1 ['referring', 'first', 'fig', 'ski', 'comprise'] 3930658
2 ['description', 'preferred', 'embodiments', 'solution'] 3930659
...
Мой текущий подход состоит в том, чтобы сгенерировать матрицу сходства 7528X7528 и извлечь максимальное значение для каждого patent_number
из подмножества, обозначенного patents_snow_banch
, но я полностью открыт для других подходов
Я использовал doc2ve c, чтобы измерить, насколько каждый clean_description
похож на каждый другой clean_descriptions
в кадре данных, и создать матрицу сходства 7528X7528
sample = df[['clean_description', 'patent_number']]
class MyDataframeCorpus(object):
def __init__(self, source_df, text_col, tag_col):
self.source_df = source_df
self.text_col = text_col
self.tag_col = tag_col
def __iter__(self):
for i, row in self.source_df.iterrows():
yield TaggedDocument(words=simple_preprocess(row[self.text_col]),
tags=[row[self.tag_col]])
corpus_for_doc2vec = MyDataframeCorpus(sample , 'clean_description', 'patent_number')
model = Doc2Vec(vector_size=100, window=20, min_count=5, workers=11,alpha=0.025, epochs=20)
model.build_vocab(corpus_for_doc2vec)
model.train(corpus_for_doc2vec,total_examples=model.corpus_count, epochs=model.epochs)
similarity_matrix = []
index = similarities.MatrixSimilarity(matutils.Dense2Corpus(model.wv.vectors.T))
for sims in index:
similarity_matrix.append(sims)
similarity_array = np.array(similarity_matrix)
Обучение модели, похоже, работает нормально (насколько мне известно), но матрица результатов (similarity_array
) составляет 16321X16321 вместо 7528X7528.
Предполагая, что эта проблема разрешима и Я могу получить правильную матрицу 7528X7528, затем мне нужно найти для каждого наблюдения максимальную оценку сходства с подмножеством идентификаторов в матрице, идентифицированной в списке с именем patents_snow_banch
Любые идеи о том, как это можно сделать быть сделано? Заранее спасибо