Рубрики
Без рубрики

Классификация намерений на основе извлечения в Chatbots 3/4

Так что добро пожаловать в последнюю часть классификации намерений в Chatbots! Мы уже прошли набор данных, и мы выполнили некоторые необходимые операции на нем

Автор оригинала: Pankaj Kumar.

Так что добро пожаловать в последнюю часть классификации намерений в Chatbots! Мы уже прошли набор данных, и мы выполнили некоторые необходимые операции, чтобы он мог использовать его в Предыдущая статья Отказ

Шаги по созданию наметительных классификаций в Chatbots (продолжение …)

Так что теперь мы можем двигаться дальше от того места, где мы остановились.

1. Форма для вектора TF-IDF

После того, как мы получили словарный запас и корпус текстовых данных о возможных пользователях пользователей, мы видим, как он выглядит, если мы преобразуем кусок пользовательского теста Query:

print(Tfd.transform([test_data['Test user queries'][5]]))

Так что это матрица редкой строки, генерируемая для каждого текста. Редкая матрица – это очень мало ненулевых элементов в нем.

2. Определите сходство данных с сходством косинуса

Это волшебный соус, который найдет сходство между двумя кусками текста.

В добыче данных мера сходства относится к расстоянию в наборе данных с размерами, которые представляют особенности объекта данных.

Если это расстояние меньше, будет высокая степень сходства, но будет низкая степень сходства, когда расстояние большое.

Некоторые из популярных мер походных действий являются:

  • Евклидово расстояние.
  • Расстояние Манхэттена.
  • Jaccard сходство.
  • Minkowski расстояние.
  • Сходство косинуса.

Косинальное сходство – это метрика, которая помогает определить, насколько аналогичны объектами данных, независимо от их размера.

Используя сходство косинуса, мы можем измерить сходство между двумя предложениями в Python.

Объекты данных в наборе данных обрабатываются как вектор при оцинском сходстве.

Формула : – COS (х,. Y/

from sklearn.metrics.pairwise import cosine_similarity
sorted(cosine_similarity(Tfd.transform([test_data['Test user queries'][5]]),Tfd_train)[0])[-5:]

мы получили:

3. Сочетание сходства TF-IDF и Cosine

Итак, теперь мы можем объединить как преобразование TF-IDF тестового запроса и нахождение косинального сходства. Осторожно пройти логику:

cosine_val = []
result = []
for i,query in enumerate(test_data['Test user queries']):
  sug = str(i)+","
  sim_arr = cosine_similarity(Tfd.transform([query]),Tfd_train)[0] #similarity array
  tmp_ix = [x for x in range(len(sim_arr))]
  cosine_val.append(sorted(zip(sim_arr, tmp_ix), reverse=True)[:3])
  if cosine_val[i][0][0] == 0.0:
    sug+='2'
  elif cosine_val[i][0][0] == 1.0:
    sug+=str(cosine_val[i][0][1])
  else:
    sug+="1,"
    for tupple in cosine_val[i]:
      string_list_suggestions=[]
      if tupple[0]>.5:
        sug+=str(tupple[1])+','
    sug = sug[:-1]
  print(sug)
  result.append(sug)

Для каждого запроса теста вывод выглядит следующим образом:

  • Первое число дает идентификатор тестового запроса.
  • Второе число 2 составляет 2, если нет совпадения между пользовательскими запросами, а сходство косинуса равно нулю.
  • Второе число 1, если в интервале наблюдается косинальное сходство [0,5,1].
  • Если сходство косинации имеет ровно 1, это означает, что есть прямое совпадение, а затем второе число является идентификатором соответствующего запроса.

Если мы запустим вышеперечисленное, мы получаем следующий вывод:

4. Получить оригинальные идентификаторы

Однако эти идентификаторы не из оригинального набора данных, поскольку мы разделили вариации Запросы столбца на несколько строк

Поэтому нам нужно получить фактические идентификаторы на основе оригинального набора данных:

  • Держите другие данные одинаковые
  • Если идентификатор «1» (I.E, предложения), мы принесем реальные идентификаторы намерения.
res_final = []
for each in result:
  if each.split(",")[1] == '1':
    tmp = each.split(",")
    temp_list = []
    an_list = []
    for suggestion in tmp[2:]:
      if df["id"][int(suggestion)] not in temp_list:
        print(df["intent"][int(suggestion)])
        temp_list.append(df["id"][int(suggestion)])
    for item in list(set(temp_list)):
      an_list.append(item)
    print(tmp[:2]+an_list)
    res_final.append(",".join(str(x) for x in tmp[:2]+an_list))
  else:
    res_final.append(each)

Так что теперь, если мы запустим это:

И мы закончили.

На рисунке выше вы можете видеть, что подобные запросы происходят вместе, что означает, что наша программа работает!

В следующей статье мы посмотрим на Раза, открытый источник намерения Chatbot Отказ

Завершение примечания

Если вам понравилось читать эту статью и хочу прочитать больше, пойти дальше и посетить домашнюю страницу журнала. Все последние сообщения можно увидеть там.

Счастливое обучение!