Поиск нечетного слова среди заданных слов с помощью вложений Word2Vec
Odd One out проблема - одна из самых интересных и распространенных проблем, когда дело доходит до проверки навыков логического мышления человека. Он часто используется во многих конкурсных экзаменах и раундах размещения, поскольку он проверяет аналитические навыки человека и способность принимать решения. В этой статье мы собираемся написать код на Python, который можно использовать для поиска нечетных слов среди заданного набора слов.
Предположим, нам дан набор слов, таких как Apple, Mango, Orange, Party, Guava, и мы должны найти нечетное слово. Мы, как люди, можем анализировать и предсказывать, что партия - это странное слово, поскольку все остальные слова - это названия фруктов, но модели понять это и выяснить это очень сложно. Здесь мы будем использовать модель Word2Vec и предварительно обученную модель под названием « GoogleNews-vectors-negative300.bin », которую Google обучил более чем 50 миллиардам слов. Каждое слово в предварительно обученном наборе данных встроено в 300-мерное пространство, а слова, которые похожи по контексту / значению, размещаются в пространстве ближе друг к другу и имеют высокое значение косинусного сходства.
Методика определения лишнего слова:
Мы найдем средний вектор всех заданных векторов слов, а затем мы сравним значение косоподобия каждого вектора слов со средним значением вектора, слово с наименьшим косоподобием будет нашим нечетным словом.
Импорт важных библиотек:
Нам нужно установить дополнительную библиотеку gensim , чтобы использовать модель word2vec, для установки gensim используйте команду pip install gensim в терминале / командной строке.
Python3
import numpy as np import gensim from gensim.models import word2vec,KeyedVectors from sklearn.metrics.pairwise import cosine_similarity |
Загрузка векторов слов с использованием предварительно обученной модели:
Python3
vector_word_notations = KeyedVectors.load_word2vec_format( 'GoogleNews-vectors-negative300.bin' ,binary = True ) |
Определение функции для предсказания нечетного слова:
Python3
def odd_word_out(input_words): '''The function accepts a list of word and returns the odd word.''' # Generate all word embeddings for the given list of words whole_word_vectors = [vector_word_notations[i] for i in input_words] # average vector for all word vectors mean_vector = np.mean(whole_word_vectors,axis = 0 ) # Iterate over every word and find similarity odd_word = None minimum_similarity = 99999.0 # Can be any very high value for i in input_words: similarity = cosine_similarity([vector_word_notations[i]],[mean_vector]) if similarity < minimum_similarity: minimum_similarity = similarity odd_word = i print ( "cosine similarity score between %s and mean_vector is %.3f" % (i,similarity)) print ( "
The odd word is: " + odd_word) |
Тестируем нашу модель:
Python3
input_1 = [ 'apple' , 'mango' , 'juice' , 'party' , 'orange' , 'guava' ] # party is odd word odd_word_out(input_1) |
Выход:
Оценка косинусного сходства между яблоком и средним_вектором составляет 0,765 Оценка косинусного сходства между манго и mean_vector составляет 0,808 Оценка косинусного сходства между соком и mean_vector составляет 0,688 оценка косинусного сходства между party и mean_vector составляет 0,289 Оценка косинусного сходства между оранжевым и средним_вектором составляет 0,611 Оценка косинусного сходства между гуавой и mean_vector составляет 0,790 Странное слово: вечеринка
Точно так же для другого примера скажем:
Python
input_2 = [ 'India' , 'paris' , 'Russia' , 'France' , 'Germany' , 'USA' ] # paris is an odd word since it is a capital and other are countries odd_word_out(input_2) |
Выход:
Оценка косинусного сходства между Индией и mean_vector составляет 0,660 оценка косинусного сходства между paris и mean_vector составляет 0,518 Оценка косинусного сходства между Россией и mean_vector составляет 0,691 Оценка косинусного сходства между Францией и mean_vector составляет 0,758 Оценка косинусного сходства между Германией и mean_vector составляет 0,763 Оценка косинусного сходства между USA и mean_vector составляет 0,564 Странное слово: париж