LINUX.ORG.RU
ФорумTalks

А посоветуйте книжку по питону и нейросетям

 , ,


0

1

Собственно сабж. Пилю тут учебный проект - поиск дублицирующихся строк в огромной базе (пока что CSV-шка) из справочника компонентов. С помощью нейросетей и такой то матери написал прототип, который ищет с помощью Rapidfuzz похожие строки, но как не колбасил его - не ищет, что нужно. Нужно пилить алгоритм машинного обучения или что-то в этом роде, а знаний у меня нет. Питон то ещё плюс минус понимаю, а как написать собственный (хотя бы простой) алгоритм машинного обучения - нет. Знаю, что книг по теме вагон и маленькая тележка, я бы их все прочитал, но время немного ограничено, поэтому решил спросить тут.

Хоспадя, какие нейросети, берешь тупой difflib на Ратклиффе-Обершельпе прям из стоковой поставки. Вы со своими нейронками скоро отупеете.

Lordwind ★★★★★
()

кидай url гита проекта и в чём вопросцы то?

по книгам по питону и нейрографам

есть вон две свежие ру-книги этого года издания на русском Ильин - Python для инженерных задач

и

Романо,Крюгер - Весь Python(2026Спринт2024Packt)3изд - чисто норм букварь

по нейронкам лучшее это от Лаурятов Тьюринга по этим темам - там 3-4 книжки на всегда в обозе хватит

qulinxao3 ★☆
()
Ответ на: комментарий от Lordwind

берешь тупой difflib на Ратклиффе-Обершельпе прям из стоковой поставки

Посмотрю, спасибо!

Вы со своими нейронками скоро отупеете.

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

diamond_cat
() автор топика
Ответ на: комментарий от qulinxao3

кидай url гита проекта и в чём вопросцы то?

Проект непубличный, и, честно, стыдно показывать сорцы просвящённой публике.

А вопрос собственно по книжкам, по машинному обучению и питону. Спасибо за рекомендации.

diamond_cat
() автор топика
Ответ на: комментарий от diamond_cat

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

Сети в этой задаче покажут себя хуже обычных алгоритмов.

Вам правильно подсказали про difflib, но если нужно свое решение попробуйте доработать ваш подход с RapidFuzz до рабочего состояния:

  1. Приводим всё к нижнему регистру, убираем спецсимволы, пробелы, заменяем синонимы «резистор = R», «конденсатор = C» и тд.

  2. Отсекаем кандидатов, которые слишком разные с помощью RapidFuzz.

  3. С помощью расстояния Левенштайна и косинусной схожести ловим мелкие ошибки, перестановки, пропуски и сокращения.

  4. Делаем финальная оценку собирая ее из трех компонентов (RapidFuzz score, Levenshtein distance, Cosine similarity)

Все это уложится в ~40 строк кода:

#!/usr/bin/env python3

from rapidfuzz import fuzz, process
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import Levenshtein

strings = [
    "Резистор 1кОм +/- 5%",
    "Сопротивление 1 кОм",
    "Конденсатор 10 мкФ",
    "C 10 мкФ",
    "R 1 ком",
    "Резистор 10 кОм"
]

candidates = []
duplicates = []

def normalize(s):
    s = s.lower()
    s = s.replace("+", "").replace("-", "").replace("/", "").replace("%", "")
    s = s.replace("резистор", "r").replace("сопротивление", "r")
    s = s.replace("конденсатор", "c")
    s = s.replace("диод", "d")
    s = ''.join(c if c.isalnum() or c.isspace() else ' ' for c in s)
    s = ' '.join(s.split())
    return s

norm_strings = [normalize(s) for s in strings]
vectorizer = TfidfVectorizer().fit_transform(norm_strings)
cosine_matrix = cosine_similarity(vectorizer)
for i, s in enumerate(norm_strings):
    matches = process.extract(s, norm_strings, scorer=fuzz.ratio)
    filtered = [(m[0], m[1], m[2]) for m in matches if m[1] >= 60 and m[2] != i]
    candidates.append(filtered)

