- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在推文上应用词嵌入。我试图通过取推文中出现的单词向量的平均值来为每条推文创建一个向量,如下所示:
def word_vector(tokens, size):
vec = np.zeros(size).reshape((1, size))
count = 0.
for word in tokens:
try:
vec += model_w2v[word].reshape((1, size))
count += 1.
except KeyError: # handling the case where the token is not in vocabulary
continue
if count != 0:
vec /= count
return vec
接下来,当我尝试准备 word2vec 功能集时,如下所示:
wordvec_arrays = np.zeros((len(tokenized_tweet), 200))
#the length of the vector is 200
for i in range(len(tokenized_tweet)):
wordvec_arrays[i,:] = word_vector(tokenized_tweet[i], 200)
wordvec_df = pd.DataFrame(wordvec_arrays)
wordvec_df.shape
我在循环内收到以下错误:
ValueError Traceback (most recent call last)
<ipython-input-32-72aee891e885> in <module>
4 # wordvec_arrays.reshape(1,200)
5 for i in range(len(tokenized_tweet)):
----> 6 wordvec_arrays[i,:] = word_vector(tokenized_tweet[i], 200)
7
8 wordvec_df = pd.DataFrame(wordvec_arrays)
<ipython-input-31-9e6501810162> in word_vector(tokens, size)
4 for word in tokens:
5 try:
----> 6 vec += model_w2v.wv.__getitem__(word).reshape((1, size))
7 count += 1.
8 except KeyError: # handling the case where the token is not in vocabulary
ValueError: cannot reshape array of size 3800 into shape (1,200)
我检查了 stackOverflow 中的所有可用帖子,但没有一个真正对我有帮助。
我尝试 reshape 数组,但它仍然给我同样的错误。
我的模型是:
tokenized_tweet = df['tweet'].apply(lambda x: x.split()) # tokenizing
model_w2v = gensim.models.Word2Vec(
tokenized_tweet,
size=200, # desired no. of features/independent variables
window=5, # context window size
min_count=2,
sg = 1, # 1 for skip-gram model
hs = 0,
negative = 10, # for negative sampling
workers= 2, # no.of cores
seed = 34)
model_w2v.train(tokenized_tweet, total_examples= len(df['tweet']), epochs=20)
请问有什么建议吗?
最佳答案
看起来 word_vector()
方法的目的是获取单词列表,然后针对给定的 Word2Vec
模型,返回以下值的平均值所有这些单词的向量(如果存在)。
为此,您不需要对向量进行任何显式的重新整形,甚至不需要指定大小
,因为这是由模型已提供的内容强制的。您可以使用 numpy 中的实用方法来大大简化代码。例如,gensim
n_similarity()
方法,作为比较两个单词列表的一部分,已经进行了类似于您正在尝试什么,您可以将其源代码视为模型:
因此,虽然我还没有测试过这段代码,但我认为您的 word_vector()
方法基本上可以替换为:
import numpy as np
def average_words_vectors(tokens, wv_model):
vectors = [wv_model[word] for word in tokens
if word in wv_model] # avoiding KeyError
return np.array(vectors).mean(axis=0)
(有时,使用已归一化为单位长度的向量是有意义的 - 通过应用 gensim.matutils.unitvec()< 作为链接的
到平均值。我在这里没有这样做,因为你的方法没有采取该步骤 - 但这是需要考虑的事情。)gensim
代码
对 Word2Vec
训练代码的单独观察:
通常,仅出现 1、2 次或几次的单词不会获得良好的向量(由于示例的数量和种类有限),但确实会产生干扰随着其他更常见词向量的改进。这就是默认值为 min_count=5
的原因。因此请注意:如果您在此处使用默认(甚至更大)值,丢弃更多的稀有单词,您的幸存向量可能会变得更好。
像 word2vec-vectors 这样的“密集嵌入”的维度并不是真正的“独立变量”(或独立的可单独解释的“特征”),正如代码注释所暗示的那样,即使它们看起来可能是作为数据中单独的值/槽的方式。例如,你不能选出一个维度并得出结论,“这就是这个样本的愚蠢之处”(例如“冷漠”或“坚硬”或“积极”等)。相反,任何人类可描述的含义都倾向于是组合空间中的其他方向,而不是与任何单独的维度完全一致。您可以通过比较向量来梳理这些问题,下游的机器学习算法可以利用这些复杂/纠缠的多维交互。但是,如果您将每个维度视为其自己的“特征”(除了"is"之外,从技术上讲,它是与该项目相关的单个数字),您可能会容易误解向量空间。
关于python - 值错误 : cannot reshape array of size 3800 into shape (1, 200),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57125306/
在 C 中: int a[10]; printf("%p\n", a); printf("%p\n", &a[0]); 产量: 0x7fff5606c600 0x7fff5606c600 这是我所期望
我一直在尝试运行此循环来更改基于数组的元素的位置,但出现以下错误。不太确定哪里出了问题。任何想法或想法!谢谢。 var population = [[98, 8, 45, 34, 56], [9, 1
我正在尝试获取一个 Ruby 数组数组并将其分组以计算其值。 数组有一个月份和一个 bool 值: array = [["June", false], ["June", false], ["June"
所以我们的目标是在遇到某个元素时将数组分割成子数组下面的示例 array.split("stop here") ["haii", "keep", "these in the same array bu
在this问题已经回答了两个表达式是相等的,但在这种情况下它们会产生不同的结果。对于给定的 int[] 分数,为什么会这样: Arrays.stream(scores) .forEac
我认为我需要的是哈希数组的数组,但我不知道如何制作它。 Perl 能做到吗? 如果是这样,代码会是什么样子? 最佳答案 perldoc perldsc是了解 Perl 数据结构的好文档。 关于arra
我遇到了这个问题,从 API 中我得到一个扩展 JSON,其中包含一个名为坐标的对象,该对象是一个包含数组 o 数组的数组。 为了更清楚地看这个例子: "coordinates": [
postgres 中有(v 9.5,如果重要的话): create table json_test( id varchar NOT NULL, data jsonb NOT NULL, PRIM
我用 echo "${array[@]}" 和 echo "${array[*]}" 得到了相同的结果。 如果我这样做: mkdir 假音乐; touch fakemusic/{Beatles,Sto
我正在尝试创建 typealias 对象的数组数组 - 但我收到“表达式类型不明确,没有更多上下文”编译错误。这是我的代码: typealias TestClosure = ((message: St
如果您在 Python 中创建一维数组,使用 NumPy 包有什么好处吗? 最佳答案 这完全取决于您打算如何处理数组。如果您所做的只是创建简单数据类型的数组并进行 I/O,array模块就可以了。 另
当我将数组推送到只有一个数组作为其唯一元素的数组数组时,为什么会得到这种数据结构? use v6; my @d = ( [ 1 .. 3 ] ); @d.push( [ 4 .. 6 ] ); @d.
在 Julia 中,我想将定义为二维数组向量的数据转换为二维矩阵数组。 如下例所述,我想把数据s转换成数据t,但是至今没有成功。 我该如何处理这个案子? julia> s = [[1 2 3], [4
C 没有elementsof 关键字来获取数组的元素数。所以这通常由计算 sizeof(Array)/sizeof(Array[0]) 代替但这需要重复数组变量名。1[&Array] 是指向数组后第一
所以,假设我有一个像这样的(愚蠢的)函数: function doSomething(input: number|string): boolean { if (input === 42 || in
我有以下数组: a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 我将它用于一些像这样的视觉内容: 1 2 3 4 5 6 7 8 9 10
我想知道数组中的 .toList 与 .to[List] 之间有什么区别。我在spark-shell中做了这个测试,结果没有区别,但我不知道用什么更好。任何意见? scala> val l = Arr
我很难获得完全相同对象的多个元素的当前元素索引: $b = "A","D","B","D","C","E","D","F" $b | ? { $_ -contains "D" } 替代版本: $b =
我正在尝试使用来自我的 API 的 v-select 执行 options,我将数据放在数组数组中。 Array which I got from API 它应该是一个带有搜索的 select,因为它
这个问题在这里已经有了答案: String literals: pointer vs. char array (1 个回答) 4 个月前关闭。 当我执行下一个代码时 int main() {
我是一名优秀的程序员,十分优秀!