使用 word2vec 检索 n-gram

Retrieve n-grams with word2vec

我有一个文本列表。我将每个文本变成一个标记列表。例如,如果其中一个文本是 'I am studying word2vec',则相应的标记列表将是(假设我认为 n-gram 的 n = 1、2、3)['I', 'am', 'studying ', 'word2vec, 'I am', 'am studying', 'studying word2vec', 'I am studying', 'am studying word2vec'].

  1. 这是转换任何文本以应用 most_similar() 的正确方法吗?

(我也可以删除包含至少一个停用词的 n-gram,但这不是我的问题的重点。)

我将此标记列表称为 texts。现在我建立模型:

model = Word2Vec(texts)

那么,如果我使用

words = model.most_similar('term', topn=5)

  1. 有没有办法确定我会得到什么样的结果?例如,如果 term 是一个 1-gram 那么我会得到一个包含五个 1-gram 的列表吗?如果 term 是一个 2-gram 那么我会得到一个包含五个 2-gram 的列表吗?

一般来说,确定尝试某些事情会得到“什么样的结果”的最好方法是尝试这些事情,然后观察实际得到的结果。

在为 word2vec 训练准备文本时,通常不会将输入文本转换为您显示的形式,并添加一堆 space-delimited 个单词 n-grams。相反,字符串 'I am studying word2vec' 通常只是 preprocessed/tokenized 到(unigram)标记列表,如 ['I', 'am', 'studying', 'word2vec'].

然后,该模型将为每个单词学习一个向量——没有用于多重字母的向量。由于它只知道这样的 1-word 向量,因此它从 .most_similar() 报告的所有结果也将是单个单词。

您可以根据对文本的某种统计或语义理解,对文本进行预处理,将一些词组合成多词实体。通常,此过程会将 runs-of-related-words 转换为 underscore-connected 单个标记。例如,'I visited New York City' 可能会变成 ['I', 'visited', 'New_York_City']

但是任何此类预处理决策都与 word2vec 算法本身是分开的,该算法仅将您提供的任何 'words' 视为 looking-up vectors-in-training 的 1:1 键。它只知道标记,而不是 n-grams.