【Gensim概念】01/3 NLP玩转 word2vec

 第一部分  词法

一、说明

        Gensim是一种Python库,用于从文档集合中提取语义主题、建立文档相似性模型和进行向量空间建模。它提供了一系列用于处理文本数据的算法和工具,包括主题建模、相似性计算、文本分类、聚类等。在人工智能和自然语言处理领域,Gensim是一个流行的工具,用于处理大量的文本和语料库。

        该模块使用高度优化的 C 例程、数据流和 Pythonic 接口来实现 word2vec 系列算法。

        word2vec 算法包括skip-gram 和 CBOW 模型,使用分层 softmax 或负采样:Tomas Mikolov 等人:Efficient Estimation of Word Representations in Vector Space,Tomas Mikolov 等人:Distributed Representations of Words and Phrases and their Compositionality。

二、其他嵌入

        在 Gensim 中训练词向量的方法有很多,而不仅仅是 Word2Vec。另请参见

  • Doc2Vec:通过分布式内存和分布式词袋模型学习段落和文档嵌入

(models.doc2vec – Doc2vec paragraph embeddings — gensim (radimrehurek.com)) 

  • FastText:该模块允许从训练语料库中训练词嵌入,并具有获取词汇表外单词的词向量的附加功能。

(models.fasttext – FastText model — gensim (radimrehurek.com))。

        训练算法最初是从 C 包 https://code.google.com/p/word2vec/ 移植的,多年来通过附加功能和优化进行了扩展。

        有关 Gensim word2vec 的教程以及在 GoogleNews 上训练的交互式网络应用程序,请访问 https://rare-technologies.com/word2vec-tutorial/。

三、使用示例

        初始化模型,例如: 

from gensim.test.utils import common_texts
from gensim.models import Word2Vec
>>>
model = Word2Vec(sentences=common_texts, vector_size=100, window=5, min_count=1, workers=4)
model.save("word2vec.model")

        训练是流式传输的,因此“句子”可以是可迭代的,可以即时从磁盘或网络读取输入数据,而无需将整个语料库加载到 RAM 中。

        请注意,可迭代的句子必须是可重新启动的(而不仅仅是生成器),以允许算法多次流式传输数据集。有关流式可迭代的一些示例,请参阅 BrownCorpus、Text8Corpus 或 LineSentence。

        如果保存模型,您可以稍后继续训练它:

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

        训练好的词向量存储在 KeyedVectors 实例中,如 model.wv:

vector = model.wv['computer']  # get numpy vector of a word
sims = model.wv.most_similar('computer', topn=10)  # get other similar words

        将训练好的向量分离到 KeyedVector 中的原因是,如果您不再需要完整的模型状态(不需要继续训练),则可以丢弃其状态,只保留向量及其键。

        这会产生一个更小、更快的对象,可以进行映射以实现闪电般的快速加载并在进程之间共享 RAM 中的向量:

from gensim.models import KeyedVectors
>>>
# Store just the words + their trained embeddings.
word_vectors = model.wv
word_vectors.save("word2vec.wordvectors")
>>>
# Load back with memory-mapping = read-only, shared across processes.
wv = KeyedVectors.load("word2vec.wordvectors", mmap='r')
>>>
vector = wv['computer']  # Get numpy vector of a word

        Gensim 还可以加载“word2vec C 格式”的词向量,作为 KeyedVectors 实例:

from gensim.test.utils import datapath
>>>
# Load a word2vec model stored in the C *text* format.
wv_from_text = KeyedVectors.load_word2vec_format(datapath('word2vec_pre_kv_c'), binary=False)
# Load a word2vec model stored in the C *binary* format.
wv_from_bin = KeyedVectors.load_word2vec_format(datapath("euclidean_vectors.bin"), binary=True)

        由于隐藏权重、词汇频率和二叉树缺失,无法继续训练从 C 格式加载的向量。要继续训练,您需要完整的 Word2Vec 对象状态(由 save() 存储),而不仅仅是 KeyedVector。

        您可以使用经过训练的模型执行各种 NLP 任务。一些操作已经内置 - 请参阅 gensim.models.keyedvectors。

        如果您完成了模型的训练(即不再更新,仅查询),您可以切换到 KeyedVectors 实例:

word_vectors = model.wv
del model

        修剪不需要的模型状态 = 使用更少的 RAM 并允许快速加载和内存共享 (mmap)。

四、多词 Ngram 的嵌入

        有一个 gensim.models.phrases 模块,可让您使用搭配统计自动检测长于一个单词的短语。使用短语,您可以学习 word2vec 模型,其中“单词”实际上是多词表达式,例如 new_york_times 或 Financial_crisis:

from gensim.models import Phrases
>>>
# Train a bigram detector.
bigram_transformer = Phrases(common_texts)
>>>
# Apply the trained MWE detector to a corpus, using the result to train a Word2vec model.
model = Word2Vec(bigram_transformer[common_texts], min_count=1)

五、预训练模型

        Gensim 在 Gensim 数据存储库中附带了几个已经预先训练的模型:

import gensim.downloader
# Show all available models in gensim-data
print(list(gensim.downloader.info()['models'].keys()))
['fasttext-wiki-news-subwords-300',
 'conceptnet-numberbatch-17-06-300',
 'word2vec-ruscorpora-300',
 'word2vec-google-news-300',
 'glove-wiki-gigaword-50',
 'glove-wiki-gigaword-100',
 'glove-wiki-gigaword-200',
 'glove-wiki-gigaword-300',
 'glove-twitter-25',
 'glove-twitter-50',
 'glove-twitter-100',
 'glove-twitter-200',
 '__testing_word2vec-matrix-synopsis']
>>>
# Download the "glove-twitter-25" embeddings
glove_vectors = gensim.downloader.load('glove-twitter-25')
>>>
# Use the downloaded vectors as usual:
glove_vectors.most_similar('twitter')
[('facebook', 0.948005199432373),
 ('tweet', 0.9403423070907593),
 ('fb', 0.9342358708381653),
 ('instagram', 0.9104824066162109),
 ('chat', 0.8964964747428894),
 ('hashtag', 0.8885937333106995),
 ('tweets', 0.8878158330917358),
 ('tl', 0.8778461217880249),
 ('link', 0.8778210878372192),
 ('internet', 0.8753897547721863)]

(系列文章后续: ...... )

你可能感兴趣的:(NLP高级和ChatGPT,人工智能,自然语言处理,word2vec,人工智能)