热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:在基于经文主题的神圣古兰经经文检索系统构建我的doc2vec嵌入模型时需要帮助

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在基于经文主题的神圣古兰经经文检索系统构建我的doc2vec嵌入模型时需要帮助相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了在基于经文主题的神圣古兰经经文检索系统构建我的doc2vec嵌入模型时需要帮助相关的知识,希望对你有一定的参考价值。



我的毕业设计项目中有一个重要的模块,它即将学习一个模型,帮助我给它一个输入/查询,预期是一个“伊斯兰”主题,模型的输出是来自“古兰经”的一些经文与我的主题相关。


一个例子(阿拉伯语)

愿真主对他或父母的慈善事业感到高兴

预期输出一些与上一个查询相关的古兰经经文,如下所示:



  • وأعبدوااللهولاتشركوابهشيئاوبالوالدينإحسان

  • Wakma Samma Kola Kamima

  • Vasina al-Sansin

这是一个简单的例子,但请注意,在该经文的文本中可能没有提及该主题,因此它可能比上述示例更难。


我的数据集

直到现在。我收集了阿拉伯语,伊斯兰教数据,例如:



  • 先知穆罕默德的说法:大约35000份阿拉伯文件,这是来自数据文件的样本:

赛亚赫·本·赛义德说,告诉我们,我的父亲告诉我们阿布·巴尔达的Abu Barda bin Abdullah bin Abi Barda,来自阿布穆萨,愿真主高兴他说:“真主的使者,这是更好的伊斯兰教,”穆斯林从他的舌头说手。“

Amr ibn Khalid告诉我们,“Al-Layth告诉我们关于来自Abu al-Khair的Yazid。据说,'Abd-Allaah ibn'Amr(愿真主可能对他感到高兴)说,有一个人问先知(真主的称赞,祝福与安拉的祝福在他身上),伊斯兰教是多么好。知道“。

al-Mu'allim讲述了Qutaadah从Anas告诉我们先知(真主的和平和祝福在他身上)说:“他不相信你们其中一个人甚至喜欢他的兄弟,他喜欢自己。“

阿布·胡瑞拉,愿上帝对他感到高兴,告诉我们真主的使者(真主的称赞,祝福与安宁属于他)说:“在我从父亲和他的儿子那里爱他之前,我自己不相信你们中的一个” 。



  • 我还有神圣的古兰经意义数据集,大约7000个文档,这里是这个文档的示例:

赞美真主。这是一个用来赞美真主的内容的短语,因为他是所有来自创造的赞美的主人,或者应该赞美他,真主知道世界之主的偶像,即所有生物的主人。除此之外,狮子和尼姑的集合中的大多数在其他人的第一面旗帜,它是从商标,因为它是它的存在的标志

慈善,仁慈,仁慈,家人的善意

任何惩罚,即复活日,特别是因为它不属于任何人,除了今天国王的全能证据?对于上帝和复活之日整个事物意义含义的拥有者,或者总是被描述为罪人,

我们不崇拜,我们在你身边寻求庇护

我们引导了直路,它引导着我们并改变了它

那些得到指导的人的道路,取代那些对他们不生气的人,他们是犹太人和非被误导的人,他们是基督徒和受益者的笑话,皈依者不是犹太人和基督徒,上帝知道权利和参照,父亲和上帝保佑我们的主人穆罕默德及其家人和平安除了全能的上帝之外,代理人不是权力



  • 我还收集了一个伊斯兰专家的每节经文的手工注释主题,他将整个古兰经经文分为11个主要部分,每个部分我都有子部分和子部分,...所以我有一个2列的数据集,第一个是这节经文本身,第二个是它的注释主题。这是一个样本:https://drive.google.com/open?id=1tEYs2QV9AmGQFqSzpvscNtlZfO3fVgCE

请注意,在ManualKeyword列中,-标记之后的主题是-之前的主题的一个小节


Doc2Vec模型

在多次尝试实现我的目标之后,我阅读了关于doc2vec模型并阅读了它的论文并在阿拉伯语任务中看到了一些实现。我认为如果我在我现在收集的整个阿拉伯语,伊斯兰数据集以及与该领域相关的任何其他数据集上训练doc2vec模型,我的问题将得到解决。

训练我的模型之后的我的想法是用它来嵌入每个手册注释的主题个性(为了澄清:我将每行像这个أركان الاسلام-التوحيد-الكافرون-افتراؤهم علي الله و تكذيبهم و جدالهم分开到单个短语

أركان الاسلام
التوحيد
الكافرون
افتراؤهم علي الله وتكذيبهم وجدالهم

并使用向量嵌入/表示每个单个主题)然后使用我训练的模型将用户的查询(预期多于一个单词)嵌入到它的向量中。然后计算Query的Vector和每个主题的向量之间的余弦相似度。所以我可以将与其相关经文具有最高相似性的主题映射并将其检索给用户。


