- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试更快地运行 gensim WMD similarity。通常,这是文档中的内容:示例语料库:
my_corpus = ["Human machine interface for lab abc computer applications",
>>> "A survey of user opinion of computer system response time",
>>> "The EPS user interface management system",
>>> "System and human system engineering testing of EPS",
>>> "Relation of user perceived response time to error measurement",
>>> "The generation of random binary unordered trees",
>>> "The intersection graph of paths in trees",
>>> "Graph minors IV Widths of trees and well quasi ordering",
>>> "Graph minors A survey"]
my_query = 'Human and artificial intelligence software programs'
my_tokenized_query =['human','artificial','intelligence','software','programs']
model = a trained word2Vec model on about 100,000 documents similar to my_corpus.
model = Word2Vec.load(word2vec_model)
from gensim import Word2Vec
from gensim.similarities import WmdSimilarity
def init_instance(my_corpus,model,num_best):
instance = WmdSimilarity(my_corpus, model,num_best = 1)
return instance
instance[my_tokenized_query]
最匹配的文档是“实验室 abc 计算机应用程序的人机界面”
,它很棒。
但是上面的instance
函数需要很长时间。所以我想到将语料库分成 N
部分,然后用 num_best = 1
对每个部分执行 WMD
,然后在它的末尾,得分最高的部分将是最相似的。
from multiprocessing import Process, Queue ,Manager
def main( my_query,global_jobs,process_tmp):
process_query = gensim.utils.simple_preprocess(my_query)
def worker(num,process_query,return_dict):
instance=init_instance\
(my_corpus[num*chunk+1:num*chunk+chunk], model,1)
x = instance[process_query][0][0]
y = instance[process_query][0][1]
return_dict[x] = y
manager = Manager()
return_dict = manager.dict()
for num in range(num_workers):
process_tmp = Process(target=worker, args=(num,process_query,return_dict))
global_jobs.append(process_tmp)
process_tmp.start()
for proc in global_jobs:
proc.join()
return_dict = dict(return_dict)
ind = max(return_dict.iteritems(), key=operator.itemgetter(1))[0]
print corpus[ind]
>>> "Graph minors A survey"
我遇到的问题是,即使它输出了一些东西,它也没有从我的语料库中给我一个很好的相似查询,即使它获得了所有部分的最大相似性。
我做错了什么吗?
最佳答案
Comment: chunk is a static variable: e.g. chunk = 600 ...
如果您将 chunk
定义为静态,那么您必须计算 num_workers
。
10001 / 600 = 16,6683333333 = 17 num_workers
通常使用的进程
不超过您拥有的核心
。
如果您有 17 个核心
,那没问题。
cores
是静态的,因此您应该:
num_workers = os.cpu_count()
chunk = chunksize(my_corpus, num_workers)
不一样的结果,改为:
#process_query = gensim.utils.simple_preprocess(my_query)
process_query = my_tokenized_query
所有 worker
结果索引 0..n.
因此,return_dict[x]
可以从具有较低值的相同索引的最后一个 worker 中覆盖。 return_dict 中的索引与 my_corpus
中的索引不相同。更改为:
#return_dict[x] = y
return_dict[ (num * chunk)+x ] = y
在 block 大小计算中使用 +1
,将跳过第一个 Document。
我不知道你如何计算 chunk
,考虑这个例子:
def chunksize(iterable, num_workers):
c_size, extra = divmod(len(iterable), num_workers)
if extra:
c_size += 1
if len(iterable) == 0:
c_size = 0
return c_size
#Usage
chunk = chunksize(my_corpus, num_workers)
...
#my_corpus_chunk = my_corpus[num*chunk+1:num*chunk+chunk]
my_corpus_chunk = my_corpus[num * chunk:(num+1) * chunk]
Results: 10 cycle, Tuple=(Index worker num=0, Index worker num=1)
With
multiprocessing
, withchunk=5
:
02,09:(3, 8), 01,03:(3, 5):
System and human system engineering testing of EPS
04,06,07:(0, 8), 05,08:(0, 5), 10:(0, 7):
Human machine interface for lab abc computer applicationsWithout
multiprocessing
, withchunk=5
:
01:(3, 6), 02:(3, 5), 05,08,10:(3, 7), 07,09:(3, 8):
System and human system engineering testing of EPS
03,04,06:(0, 5):
Human machine interface for lab abc computer applicationsWithout
multiprocessing
, without chunking:
01,02,03,04,06,07,08:(3, -1):
System and human system engineering testing of EPS
05,09,10:(0, -1):
Human machine interface for lab abc computer applications
使用 Python 测试:3.4.2
关于Python Gensim 如何通过多处理使 WMD 相似性运行得更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44000997/
我可以从 WMD 获取 Markdown 和 HTML 格式的文本编辑。在我的要求中,我还需要从 获取纯文本大规模杀伤性武器 编辑。我想用一个简单的例子来解释它。 在 Stack Overflow 中
我有兴趣在另一个项目中使用 WMD 编辑器*,但我不太确定应该使用哪个版本。 从堆栈溢出中拖网 blog我发现在 google code 上提到了一个版本, 加 cky's version on gi
我正在使用 WMD 来计算句子之间的相似度。例如: distance = model.wmdistance(sentence_obama, sentence_president) 引用:https:/
我目前正在尝试将 WMD 编辑器添加到我的站点。到目前为止我一切正常,但现在我遇到了问题:如何将键入的信息存储到我的数据库中?我创建了一个 JS/Ajax 函数,它将 textarea 的值分配给 $
我使用 WMD 编辑器,就像这里使用的那样。 我有一个通过弹出窗口完成的自定义上传功能,并自动处理标记的插入,例如wmd 编辑器根本不需要处理这个问题。 我已经使用了编辑器 Hook ,如 docs
Prettify需要将class="prettyprint"添加到或中。如何让WMD执行此操作? 最佳答案 看看PageDown Markdown编辑器... AFAIK,WMD已死,但是PageDo
我正在寻找方法来清理 WMD 的输入编辑。 具体来说,我试图让 HTML 标签只在 中可用。 WMD 生成的标签。那可能吗 我的问题是以下代码呈现为 HTML,这对潜在的 XSS attacks 来
我正在尝试实现 StackOverflow 上使用的 WMD 编辑器来创建一些基本的 Wiki 风格的功能。我已经到了要保存到数据库的时间了,但是我不确定应该保存什么。 如果我保存生成的 HTML,那
我使用wmd我的所有项目,但最近我想添加对隔离代码块的支持,我发现可以使用预处理器来实现。我正在使用这样的东西: const content = wmd(myMarkdownString, {prep
我正在尝试在我的站点中使用 WMD 编辑器 (http://wmd-editor.com/)。我有一个非常简单的问题。当我准备好将文本提交给服务器时;我如何获得编辑器的输出? 像这样的东西只返回“用户
有没有办法将自定义按钮添加到 WMD Editor扩展编辑器的功能? 我想添加的各种按钮的想法是: 标记选定的文本 插入一些预定义的文本 谢谢 图格斯 最佳答案 是的,你可以。 1) 你需要扩展图像“
我知道如何使用 widget= 在常规 django 表单中使用 WMD 和其他此类 javascript 编辑器。但是,如何将 WMD 用于 Django 管理中的文本字段?最重要的是,我如何将它用
我是 jQuery 新手(说实话,我使用它只是因为 this WMD 编辑器需要它)。 无论如何,我正在查看 jQuery 代码(转到上面的链接并查看 jquery.wmd.js),并且有选项默认值:
我看了原文wmd-editor不再维护,因此努力对其进行逆向工程,hosted on github .但是这个版本还没有准备好,因为它引用了许多未定义的函数,例如: processHeadings i
我想将 WMD 与 PHP Markdown Extra 一起使用.我不需要编辑器中的任何新按钮,但我需要实时预览来反射(reflect)额外 Markdown 功能的使用,最显着的是 tables
我正在使用 markdown editor在我的应用程序中。 $(document).ready(function () { var converter = Markdown.getSanit
如果你们中有人曾经使用过wmd markdown 编辑器(类似于 stackoverflow 使用的编辑器)那么也许你可以帮助我: 默认情况下,WMD 将自己分配给页面上找到的第一个文本区域。然而,我
This Google code repository called "wmd-new"似乎是 WMD Markdown 编辑器的最新和最活跃的版本。它具有最近的修改日期。 但是,它有一个 link标
我在 100 万个摘要数据集(20 亿个单词)上使用 word2vec。为了找到最相似的文档,我使用了 gensim.similarities.WmdSimilarity 类。当尝试使用 wmd_si
我正在开发一个使用 MarkDown 和 WMD javascript 工具的网站,这些工具目前可以满足已经托管的图像的需求,但我希望能够根据 Stack Overflow 在 WMD 中提供图像上传
我是一名优秀的程序员,十分优秀!