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



推荐阅读
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 如果程序使用Go语言编写并涉及单向或双向TLS认证,可能会遭受CPU拒绝服务攻击(DoS)。本文深入分析了CVE-2018-16875漏洞,探讨其成因、影响及防范措施,为开发者提供全面的安全指导。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • 在《Python编程基础》课程中,我们将深入探讨Python中的循环结构。通过详细解析for循环和while循环的语法与应用场景,帮助初学者掌握循环控制语句的核心概念和实际应用技巧。此外,还将介绍如何利用循环结构解决复杂问题,提高编程效率和代码可读性。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • 在过去,我曾使用过自建MySQL服务器中的MyISAM和InnoDB存储引擎(也曾尝试过Memory引擎)。今年初,我开始转向阿里云的关系型数据库服务,并深入研究了其高效的压缩存储引擎TokuDB。TokuDB在数据压缩和处理大规模数据集方面表现出色,显著提升了存储效率和查询性能。通过实际应用,我发现TokuDB不仅能够有效减少存储成本,还能显著提高数据处理速度,特别适用于高并发和大数据量的场景。 ... [详细]
  • 本文探讨了基于点集估算图像区域的Alpha形状算法在Python中的应用。通过改进传统的Delaunay三角剖分方法,该算法能够生成更加灵活和精确的形状轮廓,避免了单纯使用Delaunay三角剖分时可能出现的过大三角形问题。这种“模糊Delaunay三角剖分”技术不仅提高了形状的准确性,还增强了对复杂图像区域的适应能力。 ... [详细]
  • 在2021-2022 ACM集训队月度编程挑战赛第二轮中,题目“最大值与最小值的选择”要求参赛者处理一个包含n个元素的数组,并给定一个整数k。任务是通过选择特定的子数组,计算并返回这些子数组的最大值和最小值之间的差值。该问题考验了选手对数组操作和优化算法的理解与应用能力。 ... [详细]
  • 在没有功能代码的C++控制台应用程序中,观察到有三个线程在运行。根据Stack Overflow的解释,Windows操作系统为了加速进程启动,会在程序开始执行时利用多个CPU内核进行快速初始化,这涉及到`ntdll.dll`库的调用。通过深入了解这些线程的行为,可以更好地进行性能优化,提高应用程序的响应速度和效率。 ... [详细]
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社区 版权所有