{"id":18552020,"url":"https://github.com/bepb/kaggle_watson","last_synced_at":"2025-08-31T10:35:55.947Z","repository":{"id":109797682,"uuid":"443625957","full_name":"BEPb/Kaggle_watson","owner":"BEPb","description":null,"archived":false,"fork":false,"pushed_at":"2022-01-02T20:21:01.000Z","size":1835,"stargazers_count":19,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T14:46:54.684Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BEPb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-01-01T21:20:06.000Z","updated_at":"2024-09-17T13:24:56.000Z","dependencies_parsed_at":"2023-03-30T03:03:18.291Z","dependency_job_id":null,"html_url":"https://github.com/BEPb/Kaggle_watson","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/BEPb/Kaggle_watson","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2FKaggle_watson","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2FKaggle_watson/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2FKaggle_watson/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2FKaggle_watson/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BEPb","download_url":"https://codeload.github.com/BEPb/Kaggle_watson/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BEPb%2FKaggle_watson/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272971407,"owners_count":25024093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T21:11:36.891Z","updated_at":"2025-08-31T10:35:55.924Z","avatar_url":"https://github.com/BEPb.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Наш мозг довольно быстро обрабатывает значение такого предложения.\n\nМы можем предположить:\n\n- Некоторые вещи должны быть правдой: «Вы можете найти правильный ответ в процессе исключения».\n- Другие, которые могут иметь правду: «Идеи, которые невероятны, не невозможны!»\n- И некоторые утверждения явно противоречат друг другу: «Истина в том, что вы исключили как невозможное».\n\n\nОбработка естественного языка (НЛП) стала все более сложной за последние несколько лет. Модели машинного обучения \nпозволяют отвечать на вопросы, извлекать текст, создавать предложения и решать многие другие сложные задачи. Но \nмогут ли машины определять отношения между предложениями, или это все еще остается на усмотрение людей? Если НЛП \nможно применять между предложениями, это может иметь серьезные последствия для проверки фактов, выявления фейковых \nновостей, анализа текста и многого другого.    \n\n### Соревнование:\nЕсли у вас есть два предложения, их можно связать тремя способами: одно может повлечь за собой другое, одно может \nпротиворечить другому или они могут не быть связаны. Вывод естественного языка (NLI) - популярная задача НЛП, \nкоторая включает определение того, как связаны пары предложений (состоящих из предпосылки и гипотезы).   \n\nВаша задача - создать модель NLI, которая присваивает парам посылок и гипотез ярлыки 0, 1 или 2 (соответствующие \nследствию, нейтральности и противоречию). Чтобы было интереснее, обучающий и тестовый набор включает текст на \nпятнадцати разных языках! Вы можете найти более подробную информацию о наборе данных, просмотрев страницу данных.  \n\nСегодня наиболее распространенные подходы к проблемам NLI включают использование встраиваний и преобразователей, \nтаких как BERT. В этом конкурсе мы предоставляем стартовый блокнот, чтобы попробовать свои силы в решении этой \nпроблемы, используя мощь блоков тензорной обработки (TPU). TPU - это мощные аппаратные ускорители, \nспециализирующиеся на задачах глубокого обучения, включая обработку естественного языка. Kaggle бесплатно \nпредоставляет всем пользователям квоту TPU, которую вы можете использовать для изучения этого соревнования. \nОзнакомьтесь с нашей документацией по TPU и плейлистом Kaggle на YouTube для получения дополнительной информации и \nресурсов. \n\n### Модель RoBERTa \n В учебнике для прогнозов используется предварительно обученная модель BERT в сочетании с классификатором. Чтобы\nполучить лучшие результаты, чем учебник, мы будем использовать более крупную модель с той же архитектурой,\nназываемой RoBERTa, эта модель использует в основном в 10 раз больше данных и\nтренируется больше, чем исходная модель.\n\nМодель RoBERTa основан на BERT и изменяет ключевые гиперпараметры, удаляя цель предварительного обучения в следующем \nпредложении и обучая с гораздо более крупными мини-пакетами и скоростями обучения. \n\nХарактеристики модели:\n\n- Эта реализация аналогична BertModel с небольшой настройкой вложений, а также настройкой для предварительно \nобученных моделей Roberta.\n- RoBERTa имеет ту же архитектуру, что и BERT, но использует BPE байтового уровня в качестве токенизатора (как GPT-2) \n  и использует другую схему предварительного обучения.\n- У RoBERTa нет token_type_ids, указывать какой токен какому сегменту не нужно. Просто разделите свои сегменты токеном \nразделения tokenizer.sep_token(или \u003c/s\u003e) \n\n\nBERT использует три типа входных данных: идентификаторы слов ввода, маски ввода и идентификаторы типов ввода.\n\nЭто позволяет модели знать, что посылка и гипотеза являются отдельными предложениями, а также игнорировать любые \nдополнения от токенизатора. \n\nМы добавляем токен [CLS], чтобы обозначить начало входных данных, и токен [SEP], чтобы обозначить разделение между \nпредпосылкой и гипотезой. Нам также нужно заполнить все входы одинакового размера. Для получения дополнительной \nинформации о входах BERT см .: https://huggingface.co/transformers/model_doc/bert.html#tfbertmodel  \n\nЧтобы подготовить наши идентификаторы токенов, которые мы получили с помощью нашей функции encode_sentence(), \nчтобы они стали входными в BERT, мы сначала объединяем список идентификаторов токенов каждого предложения в столбце \nгипотез и предпосылки (помните, что каждое предложение уже разделено токеном [SEP] в конце, который мы добавили выше) \nв один список и добавьте еще один идентификатор токена в самом начале (идентификатор для токена '[CLS]'), который \nобозначает начало. Однако выходной список encode_sentence () будет иметь разную длину для каждого предложения из \nнашего набора данных, что означает, что мы не можем просто построить красивую таблицу из всех этих объединенных \nсписков, чтобы передать их BERT. Вместо этого нам придется добавлять нули в конец каждого списка идентификаторов, \nпока он не достигнет длины самого длинного списка в наборе данных (соответствующего самой длинной паре \nгипотеза / предпосылка). Этот процесс называется заполнением. Таким образом, каждый список идентификаторов будет иметь \nодинаковую длину, и BERT сможет принимать их в качестве входных данных. Это будет указанная выше переменная \n«ID входных слов» и наша первая входная переменная для модели BERT.\n\nОднако нам также необходимо сообщить BERT, какие из идентификаторов в «идентификаторах входных слов» на самом деле \nпринадлежат токенам, которые он должен встраивать, а какие из них следует игнорировать, потому что они просто \nзаполняют. Именно здесь в игру вступают маски ввода: переменная маски ввода имеет тот же размер, что и переменная \nидентификаторов входных слов, но содержит 1 для каждой записи, которая является фактическим идентификатором токена (\nкоторый следует учитывать BERT), и 0 для каждой записи, которая является просто заполнение, которое BERT следует \nигнорировать. Это будет наш второй входной аргумент «маски ввода» для модели BERT.      \n\nНаконец, BERT (но не RoBERTa, потому что он не был обучен предсказанию вероятности того, что предложение B \nпринадлежит предложению A) также должен знать, какой из идентификаторов входных слов принадлежит какому предложению (\nто есть гипотезе или посылке). Мы можем объяснить это BERT, используя упомянутую выше переменную 'идентификаторы \nвходных типов'. Опять же, эта переменная имеет тот же размер, что и переменная идентификаторов входных слов, \nно на этот раз она содержит 1 для каждой записи, принадлежащей предложению B (т. Е. Посылке), и 0 для каждой записи, \nпринадлежащей предложению A (т. Е. гипотеза), включая идентификатор нашего стартового токена для '[CLS]'. \n«Идентификаторы типа ввода» будут нашим третьим и последним входным аргументом для BERT. -      \n\nТеперь мы собираемся закодировать все наши пары посылка / гипотеза для ввода в BERT.\n\n\n\nСначала скачиваем токенизатор.\n- Сначала мы разделим наш текст на токены с помощью собственного токенизатора RoBERTa с использованием AutoTokenizer\nи имени модели, чтобы токенизатор знал, как токенизировать. Это загрузит все необходимые файлы. Эта модель включает\nболее 100 языков, что полезно, поскольку наши данные также содержат несколько языков.\n\nСначала входные текстовые данные будут загружены в модель (после того, как они были преобразованы в токены), которая,\nв свою очередь, выдает вложения слов. Преимущество по сравнению с другими типами вложений состоит в том, что вложения\n BERT (или вложения RoBERTa, потому что это та же самая архитектура) контекстуализированы. Прогнозы с\n контекстуализированными вложениями более точны, чем с неконтекстуализированными встраиваниями.\n\nПосле того, как мы получим вложения для слов в нашем тексте от RoBERTa, мы можем ввести их в классификатор,\nкоторый затем, в свою очередь, вернет метки предсказания 0,1 или 2.\n\nДля начала мы можем использовать предварительно обученную модель. Здесь мы будем использовать многоязычную модель\nBERT от huggingface. Дополнительную информацию о BERT см. На странице\nhttps://github.com/google-research/bert/blob/master/multilingual.md.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbepb%2Fkaggle_watson","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbepb%2Fkaggle_watson","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbepb%2Fkaggle_watson/lists"}