AttributeError: 'Doc2Vec' object has no attribute 'dv' 怎么解决
时间: 2023-06-23 20:02:36 浏览: 756
出现 'Doc2Vec' object has no attribute 'dv' 错误,通常是因为使用的 gensim 版本过高或过低导致的。如果你的 gensim 版本为 4.0.0 或以上,可以将代码中的 `doc_vec_all` 替换为 `model.infer_vector(doc)` 即可。如果你的 gensim 版本为 3.x.x,可以将代码中的 `model.dv.infer_vector(doc)` 替换为 `model.infer_vector(doc)` 即可。
相关问题
AttributeError: 'Doc2Vec' object has no attribute 'dv'
这个错误通常是因为在使用gensim库中的Doc2Vec模型时,尝试访问不存在的属性'dv'。这个错误可能是由于gensim版本更新而导致的,因为gensim 4.0.0版本中已经将'dv'属性更改为'vectors'属性。因此,如果你使用的是gensim 4.0.0或更高版本,你需要将'dv'更改为'vectors'。
以下是一个例子,展示了如何使用gensim 4.0.0版本中的Doc2Vec模型来避免这个错误:
```python
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
# 创建一个简单的语料库
data = ["I love machine learning. Its awesome.",
"I love coding in python",
"I love building chatbots",
"they chat amagingly well"]
# 对语料库中的每个文档进行标记
tagged_data = [TaggedDocument(words=d.split(), tags=[str(i)]) for i, d in enumerate(data)]
# 训练Doc2Vec模型
model = Doc2Vec(tagged_data, vector_size=20, min_count=1, epochs=5)
# 获取文档向量
doc_vector = model.infer_vector(["I", "love", "chatbots"])
# 获取与文档向量最相似的文档
sims = model.dv.most_similar([doc_vector], topn=2)
print(sims)
```
如果你使用的是gensim 4.0.0或更高版本,你需要将'model.dv'更改为'model.vectors',如下所示:
```python
sims = model.vectors.most_similar([doc_vector], topn=2)
```
AttributeError: 'Doc2Vec' object has no attribute 'dv' 这个报错怎么解决
这个报错可能是由于gensim库的版本更新导致的,旧版本中使用model.dv来获取词向量,而新版本中使用model.wv来获取词向量。可以尝试将代码中的model.dv替换为model.wv,例如:
```
import os
import jieba
import gensim
from langconv import Converter
from gensim.corpora import WikiCorpus
# 定义LabeledLineSentence类
class LabeledLineSentence(object):
def __init__(self, wkc):
self.wkc = wkc
self.wkc.metadata = True
def __iter__(self):
for content, (page_id, title) in self.wkc.get_texts():
yield gensim.models.doc2vec.TaggedDocument(
words=[w for c in content for w in jieba.cut(Converter('zh-hans').convert(c))],
tags=[title])
# 代码7-5
def train():
zh_name = 'data/zh-latest-pages-articles.xml.bz2'
wkc = WikiCorpus(zh_name, lemmatize=False, dictionary={})
documents = LabeledLineSentence(wkc)
model = gensim.models.Doc2Vec(documents, dm=0, dbow_words=1,
size=192, window=8, min_count=19,
iter=5, workers=8) # 使用Doc2Vec训练段落向量
model.save('tmp/zhwk_news.doc2vec')
if __name__ == '__main__':
if os.path.exists('tmp/zhwk_news.doc2vec') == False:
print('开始训练模型')
train()
print('模型训练完毕')
# 代码7-6
model = gensim.models.Doc2Vec.load('tmp/zhwk_news.doc2vec')
print(model.wv.similarity('番茄', '西红柿')) # 相似度为0.55
print(model.wv.similarity('货车', '卡车')) # 相似度为0.78
```
如果还有问题,请提供完整的错误提示信息和相关代码。
阅读全文