为图形/分子比较算法调整文本搜索
Posted
技术标签:
【中文标题】为图形/分子比较算法调整文本搜索【英文标题】:adapting text search for graph/molecule comparison algorithms 【发布时间】:2011-06-09 00:46:49 【问题描述】:我正在寻找一个用于非传统文本搜索的文本搜索引擎,并且我想要关于哪种工具(Lucene、Sphinx、Xapian 或其他工具)最适合我的建议,以及关于在哪里搜索的指针开始吧。
我将分子表示为图形(原子和键)。我有办法enumerate all subgraphs 的大小为 k。作为技术,输入是SMILES,输出是规范 SMARTS 以及每个子图/SMARTS 出现的次数。
例如,如果输入分子是“CCO”,那么规范结果是 “C”:2,“O”:1,“CC”:1,“OC”:1,“CCO”: 1 如果分子是“SCO”,那么典型结果是 “C”:1,“S”:1,“O”:1,“CS”:1,“OC”:1,“SCO “:1。这些都是很小的例子。对于真正的分子,我得到了大约 500 个“单词”,看起来像“CC(C)O”、“CCCOCC”、“cn”和“cccc(c)O”。
将分子视为特征字符串和计数的集合意味着我应该能够使用文本搜索工具在文本级别进行比较,希望它们在化学级别上有意义。
例如,我可以使用cosine similarity 或者tf-idf 重量,并通过寻找相似的子模式来找到相似的分子。对于上面的“CCO”和“SCO”示例,余弦相似度为 (2*1+1*1+1*1)/sqrt(2*2+1*1+1*1+1*1+1* 1)/sqrt(6*(1*1)) = 4/sqrt(8*6) = 0.58。
再举一个例子,如果我想查找包含“CCS”子结构的分子,那么我可以根据计数进行快速倒排索引搜索(分子必须至少有 2 个“C”,至少 1 个“ CS”等)在解决 NP 子图同构问题之前。也就是说,基于文本的方法可以作为过滤器来拒绝明显的不匹配。
我正在尝试找出现有的文本解决方案,但这有点令人生畏。我不需要停用词,我不需要词干,我不关心词序;我不需要很多现有的功能。我确实需要保留词向量的能力,因为知道“C”出现 2 次还是 3 次很重要。
哪个文本搜索引擎最适合我?它看起来像 Lucene,尤其是在 Mahout 中的工作。您能否推荐查看文档的哪些部分或相关教程?我发现的那些是用于全文搜索的,具有词干和其他我不需要的功能。
【问题讨论】:
“相似性”对您意味着什么?例如。 “C=C”应该与“C-C”“相似”吗? “N+”与“N”相似吗? “cco”是否类似于“c(c)o”等?也许如果您提供一些示例搜索以及他们应该找到的结果,这将有助于我们更多地了解您想要什么(因为我们不是化学家)。 我有单词 W_i 重复计数 n_i 并且 i 另见***.com/questions/2380394/…。 【参考方案1】:编辑:我现在可能已经更好地理解了这一点。
您想要比较以字符串表示的图形。字符串有可能重复的“单词”。
您可以使用 Lucene,在这种情况下,我支持使用 Solr 的建议。
基本上,每个 Solr 文档都包含一个字段;该字段将包含字符串,我建议您展开:写C C
而不是C:2
。
如果使用空格分隔单词,则可以使用 WhiteSpaceAnalyzer。如果使用其他分隔符,则可能需要编写自定义分析器,这并不难。
这是个好主意吗?我不知道。原因如下:
-
Lucene(和 Solr)不使用余弦相似度,而是使用 Lucene Similarity,它混合了余弦、TF/IDF 和布尔评分,并进行了一些特定的修改。这适用于大多数文本用例,但可能与您需要的不同。
您需要比较来自不同搜索的命中吗?如果这样做,则很难使用 Solr,因为它将每次搜索标准化为最大值 1。
我建议您尝试使用 Solr 作为数据库的一个小样本。如果 Solr 适合你,那很好。 如果不是,则 shingling 和 min-hashes 可能是要走的路。 Mining of Massive Datasets by Rajaraman and Ullman 是一本关于这些主题的最新免费书籍。 我建议你阅读它。它涵盖了在大量数据中搜索类似字符串。 我想区别在于:你需要一个相对较大的交叉口吗?如果是这样,请使用 shingling 和 min-hashes。如果没有,也许 Solr 就足够了。
【讨论】:
字符串匹配和序列比对?为何如此?我的“文档”包含“单词”,可以重复。给定一个查询文档和一个目标文档集合,我想根据(比如说)余弦相似度找到集合中最近的 10 个。对齐算法意味着顺序,我的数据没有。 Needleman-Wunsch、Aho-Corasick 和其他字符串匹配算法不适用,至少据我所知不适用。 (顺便说一句,我确实在生物信息学方面工作了一段时间,所以我知道一些可以使用它们的地方。) 我已经编辑了我的答案,以便更好地处理您的文档和文字。 前几天我开始读那本书,它很有帮助。我将尝试使用 Solr,看看会发生什么。我还在nlp.fi.muni.cz/projekty/gensim/index.html 遇到了gensim。【参考方案2】:嗯...不知道什么是 SMARTS,或者化学相似性实际上是如何工作的。如果要使用lucene,首先考虑使用solr。由于您的数据在图表中,您可以使用 solr 组件查看 neo4j。另外,这个问题是否与文档附近的重复更密切相关?为了帮助解决这个问题,有许多算法 LSH、Spotsigs、shingling 和 simhash。希望我能提供更多帮助。
【讨论】:
我想看看文本搜索是否可以替代或简化图形搜索。有 5000 万个分子,大约有 1.5 亿个原子和同样多的键。我看不出像 neo4j 这样的通用图形数据库如何接近专业化学搜索引擎的功能。但是对 5000 万个文档进行余弦相似度搜索,每个文档最多包含 1000 个单词(所有单词都是唯一的)应该很容易。我正在寻找完成这项任务的工具。 好的,我明白你的意思了,Solr 很容易使用。它是 lucene 之上的另一层。您知道每种化学品可能有多少个字段吗?使用关键字标记器,以便每个输入到被索引的字段中都不会被标记,并且不要使用词干或其他特殊功能过滤索引过程。我确实建议您获取 Packt 出版的书。我认为这可能是唯一一本介绍企业使用搜索引擎的书籍。 每个复合词都有大约 200-600 个“单词”,从大约 200,000 个单词的词汇表中选出。谢谢推荐书!【参考方案3】:不要使用 lucene。或索尔。内部模型已经过时并拼凑在一起;虽然他们做得很好。找到一个具有最低标准的引擎(如果你想在文本引擎中映射)BM25F 完全支持。如果我追求它并且我想要可扩展性和性能以及低成本的支持社区,坦率地说,我会选择 SQL Server 和多维数据集。使用 SQL Server 进行许可可能会完全阻碍。祝你好运。
【讨论】:
我不知道为什么 BM25F 适合我正在做的事情。为什么它比余弦相似度更好?一位朋友推荐了 Xapian,它支持 BM25,但它似乎并没有被广泛使用。我使用 Mac 和其他 unix 变体,因此仅适用于 Windows 的解决方案将无法正常工作。以上是关于为图形/分子比较算法调整文本搜索的主要内容,如果未能解决你的问题,请参考以下文章
如何调整 Levenshtein 距离算法以将匹配限制为单个单词?