我是机器学习的初学者,正在为一个大学项目尝试文档嵌入。我使用Google Colab和Jupyter Notebook(通过Anaconda)。问题是,我的代码在谷歌Colab完美运行,但如果我在Jupyter Notebook(通过Anaconda)执行相同的代码,我遇到了ConcatenatedDoc2Vec对象的错误。
使用这个函数,我为分类器(例如逻辑回归)构建向量特征。
def build_vectors(model, length, vector_size):
vector = np.zeros((length, vector_size))
for i in range(0, length):
prefix = 'tag' + '_' + str(i)
vector[i] = model.docvecs[prefix]
return vector
我连接了两个Doc2Vec模型(d2v_dm, d2v_dbow
),两者都通过整个代码完美地工作,并且build_vectors()
函数没有问题:
d2v_combined = ConcatenatedDoc2Vec([d2v_dm, d2v_dbow])
但是如果我用连接模型运行函数build_vectors()
:
#Compute combined Vector size
d2v_combined_vector_size = d2v_dm.vector_size + d2v_dbow.vector_size
d2v_combined_vec= build_vectors(d2v_combined, len(X_tagged), d2v_combined_vector_size)
我收到这个错误(但是只有)如果我在Jupyter Notebook(通过Anaconda)中运行这个程序->这段代码在Google Colab的笔记本中没有问题):
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [20], in <cell line: 4>()
1 #Compute combined Vector size
2 d2v_combined_vector_size = d2v_dm.vector_size + d2v_dbow.vector_size
----> 4 d2v_combined_vec= build_vectors(d2v_combined, len(X_tagged), d2v_combined_vector_size)
Input In [11], in build_vectors(model, length, vector_size)
3 for i in range(0, length):
4 prefix = 'tag' + '_' + str(i)
----> 5 vector[i] = model.docvecs[prefix]
6 return vector
AttributeError: 'ConcatenatedDoc2Vec' object has no attribute 'docvecs'
因为这是神秘的(对我来说)->在Google Colab工作,但没有在Anaconda和Juypter工作。我在网上找不到任何可以解决我的问题的东西。
如果它在一个地方工作,但在另一个地方不起作用,那么您可能使用了不同版本的相关库—在本例中是gensim
。
在两个地方显示完全相同的版本吗?
import gensim
print(gensim.__version__)
如果没有,最直接的解决方法是通过强制安装相同的显式版本pip intall gensim==VERSION
(其中VERSION
是目标版本),使它不能工作的地方匹配它可以工作的地方,然后确保您的笔记本重新启动以查看更改。
但是,请注意,除非从一个新的环境开始,否则这可能会导致其他库版本不匹配!其他注意事项:
- 最后我看,Colab使用的是一个超过4年的版本Gensim(3.6.0),尽管最近的版本有许多修复&性能改进。通常最好保持或接近项目使用的任何关键库的最新版本;这个答案描述了如何触发Colab上最新的Gensim的安装。(当然,最初的影响可能是在你的代码中造成同样的破坏,在Colab适应旧版本。)
- 在最近的Gensim版本中,以前称为
docvecs
的属性现在仅称为dv
-因此一些以这种方式出错的旧代码可能只需要将docvecs
替换为dv
即可工作。(将旧代码迁移到最新Gensim约定的其他提示可在:https://github.com/RaRe-Technologies/gensim/wiki/Migrating-from-Gensim-3.x-to-4获得) - 不清楚你从哪里拉
ConcatenatedDoc2Vec
类。这个名字的类存在于一些Gensim演示/测试代码中,作为一个非常小的shim类,曾经被用来尝试重现原始的"段落向量"的结果。(又名Doc2Vec
)纸。但要注意:这是不是使用Doc2Vec
, &我所知道的这个名字的类几乎不做任何事情,除了它最初的狭隘的目的。 - 此外,请注意,据我所知,没有人曾经复制过该论文中报告的两种医生矢量串联方法的全部声称性能,即使使用相同的数据/描述的技术/评估。所声称的结果可能依赖于其他一些未公开的技术,或者是报告中的一些错误。所以如果你想模仿他们,不要太沮丧。了解
Doc2Vec
的大多数用途,只需选择一种模式。 - 如果你有自己的单独的原因来创建连接的特征向量,从多个算法,你可能应该写自己的代码,而不限于从一个实验的特殊的双模式-
Doc2Vec
代码。