2016-04-21 11 views
0

Ich bin auf der Suche nach einer effizienten Möglichkeit, einen Ähnlichkeitsvektor eines einzelnen Satzes gegen eine Liste von Sätzen zu erstellen.Finde Ähnlichkeit zwischen einem Satz zu einer Liste von Sätzen

Die triviale Art, das zu tun, besteht darin, über die Liste der Sätze zu iterieren und die Ähnlichkeit zwischen dem einzelnen Satz und jedem der Sätze in der Liste zu erkennen. Diese Lösung ist zu langsam und ich suche nach einer schnelleren Methode.

Mein letztes Ziel ist es festzustellen, ob es in der Liste der Sätze einen wirklich ähnlichen Satz gibt, den ich überprüfe, wenn das der nächste Satz ist.

jetzt Meine Lösung ist:

for single_sentence in list_of_sentences: 
    similarity_score = word2vec.sentences_similarity(sentence2test, single_sentence) 
    if similarity_score >= similarity_th: 
     ignore_sent_flag = True 
     break 
list_of_sentences.append(sentence2test) 

Iv'e versucht, in einem Wörterbuch 'list_of_sentences' zu setzen/set aber die Verbesserung in Bezug auf die Zeit ist gering.

Ich stieß auf this Lösung, aber es basiert auf einem Linux-Paket nur so nicht relevant für mich.

+0

Haben Sie Interesse an einer Eins-zu-all oder all-to-all Ähnlichkeit Prüfung? Muss die Lösung auch gensimbasiert sein? –

+0

@ GökhanSever Ich interessiere mich für alles in allem, während die 'alle' Liste wächst –

+0

Wenn Ihre Lösung gensim nicht benötigt, können Sie einfach die Jaccard-Ähnlichkeit berechnen, entweder basierend auf n-Zeichen-Gramm oder Wort -Gramme. –

Antwort

0

Ich würde vorschlagen, 2 Dinge: 1. Versuchen Sie 'list_of_sentences' in eine Datei 2. Loop über die Datei mit regulären Ausdrücken ist es schneller.

+0

'list_of_sentences Größe ist dynamisch, wenn die Ähnlichkeit unter einem bestimmten Schwellenwert liegt Ich füge' sample2test 'zu' list_of_sentences 'hinzu, so dass es wie eine Zeitverschwendung klingt, eine Datei zu speichern und sie so oft zu laden. Ich suche nach einer Methode, die die Tatsache verwendet, dass dies Numpy-Objekte sind. –

0

Hash Ihre Sätze mit LSH (1) und nur die Sätze im Hash-Bucket, dass Ihr Kandidat übereinstimmte. Anstatt alle Sätze zu vergleichen, müssen Sie nur eine viel kleinere Teilmenge testen.

(1) How to understand Locality Sensitive Hashing?