পাইথনের সাথে জিনসিমের ওয়ার্ড টুভেল মডেল ব্যবহার করে বাক্যটির মিলকে কীভাবে গণনা করা যায়


125

Gensim Word2Vec এর মতে , আমি 2 টি শব্দের মধ্যে সাদৃশ্য গণনা করতে জেনসিম প্যাকেজে ওয়ার্ড 2vec মডেলটি ব্যবহার করতে পারি।

যেমন

trained_model.similarity('woman', 'man') 
0.73723527

যাইহোক, শব্দ 2vec মডেল বাক্যটির মিলের পূর্বাভাস দিতে ব্যর্থ। আমি জিনসিমের বাক্যটির মিলের সাথে এলএসআই মডেলটি খুঁজে বের করি তবে, যা মনে হয় না যে এটি ওয়ার্ড 2vec মডেলের সাথে মিলিত হতে পারে। আমার প্রতিটি বাক্যের কর্পাসের দৈর্ঘ্য খুব বেশি দীর্ঘ নয় (10 টি শব্দের চেয়ে কম)। সুতরাং, লক্ষ্য অর্জনের জন্য কি কোনও সহজ উপায় আছে?


4
এই সমস্যাটি (অন্যান্য বিষয়গুলির সাথে) নিয়ে আলোচনা করার জন্য একটি এসিএল টিউটোরিয়াল রয়েছে: youtube.com/watch?v=_ASOqXiWBVo&feature=youtu.be
এমিএল

7
আপনি এখন জিনসিমের ডক 2 ওয়েভ ব্যবহার করতে পারেন এবং একই মডিউল থেকে বাক্যটির সাদৃশ্য পেতে পারেন
কাম্পটা

@ কেম্পটা হাই আপনি কি এমন কোনও পোস্ট প্রস্তাব করবেন যা প্রয়োগটি দেখায়?
আয়ান_দে_লিভিরা

উত্তর:


86

এটি আসলে একটি বেশ চ্যালেঞ্জিং সমস্যা যা আপনি জিজ্ঞাসা করছেন। বাক্যটির সাদৃশ্য গণনা করার জন্য বাক্যটির ব্যাকরণগত মডেল তৈরি করা, সমতুল্য কাঠামোগুলি বোঝা (যেমন "তিনি গতকাল স্টোরের দিকে গিয়েছিলেন" এবং "গতকাল তিনি দোকানে গিয়েছিলেন"), কেবলমাত্র সর্বনাম এবং ক্রিয়াগুলিতে নয় বরং একই সাথে মিল খুঁজে পেয়েছিলেন যথাযথ বিশেষ্য, প্রচুর বাস্তব পাঠ্য উদাহরণ ইত্যাদিতে পরিসংখ্যান সহ-উপস্থিতি / সম্পর্কগুলি খুঁজে পাওয়া ইত্যাদি

আপনি চেষ্টা করতে পারেন সবচেয়ে সহজ জিনিস - যদিও আমি জানি না এটি কতটা ভাল করবে এবং এটি অবশ্যই আপনাকে সর্বোত্তম ফলাফল দেয় না - প্রথমে সমস্ত "স্টপ" শব্দগুলি মুছে ফেলা হবে ("" "," এর মতো শব্দগুলি) ", ইত্যাদি যা বাক্যে খুব বেশি অর্থ যোগ করে না) এবং তারপরে উভয় বাক্যে শব্দের উপরে word2vec চালান, এক বাক্যে ভেক্টরগুলিকে যোগ করুন, অন্য বাক্যে ভেক্টরগুলিকে যোগ করুন এবং তারপরে পার্থক্যটি সন্ধান করুন অঙ্কগুলি শব্দ-ভিত্তিক পার্থক্যের পরিবর্তে তাদের সংক্ষিপ্ত করে, আপনি কমপক্ষে শব্দ ক্রমের সাপেক্ষে থাকবেন না। বলা হচ্ছে, এটি প্রচুর উপায়ে ব্যর্থ হবে এবং কোনওভাবেই ভাল সমাধান হতে পারে না (যদিও এই সমস্যার ভাল সমাধানগুলি প্রায়শই সবসময় কিছু পরিমাণ এনএলপি, মেশিন লার্নিং এবং অন্যান্য চতুরতার সাথে জড়িত থাকে)।

