यहाँ pyspark
में एक उदाहरण है, जो मुझे लगता है कि है सीधा है पूर्ण कार्यान्वयन के लिए, दस्तावेज़ पढ़ें स्काला के बंदरगाह के लिए - कुंजीका प्रयोग होता है +७५७१५९३२१०।
सबसे पहले, हम उदाहरण के रूप में मॉडल ट्रेन:
from pyspark import SparkContext
from pyspark.mllib.feature import Word2Vec
sc = SparkContext()
inp = sc.textFile("text8_lines").map(lambda row: row.split(" "))
k = 220 # vector dimensionality
word2vec = Word2Vec().setVectorSize(k)
model = word2vec.fit(inp)
k
शब्द वैक्टर की आयामी स्वरूप है - (100 डिफ़ॉल्ट मान है) उच्च बेहतर है, लेकिन आप स्मृति की आवश्यकता होगी, और सबसे बड़ी संख्या मैं अपने मशीन के साथ जा सकते हैं था 220 (संपादित करें: प्रासंगिक प्रकाशनों में विशिष्ट मूल्यों 300 और 1000 के बीच कर रहे हैं)
के बाद हम मॉडल को प्रशिक्षित किया है, हम इस प्रकार एक साधारण समारोह को परिभाषित कर सकते हैं:
def getAnalogy(s, model):
qry = model.transform(s[0]) - model.transform(s[1]) - model.transform(s[2])
res = model.findSynonyms((-1)*qry,5) # return 5 "synonyms"
res = [x[0] for x in res]
for k in range(0,3):
if s[k] in res:
res.remove(s[k])
return res[0]
अब, यहाँ देशों के साथ कुछ उदाहरण और उनकी राजधानियों हैं:
s = ('france', 'paris', 'portugal')
getAnalogy(s, model)
# u'lisbon'
s = ('china', 'beijing', 'russia')
getAnalogy(s, model)
# u'moscow'
s = ('spain', 'madrid', 'greece')
getAnalogy(s, model)
# u'athens'
s = ('germany', 'berlin', 'portugal')
getAnalogy(s, model)
# u'lisbon'
s = ('japan', 'tokyo', 'sweden')
getAnalogy(s, model)
# u'stockholm'
s = ('finland', 'helsinki', 'iran')
getAnalogy(s, model)
# u'tehran'
s = ('egypt', 'cairo', 'finland')
getAnalogy(s, model)
# u'helsinki'
परिणाम हमेशा सही नहीं हैं - मैं प्रयोग करने के लिए आप के लिए छोड़ देंगे, लेकिन वे और अधिक प्रशिक्षण के साथ बेहतर हो डेटा और वृद्धि की वेक्टर आयामी स्वरूप k
।
समारोह में for
पाश प्रविष्टियों को इनपुट क्वेरी खुद के हैं निकाल देता है, के रूप में मैंने देखा है कि अक्सर सही जवाब पहले आमतौर पर इनपुट शर्तों में से एक होने के साथ लौटे सूची में दूसरा एक था,।
क्या आप अभी भी उत्तर स्वीकार कर सकते हैं, अभी भी? धन्यवाद ... – desertnaut