Doc2Vec - Cómo etiquetar los párrafos (gensim)

17

Me pregunto cómo etiquetar (etiquetar) oraciones / párrafos / documentos con doc2vec en gensim, desde un punto de vista práctico.

¿Necesita tener cada oración / párrafo / documento con su propia etiqueta única (por ejemplo, "Sent_123")? Esto parece útil si desea decir "qué palabras u oraciones son más similares a una oración específica única llamada" Sent_123 ".

¿Se puede repetir las etiquetas según el contenido? Por ejemplo, si cada oración / párrafo / documento trata sobre un determinado artículo del producto (y hay varias oraciones / párrafos / documentos para un artículo del producto dado), puede etiquetar las oraciones en función del artículo y luego calcular la similitud entre una palabra o un oración y esta etiqueta (que supongo que sería como un promedio de todas esas oraciones que tenían que ver con el artículo del producto)?

B_Miner
fuente

Respuestas:

10

Ambos son posibles. Puede dar a cada documento una ID única (como un número de serie secuencial) como un doctag, o un doctag de cadena compartida que represente algo más al respecto, o ambos al mismo tiempo.

El constructor TaggedDocument toma una lista de etiquetas. (Si se limita a entradas simples ascendentes de 0, el modelo Doc2Vec las usará como índices directos en su matriz de respaldo, y ahorrará una gran cantidad de memoria que de lo contrario se dedicaría a una cadena -> búsqueda de índice , lo que podría ser importante para grandes conjuntos de datos, pero puede usar doctags de cadena o incluso una mezcla de doctags int y de cadena).

Tendrá que experimentar con lo que funciona mejor para sus necesidades.

Para algunas tareas de clasificación, un enfoque que a veces funcionó mejor de lo que hubiera esperado es omitir por completo las identificaciones por texto, y solo entrenar el modelo Doc2Vec con ejemplos de clases conocidas, con las clases deseadas como doctags. Luego obtienes 'doc vectors' solo para los doctags de la clase, no todos los documentos, un modelo potencialmente mucho más pequeño. Más adelante, inferir vectores para nuevos textos da como resultado vectores significativamente cercanos a los vectores de documentos de clase relacionados.

gojomo
fuente
Eso es genial, muchas gracias! Además, ya que estoy empezando a jugar con genim, tengo curiosidad por saber si es posible calcular la similitud entre un documento (independientemente de si se usan etiquetas únicas o compartidas) y una palabra, ¿puede hacerse eso en su experiencia?
B_Miner
1
Algunos modos de entrenamiento crean vectores de palabras y documentos dentro del 'mismo espacio' y, por lo tanto, las similitudes pueden ser significativas. Consulte, por ejemplo, este documento, arxiv.org/abs/1507.07998 , que incluso hace una especie de 'analogía aritmética' que involucra doc-vectores (artículos de Wikipedia) y word-vectors. La formación en que el papel es como el modo de DBOW gensim con salto gramos palabra-entrenamiento concurrente: dm=0, dbow_words=1.
gojomo
Gracias @gojomo! Agregué una consulta sobre cómo hacer esto en la lista de gensim
B_Miner
Por favor, corríjame si estoy equivocado. En su último párrafo, sugiere que cada documento se etiquete como etiquetamos las preguntas en este sitio. Y después del entrenamiento, obtendremos una representación vectorial de cada etiqueta. Cuando llega un nuevo documento, podemos usar métrica de similitud para sugerir etiquetas para el nuevo documento.
usuario
@usuario: sí, es posible y a veces beneficioso hacer eso, aunque no es necesario.
gojomo
9

doc2vecmodelo obtiene su algoritmo de word2vec.

En word2vecno hay necesidad de etiquetar las palabras, porque cada palabra tiene su propio significado semántico en el vocabulario. Pero en caso de doc2vecque sea necesario especificar qué cantidad de palabras u oraciones transmiten un significado semántico, de modo que el algoritmo pueda identificarlo como una entidad única. Por esta razón, estamos especificando labelso tagspara orar o párrafo dependiendo del nivel de significado semántico transmitido.

Si especificamos una sola etiqueta para múltiples oraciones en un párrafo, significa que todas las oraciones en el párrafo son necesarias para transmitir el significado. Por otro lado, si especificamos etiquetas variables para todas las oraciones en un párrafo, significa que cada una transmite un significado semántico y pueden o no tener similitud entre ellas.

En términos simples, un labelsignifica significado semántico de algo.

yazhi
fuente
If we specify a single label to multiple sentences in a paragraph, it means that all the sentences in the paragraph are required to convey the meaning.No estoy seguro de estar entendiendo esto correctamente. Según los algoritmos POV, ¿se necesitan todas las oraciones con la misma etiqueta para la definición semántica o todas las oraciones con la misma etiqueta describen lo mismo? En el primer caso, ninguna oración individual es autosuficiente por sí misma, en el segundo caso, una sola oración es autosuficiente.
usuario
@usuario: es el segundo caso, desde el algoritmo POV, una etiqueta se define como una entidad que, cuando se usa en una sola oración, captura el significado de todas las palabras. De la misma manera, cuando se usa en múltiples oraciones, también captura las palabras en todas las otras oraciones.
yazhi