Doc2Vec - Como rotular os parágrafos (gensim)

17

Eu estou querendo saber como rotular (marcar) frases / parágrafos / documentos com doc2vec no gensim - do ponto de vista prático.

Você precisa ter cada frase / parágrafo / documento com seu próprio rótulo exclusivo (por exemplo, "Sent_123")? Isso parece útil se você quiser dizer "quais palavras ou frases são mais semelhantes a uma única frase específica chamada" Sent_123 ".

Você pode repetir os rótulos com base no conteúdo? Por exemplo, se cada frase / parágrafo / documento é sobre um determinado item do produto (e há várias frases / parágrafos / documentos para um determinado item do produto), você pode rotular as frases com base no item e calcular a semelhança entre uma palavra ou uma frase e esse rótulo (que eu acho que seria como uma média de todas as frases relacionadas ao item do produto)?

B_Miner
fonte

Respostas:

10

Ambos são possíveis. Você pode atribuir a cada documento um ID exclusivo (como um número de série seqüencial) como uma etiqueta de documento ou uma tag de cadeia de caracteres compartilhada representando algo mais sobre ele, ou ambos ao mesmo tempo.

O construtor TaggedDocument pega uma lista de tags. (Se você se limitar a entradas simples ascendentes de 0, o modelo Doc2Vec as usará como índices diretos em sua matriz de backup e você economizará muita memória que, de outra forma, seria dedicada a uma string -> pesquisa de índice , o que pode ser importante para grandes conjuntos de dados. Mas você pode usar as tags de documento de string ou até mesmo uma mistura de int e string.

Você terá que experimentar o que funciona melhor para suas necessidades.

Para algumas tarefas de classificação, uma abordagem que às vezes funcionou melhor do que eu esperava seria pular completamente as IDs por texto e apenas treinar o modelo Doc2Vec com exemplos de classes conhecidas, com as classes desejadas como as etiquetas de documentos. Você obtém 'vetores de documentos' apenas para as marcas de documento da classe - e não para todos os documentos - um modelo potencialmente muito menor. Posteriormente, inferir vetores para novos textos resulta em vetores significativamente próximos dos vetores de documentos de classe relacionados.

gojomo
fonte
Isso é ótimo, muito obrigado! De um lado, estou começando a brincar com o genim - estou curioso para saber se é possível calcular a semelhança entre um documento (independentemente de tags exclusivas ou compartilhadas serem usadas) e uma palavra - isso pode ser feito em sua experiência?
B_Miner
1
Alguns modos de treinamento criam vetores de palavras e documentos dentro do 'mesmo espaço' e, portanto, as semelhanças podem ser significativas. Veja, por exemplo, este artigo - arxiv.org/abs/1507.07998 - que até faz uma espécie de 'analogia aritmética' envolvendo vetores de documentos (artigos da Wikipedia) e vetores de palavras. A formação em que o papel é como o modo DBOW de gensim com skip-gram palavra-treinamento concorrente: dm=0, dbow_words=1.
Gojomo
Obrigado @gojomo! Adicionei uma consulta sobre como fazer isso na lista gensim: groups.google.com/forum/#!topic/gensim/RLRfY6k3ulw
B_Miner
Por favor corrija-me se eu estiver errado. No seu último parágrafo, você está sugerindo que cada documento seja marcado como etiquetamos perguntas neste site. E após o treinamento, obteremos representação vetorial de cada tag. Quando um novo documento chega, podemos usar a métrica de similaridade para sugerir tags para o novo documento.
usuário
@user - sim, é possível e às vezes benéfico fazer isso, embora não seja necessário.
Gojomo # 24/16
9

doc2vecO modelo obtém seu algoritmo word2vec.

Em word2vecnão há necessidade de rotular as palavras, porque cada palavra tem seu próprio significado semântico no vocabulário. Porém, no caso de doc2vec, é necessário especificar que quantas palavras ou frases transmitem um significado semântico, para que o algoritmo possa identificá-lo como uma única entidade. Por esse motivo, estamos especificando labelsou tagssentenciando ou parágrafo, dependendo do nível de significado semântico transmitido.

Se especificarmos um rótulo único para várias frases em um parágrafo, significa que todas as frases no parágrafo são necessárias para transmitir o significado. Por outro lado, se especificarmos rótulos variáveis ​​para todas as sentenças de um parágrafo, significa que cada um transmite um significado semântico e eles podem ou não ter semelhança entre eles.

Em termos simples, labelsignifica significado semântico de alguma coisa.

yazhi
fonte
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.Não tenho certeza se estou entendendo isso corretamente. A partir dos algoritmos POV, todas as frases com a mesma tag são necessárias para a definição semântica ou todas as frases com a mesma tag descrevem a mesma coisa? No primeiro caso, nenhuma sentença é auto-suficiente por si só; no segundo caso, uma sentença é auto-suficiente.
usuário
@user: É o segundo caso, a partir do algoritmo POV, uma tag é definida como uma entidade que, quando usada em uma única frase, captura o significado de todas as palavras. Da mesma forma, quando usado em várias frases, também captura as palavras em todas as outras frases.
Yazhi 24/05