Hashing sensível à localidade

Na ciência da computação, o hashing sensível à localidade (LSH, na sigla em inglês) é uma técnica algorítmica que agrupa itens de entrada semelhantes associando-os a um mesmo hash com alta probabilidade.[1] (O número de grupos é muito menor que o universo de itens de entrada possíveis.)[1] Como itens semelhantes acabam nos mesmos grupos, essa técnica pode ser usada para agrupamento de dados e busca do vizinho mais próximo. Ela difere das técnicas de hash convencionais por maximizar, em vez de minimizar, as colisões de hash. Alternativamente, a técnica pode ser vista como uma forma de reduzir a dimensionalidade de dados de alta dimensão; itens de entrada de alta dimensão podem ser reduzidos a versões de baixa dimensão, preservando as distâncias relativas entre os itens.

Os algoritmos de busca do vizinho mais próximo baseados em hash geralmente usam uma das duas categorias principais de métodos de hash: métodos independentes de dados, como hashing sensível à localidade (LSH); ou métodos dependentes de dados, como hashing de preservação de localidade (LPH).[2][3]

Definições editar

Uma família LSH[1][4][5]   é definida para

  • um espaço métrico  ,
  • um limiar  ,
  • um fator de aproximação  ,
  • e probabilidades   e  .

Essa família   é um conjunto de funções   que levam elementos do espaço métrico em buckets  . Uma família LSH deve satisfazer as seguintes condições para quaisquer dois pontos   e qualquer função hash   escolhidos uniformemente ao acaso a partir de  :

  • Se  , então   (ou seja, p e q colidem) com probabilidade de pelo menos  ,
  • Se  , então   com probabilidade no máximo  .

Uma família é interessante quando  . Uma tal família   é chamada  -sensível.

Alternativamente,[6] a definição pode ser data em relação a um universo de itens U que possuem uma função de similaridade  . Um esquema LSH é uma família de funções hash H, juntamente com uma distribuição de probabilidade D sobre as funções, tal que uma função   escolhido de acordo com D satisfaz a propriedade que   para qualquer  .

Hash de preservação de localidade editar

Um hash que preserva a localidade é uma função hash f que leva pontos de um espaço métrico   para um valor escalar tal que

 

para quaisquer três pontos  .

Em outras palavras, estas são funções de hash onde a distância relativa entre os valores de entrada é preservada na distância relativa entre os valores de hash de saída; valores de entrada mais próximos uns dos outros produzirão valores de hash de saída mais próximos uns dos outros.

Isso contrasta com as funções de hash criptográficas e as somas de verificação, que são projetadas para ter uma diferença de saída aleatória entre entradas adjacentes .

A primeira família de funções de hash que preservam a localidade foi concebida como uma forma de facilitar o pipelining de dados em implementações de algoritmos de máquina paralela de acesso aleatório (PRAM) que usam hashing universal para reduzir a contenção de memória e o congestionamento da rede.[7][8]

Os hashes que preservam a localidade estão relacionados a curvas de preenchimento de espaço.

Amplificação editar

Dada uma família  -sensível  , podemos construir novas famílias   pela construção AND ou construção OR de  .[1]

Para criar uma construção AND, definimos uma nova família   de funções hash g, em que cada função g é construída a partir de k funções aleatórias   de  . Então dizemos que para uma função hash  ,   se, e somente se,   para cada   . Já que os membros de   são escolhidos independentemente para qualquer  ,   é uma família  -sensível.

Para criar uma construção OR, definimos uma nova família   de funções hash g, em que cada função g é construída a partir de k funções aleatórias   de  . Então dizemos que para uma função hash  ,   se, e somente se,   para um ou mais valores de i. Já que os membros da   são escolhidos independentemente para qualquer  ,   é uma família  -sensível.

Aplicações editar

O LSH foi aplicado a vários domínios de problemas, incluindo:

  • Segurança de computadores[17]

