Алгоритм сравнения фраз и предложений по релевантному значению - PullRequest
1 голос
/ 10 марта 2020

Я новичок в машинном обучении и был бы очень признателен, если бы вы могли дать мне подсказку о правильном направлении использования правильного / простого инструмента (ов) для алгоритма сравнения любых двух фраз, состоящих из разных слов, но имеющих одно значение. Случайный пример:

Phrase A:
"Solving mac computers operating system issues"

Phrase B:
"Fixing apple OS X errors"

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

I ' Хотелось бы узнать, возможно ли это на самом деле, и если да, то с какими инструментами или языками программирования и как это работает.

Если существует алгоритм, который использует словарь синонимов для такой цели?

Как Google решил такую ​​задачу, если у них когда-либо была такая необходимость? Я знаю, что они анализируют и анализируют тонны данных, но как бы они поступили в такой ситуации?

Спасибо !!

1 Ответ

0 голосов
/ 10 марта 2020

Вы можете решить эту проблему, определив "сходство semanti * 1017" (сходство значения) между отрывками. В настоящее время лучший способ сделать это - использовать алгоритмы глубокого обучения.

В спецификациях c я широко использовал следующую библиотеку: https://github.com/UKPLab/sentence-transformers

В этой библиотеке представлены такие модели, как BERT & X LNet, которые были "точно настроены" (адаптированы) для задачи проецирования пассажей в 768-мерное векторное пространство, представляющее значение ввода.

Идея состоит в том, что чем ближе два результирующих выходных вектора расположены друг к другу (косинусное расстояние, манхэттенское расстояние и т. Д. c.), Тем ближе значения их входных проходов.

Вот небольшой фрагмент кода, демонстрирующий как вы можете использовать эту библиотеку:

import numpy as np

embedder = SentenceTransformer('bert-base-nli-mean-tokens')

def manhattan_distance(x, y):
    return np.sum(np.abs(x - y))

anchor_phrase = "Solving mac computers operating system issues"
candidate_phrases = [
    "Fixing apple OS X errors",
    "Troubleshooting iPhone problems"
]

embeddings = embedder.encode([anchor_phrase] + candidate_phrases)
anchor_embedding = embeddings[0]
candidates = list(zip(candidate_phrases, embeddings[1:]))
candidates = [(x[0], manhattan_distance(anchor_embedding, x[1])) for x in candidates]
print(candidates)

Это должно вывести [('Fixing apple OS X errors', 275.67545), ('Troubleshooting iPhone problems', 313.4759)]. Когда расстояние (второй элемент в каждом кортеже) меньше, предложение более семантически похоже на привязку.

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