Hashing sensível à localidade

Origem: Wikipédia, a enciclopédia livre.

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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

  • Segurança de computadores[17]

Métodos[editar | editar código-fonte]

Amostragem de bits para a distância de Hamming[editar | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

Hash de Nilsimsa[editar | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

Referências[editar | editar código-fonte]

  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.4064Acessível livremente. 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 3493125Acessível livremente, 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.03129Acessível livremente [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.9220Acessível livremente. 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.8264Acessível livremente. 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.6905Acessível livremente. 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.006Acessível livremente 
  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 | editar código-fonte]

Ligações externas[editar | editar código-fonte]