সুতরাং, সংক্ষিপ্ত উত্তরটি হ'ল না, এটি করার কোনও সহজ উপায় নেই (অন্তত এটি ভালভাবে না করা)।


4
আমি আপনি ঠিক মনে করেন. সবচেয়ে সহজ পদ্ধতি হ'ল শব্দের সমস্ত ভেক্টরকে একটি বাক্যে জড়ো করা এবং যোগফলগুলির মধ্যে পার্থক্য খুঁজে পাওয়া। উপায় দ্বারা, এই সহজ পদ্ধতিটি শব্দের গণনা দ্বারা প্রভাবিত হবে? কারণ এক বাক্যে যত বেশি শব্দ, তত বেশি হিস্টগ্রাম সংক্ষিপ্ত হবে।
zhfkt

2
@ zfkt, সম্ভবত, হ্যাঁ সুতরাং আপনাকে শব্দের সংখ্যার দ্বারা ভাগ করার দরকার হতে পারে বা এরকম কিছু তৈরি করার চেষ্টা করতে পারে some যেভাবেই হোক, এর মতো কোনও হিউরিস্টিক গুরুতর ত্রুটিযুক্ত হবে।
মাইকেল অ্যারন সাফিয়ান


75

যেহেতু আপনি জিনসিম ব্যবহার করছেন, আপনার সম্ভবত এটি ডক 2 বেভ বাস্তবায়ন ব্যবহার করা উচিত। ডক্টুভেক শব্দটি - বাক্য- এবং ডকুমেন্ট-স্তরে ওয়ার্ড 2vec এর একটি এক্সটেনশন। এটি এখানে বর্ণিত একটি দুর্দান্ত সরল এক্সটেনশন

http://cs.stanford.edu/~quocle/paragraph_vector.pdf

জেনসিম দুর্দান্ত কারণ এটি স্বজ্ঞাত, দ্রুত এবং নমনীয়। দুর্দান্ত কী আপনি অফারইনড ওয়ার্ড এম্বেডিংগুলিকে অফিসিয়াল ওয়ার্ড 2 ওয়েভ পৃষ্ঠা থেকে ধরে নিতে পারেন এবং জিনসিমের ডক 2 ভেক মডেলের সিএন 0 স্তরটি উন্মোচিত হয়েছে যাতে আপনি এই উচ্চ মানের ভেক্টরগুলির সাথে এম্বেডিং শব্দটি বানাতে পারেন!

গুগলনিউজ-ভেক্টর-নেগেটিভ300.bin.gz ( গুগল কোডে লিঙ্কযুক্ত )

আমি মনে করি জিন্সিমটি কোনও ভেক্টর স্পেসে বাক্যটি এম্বেড করার জন্য স্পষ্টতই সহজতম (এবং এখনও আমার পক্ষে সেরা) সরঞ্জাম।

উপরোক্ত লে অ্যান্ড মিকোলভের কাগজে প্রস্তাবিত বাক্য ব্যতীত বাক্য-থেকে-ভেক্টরের অন্যান্য কৌশল রয়েছে। স্ট্যানফোর্ডের সোচার এবং ম্যানিং অবশ্যই এই অঞ্চলে কাজ করা দু'জন বিখ্যাত গবেষক। তাদের কাজটি রচনাগতভাবে নীতির উপর ভিত্তি করে তৈরি হয়েছে - বাক্যটির শব্দার্থক শব্দগুলি এসেছে:

1. semantics of the words

2. rules for how these words interact and combine into phrases