for i, s in enumerate(norm_strings):
    for match_str, rf_score, idx in candidates[i]:
        lev_ratio = Levenshtein.ratio(s, match_str)
        cos_sim = cosine_matrix[i][idx]
        rf_norm = rf_score / 100
        final_score = 0.4 * lev_ratio + 0.4 * cos_sim + 0.2 * rf_norm
        if final_score > 0.85:
            duplicates.append((strings[i], strings[idx], round(final_score, 2)))

for dup in duplicates:
    print(dup)

В результате будет что-то типа:

('Сопротивление 1 кОм', 'R 1 ком', 1.0)
('Конденсатор 10 мкФ', 'C 10 мкФ', 1.0)
('C 10 мкФ', 'Конденсатор 10 мкФ', 1.0)
('R 1 ком', 'Сопротивление 1 кОм', 1.0)

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

Obezyan
()

Ужас, каша в голове. ТС, она у тебя какая? Овсяная или гречневая? Давай по пунктам прокатимся, чтоб понятно было чем я недоволен.

Пилю тут учебный проект - поиск дублицирующихся строк в огромной базе (пока что CSV-шка) из справочника компонентов.

Молодец что пилишь учебный проект, это похвально. Но вот называть CSV огромной базой это уже как-то некорректно. CSV это не база, а файл. И да, они бывают большими, но всё же это не база данных и тем более не даталейк (вот они огромные).

С помощью нейросетей и такой то матери написал прототип, который ищет с помощью Rapidfuzz похожие строки, но как не колбасил его - не ищет, что нужно.

А вот это уже совсем не похвально. Если ты конечно не исследуешь эти самые сети, могут ли они код писать и как именно. Нейросети можно применять когда пишешь код, но для этого ты должен быть умнее чем нейронки. Т.е. если ты без них можешь легко написать код, то они тебе помогут сделать это быстрее. А если не можешь, то только запутают.

Нужно пилить алгоритм машинного обучения или что-то в этом роде, а знаний у меня нет.

Плохо что нет, хорошо что ты это понимаешь. Чтоб приобрести знания надо учиться. Я бы посоветовал идти в ВУЗ на прикладного математика и информатика по таким запросам. Но бакалавра/специалитета для твоей задачи мало, это надо магистр, кандидат, если серьёзно этим заниматься.

Питон то ещё плюс минус понимаю

Нет конечно. Иначе ты бы не писал при помощи нейронок код на питоне, который не работает.

а как написать собственный (хотя бы простой) алгоритм машинного обучения - нет.

Просто - берёшь и пишешь. Но нужна база - векторная алгебра и геометрия, тензоный анализ, дискретная математика, теория вероятностей, методы оптимизации ну и более специфические дисциплины, в рамках которых рассматриваются нейросети и машинное обучение. Ещё необходимы сопутствующие технологии - SQL, NoSQL базы данных и программирование. Никакой волшебной книжки, которая даст тебе базу для разработки алгоритмов машинного обучения нет - надо учиться и делать это лет 6-8 чтоб какой-то толк был из тебя.

Знаю, что книг по теме вагон и маленькая тележка, я бы их все прочитал, но время немного ограничено, поэтому решил спросить тут.

А это ещё один нужный навык - научиться находить нужные тебе для твоих задач книжки и статьи. Должен придти во время обучения. Вообще то что ты пытаешься сделать, если делать это именно серьёзно в общем виде (поиск дублирующихся по семантическому значению строк) то это уровень кфмн и выше, ниже даже смысла нет пытаться что-то приличное сделать - не выйдет, разве что какие-то готовые решения найти получится. А если упрощённо делать, не по семантике, а по внешнему виду, то хватит каких-то простеньких расстояний левенштейна и иже с ними. Для этого нейронки не нужны и машинного обучения там нет.

А если что-то соображаешь, то кидай код, надо смотреть и думать что ты там пытаешься сделать и что не работает.

Да, мне почему-то думается что ты студент (какая специальность и курс какой). ИМХО ты чего-то перемудрил, даже в МГУ с тебя не будут требовать серьёзной модели для семантического анализа. Дело даже не в том, что у хорошего студента МГУ мозгов не хватит - хватит. А вот вычислительных мощностей не хватит. Тебе по сути нужен полноценный аналог чат гопоты заточенный именно под поиск похожих строк, а это обойдётся бизнесу, ну скажем миллионов в 7 долларов, на то чтоб собрать данные, разработать архитектуру, обучить и заплатить зарплаты всем 100 людям которые будут над этим пыхтеть некоторое время.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Нейросети можно применять когда пишешь код, но для этого ты должен быть умнее чем нейронки. Т.е. если ты без них можешь легко написать код, то они тебе помогут сделать это быстрее. А если не можешь, то только запутают.

