Учебная модель Gensim Сохранить и вызвать вектор слова

NLP

1. Генсим

Официальный сайт:gensim: Topic modelling for humans

GensimЭто сторонний инструментарий Python с открытым исходным кодом для неконтролируемого изучения векторного представления темы скрытого слоя текста из исходного неструктурированного текста. Поддержка включаетTF-IDF, LSA, LDA, Word2VecОн поддерживает распределенное обучение и предоставляет некоторые распространенные интерфейсы API, такие как расчет подобия и поиск информации.

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

Функции

  • Независимость от памяти: весь учебный корпус не обязательно должен находиться в ОЗУ во время выполнения задачи (может обрабатывать большие корпуса веб-уровня)
  • Совместное использование памяти: обученные модели можно сохранять на диск и загружать обратно через mmap. Несколько процессов могут совместно использовать одни и те же данные, уменьшая объем оперативной памяти.
  • Содержит реализации нескольких популярных алгоритмов векторного пространства, таких какWord2Vec, Doc2Vec, FastText, TF-IDF, Скрытый семантический анализ (LSI, LSAЖдать),LDAЖдать.
  • Оболочки ввода-вывода и считыватели для нескольких форматов данных процесса.
  • Выполнение текстовых запросов на семантическое сходство в документах.

Цели дизайна

  • Простой интерфейс и API
  • Независимость от памяти, все промежуточные шаги и алгоритмы выполняются в потоковом режиме, доступ к одному документу за раз.

2. Сохранить и загрузить

Обратите внимание на различие: сохраните и загрузите модель или сохраните и загрузите векторный файл слова.

  • Сохранение и загрузка модели: сохраняется вся информация о состоянии обучения модели, такая как файлы весов, двоичные деревья и словарные частоты и т. д. После загрузки ее можно выполнить再/追加训练
  • Сохранение и загрузка векторных файлов Word: информация о состоянии обучения модели отбрасывается и не может быть выполнена после загрузки.再/追加训练

Конкретный API может относиться к:gensim: API Reference

2.1 Сохраните и загрузите модель

сохранить модель

использоватьmodel.save()метод, модель, сохраненная таким образом, может быть переобучена (дополнительно обучена) после прочтения, поскольку вся обучающая информация сохраняется

from gensim.models import Word2Vec

# 训练Word2Vec向量
model = Word2Vec(texts, size=100, window=5, min_count=1, workers=4) 
# 保存模型
model.save("word2vec.model")

Если вам необходимо продолжить обучение, вам потребуется полныйWord2Vecсостояние объекта, поsave()хранения, не толькоKeyedVectors.

модель нагрузки

использоватьloadЗагрузите модель таким образом, чтобы ее можно было переобучить

from gensim.models import Word2Vec

model = Word2Vec.load("word2vec.model")
model.train([["hello", "world"]], total_examples=1, epochs=1)

Обученные векторы слов могут быть использованыmodel.wvсохранить вKeyedVectorsВ примере следующим образом:

vector = model.wv['computer'] # numpy vector of a word

Если обучение модели завершено (то есть больше нет обновлений модели, только запросы), можно переключиться наKeyedVectorsПример:

word_vectors = model.wv
del model

2.2 Загрузка и сохранение векторных файлов Word

Сохраните векторный файл обученного слова

спасти

  1. использоватьmdoel.wv.saveотKededVectorsФайл вектора слова сохраняется в виде экземпляра, модель, сохраненная таким образом, теряет полное состояние модели и не может быть переобучена, а сохраненный объект меньше и быстрее.
    model.wv.save("model.wv")
    
  2. использоватьwv.save_word2vec_formatСохраните векторный файл слова (ранееmodel.save_word2vec_format(), устарело)
    model.wv.save_word2vec_format("model.bin", binary=True)
    

