আপনার সমস্যাটি ওয়ার্ড 2vec এর সাথে ডক 2 ওয়েভ দিয়েও সমাধান করা যেতে পারে। ডকুভেক আরও ভাল ফলাফল দেবে কারণ এটি মডেলকে প্রশিক্ষণ দেওয়ার সময় বাক্যগুলিকে বিবেচনা করে।
ডক 2vec সমাধান
আপনি এই লিঙ্কটি অনুসরণ করে আপনার ডক 2vec মডেলটিকে প্রশিক্ষণ দিতে পারেন । আপনি কিছু স্টপ শব্দগুলি মুছে ফেলার মতো কিছু প্রাক-প্রক্রিয়াজাতকরণ পদক্ষেপগুলি সম্পাদন করতে চাইতে পারেন ("দ্য", "একটি" ইত্যাদি শব্দগুলি যা বাক্যে খুব বেশি অর্থ যোগ করে না)। আপনি একবার আপনার মডেলকে প্রশিক্ষণ দিলে নিম্নলিখিত কোড ব্যবহার করে অনুরূপ বাক্যগুলি খুঁজে পেতে পারেন।
import gensim
model = gensim.models.Doc2Vec.load('saved_doc2vec_model')
new_sentence = "I opened a new mailbox".split(" ")
model.docvecs.most_similar(positive=[model.infer_vector(new_sentence)],topn=5)
ফলাফল:
[('TRAIN_29670', 0.6352514028549194),
('TRAIN_678', 0.6344441771507263),
('TRAIN_12792', 0.6202734708786011),
('TRAIN_12062', 0.6163255572319031),
('TRAIN_9710', 0.6056315898895264)]
উপরের ফলাফলগুলির জন্য টিপলগুলির তালিকা (label,cosine_similarity_score)
। আপনি বাক্যগুলিতে আউটপুট মানচিত্র করতে পারেন train[29670]
।
দয়া করে মনে রাখবেন যে উপরের পদ্ধতিরটি কেবলমাত্র ভাল ফলাফল দেবে যদি আপনার ডক 2 ওয়েভ মডেলটিতে নতুন বাক্যে পাওয়া শব্দের জন্য এম্বেডিং থাকে। আপনি যদি কিছু গীব্রিশ বাক্যটির মতো সাদৃশ্য পেতে চেষ্টা করেন তবে sdsf sdf f sdf sdfsdffg
এটি আপনাকে কয়েকটি ফলাফল দেবে, তবে প্রকৃত মিলের বাক্যগুলি নাও হতে পারে কারণ আপনার প্রশিক্ষিত মডেলটি মডেলটিকে প্রশিক্ষণ দেওয়ার সময় এই জিবির শব্দগুলি দেখতে পায় নি। সুতরাং আরও ভাল ফলাফলের জন্য যতগুলি শব্দ অন্তর্ভুক্ত করার জন্য আপনার মডেলটিকে যথাসম্ভব বাক্যে প্রশিক্ষণের চেষ্টা করুন।
ওয়ার্ড 2vec সলিউশন
যদি আপনি ওয়ার্ড 2vec ব্যবহার করে থাকেন তবে আপনাকে প্রতিটি বাক্যে সমস্ত শব্দের জন্য গড় ভেক্টর গণনা করতে হবে এবং ভেক্টরগুলির মধ্যে কোসাইন মিল খুঁজে পাওয়া দরকার।
def avg_sentence_vector(words, model, num_features, index2word_set):
#function to average all words vectors in a given paragraph
featureVec = np.zeros((num_features,), dtype="float32")
nwords = 0
for word in words:
if word in index2word_set:
nwords = nwords+1
featureVec = np.add(featureVec, model[word])
if nwords>0:
featureVec = np.divide(featureVec, nwords)
return featureVec
সাদৃশ্য গণনা করুন
from sklearn.metrics.pairwise import cosine_similarity
#get average vector for sentence 1
sentence_1 = "this is sentence number one"
sentence_1_avg_vector = avg_sentence_vector(sentence_1.split(), model=word2vec_model, num_features=100)
#get average vector for sentence 2
sentence_2 = "this is sentence number two"
sentence_2_avg_vector = avg_sentence_vector(sentence_2.split(), model=word2vec_model, num_features=100)
sen1_sen2_similarity = cosine_similarity(sentence_1_avg_vector,sentence_2_avg_vector)