艺考网
全国站

使用Doc2Vec 和TensorFlow 进行基于内容的文本分类

xunaa
2024-10-07 22:06:25
编辑说
对于文本分类问题,第一个挑战是清理数据并将其转换为计算机可以轻松理解的格式。考虑到我们必须根据内容找到一本书或一部电影的类型,我们要做的第一件事就是准备训练数据集。

对于文本分类问题,第一个挑战是清理数据并将其转换为计算机可以轻松理解的格式。考虑到我们必须根据内容找到一本书或一部电影的类型,我们要做的第一件事就是准备训练数据集。这里我们有两种方法来做到这一点,一种是简单的词袋方法,另一种是Doc2Vec。让我们探索根据字幕预测电影类型的方法。

Bag Of Words:

Bag Of Words 是一种将文本表示为单词忽略语法和词序但保持多样性的文本的方法。这将使我们能够在分类问题中使用该模型,其中我们可以使用每个单词的出现作为特征来训练分类器。我们的训练数据将包含以下5 种类型的电影。

喜剧

行动

科幻小说

戏剧

恐怖

第一个任务是下载每个类型至少25 部电影的字幕,并将它们分成训练和测试。我将每种类型保存20 部电影用于训练,5 部电影用于测试。所以我们的火车文件夹将有5 个子文件夹,每个子文件夹将有20 个字幕文件,如下所示。

我们的测试文件夹也具有相同的结构,但每个文件夹中只有5 个文件。现在,对于数据预处理,我们将使用自然语言工具包,对于神经网络的训练,我们将使用Tensorflow 和Keras。我们来编码吧。

#imports 用于数据处理

导入nltk

从nltk.stem.lancaster 导入LancasterStemmer

将numpy 导入为np

导入unicode数据

导入系统

从tqdm 导入tqdm

将pandas 导入为pd

导入操作系统

从随机导入随机播放

导入字符串

#imports 自然网络

导入张量流astf

从keras.models 导入顺序

从keras.layers 导入*

从keras.optimizers 导入*

从keras.models 导入load_model

创建一个用于设置数据的类。里面会有多个功能,我一一解释。

创建一个类SetData 并初始化变量。函数one_hot_classes 将用于用其相应的类来标记训练数据集。另一个函数remove_punctuation将用于通过删除标点符号来清理数据。这里我们使用字典来理解字符串中的字符。将它们从我们的数据集中删除。

上面的函数“train_data_with_label”正在清理训练数据并将它们转换为两个列表。第一个列表将包含元组,第二个列表将是语料库中所有唯一单词的列表(训练集中每个单词的组合称为语料库)。第一个列表将有100 个元组,每个元组将有一个标记文档,这是一个热编码类。函数“train_data_with_label”也在做同样的事情,只是打乱数据,我们只会打乱训练数据。

上述函数将为我们的训练/测试数据集创建BOW(词袋),然后将其输入分类器神经网络。

#初始化类和数据集

sd=设置数据()

train_data, tr_words=sd.train_data_with_label()

使用Doc2Vec 和TensorFlow 进行基于内容的文本分类

test_data, tst_words=sd.test_data_with_label()

#生成训练/测试数据的词袋

训练=sd.bag_of_words(train_data,tr_words)

训练数据=列表(训练[: 0])

训练标签=列表(训练[: 1])

test=sd.bag_of_words(test_data,tr_words,'test')#这里我们还必须传递训练单词,因为即使对于测试集,BOW也会根据训练集语料库生成

测试数据=列表(测试[: 0])

测试标签=列表(测试[: 1])

我们已经准备好了数据集,我们需要做的就是创建训练模型。我们将使用Keras 顺序模型。

经过100 次迭代训练后,我们将看到训练的准确率达到97%,我们要考虑的问题是,我们要解决的问题是100 个训练数据非常低,所以我们会看到测试的准确度性别有很大差异,是时候测试我们的模型。

类别=sd.classes

对于我在范围内(len(testing_data)):

print(类别[np.argmax(testing_label[i:i+1])] +'\t\t'+ 类别[np.argmax(tc_model.predict(np.array(testing_data[i:i+1])))])