Métodos editar

Amostragem de bits para a distância de Hamming editar

Uma das maneiras mais fáceis de construir uma família LSH é por amostragem de bits.[5] Essa abordagem funciona para a distância de Hamming sobre vetores d -dimensionais  . Aqui, a família   de funções hash é simplesmente a família de todas as projeções de pontos em uma das   coordenadas, ou seja,  , em que   é a  -ésima coordenada de  . Uma função aleatória   de   simplesmente seleciona um bit aleatório do ponto de entrada. Esta família tem os seguintes parâmetros:  ,  .

Permutações independentes min-wise editar

 Ver artigo principal: Nilsimsa Hash

Suponha que U seja composto de subconjuntos de algum conjunto básico de itens enumeráveis S e que a função de similaridade de interesse seja o índice de Jaccard J. Se π é uma permutação nos índices de S, para   seja  . Cada escolha possível de π define uma única função hash h mapeando conjuntos de entrada em elementos de S .

Defina a família de funções H como o conjunto de todas essas funções e seja D a distribuição uniforme. Dados dois conjuntos  , o evento que   corresponde exatamente ao evento em que o minimizador de π sobre   encontra-se dentro de  . Como h foi escolhida uniformemente ao acaso,   e   define um esquema LSH para o índice Jaccard.

Como o grupo simétrico em n elementos tem tamanho n!, escolher uma permutação verdadeiramente aleatória do grupo simétrico completo é inviável, mesmo para n de tamanho moderado. Devido a esse fato, tem havido um trabalho significativo para encontrar uma família de permutações que seja "min-wise independente" - uma família de permutações para a qual cada elemento do domínio tem a mesma probabilidade de ser o mínimo sob uma π escolhida aleatoriamente. Foi estabelecido que uma família min-wise independente de permutações é pelo menos de tamanho  ,[18] e que esse limite é ótimo.[19]

Como famílias min-wise independentes são muito grandes para aplicações práticas, duas variantes da noção de independência min-wise são introduzidas: famílias de permutações min-wise independentes restritas e famílias min-wise independentes aproximadas. A independência min-wise restrita é a propriedade de independência min-wise restrita a certos conjuntos de cardinalidade no máximo k.[20] A independência min-wise aproximada difere da propriedade em no máximo um ε fixo.[21]

Métodos de código aberto editar

Hash de Nilsimsa editar

 Ver artigo principal: Nilsimsa Hash

O Nilsimsa é um algoritmo de hash sensível à localidade usado em esforços anti-spam.[22] O objetivo do Nilsimsa é gerar um resumo de uma mensagem de e-mail por um hash de modo que os resumos de duas mensagens semelhantes sejam semelhantes entre si. O artigo sugere que o Nilsimsa satisfaz três requisitos:

  1. O resumo que identifica cada mensagem não deve variar significativamente para alterações que podem ser produzidas automaticamente.
  2. A codificação deve ser robusta contra ataques intencionais.
  3. A codificação deve suportar um risco extremamente baixo de falsos positivos.

TLSH editar

O TLSH é um algoritmo de hash sensível à localidade projetado para uma variedade de aplicações forenses de segurança e digitais.[17] O objetivo do TLSH é gerar resumos de hash para mensagens de modo que baixas distâncias entre os resumos indiquem que as mensagens correspondentes provavelmente serão semelhantes.

Os testes realizados no artigo em uma variedade de tipos de arquivo identificaram que o hash Nilsimsa tem uma taxa de falsos positivos significativamente maior quando comparado a outros esquemas de resumo de similaridade, como o TLSH, o Ssdeep e o Sdhash.

Uma implementação do TLSH está disponível como software de código aberto.[23]

Projeção aleatória editar

Sketch of 1-theta vs. cos(theta)
Para ângulos pequenos (não muito próximos do ortogonal),   é uma boa aproximação para  

