nlp - texto - ¿Por qué la similitud entre dos bolsas de palabras en gensim.word2vec calculado de esta manera?
pln python (1)
def n_similarity(self, ws1, ws2):
v1 = [self[word] for word in ws1]
v2 = [self[word] for word in ws2]
return dot(matutils.unitvec(array(v1).mean(axis=0)), matutils.unitvec(array(v2).mean(axis=0)))
Este es el código que extraigo de gensim.word2Vec, sé que la similitud de dos palabras individuales se puede calcular por las distancias del coseno, pero ¿qué pasa con los conjuntos de dos palabras? El código parece usar la media de cada palabravec y luego se calcula en la distancia del coseno de los dos vectores medios. Conozco pocos en word2vec, ¿hay algunos fundamentos de tal proceso?
Tomar la media de todos los vectores de palabras es la forma más simple de reducirlos a un solo vector para que se pueda usar la similitud del coseno. La intuición es que sumando todos los vectores de palabras obtienes un poco de todos ellos (el significado) en el resultado. A continuación, divida por el número de vectores para que la bolsa de palabras más grande no termine con vectores más largos (aunque no importa la similitud del coseno).
Hay otras formas de reducir una oración completa a un único vector que es compleja. Escribí un poco al respecto en una pregunta relacionada sobre SO. Desde entonces, se han propuesto varios algoritmos nuevos. Una de las más accesibles es Párrafo Vector , que no debería tener problemas para entender si está familiarizado con word2vec
.