বাক্য-স্তরের উপস্থাপনা গঠনের ক্ষেত্রে কীভাবে কম্পোজিশনেটি ব্যবহার করা যায় সে জন্য তারা এই জাতীয় কয়েকটি মডেল (ক্রমবর্ধমান আরও জটিল হয়ে উঠছে) প্রস্তাব দিয়েছেন।

২০১১ - পুনরাবৃত্তির পুনরাবৃত্তির জন্য স্বয়ংক্রিয় কোডার (খুব তুলনামূলক সহজ।

2012 - ম্যাট্রিক্স-ভেক্টর নিউরাল নেটওয়ার্ক

2013 - নিউরাল টেনসর নেটওয়ার্ক

2015 - ট্রি এলএসটিএম

তার কাগজপত্রগুলি সমস্ত সোশর.আর.গ্রেজে পাওয়া যায়। এর মধ্যে কয়েকটি মডেল উপলভ্য, তবে আমি এখনও জিনসিমের ডক 2 ওয়েভের পরামর্শ দেব। একটির জন্য, ২০১১ এর ইউআরই বিশেষভাবে শক্তিশালী নয়। তদ্ব্যতীত, এটি নিউজ-ওয়াই ডেটা প্যারাফ্রেসিংয়ের জন্য উপযুক্ত ওজনের সাথে পূর্বনির্ধারিত হয়। তিনি যে কোডটি সরবরাহ করেন তা আপনাকে নেটওয়ার্কটি পুনরায় প্রশিক্ষণ করতে দেয় না। আপনি বিভিন্ন শব্দের ভেক্টরও বদলাতে পারবেন না, সুতরাং আপনি 2011 এর টিউরিয়ান থেকে প্রাক-শব্দ 2vec এম্বেডিংয়ের সাথে আটকে আছেন। এই ভেক্টরগুলি অবশ্যই ওয়ার্ড টুভেক বা গ্লোভের স্তরে নেই।

গাছটি এখনও এলএসটিএম-এর সাথে কাজ করেনি, তবে এটি খুব আশাব্যঞ্জক বলে মনে হচ্ছে!

tl; dr হ্যাঁ, জিনসিমের ডক 2 ওয়েভ ব্যবহার করুন। তবে অন্যান্য পদ্ধতিও বিদ্যমান!


প্রাক-প্রশিক্ষিত ওয়ার্ড 2 ওয়েভের মানগুলি দিয়ে ডক 2 বেভ মডেলটি কীভাবে আরম্ভ করতে হবে সে সম্পর্কে আপনার আরও তথ্য আছে?
সাইমন এইচ

42

আপনি যদি ওয়ার্ড টুভেক ব্যবহার করছেন, আপনার প্রতিটি বাক্য / নথিতে সমস্ত শব্দের জন্য গড় ভেক্টর গণনা করতে হবে এবং ভেক্টরগুলির মধ্যে কোসাইন মিল খুঁজে পাওয়া দরকার:

import numpy as np
from scipy import spatial

index2word_set = set(model.wv.index2word)

def avg_feature_vector(sentence, model, num_features, index2word_set):
    words = sentence.split()
    feature_vec = np.zeros((num_features, ), dtype='float32')
    n_words = 0
    for word in words:
        if word in index2word_set:
            n_words += 1
            feature_vec = np.add(feature_vec, model[word])
    if (n_words > 0):
        feature_vec = np.divide(feature_vec, n_words)
    return feature_vec

সাদৃশ্য গণনা করুন:

s1_afv = avg_feature_vector('this is a sentence', model=model, num_features=300, index2word_set=index2word_set)
s2_afv = avg_feature_vector('this is also sentence', model=model, num_features=300, index2word_set=index2word_set)
sim = 1 - spatial.distance.cosine(s1_afv, s2_afv)
print(sim)

> 0.915479828613

4
আপনি কি অনুগ্রহ করে সূচক 2 শব্দ_সেট এবং মডেল.ইন্ডেক্স 2 শব্দটির আরও ব্যাখ্যা দিতে পারেন? ধন্যবাদ.
theteddyboy

3
লক্ষ্য করুন যে "গড় ভেক্টর" গণনা করা একেবারে গণনা না করার মতো একটি স্বেচ্ছাসেবী পছন্দ হিসাবে রয়েছে।
জেনেটেড

2
আমি কেন অবাক হয়েছি কেন এটি শীর্ষ উত্তর নয়, এটি বেশ ভালভাবে কাজ করে এবং ক্রম সমস্যা নেই যা গড় পদ্ধতিতে রয়েছে।
অসীম

এই উত্তরটি আমি খুঁজছিলাম। আমার সমস্যা সমাধান করুন। সমাধানের জন্য ধন্যবাদ
iRunner

25

আপনি ওয়ার্ড মোভারের দূরত্বের অ্যালগরিদম ব্যবহার করতে পারেন। এখানে ডাব্লুএমডি সম্পর্কে একটি সহজ বর্ণনা রয়েছে

#load word2vec model, here GoogleNews is used
model = gensim.models.KeyedVectors.load_word2vec_format('../GoogleNews-vectors-negative300.bin', binary=True)
#two sample sentences 
s1 = 'the first sentence'
s2 = 'the second text'

#calculate distance between two sentences using WMD algorithm
distance = model.wmdistance(s1, s2)

print ('distance = %.3f' % distance)

পিএস: আপনি যদি পাইমড লাইব্রেরি আমদানি সম্পর্কে কোনও ত্রুটির মুখোমুখি হন তবে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে এটি ইনস্টল করতে পারেন:

pip install pyemd

2
আমি আগে ডাব্লুএমডি ব্যবহার করেছিলাম এবং এটি শান্তভাবে কাজ করে, তবে এটি বড় কর্পাসে দম বন্ধ হয়ে যায়। সফটকোসাইনসিমারিটির চেষ্টা করুন। জেনসিমেও পাওয়া গেছে ( twitter.com/gensim_py/status/963382840934195200 )
ক্রিংকার

1
আপনি যখন কোনও কর্পাসকে জিজ্ঞাসা করতে চান তবে ডাব্লুএমডি খুব দ্রুত হয় না।
অমর্ত্য

18

একবার আপনি শব্দের ভেক্টরের দুটি সেটের যোগফল গণনা করার পরে আপনার কোস্টাইনটি ভেক্টরগুলির মধ্যে নেওয়া উচিত, ভিন্ন নয়। দুটি ভেক্টরের ডট পণ্যকে সাধারণীকরণ করে কোসাইন গণনা করা যায়। সুতরাং, গণনা শব্দটি একটি ফ্যাক্টর নয়।


1
কীভাবে এটি করা যায় সে সম্পর্কে আপনি কিছুটা সিউডোকোড সরবরাহ করতে পারেন (আমি জেনসিম / পাইথন ব্যবহার করছি না)
dcsan

13

শব্দের একটি তালিকা গ্রহণ এবং তাদের মিলগুলির তুলনা করে ডকুমেন্টেশন থেকে একটি ফাংশন রয়েছে।

s1 = 'This room is dirty'
s2 = 'dirty and disgusting room' #corrected variable name

distance = model.wv.n_similarity(s1.lower().split(), s2.lower().split())

12

আমি বাক্যগুলির অর্থগত মিলটি গণনা করতে যাওয়া লোকদের সহায়তা করতে বিদ্যমান সমাধানটি আপডেট করতে চাই।

ধাপ 1:

জেনসিম ব্যবহার করে উপযুক্ত মডেলটি লোড করুন এবং বাক্যটির শব্দের জন্য ভেক্টর শব্দটি গণনা করুন এবং তাদের একটি শব্দ তালিকা হিসাবে সংরক্ষণ করুন

পদক্ষেপ 2: বাক্য ভেক্টর গণনা করা

বাক্যগুলির মধ্যে শব্দার্থক মিলের গণনা আগে কঠিন ছিল তবে সম্প্রতি " একটি সহজ বোতাম টু-টু-বিট বেসলাইন ফর সেন্টেন্স ই এমবেডিংস " নামক একটি পেপার " প্রস্তাবিত হয়েছিল যা গণনা করে একটি সরল পদ্ধতির পরামর্শ দেয় এবং তারপরে অপসারণ করে তাদের প্রথম প্রধান উপাদানটিতে গড় ভেক্টরগুলির অনুমান re এখানে একটি শব্দের ওজন হ'ল একটি / (a ​​+ p (w)) পরামিতি এবং পি (ডাব্লু) এর (আনুমানিক) শব্দের ফ্রিকোয়েন্সি যাকে মসৃণ বিপরীত ফ্রিকোয়েন্সি বলা হয় এই পদ্ধতিটি আরও ভালভাবে পারফর্ম করছে।

SIF (মসৃণ বিপরীত ফ্রিকোয়েন্সি) কাগজে প্রস্তাবিত পদ্ধতিটি ব্যবহার করে বাক্য ভেক্টর গণনা করার জন্য একটি সাধারণ কোড এখানে দেওয়া হয়েছে

পদক্ষেপ 3: স্কেলার্ন কোসাইন_সাম্যতা ব্যবহার করে বাক্যগুলির জন্য দুটি ভেক্টর লোড করুন এবং মিলটি গণনা করুন।

বাক্যটির সাদৃশ্য গণনা করা এটি সবচেয়ে সহজ এবং দক্ষ পদ্ধতি।


2
খুব সুন্দর কাগজ। দ্রষ্টব্য: এসআইএফ বাস্তবায়নের লিঙ্কটির জন্য get_word_frequency () পদ্ধতিটি লিখতে হবে যা পাইথনের কাউন্টার ব্যবহার করে সহজেই সম্পাদন করা যেতে পারে () ব্যবহার করে এবং কীগুলি দিয়ে ডিকটি ফেরত পাঠানো: অনন্য শব্দ ডাব্লু, মান: # ডাব্লু / # মোট ডক লেন
কোয়েটজলক্যাটল

8

আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করছি এবং এটি ভালভাবে কাজ করে। আপনার প্রথমে একটি পোস্টস্ট্যাগার চালানো দরকার এবং তারপরে স্টপ শব্দগুলি (নির্ধারক, সংশ্লেষ, ...) থেকে মুক্তি পেতে আপনার বাক্যটি ফিল্টার করতে হবে। আমি টেক্সটব্লব এপিটাগারকে সুপারিশ করছি । তারপরে আপনি বাক্যে প্রতিটি শব্দের ভেক্টরের গড় গ্রহণ করে একটি ওয়ার্ড 2 ওয়েভ তৈরি করেন। Gemsim word2vec মধ্যে n_similarity পদ্ধতি ঠিক শব্দ তুলনা করতে দুটি সেট পাস করার অনুমতি দিয়ে থাকে।


ভেক্টরদের বনাম গড় বোঝাতে পার্থক্য কী? একটি বাক্য ভেক্টর তৈরি করতে তাদের যুক্ত করা?
Καrτhικ

1
পার্থক্যটি হ'ল ভেক্টরের আকার সমস্ত বাক্যগুলির জন্য স্থির থাকে
লেচটপিটো

যতক্ষণ আপনি কোজিনের মিল ব্যবহার করেন ততক্ষণ কোনও পার্থক্য নেই। @lechatpito ভেক্টর আকারের সাথে কিছুই করার নেই। ভেক্টরগুলি সংশ্লেষিত হয়, সংঘবদ্ধ নয়।
Wok

6

বাক্য বা বাক্যগুলির মতো দীর্ঘ টুকরো টুকরো টুকরো তুলনা করার সমস্যাটি সমাধান করার উদ্দেশ্যে ওয়ার্ড 2Vec এর এক্সটেনশন রয়েছে। এর মধ্যে একটি হ'ল অনুচ্ছেদ 2vec বা doc2vec।

"বন্টিত বাক্য এবং ডকুমেন্টস এর উপস্থাপনা" http://cs.stanford.edu/~quocle/paragraph_vector.pdf

http://rare-technologies.com/doc2vec-tutorial/


2
উপস্থাপিত অ্যালগরিদম কীভাবে কাজ করে তা শীঘ্রই এটি উল্লেখযোগ্য। আপনি মূলত প্রতিটি উচ্চারণে একটি অনন্য "টোকেন" যুক্ত করুন এবং শব্দ 2vec ভেক্টরগুলি গণনা করুন। শেষে আপনি কর্পাসে আপনার প্রতিটি শব্দের জন্য ভেক্টর শব্দটি পাবেন (যদি আপনি সমস্ত শব্দ জিজ্ঞাসা করেন, তবে অনন্যও)। উচ্চারণের প্রতিটি অনন্য "টোকেন" সেই উচ্চারণটির প্রতিনিধিত্ব করবে। কাগজে উপস্থাপিত ফলাফল নিয়ে কিছু বিতর্ক রয়েছে তবে তা অন্য গল্প।
ভ্লাদিস্লাভস ডভগ্লেলেকস

5

Gensim কার্যকরী একটি মডেল নামক Doc2Vec জন্য অনুচ্ছেদ এমবেডিং

আইপিথন নোটবুক হিসাবে উপস্থাপিত বিভিন্ন টিউটোরিয়াল রয়েছে:

এই টিউটোরিয়ালে প্রদর্শিত অন্য একটি পদ্ধতি ওয়ার্ড 2Vec এবং ওয়ার্ড মুভারের দূরত্ব (ডাব্লুএমডি) এর উপর নির্ভর করবে :

একটি বিকল্প সমাধান হ'ল গড় ভেক্টরগুলির উপর নির্ভর করা:

from gensim.models import KeyedVectors
from gensim.utils import simple_preprocess    

def tidy_sentence(sentence, vocabulary):
    return [word for word in simple_preprocess(sentence) if word in vocabulary]    

def compute_sentence_similarity(sentence_1, sentence_2, model_wv):
    vocabulary = set(model_wv.index2word)    
    tokens_1 = tidy_sentence(sentence_1, vocabulary)    
    tokens_2 = tidy_sentence(sentence_2, vocabulary)    
    return model_wv.n_similarity(tokens_1, tokens_2)

wv = KeyedVectors.load('model.wv', mmap='r')
sim = compute_sentence_similarity('this is a sentence', 'this is also a sentence', wv)
print(sim)

অবশেষে, আপনি যদি টেনসরফ্লো চালাতে পারেন, আপনি চেষ্টা করতে পারেন: https://tfhub.dev/google/universal-senferences-encoder/2


4

আমি পূর্বের উত্তরগুলির দ্বারা প্রদত্ত পদ্ধতিগুলি চেষ্টা করেছি। এটি কাজ করে, তবে এর প্রধান অসুবিধাটি হ'ল বাক্যগুলির বৃহত্তর মিলটি দীর্ঘতর হবে (সাদৃশ্যটি গণনা করতে আমি কোনও দুটি বাক্যের দুটি মাঝের এম্বেডিংয়ের কোসাইন স্কোর ব্যবহার করি) যেহেতু আরও শব্দগুলি ইতিবাচক শব্দার্থক প্রভাবগুলি বাক্যে যুক্ত করা হবে।

আমি আমার মন পরিবর্তন এবং পরিবর্তে এম্বেডিং গবেষণা বাক্য ব্যবহার করা উচিত এই কাগজ এবং এই


3

ফেসবুক রিসার্চ গ্রুপ ইনফরসেন্ট ফলাফল নামে একটি নতুন সমাধান প্রকাশ করেছে এবং গিথুবে প্রকাশিত কোড রয়েছে, তাদের রেপো পরীক্ষা করে দেখুন। এটা বেশ দুর্দান্ত। আমি এটি ব্যবহার করার পরিকল্পনা করছি। https://github.com/facebookresearch/InferSent

তাদের কাগজ https://arxiv.org/abs/1705.02364 বিমূর্ততা: অনেক আধুনিক এনএলপি সিস্টেম শব্দ বৈশিষ্ট্য হিসাবে এম্বেডিংয়ের উপর নির্ভর করে, পূর্বে বৃহত্তর কর্পোরায় একটি অপ্রচলিত পদ্ধতিতে প্রশিক্ষিত, বেস বৈশিষ্ট্য হিসাবে। বাক্যগুলির মতো বৃহত্তর পাঠ্যের জন্য এম্বেডিংগুলি অর্জনের প্রচেষ্টা অবশ্য এতটা সফল হয়নি। বাক্যগুলির অকার্যকর উপস্থাপনা শেখার বেশ কয়েকটি প্রচেষ্টা ব্যাপকভাবে গ্রহণযোগ্য সন্তোষজনক পর্যায়ে পৌঁছেছে না। এই কাগজে, আমরা স্ট্যানফোর্ড ন্যাচারাল ল্যাঙ্গুয়েজ ইনফারেন্স ডেটাসেটের তত্ত্বাবধানে থাকা ডেটা ব্যবহার করে প্রশিক্ষিত সর্বজনীন বাক্য উপস্থাপনাগুলি কীভাবে স্কিপট্যাচ ভেক্টরগুলির মতো বিস্তৃত স্থানান্তর কার্যগুলিতে অবিচ্ছিন্ন পদ্ধতিগুলিকে নিয়মিতভাবে ছাপিয়ে যেতে পারে। অনেকটা এর মতো কম্পিউটার দৃষ্টিভঙ্গি কীভাবে বৈশিষ্ট্যগুলি অর্জন করতে ইমেজনেট ব্যবহার করে, যা অন্য কাজগুলিতে স্থানান্তরিত হতে পারে, আমাদের কাজটি অন্যান্য এনএলপি কর্মে স্থানান্তর শেখার জন্য প্রাকৃতিক ভাষার অনুক্রমের উপযুক্ততার ইঙ্গিত দেয়। আমাদের এনকোডার সর্বজনীনভাবে উপলব্ধ।


3

যদি ওয়ার্ড 2Vec ব্যবহার না করা হয় তবে এম্বেডের জন্য BERT ব্যবহার করে এটি খুঁজে পাওয়ার জন্য আমাদের কাছে অন্য মডেল রয়েছে। নীচে রেফারেন্স লিঙ্কটি https://github.com/UKPLab/senistance-transformers রয়েছে

pip install -U sentence-transformers

from sentence_transformers import SentenceTransformer
import scipy.spatial

embedder = SentenceTransformer('bert-base-nli-mean-tokens')

# Corpus with example sentences
corpus = ['A man is eating a food.',
          'A man is eating a piece of bread.',
          'The girl is carrying a baby.',
          'A man is riding a horse.',
          'A woman is playing violin.',
          'Two men pushed carts through the woods.',
          'A man is riding a white horse on an enclosed ground.',
          'A monkey is playing drums.',
          'A cheetah is running behind its prey.'
          ]
corpus_embeddings = embedder.encode(corpus)

# Query sentences:
queries = ['A man is eating pasta.', 'Someone in a gorilla costume is playing a set of drums.', 'A cheetah chases prey on across a field.']
query_embeddings = embedder.encode(queries)

# Find the closest 5 sentences of the corpus for each query sentence based on cosine similarity
closest_n = 5
for query, query_embedding in zip(queries, query_embeddings):
    distances = scipy.spatial.distance.cdist([query_embedding], corpus_embeddings, "cosine")[0]

    results = zip(range(len(distances)), distances)
    results = sorted(results, key=lambda x: x[1])

    print("\n\n======================\n\n")
    print("Query:", query)
    print("\nTop 5 most similar sentences in corpus:")

    for idx, distance in results[0:closest_n]:
        print(corpus[idx].strip(), "(Score: %.4f)" % (1-distance))

Https://github.com/hanxiao/bert-as-service অনুসরণ করার জন্য অন্যান্য লিঙ্ক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.