O método de projeção aleatória de LSH devido a Moses Charikar[6] chamado SimHash (também chamado às vezes de arccos[24]) é projetado para aproximar a similaridade por cosseno entre os vetores. A ideia básica dessa técnica é escolher um hiperplano aleatório (definido por um vetor unitário normal r ) no início e usar o hiperplano para fazer o hash dos vetores de entrada.

Dado um vetor de entrada v e um hiperplano definido por r, define-se   . Isto é,   dependendo de qual lado do hiperplano v está.

Cada escolha possível de r define uma única função. Seja H o conjunto de todas essas funções e seja D, novamente, a distribuição uniforme. Não é difícil provar que, para dois vetores  ,  , em que   é o ângulo entre u e v . O valor   está intimamente relacionado com  .

Neste caso, o hashing produz apenas um único bit. Os bits de dois vetores combinam com probabilidade proporcional ao cosseno do ângulo entre eles.

Distribuições estáveis editar

A função hash[25]   mapeia um vetor d-dimensional   no conjunto dos inteiros. Cada função hash na família é indexada por uma escolha aleatória de   e  , em que   é um vetor de dimensão d com entradas escolhidas independentemente a partir de uma distribuição estável e   é um número real escolhido uniformemente no intervalo [0,r]. Para   fixados, a função hash   é dada por  .

Outros métodos de construção para funções de hash foram propostos um melhor ajuste dos dados.[26] Em particular, funções hash k-means são melhores na prática do que funções hash baseadas em projeção, mas sem qualquer garantia teórica.

Hashing semântico editar

O hashing semântico é uma técnica que tenta mapear itens de entrada em endereços de forma que as entradas mais próximas tenham maior similaridade semântica.[27] Os hashcodes são encontrados através do treinamento de uma rede neural artificial ou modelo gráfico.

Algoritmo LSH para a busca do vizinho mais próximo editar

Uma das principais aplicações do LSH é fornecer um método para algoritmos de busca do vizinho mais próximo aproximados eficientes. Considere uma família LSH  . O algoritmo tem dois parâmetros principais: o parâmetro de largura k e o número de tabelas hash L.

Na primeira etapa, definimos uma nova família   de funções hash g, em que cada função g é obtida pela concatenação de k funções   de  , ou seja,  . Em outras palavras, uma função hash aleatória g é obtida concatenando k funções hash de   escolhidas aleatoriamente. O algoritmo então constrói L tabelas hash, cada uma correspondendo a uma função hash diferente g escolhida aleatoriamente.

Na etapa de pré-processamento, misturamos todos os n pontos d-dimensionais do conjunto de dados S em cada uma das L tabelas de hash. Dado que as tabelas de hash resultantes têm apenas n entradas diferentes de zero, pode-se reduzir a quantidade de memória usada por cada tabela de hash para   usando funções de hash padrão.

Dado um ponto de consulta q, o algoritmo itera sobre as L funções hash g. Para cada g considerada, ele recupera os pontos de dados cujo hash está no mesmo bucket que q. O processo é interrompido assim que é encontrado um ponto dentro da distância   de q.

Dados os parâmetros k e L, o algoritmo tem as seguintes garantias de desempenho:

  • tempo de pré-processamento:  , em que t é o tempo para avaliar uma função   em um ponto de entrada p;
  • espaço:  , além do espaço para armazenar os pontos de dados;
  • tempo de consulta:  ;
  • o algoritmo consegue encontrar um ponto dentro da distância   de q (se existe um ponto dentro da distância R) com probabilidade de pelo menos  ;

Para uma razão de aproximação fixa   e probabilidades   e  , pode-se definir   e  , em que   . Obtém-se então as seguintes garantias de desempenho:

  • tempo de pré-processamento:  ;
  • espaço:  , além do espaço para armazenar os pontos de dados;
  • tempo de consulta:  ;

Melhorias editar

