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



推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
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社区 版权所有