Я думаю это нужно бить татухой сразу на лоб выводить всплывающим окном при открытии редактора кода с ИИ-агентом. С кнопкой «Я осознал».

Obezyan
()
Ответ на: комментарий от Obezyan

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

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Зависит от того, что считать дублями.

В данной конкретной задаче это названия компонентов, те тот подход что я описал должен работать.

А если рассматривать ситуацию вообще, то да вы абсолютно правы.

Obezyan
()
Ответ на: комментарий от Irma

Кстати, зачем тебе книга по ИИ, если ИИ сам может тебе все это рассказать?

Перефразирую:

Зачем тебе изображение женщины, если женщина сама может тебе все это показать?

Но зачастую выбирают изображение, с ним проще и быстрее.

Obezyan
()
Ответ на: комментарий от diamond_cat

Подкину немного названий книжек, если нужно ИИ. Про обучение питону я даже не знаю, мне хватило и метанита https://metanit.com/python/ (там кстати есть и по нейросетям статьи)

Стивенс Э., Антига Л., Виман Т. PyTorch. Освещая глубокое обучение.

Ян Лекун. Как учится машина: Революция в области нейронных сетей и глубокого обучения.

Марк Питер Дайзенрот и др. Математика в машинном обучении, 2024 г.

Сергей Марков. Охота на электроовец: большая книга искусственного интеллекта. два тома. 2024-2025 г.

Simon J.D. Prince. Understanding Deep Learning, 2025

anonymous_incognito ★★★★★
()
Последнее исправление: anonymous_incognito (всего исправлений: 1)
Ответ на: комментарий от peregrine

Начну с конца.

Да, мне почему-то думается что ты студент (какая специальность и курс какой). ИМХО ты чего-то перемудрил

Угадал, хаха. УрФУ, второй курс, инженерная специальность. Собственно проект из вуза как предмет. У всех разные, мне и паре других достался этот. Из всей команды хоть что то в компьютерах понимаю только я, мы поняли что взяли кусок, который даже прожевать не сможем, учебная нагрузка по другим предметам была большой, и было сделано решение сделать проект как сможем, лишь бы тройку поставили. В итоге тройку поставили, но осадок остался… Хочется сделать всерьёз, а не на отвали.

Собственно заказчик (один из преподавателей) говорил, что проект для магистрантов вообще. Он же и дал CSV файл. Это экспортированная часть из настоящей базы данных (вроде SAP HANA), т.к. нам доступ к настоящей базе никто не даст. Файл большой, в районе 100 тысяч строк, если правильно помню.

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

А каша гречневая.

diamond_cat
() автор топика

Помнится, к программке neurosolutions (этакая IDE-конструктор для нейросетей) шел хороший встроенный help в виде интерактивной книжки со ссылками прямо в программку. В этой IDE можно было строить сети с разной топологией (а в книжке объяснялись их назначения). Разбирались все запчасти - начиная от support vector machine в петле обратного распространения и до генетического оптимизатора и нечеткой логики на входе. Программка под винду и линковалась с MSVS 6.0 на выходе выплёвывала проект на C++. Но если абстрагироваться от этих нюансов, то она очень удобна как учебный конструктор + книжка.

Paka_RD
()
Ответ на: комментарий от diamond_cat

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

Если это всё понимать буквально, и не предполагать эффекта «испорченного телефона», то ваш т.н. заказчик хочет, чтобы ему пара студентов за две сосиски в тесте и бутылку байкала сделали рабочий проект на сотни тысяч рублей как самый минимум, и это только на оплату разработки прототипа. Потому что, как уже было сказано, именно семантический анализ (опять-таки, если без преувеличений в буквальном смысле) это трындец как сложно и затратно, а с точки зрения бизнеса — очень прибыльно. Потому что можно будет, например, вести складской учёт силами дебилов, которые введут «парочка покрышек чёрных назади жигуля штоб не пачкать сидушку», а система в каталог введёт «Чехол заднего сидения ВАЗ-2101, чёрный, 2 шт.».

