Слова обратного поиска, основанные на векторах слов, с использованием модели amazon sagemaker / blazingtext - PullRequest
0 голосов
/ 12 октября 2018

После обучения развертыванию модели с использованием алгоритма Blazingtext ... очень просто получить векторы слов для заданных слов.

, как показано в этом примере - https://github.com/awslabs/amazon-sagemaker-examples/tree/master/introduction_to_amazon_algorithms/blazingtext_word2vec_subwords_text8

мыможет вызвать функцию sagemaker.RealTimePredictor.predict с заданным словом в качестве данных полезной нагрузки, и оно вернет слово vector

Теперь я хочу иметь возможность реализовать некоторые базовые сценарии использования НЛП, такие как ... предложить аналогичныйслово, или Мужчина-Женщина + Король = Королева

(для другой реализации, использующей gensim, см. https://rare -technologies.com / word2vec-tutorial / )

Комудля этого мне нужно было бы иметь возможность вызывать функцию, которая принимает вектор в качестве входных данных и возвращает совпадающее / ближайшее слово / слова из вложения.

Возможно ли это даже с помощью sagemaker sdk?Я часами просматривал документацию API sagemaker (которую было нелегко найти или перемещаться), и я все еще не уверен, возможно ли это вообще

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Вы можете установить fasttext на свой экземпляр.затем используйте nn-функцию в вашем .bin-файле, который был создан вашей моделью blazingtext.Например:

fasttext nn SageMaker/vectors.bin

см. здесь для получения дополнительной информации.

0 голосов
/ 23 октября 2018

Самый простой способ, который я нашел, - это импортировать модуль gensim и загружать vectors.txt из артефактов модели, сгенерированных blazingtext

Таким образом, вам даже не нужно создавать конечную точку вывода - вы можете просто использоватьэкземпляр вашего ноутбука для работы с вашей обученной моделью

# download your model artifacts from s3 to notebook instance
!mkdir /tmp/model
!cd /tmp/model && aws s3 cp s3://bucketname/prefix/blazingtext-xxx-xxx-xx-xxx/output/model.tar.gz .
!cd /tmp/model && tar -xvzf /tmp/model/model.tar.gz

#install gensim on notebook instance
!pip install gensim

#use gensim in python code
import gensim, logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)

from gensim.models import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('/tmp/model/vectors.txt', binary=False) 

word_vectors.most_similar(positive=['woman', 'king'], negative=['man'])

word_vectors.doesnt_match("breakfast cereal dinner lunch".split())

Единственное ограничение, с которым я столкнулся до сих пор, заключается в том, что если вы обучили свою модель с использованием "subwords = True", ожидая получить векторы слов для подслов или с орфографическими ошибкамислова, модель gensim, по-видимому, не способна возвращать векторы слов для слов из словарного запаса (OOV)

0 голосов
/ 19 октября 2018

На данный момент SageMaker BlazingText не поддерживает эту функцию.Однако SageMaker поддерживает алгоритм K-NN (ближайший сосед), который может быть полезен.Вы можете создать свои векторы слов, используя BlazingText, а затем обучить классификатор K-NN, используя их в качестве своих функций.Это даст вам желаемую функциональность.PS Я один из разработчиков алгоритма BlazingText на SageMaker.

...