行テキストの列があります。行テキストの列から、製品名のリストに似た名前を見つけます。問題を解決するためにDoc2Vecを使用していました。しかし、私の結果はかなり悪いものでした。この問題に対する正しいアプローチはどれですか?
私のデータは次のとおりです: LINE TEXT: パレット 10kg のチキン ウェルドコート メタル ロジスティクス 100 番目のメイン、ボルルヴェドール アベニュー 19 番目のメイン ST ジョン 5670987
最も類似した名前を取得するために使用している製品のリストは、mat_subset=[英国サイズ 10 の靴、スーパードライ トリム、重量 10kg の箱、パレットなど] です。
私の行テキストは、かなりまともなOCR出力です。私が使用したDoc2Vecコードは次のとおりです。
s_data=mat['LINETEXT']
line_txt = pd.DataFrame()
line_txt['sentences']=s_data
line_txt['sentences']=line_txt['sentences'].astype(str)
line_txt['tokenized_sents'] = line_txt.apply(lambda row: nltk.word_tokenize(row['sentences']), axis=1)
sentences= []
for item_no, line in enumerate(line_txt['tokenized_sents'].values.tolist()):
sentences.append(LabeledSentence(line,[item_no]))
# MODEL PARAMETERS
dm = 1 # 1 for distributed memory(default); 0 for dbow
cores = multiprocessing.cpu_count()
size = 300
context_window = 50
seed = 42
min_count = 1
alpha = 0.5
max_iter = 200
# BUILD MODEL
model = gensim.models.doc2vec.Doc2Vec(documents = sentences,
dm = dm,
alpha = alpha, # initial learning rate
seed = seed,
min_count = min_count, # ignore words with freq less than min_count
max_vocab_size = None, #
window = context_window, # the number of words before and after to be used as context
size = size, # is the dimensionality of the feature vector
sample = 1e-4, # ?
negative = 5, # ?
workers = cores, # number of cores
iter = max_iter)
overalldf=[]
for line in mat_subset:
infer_vector = model.infer_vector(line)
similar_documents = model.docvecs.most_similar([infer_vector], topn = 10)
df.columns=["sentence",'Similarity']
overalldf.append(df)
final=pd.concat(overalldf)
これは私が使用したコードです。ここで、mat_subset は製品名のリストです。私はPythonにかなり慣れていません。何か間違ったことをしている場合は修正してください