TGViewer
Матчасть Матчасть @matchast · 880 subscribers
Post #158 443
Продолжаем наш предыдущий пост про создание чатбота, который выдавал уместные ответы на реплики пользователя. Сегодня говорим о том, как превратить тексты в числовые векторы, чтобы осуществлять по ним приближённый поиск.

Вчера мы познакомились с библиотекой pandas в Python - она позволяет загружать таблицы, осуществлять поиск в них, и т.п. Сегодня затронем библиотеку scikit-learn (sklearn), которая позволяет более хитрые манипуляции с данными - то, что называется машинным обучением. Это значит, что любому алгориту сперва нужно показать данные (fit), чтобы он узнал о них что-то важное. В результате алгорити "научится" делать с этими данными что-то полезное - преобразовывать их (transform), или даже предсказывать неизвестные величины (predict).

В данном случае мы хотим преобразовать тексты ("вопросы") в числовые векторы. Это нужно, чтобы можно было находить "близкие" друг к другу тексты, пользуясь математическим понятием расстояние. Расстояние между двумя точками можно рассчитать по теореме Пифагора - как корень из суммы квадратов разностей их координат. В математике это называется Евклидовой метрикой. Если мы сможем превращать тексты в объекты, у которых есть координаты, то мы сможем вычислять Евклидову метрику и, например, находить в базе вопрос, наиболее всего похожий на "о чём ты думаешь?".

Самый простой способ задать координаты текста - это пронумеровать все слова в языке, и сказать, что i-тая координата текста равна числу вхождений в него i-того слова. Например, для текста "я не могу не плакать" координата слова "не" равна 2, координаты слов "я", "могу" и "плакать" равны 1, а координаты всех остальных слов (коих десятки тысяч) равны 0. Такое представление теряет информацию о порядке слов, но всё равно работает неплохо.

Проблема в том, что у слов, которые встречаются часто (например, частиц "и" и "а") координаты будут несоразмерно большие, хотя информации они несут мало. Чтобы смягчить эту проблему, координату каждого слова можно поделить на логарифм числа текстов, где такое слово встречается - это называется tf-idf и тоже работает неплохо.

Проблема только одна: в нашей базе 60 тысяч текстовых "вопросов", в которых содержится 14 тысяч различных слов. Если превратить все вопросы в векторы, получится матрица 60к*14к. Работать с такой не очень классно, поэтому завтра мы поговорим о сокращении размерности. Stay tuned!

#матчасть #weirdmath #chatbot #sklearn #tfidf #vectorization #machinelearning 
More from @matchast
  1. Sep 10, 2024Классный хабр от tech_priestess про внутреннюю размерность фигур и пространств эмбеддингов…
  2. Sep 4, 2024Почему почти у всех полезных матриц маленький ранг? В нашей с вами жизни матрицы малого ра…
  3. Sep 5, 2022Ищем в нашу команду Mathshub талантливых инструкторов в сфере machine learning! Кто мы? Ma…
  4. Aug 11, 2022photo post
  5. Aug 8, 2022Представляю бесплатный интенсив из 20 занятий по питону и математике для начинающих. Орган…
  6. Jul 18, 2022Слева: линейная, изотоническая, и сглаженная изотоническая регрессии. Справа: в зависимост…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →