перчатки в эти дни.

меня есть векторы с некоторыми образцами данных, и у каждого вектора есть название категории (Места, Цвета, Имена).

Моя цель - обучить модель, которая принимает новую входную строку и предсказывать, к какой категории она принадлежит. Например, если новый вход «фиолетовый», я должен быть в состоянии предсказать «Цвета» как правильную категорию. Если новый ввод «Калгари», он должен предсказать «Места» как правильную категорию.

['john','jay','dan','nathan','bob']  -> 'Names'
['yellow', 'red','green'] -> 'Colors'
['tokyo','bejing','washington','mumbai'] -> 'Places'

ПОДХОД

Я провел некоторое исследование и наткнулся на

Word2vec, В этой библиотеке есть функции "схожесть" и "сходство", которые я могу использовать. Итак, один подход грубой силы, о котором я подумал, заключается в следующем:Принять новый вклад.

Рассчитайте его сходство с каждым словом в каждом векторе и возьмите среднее значение.Так, например, для ввода «розовый» я могу вычислить его сходство со словами в векторе «имена», взять среднее и затем сделать то же самое для двух других векторов. Вектор, который дает мне наибольшее среднее значение подобия, будет правильным вектором для входных данных.

ВОПРОС

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

используйте spacy's ner, и вы также можете обучить spacy модель с вашими данными.

 Aaditya Ura06 дек. 2017 г., 05:20
@ AyodhyankitPaul я буду Google это прямо сейчас! спасибо за отзыв и, если возможно, хотелось бы, если вы можете предоставить небольшую демонстрацию, хотел бы увидеть это
 Dinero06 дек. 2017 г., 05:22
Если вы ищете самое простое / быстрое решение, я бы посоветовал вам воспользоваться предварительно обученными вложениями слов (Word2Vec или GloVe) и просто создать простую систему запросов поверх нее. Векторы были обучены в огромном корпусе и, вероятно, содержат достаточно хорошее приближение к данным вашего домена.

Ответы на вопрос(2)

 хорошо и быстреереализация перчатки в эти дни.Использование word2vec для классификации слов по катег

Решение Вопроса

Чтобы запустить его, вам нужно скачать и распаковать предварительно обученные данные GloVe из

import numpy as np

# Category -> words
data = {
  'Names': ['john','jay','dan','nathan','bob'],
  'Colors': ['yellow', 'red','green'],
  'Places': ['tokyo','bejing','washington','mumbai'],
}
# Words -> category
categories = {word: key for key, words in data.items() for word in words}

# Load the whole embedding matrix
embeddings_index = {}
with open('glove.6B.100d.txt') as f:
  for line in f:
    values = line.split()
    word = values[0]
    embed = np.array(values[1:], dtype=np.float32)
    embeddings_index[word] = embed
print('Loaded %s word vectors.' % len(embeddings_index))
# Embeddings for available words
data_embeddings = {key: value for key, value in embeddings_index.items() if key in categories.keys()}

# Processing the query
def process(query):
  query_embed = embeddings_index[query]
  scores = {}
  for word, embed in data_embeddings.items():
    category = categories[word]
    dist = query_embed.dot(embed)
    dist /= len(data[category])
    scores[category] = scores.get(category, 0) + dist
  return scores

# Testing
print(process('pink'))
print(process('frank'))
print(process('moscow'))

Вот (осторожно, 800Mb!). После запуска должно получиться что-то вроде этого:... что выглядит довольно разумно. Вот и все! Если вам не нужна такая большая модель, вы можете отфильтровать слова в

{'Colors': 24.655489603678387, 'Names': 5.058711671829224, 'Places': 0.90213905274868011}
{'Colors': 6.8597321510314941, 'Names': 15.570847320556641, 'Places': 3.5302454829216003}
{'Colors': 8.2919375101725254, 'Names': 4.58830726146698, 'Places': 14.7840416431427}

 в соответствии с ихgloveтс-IDF Гол. Помните, что размер модели зависит только от имеющихся у вас данных и слов, которые вы можете запросить.Это очень интересно Поэтому очевидно, что вложения слов уже созданы. Когда я попробовал print (process ('kobe')), он классифицировал 'kobe' как место, хотя 'kobe' - это имя, однако, когда я добавил 'kobe' в словарь данных в качестве имени типа, он классифицировал kobe как имя. Я пытаюсь понять, что происходит под капотом. Это дало наивысшую оценку (9,38), но оценка для категории места была довольно близка (9,08).

 Dinero12 дек. 2017 г., 02:33
Некоторые условия, естественно, на границе. Помните, что вложения извлечены из текстов. Например.,
 desertnaut12 дек. 2017 г., 17:26
Кроме того, что стоит,
 Maxim12 дек. 2017 г., 08:48
 Пэрис Хилтон часто используется как город и как название. То же самое для Кобе: я знаю только одно использование в качестве имени, хотя и очень популярное, но это также как место в Японии -parisen.wikipedia.org/wiki/Kobe , Это распространенная проблема в классификации. Что касается общего понимания, см. Этот ответ -stackoverflow.com/a/46727571/712995 и дальнейшие ссылки это относится к1) Конечно, это так, но вам придется изменить python dict на список кортежей. Было бы проще иметь отдельный индекс коэффициентов для разных слов, если вы хотите пойти по этому пути. 2) Отрицательный балл абсолютно возможен, здесь нет проблем. 3) Это решение использует
 Maxim12 дек. 2017 г., 16:31
уже обучен модель. Если вы хотите обучать это самостоятельно, это вполне возможно, но, учитывая размер обучающих данных, они должны быть очень большими, чтобы иметь значение. Нечто сопоставимое с размером википедии.Он знает много слов, потому что обучался на огромном текстовом корпусе. Который, по-видимому, имеет что-то о

Ваш ответ на вопрос