下面是我们得到的结果,准确率只有60% 左右,考虑到训练集的大小,这已经很好了。我们可以通过添加更多的训练数据来获得更好的性能

这种BOW方法适合小型语料库。对于大型语料库,需要更多的计算能力。例如,如果我们的语料库中有100万个单词,需要50万个训练数据,那么每个训练数据将有一个长度为100万的A BOW数组。

Doc2Vec:

Doc2Vec 方法是Word2Vec 的扩展版本,它将为每个文档生成一个向量空间。相似的文件将具有彼此接近的向量。在此实现中,我们将创建两个类。一个用于标记要训练的文件,另一个用于预处理。对于Doc2Vec,我们可以使用gensim的模型。

导入nltk

从nltk.stem.lancaster 导入LancasterStemmer

将numpy 导入为np

导入unicode数据

导入系统

从tqdm 导入tqdm

将pandas 导入为pd

导入操作系统

从随机导入随机播放

导入字符串

进口根西姆

该类将为文档创建一个生成器对象,并使用gensim 的LabeledSentence 类生成标签。

接下来是SetData 类,我们可以使用BOW 之前的实现重用__init__()、remove_punctuation() 函数。

“train_data_with_label”函数将清理输入数据,对其进行标记并创建列表,每个列表对象又是标记化单词的列表,其类索引位于类变量中。该索引位置将在LabelDocs 类中使用,以使用正确的类来标记文档。另一个函数“get_tokenwords_for_new_data”将为测试数据生成标记化单词列表,然后将其用于输入模型进行预测。

上面的代码将初始化类并为训练集创建一个生成器对象。然后,gensim的Doc2Vec模型将使用gen_op对象构建词汇表,并且模型将在gen_op对象上训练100个epoch(它是任意值,越多越好)。

现在我们可以根据测试数据来测试模型。我们将为每个测试数据集获取前两个最相似的标签,因此我们将为每部电影获取2 个类型。

我们按照我们的预测去做!

用户评论

纯情小火鸡

这篇文章对内容基的文本分类很有启发!

    有14位网友表示赞同!

发型不乱一切好办

看完这篇博客后,我对Doc2Vec模型有了更深入了解。

    有17位网友表示赞同!

灼痛

想在项目中用TensorFlow实现基于内容的文本分类,这篇文档就太合适了

    有7位网友表示赞同!

眷恋

Doc2Vec和TensorFlow,这两种技术结合使用确实很有潜力!

    有20位网友表示赞同!

青袂婉约

学习一下这个,我想把我的博客文章自动分类!

    有7位网友表示赞同!

毒舌妖后

TensorFlow上手比较简单,很容易理解文档的思路。

    有11位网友表示赞同!

伤离别

基于内容文本分类一直是难点,现在有了Doc2Vec和 TensorFlow更容易实现了!

    有6位网友表示赞同!

她最好i

看了下代码例子,感觉还挺实用。

    有17位网友表示赞同!

拥抱

对机器学习的入门者来说,这篇博客解释得还是比较清晰的。

    有12位网友表示赞同!

我要变勇敢℅℅

学习完本文后,可以尝试自己来实现一个简单的文本分类模型了。

    有18位网友表示赞同!

不识爱人心

之前听说过Doc2Vec,原来它还能用于文本分类!

    有5位网友表示赞同!

别悲哀

文章内容很实用。我会试着将这些方法应用到我的项目中

    有6位网友表示赞同!

北朽暖栀

对想要了解基于内容的文本分类的人来说是一篇很好的入门文档。

    有9位网友表示赞同!

浮光浅夏ζ

TensorFlow真的很强大!可以解决很多现实世界的问题,这个文本分类例子就是证明。

    有14位网友表示赞同!

来自火星球的我

希望能看到更多关于Doc2Vec和TensorFlow进阶的内容。

    有15位网友表示赞同!

蝶恋花╮

这篇文章让我对使用深度学习进行自然语言处理有了新的认识。

    有15位网友表示赞同!

熏染

基于内容的文本分类是很多应用场景中必不可少的,这篇博客讲解得非常详细!

    有19位网友表示赞同!

心脏偷懒

Doc2Vec和TensorFlow可以有效提升文本分类的效果,这个方法很有价值!

    有13位网友表示赞同!

一尾流莺

