встраивание и кластеризация определенного текста (используя GloVe) - PullRequest
0 голосов
/ 23 сентября 2019

Редактировать 2: я лучше подумал над своим вопросом и понял, что это обобщенный способ, и это всего лишь вопрос чего-то простого;

создание нового массива из файла Glove (glove.6B.300d.txt), который содержит ТОЛЬКО список слов, которые у меня есть в моем документе.

Я знаю, что это на самом деле не имеет ничего общего с этим конкретным файлом GloVe, и я должен научиться делать это для любых двух списковслов ...

Я предполагаю, что я просто не знаю, как правильно искать это, чтобы научиться выполнять эту часть.т.е. какую библиотеку использовать / functions / buuzzwords, которую я должен искать.

Edit 1: я добавляю код, который я использовал, который работает для всей библиотеки GloVe;

from __future__ import division
from sklearn.cluster import KMeans
from numbers import Number
from pandas import DataFrame
import sys, codecs, numpy
class autovivify_list(dict):
  def __missing__(self, key):
     value = self[key] = []
     return value
  def __add__(self, x):

    if not self and isinstance(x, Number):
       return x
    raise ValueError
  def __sub__(self, x):

    if not self and isinstance(x, Number):
       return -1 * x
    raise ValueError
 def build_word_vector_matrix(vector_file, n_words):
   numpy_arrays = []
   labels_array = []
   with codecs.open(vector_file, 'r', 'utf-8') as f:
      for c, r in enumerate(f):
         sr = r.split()
         labels_array.append(sr[0])
         numpy_arrays.append( numpy.array([float(i) for i in sr[1:]]) )

         if c == n_words:
           return numpy.array( numpy_arrays ), labels_array

return numpy.array( numpy_arrays ), labels_array
def find_word_clusters(labels_array, cluster_labels):
  cluster_to_words = autovivify_list()
     for c, i in enumerate(cluster_labels):
     cluster_to_words[ i ].append( labels_array[c] )
  return cluster_to_words
if __name__ == "__main__":
   input_vector_file = 
   '/Users/.../Documents/GloVe/glove.6B/glove.6B.300d.txt'
   n_words = 1000 
   reduction_factor = 0.5
   n_clusters = int( n_words * reduction_factor ) 
   df, labels_array = build_word_vector_matrix(input_vector_file, 
   n_words)
   kmeans_model = KMeans(init='k-means++', n_clusters=n_clusters, 
   n_init=10)
   kmeans_model.fit(df)

   cluster_labels  = kmeans_model.labels_
   cluster_inertia   = kmeans_model.inertia_
   cluster_to_words  = find_word_clusters(labels_array, 
   cluster_labels)

   for c in cluster_to_words:
      print cluster_to_words[c]
      print "\n"

Оригинальный вопрос:

Допустим, у меня есть конкретный текст (скажем, 500 слов).Я хочу сделать следующее:

  1. Создать вложение всех слов в этом тексте (т.е. иметь список векторов GloVe только из этих 500 слов)
  2. Сгруппировать его (* это я умею делать)

Как мне сделать такую ​​вещь?

1 Ответ

0 голосов
/ 23 сентября 2019

Это довольно простая проблема.Из вашего описания я делаю вывод, что у вас есть 500 слов, и у вас есть векторы, доступные для них.Я бы посоветовал вам зайти в Scikit Learn Library и применить для этой задачи один из стандартных подходов кластеризации.Я бы рекомендовал начать с K-средних.Используйте следующую ссылку, чтобы выбрать правильный подход в Scikit-learn: https://scikit -learn.org / stable / tutorial / machine_learning_map / index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...