热门标签 | 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(特别是在非常短的文件上)。



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
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社区 版权所有