分析数以百万计的相似词串

时间:2018-05-21 16:09:30

标签: c# azure nlp bigdata

情境:

我有数亿个包含多个“数据列”数据的文档。标题,描述等。文档的大小范围从500字节到100kb,具体取决于它们包含的数据/内容的数量。我需要高效,快速,廉价地对所有这些文档进行大量分析。

对于这个特定的问题,我们将坚持只分析这些文件中的字符串。在我的特定情况下,我需要比较所有这些文件的标题,看看它们之间的相似程度。

现在我正在使用SimMetrics.Net.Metric.DiceSimilarity来查找相似度> 90%。这当然要求我循环遍历所有文档,将它们加载到内存中,比较所需的字段,更新源文档等。

有1000条记录,我循环1000 x 1000 = 1,000,000次执行。将其扩展到300,000,000条记录,并且它几乎没有实用性。

技术平台:

我正在使用C#进行开发,并使用Azure平台作为我的基础架构,SaaS,PaaS。

目标:

  • 最大限度地降低交易成本
  • 大大提高处理速度(秒而不是小时/天)
  • 可扩展(预计会有大幅增长)
  • Partionable(维护数百/数千个不同的数据集)
  • 非常需要无服务器(按需与专用服务器)

我尝试过的事情:

  • SQL全文:可行但非常昂贵,因为数据集定期更改/更新/替换,数据大小为数百GB。
  • Redis :至少使用当前代码
  • 再次昂贵且网络太重了
  • 本地内存:适用于几千个文档,但是对于本地内存来说太大了,无法容纳所有文档。
  • Azure搜索:并非真正针对此方案设计
  • Lucene:在Azure搜索之外找不到一个好的方法来执行此Azure

最后的想法

因此,我需要在几秒钟内将数亿条记录相互比较,以便在几秒钟内完成每隔几分钟完全改变的数据集的字符串相似百分比。

不可能级别: 99,999,9999
必须达到这个水平:必须具备 - 业务重要性 时间范围:昨天当然!

你能帮帮我吗?你会成为当时的英雄吗?

3 个答案:

答案 0 :(得分:1)

LSH(局部敏感度散列)是针对此类问题而制定的。用它来查找数以百万计的推文中的双打。进行Google搜索或从此处https://blogs.msdn.microsoft.com/spt/2008/06/11/locality-sensitive-hashing-lsh-and-min-hash/

开始

答案 1 :(得分:0)

你考虑过Elastic Stack(以前的ELK)吗?它几乎是为很多可能包含你的用例而设计的。

弹性搜索建立在Lucene BTW之上。

答案 2 :(得分:0)

文件是否位于Windows虚拟机中?如果是这样,也许您使用Windows搜索API。即使文件存储在SQL FileTable中,您仍然可以使用Windows搜索Api。希望这有帮助

Windows search - full text search in c#

https://docs.microsoft.com/en-us/sql/relational-databases/blob/filetables-sql-server?view=sql-server-2017

https://msdn.microsoft.com/en-us/library/windows/desktop/aa965362(v=vs.85).aspx