2016-07-08 9 views
5

Eine bestimmte natürliche Sprache Praxis ist es, die Ähnlichkeit zwischen zwei Wörtern mit WordNet zu berechnen. Ich beginne meine Frage mit folgendem Python-Code:Wie berechnet man die Ähnlichkeit von englischen Wörtern, die nicht in WordNet erscheinen?

from nltk.corpus import wordnet 
sport = wordnet.synsets("sport")[0] 
badminton = wordnet.synsets("badminton")[0] 
print(sport.wup_similarity(badminton)) 

Wir 0,8421

Jetzt bekommen was, wenn ich für "haha" aussehen und "lol", wie folgend:

haha = wordnet.synsets("haha") 
lol = wordnet.synsets("lol") 
print(haha) 
print(lol) 

Wir werden get

[] 
[] 

Dann können wir nicht die Ähnlichkeit zwischen ihnen betrachten. Was können wir in diesem Fall tun?

+1

Welche Art Ähnlichkeit versuchen Sie zu berechnen? Semantische Ähnlichkeit? Sie werden es nicht ohne eine Art Datenbank von Wortbedeutungen (wie WordNet) berechnen können. – BrenBarn

+0

Was meinst du? Ich benutze bereits WordNet, die Ähnlichkeit wird mit Wu-Palmer Similarity berechnet. Bitte sehen Sie sich den Code genau an. –

+0

Werfen Sie einen Blick auf die STS-Aufgabe: http://alt.qcri.org/semeval2016/task1/ Und einen schamlosen Stecker: https://github.com/alvations/stasis – alvas

Antwort

6

Sie können einen semantischen Raum von Mitvorkommen Matrizen erstellen, ein Tool wie Dissect(DIStributional SEmantics Composition Toolkit) mit und dann werden Sie setzen semantische Ähnlichkeit zwischen den Wörtern oder Phrasen messen (wenn Sie Wörter zusammensetzen).

In Ihrem Fall für ha und lol Sie diese cooccurrences sammeln müssen.

Eine andere Sache zu versuchen ist word2vec.

+0

Können Sie auf einige Hinweise oder einige beginnen Punkte, die ich selbst suchen kann? –

+1

Ich denke, ein einfacher Ausgangspunkt ist, Bigrammokokationen aus Ihrem Datensatz zu berechnen, d. H. Welches Wort kommt sehr häufig neben einem anderen Wort vor. Sie werden dann feststellen, dass z.B. * ha * und * lol * haben sehr ähnliche Nachbarn. Afaik, das ist die Idee hinter [word2vec] (https://en.wikipedia.org/wiki/Word2vec) usw. – patrick

5

Es gibt zwei mögliche andere Möglichkeiten:

CBOW: kontinuierliche Tasche des Wortes

Gramm-Modell überspringen: Dieses Modell ist umgekehrt von CBOW Modell

Blick auf diese: https://www.quora.com/What-are-the-continuous-bag-of-words-and-skip-gram-architectures-in-laymans-terms

Diese Modelle sind hier gut bekannt: https://www.tensorflow.org/tutorials/word2vec, auch GENSIM ist eine gute Python-Bibliothek für solche Dinge

Versuchen zu suchen Tensorflow Solutions, zum Beispiel diese: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/word2vec/word2vec_basic.py

Oder versuchen für word2vec zu suchen: https://en.wikipedia.org/wiki/Word2vec

2

Es gibt verschiedene Modelle für Ähnlichkeitsmeßeinrichtung, wie word2vec oder Handschuh, aber Sie scheinen mehr nach einem Korpus suchen, der soziale, informelle Sätze wie "lol" enthält.

Aber ich werde word2vec bringen, weil es führt zu dem, was ich denke, eine Antwort auf Ihre Frage.

Das grundlegende Konzept von word2vec (und anderen Worteinbettungsmodellen wie Handschuh) ist die Darstellung von Wörtern in einem Vektorraum, der Beziehungen zwischen Wörtern enthält. Dies eignet sich sehr gut zum Messen der Ähnlichkeit, da Vektoren eine Menge etablierter Mathematik haben, von der man ausgehen kann. Sie können mehr über die technischen Details von Word2vec im Original lesen aber ich mag this blog post weil es gut geschrieben und prägnant ist.

Wiederum, da Word2vec nur ein Modell ist, müssen Sie es mit dem richtigen Trainingssatz paaren, um die Art von Umfang zu erhalten, die Sie suchen.Es gibt einige vortrainierte Modelle, die im Web herumschwimmen, wie zum Beispiel this bunch. Das Trainingssatz ist wirklich, was Ihnen erlaubt, eine größere Vielfalt von Begriffen abzufragen, als das Modell.

Sie können diese vortrainierten Modelle natürlich verwenden, wenn sie soziale Phrasen wie die gesuchten haben. Wenn Sie jedoch kein Modell sehen, das auf einem geeigneten Korpus trainiert wurde, können Sie ein Modell problemlos selbst trainieren. Ich empfehle Twitter oder Wikipedia für Korpora (Trainingssätze) und die Implementierung von word2vec in gensim als ein Worteinbettungsmodell.

2

Sie können andere Frameworks verwenden. Ich habe auch versucht, NLTK, aber schließlich landete auf spacy (spacy.io) sehr schnell und funktional Rahmen. Es gibt eine Methode für Wörter, die "Ähnlichkeit" genannt wird, die zu anderen Wörtern konkurriert (aber es funktioniert auch für Sätze, Dokumente usw.). Es wird mit word2vec implementiert. Eigentlich weiß ich nicht, wie groß ihr Wortschatz ist und wie schwer es ist, falls das Wort unbekannt ist, aber es könnte sich lohnen, es zu versuchen.

Ich war auch ein wenig mit diesem spiele ein: https://radimrehurek.com/gensim/models/word2vec.html Wo in 2 Zeilen, die Sie Googles großes word2vec Modell (dieses Projekt Ports google word2vec C++ Bibliothek in Python) zugänglich hier laden: https://docs.google.com/file/d/0B7XkCwpI5KDYaDBDQm1tZGNDRHc/edit

Verwandte Themen