Как обучить модель, которая приведет к оценке сходства между двумя заголовками новостей? - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать поддельный классификатор новостей, и я довольно новичок в этой области. У меня есть столбец "title_1_en", в котором есть заголовок для поддельных новостей, а другой столбец называется "title_2_en". Есть 3 метки цели; «согласен», «не согласен» и «не связан», если заголовок новости в столбце «title_2_en» согласен, не согласен или не связан с заголовком в первом столбце.

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

def L2(vector):
    norm_value = np.linalg.norm(vector)
    return norm_value

def Cosine(fr1, fr2):
    cos = np.dot(fr1, fr2)/(L2(fr1)*L2(fr2))
    return cos

1 Ответ

0 голосов
/ 19 апреля 2019

Самое важное здесь - как вы конвертируете два предложения в векторы. Есть несколько способов сделать это, и самый наивный способ:

  • Конвертируйте каждое слово в вектор - это можно сделать с помощью стандартных предварительно обученных векторов, таких как word2vec или GloVe.
  • Теперь каждое предложение - это просто сумка векторов слов. Это необходимо преобразовать в один вектор, т. Е. Сопоставить текст полного предложения с вектором. Есть много способов сделать это тоже. Для начала, просто возьмите среднее из множества векторов в предложении.
  • Вычислить косинусное сходство между двумя векторами предложений.

Сходство Spacy - хорошее место для старта, в котором используется метод усреднения. Из документов:

По умолчанию spaCy использует алгоритм среднего вектора, используя предварительно обученные векторы, если они доступны (например, модель en_core_web_lg). Если нет, используется атрибут doc.tensor, который создается тэггер, парсер и распознаватель сущностей. Вот так en_core_web_sm Модель обеспечивает сходство. Обычно сходство на основе .tensor будет более структурным, в то время как слово векторное сходство будет более актуальным. Вы также можете настроить метод .sdentifity (), чтобы предоставьте свою собственную функцию подобия, которую можно обучить, используя контролируемые методы.

...