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



推荐阅读
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 本文介绍了如何利用Python进行批量图片尺寸调整,包括放大和等比例缩放。文中提供了详细的代码示例,并解释了每个步骤的具体实现方法。 ... [详细]
  • 社交网络中的级联行为 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • Java 实现二维极点算法
    本文介绍了一种使用 Java 编程语言实现的二维极点算法。该算法用于从一组二维坐标中筛选出极点,适用于需要处理几何图形和空间数据的应用场景。文章不仅详细解释了算法的工作原理,还提供了完整的代码示例。 ... [详细]
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • This request pertains to exporting the hosted_zone_id attribute associated with the aws_rds_cluster resource in Terraform configurations. The absence of this attribute can lead to issues when integrating DNS records with Route 53. ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文详细探讨了 org.apache.hadoop.ha.HAServiceTarget 类中的 checkFencingConfigured 方法,包括其功能、应用场景及代码示例。通过实际代码片段,帮助开发者更好地理解和使用该方法。 ... [详细]
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社区 版权所有