0

我的问题类似于这个问题。我尝试了在该问题上发布的两种解决方案,但我仍然收到属性“Vocab”在 gensim.models.word2vec 模块中不可用的错误。

我使用此属性的代码部分在这里

# if word in model.keys(): #use model.vocab for w2v model and model.keys() for Glove dicts
        if word in self.w2v_model.wv.vocab:
            vector = self.w2v_model.wv[word]
        else:
            vector = [0] * 100  

路线 [tasks.complete] 未定义。(查看:/Users/pathparakh/Projects/task/resources/views/tasks/index.blade.php)

这是我的 TaskController,其中完成()函数被定义为在当前时间存储 done_

public function complete($id)
{
    $task = Task::create([
        'done_at' => now(),
    ]);

    return redirect()->route('tasks.index')->withSuccess('Done');
}

这是我的 web.php 路线

Route::post('/tasks/complete', 'TaskController@complete');

这是我的索引页面,其中有提交按钮来保存当前时间

<form action="{{ route('tasks.complete', $task->id) }}" method="post">
    @csrf
    <input type="submit">
</form>
4

2 回答 2

1

pip install gensim==3.8.1工作 - 问题出在特定的 Gensim 软件包版本上。

于 2021-04-05T15:12:55.897 回答
0

Gensim 4.0.0 具有许多修复和性能改进,还更改了一些属性/方法名称以实现简单性和长期一致性。一个项目 wiki 页面有一个指南来调整旧代码以匹配新的 API:

https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4

但是,您的代码根本不需要使用.vocab。词向量集w2v_model.wv可以回答一个键是否in已经是它自己。因此,以下代码应该在 4.0 之前和 4.0 及更高版本中都可以使用:

    if word in self.w2v_model.wv:
        vector = self.w2v_model.wv[word]
    else:
        vector = [0] * 100  

(另外,如果您确实选择继续使用较旧的 Gensim 来推迟任何其他代码更改,那么最好使用2020 年 5 月发布3.8.3的系列中的最后一个3.x,而不是 2019 年 9 月发布的较旧的/buggier 3.8.1。但是一些与 word2vec 相关的关键操作会更快,并且在gensim-4.0.0& 更高时使用更少的内存,因此应尽可能避免回滚。)

于 2021-04-05T20:37:51.770 回答