Deshabilitar la eliminación de puntuación de Gensim, etc. al analizar un corpus wiki

Quiero entrenar un modelo word2vec en la wikipedia en inglés usando python con gensim. Seguí de cerca https://groups.google.com/forum/#!topic/gensim/MJWrDw_IvXw para eso.

Funciona para mí, pero lo que no me gusta del modelo resultante de word2vec es que las entidades con nombre se dividen, lo que hace que el modelo sea inutilizable para mi aplicación específica. El modelo que necesito tiene que representar entidades nombradas como un solo vector.

Es por eso que planeé analizar los artículos de wikipedia con entidades espaciales y fusionar como “carolina del norte” en “carolina del norte”, por lo que word2vec los representaría como un solo vector. Hasta ahora tan bueno.

El análisis de Spacy tiene que ser parte del preprocesamiento, que originalmente hice como se recomienda en la discusión enlazada usando:

... wiki = WikiCorpus(wiki_bz2_file, dictionary={}) for text in wiki.get_texts(): article = " ".join(text) + "\n" output.write(article) ... 

Esto elimina la puntuación, las palabras de parada, los números y el uso de mayúsculas, y guarda cada artículo en una línea separada en el archivo de salida resultante. El problema es que la NER de Spacy no funciona realmente en este texto preprocesado, ya que supongo que se basa en la puntuación y el uso de mayúsculas en la NER (?).

¿Alguien sabe si puedo “deshabilitar” el preprocesamiento de Gensim para que no elimine la puntuación, etc., pero aún así analiza los artículos de wikipedia al texto directamente desde el volcado de wikipedia comprimido? ¿O alguien sabe una mejor manera de lograr esto? ¡Gracias por adelantado!

No me sorprendería si Spacy estuviera operando en el nivel de las oraciones. Para eso es muy probable que use límites de oraciones (punto, signo de interrogación, etc.). Es por eso que la NER spacy (o tal vez incluso un Etiquetador POS en una etapa anterior) podría estar fallando.

En cuanto a la forma de representar entidades con nombre para el LSI de gensim, recomendaría agregar un identificador artificial (una palabra que no existe). Desde la perspectiva de un modelo, no hace ninguna diferencia y puede ahorrarle la carga de volver a trabajar el preprocesamiento de Gensim.

Es posible que desee consultar el model.wv.vocab donde model = gensim.models.Word2Vec(...) Para eso tendría que entrenar el modelo dos veces. Alternativamente, intente crear un conjunto de vocabulario a partir del texto sin procesar y elija un conjunto aleatorio de letras que no exista en el vocabulario.