Quando t é grande, é possível tornar o tempo de hash menor inferior a  . Isso foi mostrado por[28] e[29] que deram

  • tempo de consulta:  ;
  • espaço:  ;

Às vezes também acontece de o fator   ser muito grande. Isso acontece, por exemplo, com dados de similaridade de Jaccard, em que mesmo o vizinho mais semelhante geralmente tem uma similaridade de Jaccard bastante baixa com a consulta. Em[30] foi mostrado como reduzir o tempo de consulta para   (sem incluir os custos de hash) e, da mesma forma, o uso do espaço.

Ver também editar

Referências editar

  1. a b c d Rajaraman, A.; Ullman, J. (2010). «Mining of Massive Datasets, Ch. 3.» 
  2. Zhao, Kang; Lu, Hongtao; Mei, Jincheng (2014). Locality Preserving Hashing. AAAI Conference on Artificial Intelligence. 28. pp. 2874–2880 
  3. Tsai, Yi-Hsuan; Yang, Ming-Hsuan (outubro de 2014). «Locality preserving hashing». 2014 IEEE International Conference on Image Processing (ICIP). [S.l.: s.n.] pp. 2988–2992. ISBN 978-1-4799-5751-4. ISSN 1522-4880. doi:10.1109/ICIP.2014.7025604 
  4. Gionis, A.; Indyk, P.; Motwani, R. (1999). «Similarity Search in High Dimensions via Hashing». Proceedings of the 25th Very Large Database (VLDB) Conference 
  5. a b Indyk, Piotr.; Motwani, Rajeev. (1998). Proceedings of 30th Symposium on Theory of Computing 
  6. a b Charikar, Moses S. (2002). Proceedings of the 34th Annual ACM Symposium on Theory of Computing. pp. 380–388. CiteSeerX 10.1.1.147.4064 . doi:10.1145/509907.509965 
  7. Chin, Andrew. Complexity Issues in General Purpose Parallel Computing (DPhil) 
  8. Chin, Andrew (1994). «Locality-Preserving Hash Functions for General Purpose Parallel Computation» (PDF). Algorithmica. 12 (2-3): 170-181. doi:10.1007/BF01185209 
  9. Das, Abhinandan S.; et al. (2007), «Google news personalization: scalable online collaborative filtering», ISBN 9781595936547, Proceedings of the 16th International Conference on World Wide Web, doi:10.1145/1242572.1242610 .
  10. Koga, Hisashi; Tetsuo Ishibashi; Toshinori Watanabe (2007), «Fast agglomerative hierarchical clustering algorithm using Locality-Sensitive Hashing», Knowledge and Information Systems, 12 (1): 25–53, doi:10.1007/s10115-006-0027-5 .
  11. Cochez, Michael; Mou, Hao (2015), «Twister Tries: Approximate Hierarchical Agglomerative Clustering for Average Distance in Linear Time» (PDF), ISBN 9781450327589, Proceeding SIGMOD '15 Proceedings of the 2015 ACM SIGMOD International Conference on Management of Data: 505–517, doi:10.1145/2723372.2751521 .
  12. Brinza, Dumitru; et al. (2010), «RAPID detection of gene–gene interactions in genome-wide association studies», Bioinformatics, 26 (22): 2856–2862, PMC 3493125 , PMID 20871107, doi:10.1093/bioinformatics/btq529 
  13. dejavu - Audio fingerprinting and recognition in Python, 19 de dezembro de 2018 
  14. Aluç, Güneş; Özsu, M. Tamer; Daudjee, Khuzaima (2018), «Building self-clustering RDF databases using Tunable-LSH», The VLDB Journal, 28 (2): 173–195, doi:10.1007/s00778-018-0530-9 
  15. Chen, Beidi; Medini, Tharun (29 de fevereiro de 2020). «SLIDE : In Defense of Smart Algorithms over Hardware Acceleration for Large-Scale Deep Learning Systems». arXiv:1903.03129  [cs.DC] 
  16. Chen, Beidi; Liu, Zichang; Peng, Binghui; Xu, Zhaozhuo; Li, Jonathan Lingjie; Dao, Tri; Song, Zhao; Shrivastava, Anshumali; Re, Christopher (2021), «MONGOOSE: A Learnable LSH Framework for Efficient Neural Network Training», International Conference on Learning Representation 
  17. a b Oliver, Jonathan; Cheng, Chun; Chen, Yanggui (2013). TLSH - a locality sensitive hash. ISBN 978-1-4799-3076-0. doi:10.1109/CTC.2013.9 
  18. Broder, A.Z.; Charikar, M.; Frieze, A.M.; Mitzenmacher, M. (1998). Proceedings of the Thirtieth Annual ACM Symposium on Theory of Computing. pp. 327–336. CiteSeerX 10.1.1.409.9220 . doi:10.1145/276698.276781 
  19. Takei, Y.; Itoh, T.; Shinozaki, T. «An optimal construction of exactly min-wise independent permutations». Technical Report COMP98-62, IEICE, 1998 
  20. Matoušek, J.; Stojakovic, M. (2002). «On Restricted Min-Wise Independence of Permutations». Preprint. Consultado em 14 de novembro de 2007 
  21. Saks, M.; Srinivasan, A.; Zhou, S.; Zuckerman, D. (2000). «Low discrepancy sets yield approximate min-wise independent permutation families». Information Processing Letters. 73 (1–2): 29–32. CiteSeerX 10.1.1.20.8264 . doi:10.1016/S0020-0190(99)00163-5. Consultado em 14 de novembro de 2007 
  22. Damiani; et al. (2004). «An Open Digest-based Technique for Spam Detection» (PDF). Consultado em 1 de setembro de 2013 
  23. «TLSH». Consultado em 10 de abril de 2014 
  24. Alexandr Andoni; Indyk, P. (2008). «Near-Optimal Hashing Algorithms for Approximate Nearest Neighbor in High Dimensions». Communications of the ACM. 51 (1): 117–122. CiteSeerX 10.1.1.226.6905 . doi:10.1145/1327452.1327494 
  25. Datar, M.; Immorlica, N.; Indyk, P.; Mirrokni, V.S. (2004). «Locality-Sensitive Hashing Scheme Based on p-Stable Distributions». Proceedings of the Symposium on Computational Geometry 
  26. Pauleve, L.; Jegou, H.; Amsaleg, L. (2010). «Locality sensitive hashing: A comparison of hash function types and querying mechanisms». Pattern Recognition Letters. 31 (11): 1348–1358. doi:10.1016/j.patrec.2010.04.004 
  27. Salakhutdinov, Ruslan; Hinton, Geoffrey (2008). «Semantic hashing». International Journal of Approximate Reasoning (em inglês). 50 (7): 969–978. doi:10.1016/j.ijar.2008.11.006  
  28. Dahlgaard, Søren, Mathias Bæk Tejs Knudsen, and Mikkel Thorup. "Fast similarity sketching." 2017 IEEE 58th Annual Symposium on Foundations of Computer Science (FOCS). IEEE, 2017.
  29. Christiani, Tobias. "Fast locality-sensitive hashing frameworks for approximate near neighbor search." International Conference on Similarity Search and Applications. Springer, Cham, 2019.
  30. Ahle, Thomas Dybdahl. "On the Problem of $$ p_1^{-1} $$ in Locality-Sensitive Hashing." International Conference on Similarity Search and Applications. Springer, Cham, 2020.
  31. Gorman, James, and James R. Curran. "Scaling distributional similarity to large corpora." Proceedings of the 21st International Conference on Computational Linguistics and the 44th annual meeting of the Association for Computational Linguistics. Association for Computational Linguistics, 2006.

Leitura complementar editar

Ligações externas editar