我的守则

在阅读古兰经意义和hadithsDocumentsList的先知数据之后:

#Converting docuemnts list into tagged documents (each document is splited)
tagged_data = [gensim.models.doc2vec.TaggedDocument(words=_d.split(),
tags=[str(i)]) for i, _d in enumerate(hadithsDocumentsList)]
cores = multiprocessing.cpu_count() #Getting number of cores
model = Doc2Vec(dm=1, size=200, window=10, workers=6) #Initialize the model
model.build_vocab(tagged_data) #Bulding vocabulary
print("model.corpus_count" , model.corpus_count)
#Training the model
model.train(tagged_data, total_examples=model.corpus_count, epochs=10)
#Saving Model
model.save("HadithAndTafserModel")
print("Model Saved")
model= Doc2Vec.load("HadithAndTafserModel")
testData = " رسول الله محمد".split()
testDataVector = model.infer_vector(testData)
print("Query Vector: ", testDataVector)
mostSemilarDocs = model.wv.most_similar([testDataVector])
print("MOST SIMILAR DOCUMENTS:
")
print(mostSemilarDocs)

训练模型并从我的选择中获取查询的向量并使用most_similar函数从我的模型中获取类似的文档。输出绝对不是我的预期。而模型的准确性非常差。

我不知道什么是正确的参数,如dmdbow_wordssizewindowalpha,应该传递给模型,以达到最高的准确性。我很少理解每个参数的功能,需要帮助来调整每个参数的功能。我也想知道我的数据集是否足以构建这个模型,或者我需要增加它?收集或传递给模型时是否有任何不准确或错误?

你有什么建议或意见?


答案

注意我不懂阿拉伯语,因此无法解释您的示例文本片段。

很多Doc2Vec发表的作品都使用了数万到数百万个培训文档的数据集,但有时人们报告说甚至更小的数据集都取得了一些成功。

所以,你的7000条目“神圣古兰经意义”数据集,如果我理解正确地将原始经文映射到更近期编写的解释(其中解释更可能与'查询'文本相匹配),则是合理的,特别是如果扩展与其他注释。

对模型训练参数应该是什么没有普遍良好的指导 - 它根据数据的大小/质量和最终目标而变化很大。最佳实践是通过一些定量的,可重复的方法对模型的向量进行评分,这与您的最终目标相关。

(例如,也许你有一个不断增长的结果列表,“应该”对某些查询的排名比其他结果更高。然后你根据这些黄金标准首选项中有多少得分“正确”,并尝试很多模型参数的排列,以找到得分最高的模型。)

您的表现可能对正确的标记化和合成文档构建策略非常敏感,以确保您从有限的数据中获得最大价值。 (例如,确保同一个单词的不同形式被规范化,而不是保持独立,然后可能没有达到min_count截止。或者,将同一节经文的多个注释组合成一个有意义长度的变化/丰富意义文档而不是零碎的小字文件。)

模型参数的一些一般趋势:



  • 数据越少 - 文档越少,词汇量越小,文档越小 - 您可能需要减少矢量大小和/或增加训练时期的数量

  • 通常普通的PV-DBOW模式(dm=0)工作得很快,特别是对于较短的文档。 (在纯PV-DBOW中,没有单词到单词的训练,所以window是无关紧要的。如果在PV-DM dm=1模式中,或者如果在PV-DBOW中使用dbow_words=1添加单词到单词训练,那么window是再次相关,通常更长的窗口使向量更多地关于一般主题而不是狭义的可替代实体。)

  • 较大的语料库可能受益于更具侵略性的稀有词汇(更高的min_count)或更频繁的频繁词汇下采样(更小的sample参数)

如果你正在使用infer_vector(),请务必使用最新版本的gensim(已经有重要的修复和默认值的更改)。一定要像训练期间那样对infer_vector()的文本进行预处理/规范化/标记化(因为未知单词将被忽略,使得推理更加随机。对于更长的文本,推理效果更好,更像是训练数据(与几个单词相比),并且可能受益于更多推论epochs(特别是在非常短的文件上)。



推荐阅读
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • tcpdump 4.5.1 crash 深入分析
    tcpdump 4.5.1 crash 深入分析 ... [详细]
  • 在本教程中,我们将看到如何使用FLASK制作第一个用于机器学习模型的RESTAPI。我们将从创建机器学习模型开始。然后,我们将看到使用Flask创建AP ... [详细]
author-avatar
蒋雨儿_824
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有