使用文档向量构建词汇

时间:2019-02-07 07:22:42

标签: doc2vec

我无法建立词汇并出现错误:

  

TypeError:“ int”对象不可迭代

这是我的基于中篇文章的代码:

https://towardsdatascience.com/implementing-multi-class-text-classification-with-doc2vec-df7c3812824d

我试图提供pandas系列,列出build_vocab函数。

import pandas as pd

from gensim.test.utils import common_texts
from gensim.models.doc2vec import Doc2Vec, TaggedDocument
from sklearn.model_selection import train_test_split
import multiprocessing
import nltk
from nltk.corpus import stopwords

def tokenize_text(text):
    tokens = []
    for sent in nltk.sent_tokenize(text):
        for word in nltk.word_tokenize(sent):
            if len(word) < 2:
                continue
            tokens.append(word.lower())
    return tokens

df = pd.read_csv("https://raw.githubusercontent.com/RaRe-Technologies/movie-plots-by-genre/master/data/tagged_plots_movielens.csv")

tags_index = {
    "sci-fi": 1,
    "action": 2,
    "comedy": 3,
    "fantasy": 4,
    "animation": 5,
    "romance": 6,
}

df["tindex"] = df.tag.replace(tags_index)
df = df[["plot", "tindex"]]

mylist = list()
for i, q in df.iterrows():
    mylist.append(
        TaggedDocument(tokenize_text(str(q["plot"])), tags=q["tindex"])
    )

df["tdoc"] = mylist

X = df[["tdoc"]]
y = df["tindex"]

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

cores = multiprocessing.cpu_count()
model_doc2vec = Doc2Vec(
    dm=1,
    vector_size=300,
    negative=5,
    hs=0,
    min_count=2,
    sample=0,
    workers=cores,
)
model_doc2vec.build_vocab([x for x in X_train["tdoc"]])

该方法的文档非常混乱。

1 个答案:

答案 0 :(得分:1)

Doc2Vec需要一个TaggedDocument类对象的可迭代序列作为其主体(馈送给build_vocab()train())。

显示错误时,还应显示错误的完整堆栈,以便清楚地涉及到哪些代码行和周围的调用框架。

但是,目前尚不清楚您是真正输入了数据帧,然后通过dataframe-bracket-access访问数据帧,还是通过train_test_split()

因此,我建议将事物分配给描述性临时变量,并在每个步骤中验证它们是否包含正确的事物。

X_train["tdoc"][0]是正确的TaggedDocument,具有words属性是字符串列表,而tags属性是标签列表吗? (而且,每个标签可能是一个字符串,但也可能是纯整数,从0开始向上计数。)

mylist[0]是正确的TaggedDocument吗?

另外:许多Doc2Vec使用的在线示例都有严重错误,您链接的中型文章也不例外。通常不需要在循环中多次调用train()的做法,而且这种做法很容易出错,并且实际上,该文章会导致严重的学习速度alpha管理不善。 (例如,从0.002的初始缺省值alpha中减去0.025会导致有效的alpha为负值,这是从不并且意味着每个示例的模型都会使情况变得更糟。这可能是导致报告的分类器准确性不佳的一个因素。)

我会完全忽略该文章,而在其他地方寻求更好的例子。