非常感谢作者分享这份宝贵的资源。

    有9位网友表示赞同!

来自火星的我

这篇文档的代码示例超级棒!

    有9位网友表示赞同!

免责声明
本站所有收录的学校、专业及发布的图片、内容,均收集整理自互联网,仅用于信息展示,不作为择校或选择专业的建议,若有侵权请联系删除!

大家都在看

使用Doc2Vec 和TensorFlow 进行基于内容的文本分类

使用Doc2Vec 和TensorFlow 进行基于内容的文本分类

对于文本分类问题,第一个挑战是清理数据并将其转换为计算机可以轻松理解的格式。考虑到我们必须根据内容找到一本书或一部电影的类型,我们要做的第一件事就是准备训练数据集。
2024-10-07
2018考研英语猜词方法揭晓

2018考研英语猜词方法揭晓

1.根据构词法猜词。 例一:但是诺贝尔基金会规定每个奖项只能获奖三人,而且每人必须还健在…… 分析:根据词根词缀法对受者进行分割。发现这个词的词根是ceipt,意思是“抓住、握
2024-10-07
英国Orange Goblin发行专辑《Science, Not Fiction》

英国Orange Goblin发行专辑《Science, Not Fiction》

ORANGE GOBLIN 将在6 年内发行他们的第十张录音室专辑《科学,不是幻想》 (Science, Not Fiction)。 《The Fire At the Center Of The Earth Is Mine》MV发布后,
2024-10-07
锑(Sb)在铸铁中的应用

锑(Sb)在铸铁中的应用

哪些铸铁可以用锑处理? 添加锑可改善含铈大断面球墨铸铁的石墨结构。无论是灰口铸铁还是球墨铸铁,锑都可以用来促进珠光体组织的形成。锑还可以促进石墨化可锻铸铁中珠光体组
2024-10-07
一篇文章将教您有关锑的所有知识

一篇文章将教您有关锑的所有知识

锑金属元素,元素符号Sb,原子序数51。是一种具有金属光泽的准金属,主要存在于自然界的硫化矿物辉锑矿中。据了解,锑化合物在古代就被用于化妆品中,金属锑在古代也有记载,但当时被误
2024-10-07
对股票投资者来说这是一个好处,引入了大多数人从未听说过的锑。它具有巨大的潜力。

对股票投资者来说这是一个好处,引入了大多数人从未听说过的锑。它具有巨大的潜力。

首先给大家科普一下锑(TI): 锑(符号Sb)一般是银白色金属元素,硬而脆。是重要的半导体材料和红外探测器材料。 用于化学工业、电气工业和医药的金属元素。其合金可用于制造铅字、
2024-10-07
说再见原歌词初稿

说再见原歌词初稿

温暖的海风慢慢地吹过我们的心 站在彼此面前,突然觉得好难过。时间 过煞墨盒遇见旋律 说着离别,心里总是在哭泣 不要说再见 不想说再见 仍然微笑着说再见 请相信未来我们都会
2024-10-07
用英语说再见的20种方式?

用英语说再见的20种方式?

1. 说再见音标:英语[se dba] 美式[se dba] 释义:说再见 他想跟你说再见。 他想跟你说再见。 现在我要说再见,晚安。 我现在要说再见,晚安。 2.再见音标:英语[dba] 美式[dba] 释义
2024-10-07
记住:告别时不要只说“再见”,这样太low了。

记住:告别时不要只说“再见”,这样太low了。

我们说的最委婉的表达就是“我得走了”。你不能只说这句话。以下是美剧中经常出现的5个流行口语表达: 1.我现在必须走了,我必须走了 休假, 走开 2. 我现在必须离开我现在必须
2024-10-07
10倍慢速播放还原刘志轩扭伤脚踝的瞬间,现场DJ打出《Say goodbye》。合适吗?

10倍慢速播放还原刘志轩扭伤脚踝的瞬间,现场DJ打出《Say goodbye》。合适吗?

可是这次扭伤脚是怎么发生的呢?我通过后期制作使用慢动作回放对其进行了分析。 当时,天津队正在进攻。刘志轩和时德帅篮下拼抢篮板。时德帅当时在篮下占据优势,但球弹到了外面
2024-10-07