Smacker ★★★★★
()
Ответ на: комментарий от Obezyan

Всё так, кроме пункта

Приводим всё к нижнему регистру, убираем спецсимволы, пробелы, заменяем синонимы «резистор = R», «конденсатор = C» и тд.

Я бы сказал иначе: сначала мы должны проанализировать вообще всё лексическое богатство наших данных и отработать эту саму нормализацию. Причём это будет итеративный процесс с постоянным шевелением мозгов, т.к. глазами за раз 100 тыщ наименований не осилить. И на эту работу придётся угрохать большу́ю, если не бо́льшую, часть времени, а от качества её работы будет зависеть всё остальное. Потому что это хорошо, чтобы там всегда было написано именно «конденсатор» и «резистор» — только вот на практике в данных, к которым приложили свои ручки реальные люди, будет зоопарк способов изгаляться над языком, и в т.ч. найдутся «кондёр», «сопротивление», «к.-тор», «р/р», «р.-р», «конд.», «сопр» и «резистар»... ну и конечно просто «1К10±5».

Smacker ★★★★★
()
Ответ на: комментарий от Smacker

По уму - да, вы абсолютно правы. Но в данном случае есть нюанс: у человека базовое непонимание что куда. EDA его просто похоронит.

Я сознательно опустил этап разведочного анализа данных (EDA) и предоставил MVP код который естественно будет работать хуже на реальных данных.

Вот тогда, для улучшения MVP, у него и наступит этап знакомства с EDA, причем это будет наглядно тк код будет сразу показывать изменения. Без опыта очень сложно делать анализ данных не имея работающего кода для тестирования результатов этого самого анализа.

Obezyan
()
Ответ на: комментарий от Obezyan

Справедливости ради, разведывательный анализ CSV файла можно делать в консольке cut-ом, sort-ом, grep-ом и uniq-ом.

Smacker ★★★★★
()

Ты числа складывать и строки конкатенировать тоже нейросетями собрался? Нейросети нужны там, где что-то из чего-то следует, но никто не знает, как именно.

Ну и это, пройди любой базовый курс по Python, а затем гугли средства и приемы под задачу. Когда-то был очень неплохой курс на Coursera от ВШЭ. Может быть, до сих пор есть. Вайб-кодинг - для тех, кто уже умеет кодить.

Vidrele ★★★★★
()
Ответ на: комментарий от diamond_cat

import duckdb

duckdb.execute(«from duckdb.readcsv('inp.csv') into duckdb.writeparquet('blasingifast.parquet')»)

не факт что синтаксис прям точен за подробностями см duckdb.org

100к строк csv это реально ша в терминале секунды - особенно если тот же колоночный паркет той же уткой

а да база структур хранения данных провидется мне нужна тебе (без йода)

qulinxao3 ★☆
()
Ответ на: комментарий от diamond_cat

Я прото напомню пословицу — «кто везёт, на том и едут». Каждый для себя волен решать, будет ли он забесплатно зарабатывать кому-то реальное бабло, или всё-таки о себе подумает. Кстати, очень может оказаться, что у этого самого преподавателя на такую работу грант или подряд какой. Так что он-то денег заработает, а вы от него даже не получите тех сосисок в тесте, о которых я пошутил выше. Я бы лично не стал ничего делать в таких обстоятельствах, потому что живу по принципу «если вам кажется, что вас объегоривают, то вам не кажется». Это типичный сценарий заполучить бесплатное выполнение реальной работы, на манер бесплатных «тестовых заданий» для соискателя, почему-то подозрительно напоминающих задачи из разработки реального проекта.

Smacker ★★★★★
()

В доисторические времена это решалось без нейросетей и такой-то матери.

sparkie ★★★★★
()

поиск дублицирующихся строк в огромной базе

33 года назад у меня была похожая задача - поиск похожих наименований одних и тех же товаров в огромной базе. Я использовал «алгортм Левенштейна». Нет, не сам писал, удалось найти готовую реализацию. Вот статья по теме:

https://habr.com/ru/articles/676858/

Похожие строки отлавливал хорошо,выдавал списком, а там уже операторы разбирались что есть что. Работало на 80286 под DOS, на Си естественно.

watchcat382
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)