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
Сохраните векторный файл обученного слова
спасти
- использовать
mdoel.wv.save
отKededVectors
Файл вектора слова сохраняется в виде экземпляра, модель, сохраненная таким образом, теряет полное состояние модели и не может быть переобучена, а сохраненный объект меньше и быстрее.model.wv.save("model.wv")
- использовать
wv.save_word2vec_format
Сохраните векторный файл слова (ранееmodel.save_word2vec_format()
, устарело)model.wv.save_word2vec_format("model.bin", binary=True)
нагрузка
- использовать
KeyedVectors.load
Загрузите векторный файл слова и сохраните его вKeyedVectors
В экземпляре (применимо, если не требуется полное состояние модели, больше нет обучения)from gensim.models import KeyedVectors wv = KeyedVectors.load("model.wv", mmap='r') vector = wv['computer'] # numpy vector of a word
- от
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,)