python - Word2Vec 词汇只产生字母和符号
问题描述
我是 Word2Vec 的新手,我正在尝试根据它们的相似性对单词进行聚类。首先,我使用 nltk 来分隔句子,然后使用生成的句子列表作为 Word2Vec 的输入。然而,当我打印词汇时,它只是一堆字母、数字和符号,而不是单词。具体来说,其中一个字母的示例是“< gensim.models.keyedvectors.Vocab object at 0x00000238145AB438>, 'L':”
# imports needed and logging
import gensim
from gensim.models import word2vec
import logging
import nltk
#nltk.download('punkt')
#nltk.download('averaged_perceptron_tagger')
with open('C:\\Users\\Freddy\\Desktop\\Thesis\\Descriptions.txt','r') as f_open:
text = f_open.read()
arr = []
sentences = nltk.sent_tokenize(text) # this gives a list of sentences
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s',level=logging.INFO)
model = word2vec.Word2Vec(sentences, size = 300)
print(model.wv.vocab)
解决方案
正如教程和类文档所建议的那样,Word2Vec
类的构造函数需要单词列表作为第一个参数(或一般单词迭代器的迭代器):
sentence (iterable of iterables, optional) – 可迭代的句子可以是简单的标记列表列表,但对于更大的语料库,...
我相信在输入之前,sentences
您Word2Vec
需要words_tokenize
在每个句子上使用将关键行更改为:
sentences = [nltk.word_tokenize(sent) for sent in nltk.sent_tokenize(text)]
TL;博士
您将字母作为“单词”,因为Word2Vec
将与句子对应的字符串视为包含单词的可迭代对象。遍历字符串会产生字母序列。这些字母被用作模型学习的基础(而不是预期的单词)。
古语有云:垃圾进垃圾出。
推荐阅读
- python-3.x - 我的生产中的 Apache 状态为非活动(死)
- java - JHipster:如何使用未经身份验证的用户从 UAA 服务器安全调用微服务
- java - 硬键盘空间有效,但软键盘空间无效
- node.js - 在 Dialogflow 中保持来自 WebHook 的意图之间的数据
- xml - 如何向我的 xsl 样式表添加第二个 defaultFolderType?
- arrays - 如何对哈希进行排序并将变量分配给perl中数组中的密钥对?
- c# - 在类型“ImageFileInfo”上找不到属性“ImagePreview”
- c# - 使用c#屏蔽数据表中的整个单列
- javascript - Inject ID into component: Difference between custom component and "primitive" () component?
- python - 从单词中删除数字