首页 > 解决方案 > Gensim 的 word2vec 返回尴尬的向量

问题描述

给定格式中经过大量清理的输入

model_input = [['TWO people admitted fraudulently using bank cards (...)'],
               ['All tyrants believe forever',
                'But history especially People Power (...) first Bulatlat']]

word2vec 与更明显的结果一起返回超特定向量,例如

{'A pilot shot dogfight Pakistani aircraft returned India Friday freed Islamabad called peace gesture following biggest standoff two countries years':
     <gensim.models.keyedvectors.Vocab at 0x12a93572828>,
 'This story published content partnership POLITICO':
     <gensim.models.keyedvectors.Vocab at 0x12a93572a58>,
 'Facebook says none 200 people watched live video New Zealand mosque shooting flagged moderators underlining challenge tech companies face policing violent disturbing content real time': 
    <gensim.models.keyedvectors.Vocab at 0x12a93572ba8>}

它似乎发生在更多的文件上,我很难相信它们每个都出现了五次以上。

我正在使用以下代码来创建我的模型:

TRAIN_EPOCHS = 30
WINDOW = 5
MIN_COUNT = 5 
DIMS = 250

vocab_model = gensim.models.Word2Vec(model_input,
                                     size=DIMS,
                                     window=WINDOW,
                                     iter=TRAIN_EPOCHS,
                                     min_count=MIN_COUNT)

我做错了什么,我得到了如此无用的向量?

标签: pythonpython-3.xgensimword2vec

解决方案


Word2Vec期望它的训练语料库——它的sentences论点——是一个可重复的 Python 序列,其中每个项目本身就是一个单词列表。

您的model_input列表似乎是一个列表,其中每个项目本身就是一个列表,但这些列表中的每个项目都是一个完整的句子,其中包含许多单词作为字符串。结果,在它期望单个单词标记(作为字符串)的地方,你给它完整的未标记的句子(作为字符串)。

如果您将文本分解为单词列表,并将这些单词列表的序列作为训练数据提供给模型,那么您将获得单词标记的向量,而不是句子字符串。


推荐阅读