нагрузка

  1. использоватьKeyedVectors.loadЗагрузите векторный файл слова и сохраните его вKeyedVectorsВ экземпляре (применимо, если не требуется полное состояние модели, больше нет обучения)
    from gensim.models import KeyedVectors
    wv = KeyedVectors.load("model.wv", mmap='r')
    vector = wv['computer'] # numpy vector of a word
    
  2. отword2vec C formatЗагрузить вектор слов, сохранить вKeyedVectorsпример использоватьKeyedVector.load_word2vec_format()Векторные файлы Word можно загружать в двух форматах:текстовый формат СиФормат бина C (двоичный)
    from gensim.models import KeyedVectors
    wv_from_text = KeyedVectors.load_word2vec_format("model_kv_c", binary=False) # C text format
    wv_from_bin = KeyedVectors.load_word2vec_format("model_kv.bin", binary=True) # C bin format
    

Невозможно продолжить обучение по векторам, загруженным в формате C, из-за отсутствия файла весов, двоичного дерева и лексических частот.

3. Модуль keyedVectors

models.keyedVectorsВ модуле реализованы векторы слов и их поиск по сходству. Обученные линии не зависят от того, как они были обучены, поэтому их можно представить независимыми структурами.

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

KeyedVectorsОтличие от полной модели в том, что дальнейшее обучение невозможно, меньше объем оперативной памяти и более простой интерфейс.

3.1 Как получить вектор слов

обучите полную модель, затем получите ееmodel.wvсвойство, которое содержит независимые векторы с ключом. Например, используйтеword2vecтренировочный вектор.

from gensim.test.utils import common_texts
from gensim.models import Word2Vec

model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
word_vectors = model.wv

Загрузить векторный файл word с диска

from gensim.models import KeyedVectors

word_vectors.save("vectors_wv")
word_vectors = KeyedVectors.load("vectors_wv", mmap='r')

Загрузите исходный векторный файл Google word2vec в формате C с диска какKeyedVectorsпример

wv_from_text = KeyedVectors.load_word2vec_format(datapath('word2vec_pre_kv_c'), binary=False)  # C text format
wv_from_bin = KeyedVectors.load_word2vec_format(datapath('word2vec_vector.bin'), binary=True)  # C text format

3.2 Что можно сделать с этими векторами слов?

Может выполнять различные синтаксические/семантические словесные задачи НЛП.

>>> import gensim.downloader as api
>>>
>>> word_vectors = api.load("glove-wiki-gigaword-100")  # load pre-trained word-vectors from gensim-data
>>>
>>> result = word_vectors.most_similar(positive=['woman', 'king'], negative=['man'])
>>> print("{}: {:.4f}".format(*result[0]))
queen: 0.7699

>>> result = word_vectors.most_similar_cosmul(positive=['woman', 'king'], negative=['man'])
>>> print("{}: {:.4f}".format(*result[0]))
queen: 0.8965
>>>
>>> print(word_vectors.doesnt_match("breakfast cereal dinner lunch".split()))
cereal
# 两个单词的相似度
>>> similarity = word_vectors.similarity('woman', 'man')
>>> similarity > 0.8
True
# 与指定单词最相近的词列表
>>> result = word_vectors.similar_by_word("cat")
>>> print("{}: {:.4f}".format(*result[0]))
dog: 0.8798
>>>
>>> sentence_obama = 'Obama speaks to the media in Illinois'.lower().split()
>>> sentence_president = 'The president greets the press in Chicago'.lower().split()
# 两句话的WMD距离
>>> similarity = word_vectors.wmdistance(sentence_obama, sentence_president)
>>> print("{:.4f}".format(similarity))
3.4893
# 两个单词的距离
>>> distance = word_vectors.distance("media", "media")
>>> print("{:.1f}".format(distance))
0.0
# 两个句子相似度
>>> sim = word_vectors.n_similarity(['sushi', 'shop'], ['japanese', 'restaurant'])
>>> print("{:.4f}".format(sim))
0.7067
# 词向量
>>> vector = word_vectors['computer']  # numpy vector of a word
>>> vector.shape
(100,)
>>>
>>> vector = word_vectors.wv.word_vec('office', use_norm=True)
>>> vector.shape
(100,)