mirror of
https://github.com/Ai-hack-MAGNUM-OPUS/AI.git
synced 2024-09-21 02:28:47 +03:00
1179 lines
122 KiB
Plaintext
1179 lines
122 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"id": "10e636e2-5f38-43cb-adc6-b2f928d61136",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"/home/ubuntu/venv/lib/python3.8/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
|
|||
|
" from .autonotebook import tqdm as notebook_tqdm\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"import torch\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"from transformers import AutoTokenizer, AutoModel\n",
|
|||
|
"from tqdm import tqdm\n",
|
|||
|
"tqdm.pandas()\n",
|
|||
|
"\n",
|
|||
|
"import matplotlib.pyplot as plt\n",
|
|||
|
"import seaborn as sns\n",
|
|||
|
"sns.set()\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"\n",
|
|||
|
"import pandas as pd\n",
|
|||
|
"import docx\n",
|
|||
|
"import os\n",
|
|||
|
"import re\n",
|
|||
|
"\n",
|
|||
|
"device = 'cuda'"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 2,
|
|||
|
"id": "19c1e5b6-30d7-4684-87be-2777cc14006c",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#word preprocessing functions\n",
|
|||
|
"\n",
|
|||
|
"import nltk\n",
|
|||
|
"from nltk.tokenize import word_tokenize\n",
|
|||
|
"\n",
|
|||
|
"from nltk.corpus import stopwords\n",
|
|||
|
"from nltk.stem import SnowballStemmer\n",
|
|||
|
"from nltk.tokenize import word_tokenize\n",
|
|||
|
"\n",
|
|||
|
"russian_stopwords = stopwords.words(\"russian\")\n",
|
|||
|
"\n",
|
|||
|
"russian_stopwords.append('российской')\n",
|
|||
|
"russian_stopwords.append('федерации')\n",
|
|||
|
"russian_stopwords.append('федерального')\n",
|
|||
|
"russian_stopwords.append('настоящих')\n",
|
|||
|
"russian_stopwords.append('соответствии')\n",
|
|||
|
"russian_stopwords.append('также')\n",
|
|||
|
"russian_stopwords.append('рф')\n",
|
|||
|
"russian_stopwords.append('ред')\n",
|
|||
|
"\n",
|
|||
|
"russian_stopwords.append('субсидии')\n",
|
|||
|
"russian_stopwords.append('предоставления')\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"def lowercase(text):\n",
|
|||
|
" return str(text).lower()\n",
|
|||
|
"\n",
|
|||
|
"def clean_symb(text):\n",
|
|||
|
" return re.sub(r'[^\\w]', ' ', text)\n",
|
|||
|
"\n",
|
|||
|
"def clear_token(text):\n",
|
|||
|
" return word_tokenize(text)\n",
|
|||
|
"\n",
|
|||
|
"def clean_stopwords(token):\n",
|
|||
|
" return ' '.join([i for i in token.split(' ') if i not in russian_stopwords])\n",
|
|||
|
"\n",
|
|||
|
"def clean_stem(token):\n",
|
|||
|
" return [st.stem(i) for i in token]\n",
|
|||
|
"\n",
|
|||
|
"### combo 3 prev\n",
|
|||
|
"def make_clean(s):\n",
|
|||
|
" return ' '.join(clean_stem(clean_stopwords(clear_token(s))))"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 3,
|
|||
|
"id": "193b640f-d312-440c-9c89-5cb868132e2c",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"162"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 3,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"#find all docs\n",
|
|||
|
"\n",
|
|||
|
"data_path = './data/Документы/'\n",
|
|||
|
"documents = os.listdir(data_path)\n",
|
|||
|
"documents = [data_path+d for d in documents]\n",
|
|||
|
"len(documents)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 4,
|
|||
|
"id": "f8dfdf00-ef42-411c-b629-a1fb349c5c94",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#load and parse doc functions\n",
|
|||
|
"\n",
|
|||
|
"from nltk.corpus import stopwords\n",
|
|||
|
"from nltk.stem import SnowballStemmer\n",
|
|||
|
"from nltk.tokenize import word_tokenize\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"def get_text(filename):\n",
|
|||
|
" doc = docx.Document(filename)\n",
|
|||
|
" fullText = ''\n",
|
|||
|
" for para in doc.paragraphs:\n",
|
|||
|
" for run in para.runs:\n",
|
|||
|
" fullText+=run.text\n",
|
|||
|
" fullText+='\\n'\n",
|
|||
|
" return fullText\n",
|
|||
|
"\n",
|
|||
|
"def split_text(text):\n",
|
|||
|
" texts, groups = [],[]\n",
|
|||
|
" regt = re.findall(r\"{(.*?)}(.*?){(.*?)}\",text.replace('\\n',''))\n",
|
|||
|
" for t in regt:\n",
|
|||
|
" if t[0]==t[-1]:\n",
|
|||
|
" texts.append(t[1])\n",
|
|||
|
" groups.append(int(t[0]))\n",
|
|||
|
" else:\n",
|
|||
|
" print(t)\n",
|
|||
|
" \n",
|
|||
|
" return texts, groups"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 5,
|
|||
|
"id": "8fdc799a-6ee7-4188-9c70-39b0c11a5833",
|
|||
|
"metadata": {
|
|||
|
"collapsed": true,
|
|||
|
"jupyter": {
|
|||
|
"outputs_hidden": true
|
|||
|
},
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"('36', '42. ', '37')\n",
|
|||
|
"('37', ' (в ред. Правительства РФ от 04.05.2021 N 699) 43. ', '38')\n",
|
|||
|
"('38', ' 48.', '7')\n",
|
|||
|
"('10', '6. ', '24')\n",
|
|||
|
"('24', ' 7. ', '11')\n",
|
|||
|
"('11', '8. ', '10')\n",
|
|||
|
"('13', 'м) ', '10')\n",
|
|||
|
"('10', '(пп. \"о\" в ред. Правительства РФ от 16.08.2021 N 1337)9. ', '13')\n",
|
|||
|
"('13', '(в ред. Правительства РФ от 16.08.2021 N 1337)12. ', '11')\n",
|
|||
|
"('11', ' ', '24')\n",
|
|||
|
"('24', ' ', '17')\n",
|
|||
|
"('17', '14. ', '21')\n",
|
|||
|
"('21', '15. ', '15')\n",
|
|||
|
"('15', '(в ред. Правительства РФ от 16.08.2021 N 1337)16. ', '22')\n",
|
|||
|
"('22', ' 17. ', '21')\n",
|
|||
|
"('21', '18. ', '28')\n",
|
|||
|
"('28', ' ', '12')\n",
|
|||
|
"('12', ' ', '30')\n",
|
|||
|
"('28', '', '30')\n",
|
|||
|
"('30', 'ж) утратил силу. - Правительства РФ от 16.08.2021 N 1337.19. ', '23')\n",
|
|||
|
"('23', ' 20. ', '13')\n",
|
|||
|
"('12', ' 21. ', '13')\n",
|
|||
|
"('13', ' 22. ', '22')\n",
|
|||
|
"('22', '23. ', '11')\n",
|
|||
|
"(' 11', ' 24. ', '11')\n",
|
|||
|
"('11', '25. ', '21')\n",
|
|||
|
"('21', 'ж) утратил силу. - Правительства РФ от 16.08.2021 N 1337.26. ', '24')\n",
|
|||
|
"('24', ' 28. ', '27')\n",
|
|||
|
"('27', ' ', '22')\n",
|
|||
|
"('22', '29. ', '24')\n",
|
|||
|
"('24', ' 31. ', '37')\n",
|
|||
|
"('37', ' (в ред. Правительства РФ от 16.08.2021 N 1337)32. ', '38')\n",
|
|||
|
"('38', ' (в ред. Правительства РФ от 16.08.2021 N 1337)33. ', '35')\n",
|
|||
|
"('2', ' сведения об организационной структуре реализации исследовательской программы, планы по изменению организационно-штатной структуры организации, на базе которой реализуется исследовательская программа, в целях обеспечения эффективной и независимой реализации исследовательской программы; ', '12')\n",
|
|||
|
"('11', ' отказ от участия в конкурсе. ', '15')\n",
|
|||
|
"('21', ' недостоверность информации, содержащейся в представленных организацией документах, указанных в настоящих Правил; ', '2')\n",
|
|||
|
"('38', ' В случае установления в ходе проверок, проведенных Министерством науки и высшего образования Российской Федерации и (или) органом государственного финансового контроля, фактов нарушения целей, условий и порядка предоставления гранта средства гранта в размере, определенном на основании выявленных нарушений, подлежат возврату в доход федерального бюджета: ', '238')\n",
|
|||
|
"('27', 'Результатом предоставления грантов является количество завершенных проектов открытых библиотек, размещенных в открытом доступе в информационно-телекоммуникационной сети \"Интернет\" и предоставляемых любым лицам на условиях безвозмездной бессрочной открытой лицензии, завершенных технологических проектов и проектов по акселерации, по которым завершена акселерационная программа. ', '22')\n",
|
|||
|
"('36', ' при получении кредита по льготной процентной ставке направлять ежеквартально в Министерство строительства и жилищно-коммунального хозяйства Российской Федерации актуальную информацию об имеющихся депозитах и иных финансовых документах. ', '136')\n",
|
|||
|
"('10', 'даты размещения результатов отбора на едином портале и на сайте http://favt.ru/ в сети \"Интернет\", которая не может быть позднее 14-го календарного дня, следующего за днем определения победителя отбора (принятия решения о заключении договора о предоставлении субсидии или об отказе в заключении договора). ', '7')\n",
|
|||
|
"('10', ' наименование производителей, с которыми заключается соглашение, и размер предоставляемой субсидии. ', '11')\n",
|
|||
|
"('37', ' Министерство промышленности и торговли Российской Федерации и органы государственного финансового контроля проводят проверки соблюдения производителем целей, условий и порядка предоставления субсидии, которые предусмотрены настоящими Правилами. ', '35')\n",
|
|||
|
"('30', ' оплата услуг по переводам документов, аудиторских, бухгалтерских, юридических и консультационных услуг, а также патентных и нотариальных услуг, услуг по таможенному оформлению, по проведению экспертиз и получению заключений, связанных с производственной деятельностью и эксплуатацией технического оборудования; ', '33')\n",
|
|||
|
"('11', 'соответствовать следующим требованиям:', '18')\n",
|
|||
|
"('26', 'порядок согласования новых условий соглашения о предоставлении гранта или расторжения соглашения о предоставлении гранта при недостижении согласия по новым условиям в случае уменьшения ранее доведенных до Министерства промышленности и торговли Российской Федерации лимитов бюджетных обязательств, приводящих к невозможности предоставления гранта в размере, определенном в соглашении о предоставлении гранта.', '2')\n",
|
|||
|
"('1', '3. ', '24')\n",
|
|||
|
"('24', '4. ', '10')\n",
|
|||
|
"('10', '5. ', '23')\n",
|
|||
|
"('23', '6. ', '24')\n",
|
|||
|
"('24', '7. ', '19')\n",
|
|||
|
"('19', '8. ', '26')\n",
|
|||
|
"('26', '9. ', '19')\n",
|
|||
|
"('19', '10. ', '38')\n",
|
|||
|
"('38', '11. ', '35')\n",
|
|||
|
"('35', '(п. 11 в ред. Правительства РФ от 21.04.2022 N 723) 12.', '10')\n",
|
|||
|
"('10', '13. ', '26')\n",
|
|||
|
"('26', '14. ', '37')\n",
|
|||
|
"('37', '15. ', '35')\n",
|
|||
|
"('35', '16. ', '19')\n",
|
|||
|
"('19', '17. ', '26')\n",
|
|||
|
"('26', '18. ', '20')\n",
|
|||
|
"('20', '19. ', '16')\n",
|
|||
|
"('16', '20. ', '20')\n",
|
|||
|
"('20', '21. ', '35')\n",
|
|||
|
"('35', '23. ', '24')\n",
|
|||
|
"('24', '24. ', '35')\n",
|
|||
|
"('35', '26. ', '22')\n",
|
|||
|
"('22', '27. ', '19')\n",
|
|||
|
"('19', '28. ', '38')\n",
|
|||
|
"('38', '29. ', '3')\n",
|
|||
|
"('3', '30. ', '38')\n",
|
|||
|
"('38', '31. ', '37')\n",
|
|||
|
"('37', '', '27')\n",
|
|||
|
"('27', '35. ', '37')\n",
|
|||
|
"('37', '37. ', '38')\n",
|
|||
|
"('3', ' формирование и ведение которого осуществляется Министерством финансов Российской Федерации в установленном им порядке при формировании проекта федерального закона о федеральном бюджете (проекта федерального закона о внесении изменений в федеральный закон о федеральном бюджете). ', ' 3')\n",
|
|||
|
"('38', 'Возврат указанной суммы денежных средств осуществляется в порядке, предусмотренном бюджетным законодательством Российской Федерации. ', '35')\n",
|
|||
|
"('24', 'Федеральное агентство по туризму не позднее 10-го рабочего дня со дня принятия решения о заключении соглашения о предоставлении субсидии заключает с организацией указанное соглашение по форме, установленной Министерством финансов Российской Федерации. ', '36')\n",
|
|||
|
"('30', ' оплата услуг по переводам документов, аудиторских, бухгалтерских, юридических и консультационных услуг, а также патентных и нотариальных услуг, услуг по таможенному оформлению, по проведению экспертиз и получению заключений, связанных с производственной деятельностью и эксплуатацией технического оборудования; ', '33')\n",
|
|||
|
"('38', 'на основании требования Федерального агентства по делам молодежи - не позднее 10-го рабочего дня со дня получения получателем гранта указанного требования;', '37')\n",
|
|||
|
"('22', 'предельный размер гранта; ', '24')\n",
|
|||
|
"('38', 'III. Особенности предоставления субсидии в части поддержкипроектов, предусматривающих разработку стандартных образцов(введен Правительства РФ от 14.04.2022 N 653)27. ', '33')\n",
|
|||
|
"('33', '28. ', '5')\n",
|
|||
|
"('5', ' ', '24')\n",
|
|||
|
"('24', 'б) ', '36')\n",
|
|||
|
"('36', 'в) ', '27')\n",
|
|||
|
"('27', 'г) ', '32')\n",
|
|||
|
"('32', 'д) ', '24')\n",
|
|||
|
"('24', 'е) ', '37')\n",
|
|||
|
"('37', ';ж) ', '38')\n",
|
|||
|
"('38', 'з) ', '31')\n",
|
|||
|
"('31', 'и) ', '38')\n",
|
|||
|
"('38', 'к) ', '24')\n",
|
|||
|
"('24', 'л) ', '25')\n",
|
|||
|
"('25', 'м) ', '24')\n",
|
|||
|
"('24', 'н) ', '26')\n",
|
|||
|
"('26', 'о) ', '24')\n",
|
|||
|
"('24', '29. ', '22')\n",
|
|||
|
"('22', '30. ', '30')\n",
|
|||
|
"('30', '31. ', '19')\n",
|
|||
|
"('19', '32. ', '20')\n",
|
|||
|
"('20', '', '21')\n",
|
|||
|
"('21', '', '14')\n",
|
|||
|
"('14', '', '24')\n",
|
|||
|
"('24', '34. ', '27')\n",
|
|||
|
"('27', '35. ', '36')\n",
|
|||
|
"('36', '37. ', '35')\n",
|
|||
|
"('35', 'ж) ', '7')\n",
|
|||
|
"('7', 'з) ', '35')\n",
|
|||
|
"('35', '38. ', '8')\n",
|
|||
|
"('8', '', '10')\n",
|
|||
|
"('10', 'р) ', '17')\n",
|
|||
|
"('17', '39. ', '11')\n",
|
|||
|
"('11', '', '12')\n",
|
|||
|
"('12', '40. ', '19')\n",
|
|||
|
"('19', '41. ', '24')\n",
|
|||
|
"('24', 'б) ', '22')\n",
|
|||
|
"('22', 'г) ', '30')\n",
|
|||
|
"('30', 'д) ', '24')\n",
|
|||
|
"('24', 'е) ', '36')\n",
|
|||
|
"('36', 'з) ', '24')\n",
|
|||
|
"('24', 'и) ', '38')\n",
|
|||
|
"('38', 'к) ', '31')\n",
|
|||
|
"('31', 'л) ', '24')\n",
|
|||
|
"('24', 'о) ', '27')\n",
|
|||
|
"('27', ' ', '38')\n",
|
|||
|
"('38', 'п) ', '24')\n",
|
|||
|
"('24', 'р) ', '26')\n",
|
|||
|
"('26', 'с) ', '24')\n",
|
|||
|
"('24', 'у) ', '38')\n",
|
|||
|
"('38', '42. ', '35')\n",
|
|||
|
"('35', '43. ', '27')\n",
|
|||
|
"('27', '44. ', '29')\n",
|
|||
|
"('29', '', '28')\n",
|
|||
|
"('28', '45. ', '37')\n",
|
|||
|
"('37', '46. ', '38')\n",
|
|||
|
"('20', 'Министерство науки и высшего образования Российской Федерации рассматривает документы, указанные в настоящих Правил, и в 20-дневный срок со дня их поступления принимает решение о заключении соглашения или об отказе в заключении соглашения, о чем уведомляет оператора в течение 5 рабочих дней со дня принятия решения', '19')\n",
|
|||
|
"('19', '(пп. \"ж\" введен Правительства РФ от 30.12.2020 N 2373)7. ', '20')\n",
|
|||
|
"('20', '', '21')\n",
|
|||
|
"('21', '(в ред. Правительства РФ от 30.12.2020 N 2373)8. ', '27')\n",
|
|||
|
"('27', '9. ', '29')\n",
|
|||
|
"('29', ' ', '28')\n",
|
|||
|
"('28', '(п. 9 в ред. Правительства РФ от 30.12.2020 N 2373)10. Утратил силу. - Правительства РФ от 30.12.2020 N 2373.11. ', '36')\n",
|
|||
|
"('36', '12. ', '37')\n",
|
|||
|
"('37', '13. ', '38')\n",
|
|||
|
"('11', ' организация не является иностранным юридическим лицом, а также российским юридическим лицом, в уставном (складочном) капитале которого доля участия иностранных юридических лиц, местом регистрации которых является государство или территория, ', '24')\n",
|
|||
|
"('24', 'включенные в утвержденный Министерством финансов Российской Федерации государств и территорий, предоставляющих льготный налоговый режим налогообложения и (или) не предусматривающих раскрытия и предоставления информации при проведении финансовых операций (офшорные зоны), в совокупности превышает 50 процентов; ', '11')\n",
|
|||
|
"('11) за исключением случаев, если указанные иностранные юридические лица находятся под контролем российских юридических лиц или физических лиц (конечными бенефициарами являются Российская Федерация, российские юридические лица или физические лица), в том числе в случае, если этот контроль осуществляется через иные иностранные юридические лица; {11', 'з) ', '11')\n",
|
|||
|
"('11', '9. ', '35')\n",
|
|||
|
"('35', '11. ', '15')\n",
|
|||
|
"('15', '12. ', '35')\n",
|
|||
|
"('35', '15. ', '19')\n",
|
|||
|
"('19', '', '11')\n",
|
|||
|
"('11', '16. ', '19')\n",
|
|||
|
"('19', '17. ', '20')\n",
|
|||
|
"('20', '', '21')\n",
|
|||
|
"('21', '19. ', '35')\n",
|
|||
|
"('35', '', '22')\n",
|
|||
|
"('22', '20. ', '35')\n",
|
|||
|
"('35', '21. ', '24')\n",
|
|||
|
"('24', '22. ', '26')\n",
|
|||
|
"('26', 'д) ', '25')\n",
|
|||
|
"('25', 'е) ', '26')\n",
|
|||
|
"('26', '23. ', '35')\n",
|
|||
|
"('35', '24. ', '6')\n",
|
|||
|
"('6', '25. ', '22')\n",
|
|||
|
"('22', '26. ', '19')\n",
|
|||
|
"('19', '', '20')\n",
|
|||
|
"('20', '27. ', '35')\n",
|
|||
|
"('35', '28. ', '3')\n",
|
|||
|
"('3', 'а) ', '20')\n",
|
|||
|
"('20', 'б) ', '29')\n",
|
|||
|
"('29', ' ', '28')\n",
|
|||
|
"('28', '29. ', '21')\n",
|
|||
|
"('21', '30. ', '35')\n",
|
|||
|
"('35', '31. ', '36')\n",
|
|||
|
"('36', '34. ', '27')\n",
|
|||
|
"('27', '35. ', '35')\n",
|
|||
|
"('35', '36. ', '37')\n",
|
|||
|
"('37', '37. ', '38')\n",
|
|||
|
"('25', ' Министерство экономического развития Российской Федерации:', '35')\n",
|
|||
|
"('10', 'доменное имя, и (или) сетевой адрес, и (или) указатели страниц сайта в информационно-телекоммуникационной сети \"Интернет\", на котором обеспечивается проведение отбора; ', '24')\n",
|
|||
|
"('15', ' обязательство Фонда о проведении отбора в соответствии с порядком, установленным настоящих Правил; ', '24')\n",
|
|||
|
"('27', 'значения показателей, необходимых для достижения результата предоставления субсидии, указанные в настоящих Правил; ', '24')\n",
|
|||
|
"('10', ' кредитная организация по состоянию на дату не ранее чем за 30 календарных дней до даты подачи заявки на получение субсидии не имеет просроченной задолженности по возврату в федеральный бюджет субсидий, бюджетных инвестиций, предоставленных из федерального бюджета в том числе в соответствии с иными правовыми актами, и иной просроченной (неурегулированной) задолженности по денежным обязательствам перед Российской Федерацией; ', '12')\n",
|
|||
|
"('35', ' включения заемщика, содержащегося в реестре потенциальных заемщиков, в реестр заемщиков устанавливается ', '3')\n",
|
|||
|
"('3', '', '35')\n",
|
|||
|
"('22', ' Размер субсидии (S) по направлениям ее использования рассчитывается по формуле: ', '21')\n",
|
|||
|
"('30', 'Расходы на оплату труда работников, на начисления на выплаты по оплате труда работников в соответствии с законодательством Российской Федерации, а также на иные указанные в настоящих Правил направления расходов не могут превышать 15 процентов размера субсидии.', '3')\n",
|
|||
|
"('22', ' Si_март - размер субсидии i-му российскому аэропорту за март, рублей; ', '221')\n",
|
|||
|
"('где:{22', ' Рмарт - размер расходной ставки аэропорта за март, равный 772 рублям на 1 \"потерянного\" пассажира, руб./пасс.; ', '22')\n",
|
|||
|
"('22', ' Si_март - размер субсидии i-му российскому аэропорту за март, рублей; ', '221')\n",
|
|||
|
"('где:{22', ' Рмарт - размер расходной ставки аэропорта за март, равный 772 рублям на 1 \"потерянного\" пассажира, руб./пасс.; ', '22')\n",
|
|||
|
"('38', 'где: ', '22')\n",
|
|||
|
"('22', '22. ', '38')\n",
|
|||
|
"('36', ' сроки и формы представления отчета оператором о ходе реализации программ по развитию отдельных направлений Национальной технологической инициативы и отчета о расходах, источником финансового обеспечения которых является субсидия, а также отчета о достижении значения результата предоставления субсидии в соответствии с настоящих Правил;', '46')\n",
|
|||
|
"('4', ' цели, условия и порядок предоставления и использования гранта;', '2')\n",
|
|||
|
"('16', ' Отбор проводится образуемой Министерством промышленности и торговли Российской Федерации комиссией по проведению отбора (далее - комиссия). ', '316')\n",
|
|||
|
"('12', ' выписка из Единого государственного реестра юридических лиц, заверенная в установленном порядке (в случае непредставления российской компанией такого документа Министерство промышленности и торговли Российской Федерации запрашивает его самостоятельно); ', '13')\n",
|
|||
|
"('24', ' Основаниями для расторжения соглашения, в том числе расторжения соглашения Министерством промышленности и торговли Российской Федерации в одностороннем порядке, являются: ', '21')\n",
|
|||
|
"('', '15указанных в настоящих Правил, полноту содержащихся в них сведений и направляет их на рассмотрение Комиссии. ', '15')\n",
|
|||
|
"('15', ' заключает с производителями соглашения о предоставлении субсидии в течение 15 рабочих дней со дня окончания проверки, предусмотренной настоящего пункта. ', '35')\n",
|
|||
|
"('35', 'уведомляет об этом производителя и возвращает заявление о включении в реестр получателей субсидии по договорам о реализации, заключенным в 2018 - 2019 годах, и документы, представленные производителем в соответствии с настоящих Правил; ', '15')\n",
|
|||
|
"('7', 'Субсидии в целях осуществления мероприятий по приобретению объектов особо ценного движимого имущества в части транспортных средств. ', '2')\n",
|
|||
|
"('35', 'отсутствие бюджетных ассигнований федерального бюджета, предусмотренных в целях предоставления субсидии.', '38')\n",
|
|||
|
"('28', 'В случае если совокупный размер выплаты за период оплаты не превышает объем лимитов бюджетных обязательств, доведенных до ', '3')\n",
|
|||
|
"('3', ' в соответствии с настоящих Правил, Федеральное агентство по туризму вправе установить очередной период оплаты.', '28')\n",
|
|||
|
"('11', ' основные направления деятельности некоммерческой организации в соответствии с учредительными документами должны соответствовать тематике конкурса, в котором участвует некоммерческая организация; ', '25')\n",
|
|||
|
"('26', ' Соглашение о предоставлении субсидии (дополнительное соглашение к соглашению о предоставлении субсидии, в том числе дополнительное соглашение о расторжении соглашения о предоставлении субсидии) с соблюдением требований о защите государственной тайны заключается', '24')\n",
|
|||
|
"('38', 'В случае если требование, указанное в настоящих Правил, не выполнено в установленный срок, организация возвращает в федеральный бюджет полученные средства на основании: ', '36')\n",
|
|||
|
"('21', 'Основаниями для отказа в предоставлении обществу субсидии являются: ', '23')\n",
|
|||
|
"('27', 'Результатом предоставления субсидии является обеспечение страховой и гарантийной поддержки в отношении проектов, включенных в перечень. ', '28')\n",
|
|||
|
"('11', 'соответствовать следующим требованиям:', '18')\n",
|
|||
|
"('20', 'Перечисление субсидии получателю субсидии осуществляется на казначейский счет для осуществления и отражения операций с денежными средствами юридических лиц, не являющихся участниками бюджетного процесса, бюджетными и автономными учреждениями, открытый в территориальном органе Федерального казначейства, ', '29')\n",
|
|||
|
"('37', 'Федеральное агентство воздушного транспорта осуществляет проверку соблюдения авиакомпанией условий и порядка предоставления субсидий, в том числе в части достижения результата предоставления субсидии, а органы государственного финансового контроля осуществляют проверки в соответствии со и Бюджетного кодекса Российской Федерации.', '7')\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"#load data\n",
|
|||
|
"\n",
|
|||
|
"all_text, all_groups, doc_paths, doc_names = [],[],[],[]\n",
|
|||
|
"for d in documents:\n",
|
|||
|
" if 'ipynb' not in d:\n",
|
|||
|
" text = get_text(d)\n",
|
|||
|
" texts,groups = split_text(text)\n",
|
|||
|
" all_text.extend(texts)\n",
|
|||
|
" all_groups.extend(groups)\n",
|
|||
|
" doc_paths.extend([d for a in range(len(texts))])\n",
|
|||
|
" doc_names.extend([d.split('/')[-1] for a in range(len(texts))])"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 6,
|
|||
|
"id": "1413bdb0-ed8d-453d-9b67-fde0cfacd4e5",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#load documents\n",
|
|||
|
"#apply preprocessing to documents\n",
|
|||
|
"\n",
|
|||
|
"df = pd.DataFrame([doc_paths, doc_names,all_text, all_groups]).T\n",
|
|||
|
"df.columns = ['path','doc','text','type']\n",
|
|||
|
"df['r_text']='r'\n",
|
|||
|
"df['r_text'] = df.text.apply(lowercase)\n",
|
|||
|
"df['r_text'] = df.r_text.apply(clean_symb)\n",
|
|||
|
"df['r_text'] = df.r_text.apply(lambda x:''.join([a for a in x if not a.isdigit()]))\n",
|
|||
|
"df['r_text'] = df.r_text.apply(lambda x:' '.join([a for a in x.split(' ') if len(a)>1]))\n",
|
|||
|
"df['r_text'] = df.r_text.apply(clean_stopwords)\n",
|
|||
|
"df['text_size'] = df['text'].apply(lambda x: len(x.strip()))\n",
|
|||
|
"df['is_text'] = df.r_text.apply(lambda x:x.strip().isdigit())\n",
|
|||
|
"df = df[~df.is_text]\n",
|
|||
|
"df = df[df['text_size']>5]\n",
|
|||
|
"df = df.reset_index(drop=True)\n",
|
|||
|
"df.shape\n",
|
|||
|
"df.type = df.type.astype(int)-1"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 7,
|
|||
|
"id": "1f4d8205-7f3f-430b-ac84-9e19ee913f81",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"правил 3588\n",
|
|||
|
"организации 2263\n",
|
|||
|
"отбора 2042\n",
|
|||
|
"соглашения 1940\n",
|
|||
|
"предоставлении 1747\n",
|
|||
|
"результата 1578\n",
|
|||
|
"гранта 1556\n",
|
|||
|
"министерством 1544\n",
|
|||
|
"дня 1360\n",
|
|||
|
"заявок 1344\n",
|
|||
|
"dtype: int64"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 7,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"#show most popular words in datset\n",
|
|||
|
"\n",
|
|||
|
"all_words = np.hstack([np.array(a) for a in df.r_text.apply(lambda x:[a for a in x.split(' ') if len(a)>0]).values])\n",
|
|||
|
"pd.Series(all_words).value_counts()[:10]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 8,
|
|||
|
"id": "4c22b4c2-9155-4655-bc95-6e3387b28ac4",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#split data to train/test\n",
|
|||
|
"\n",
|
|||
|
"from sklearn.utils import resample\n",
|
|||
|
"from sklearn.model_selection import train_test_split\n",
|
|||
|
"\n",
|
|||
|
"X_data, X_val, y_data, y_val = train_test_split(list(df['r_text']), list(df['type']), test_size=0.1, random_state=42)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 9,
|
|||
|
"id": "eaac3775-7552-49c7-a891-c8ef5cccf6d9",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"import numpy as np\n",
|
|||
|
"import torch\n",
|
|||
|
"from transformers import BertTokenizer, BertForSequenceClassification\n",
|
|||
|
"from torch.utils.data import Dataset, DataLoader\n",
|
|||
|
"from transformers import AdamW, get_linear_schedule_with_warmup\n",
|
|||
|
"\n",
|
|||
|
"from bert_dataset import CustomDataset"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 11,
|
|||
|
"id": "c75236ca-e832-4748-a312-9cc7f7935f51",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#Bert Classifier class\n",
|
|||
|
"\n",
|
|||
|
"class BertClassifier:\n",
|
|||
|
"\n",
|
|||
|
" def __init__(self, model_path, tokenizer_path, n_classes=2, epochs=1, model_save_path='/content/bert.pt'):\n",
|
|||
|
" self.model = BertForSequenceClassification.from_pretrained(model_path)\n",
|
|||
|
" self.tokenizer = BertTokenizer.from_pretrained(tokenizer_path)\n",
|
|||
|
" self.device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n",
|
|||
|
" self.model_save_path=model_save_path\n",
|
|||
|
" self.max_len = 512\n",
|
|||
|
" self.epochs = epochs\n",
|
|||
|
" self.out_features = self.model.bert.encoder.layer[1].output.dense.out_features\n",
|
|||
|
" self.model.classifier = torch.nn.Linear(self.out_features, n_classes)\n",
|
|||
|
" self.model.to(self.device)\n",
|
|||
|
" \n",
|
|||
|
" def preparation(self, X_train, y_train, X_valid, y_valid):\n",
|
|||
|
" # create datasets\n",
|
|||
|
" self.train_set = CustomDataset(X_train, y_train, self.tokenizer)\n",
|
|||
|
" self.valid_set = CustomDataset(X_valid, y_valid, self.tokenizer)\n",
|
|||
|
"\n",
|
|||
|
" # create data loaders\n",
|
|||
|
" self.train_loader = DataLoader(self.train_set, batch_size=8, shuffle=True)\n",
|
|||
|
" self.valid_loader = DataLoader(self.valid_set, batch_size=8, shuffle=True)\n",
|
|||
|
"\n",
|
|||
|
" # helpers initialization\n",
|
|||
|
" self.optimizer = AdamW(self.model.parameters(), lr=2e-5, correct_bias=False)\n",
|
|||
|
" self.scheduler = get_linear_schedule_with_warmup(\n",
|
|||
|
" self.optimizer,\n",
|
|||
|
" num_warmup_steps=0,\n",
|
|||
|
" num_training_steps=len(self.train_loader) * self.epochs\n",
|
|||
|
" )\n",
|
|||
|
" self.loss_fn = torch.nn.CrossEntropyLoss().to(self.device)\n",
|
|||
|
" \n",
|
|||
|
" def fit(self):\n",
|
|||
|
" self.model = self.model.train()\n",
|
|||
|
" losses = []\n",
|
|||
|
" correct_predictions = 0\n",
|
|||
|
"\n",
|
|||
|
" for data in tqdm(self.train_loader):\n",
|
|||
|
" input_ids = data[\"input_ids\"].to(self.device)\n",
|
|||
|
" attention_mask = data[\"attention_mask\"].to(self.device)\n",
|
|||
|
" targets = data[\"targets\"].to(self.device)\n",
|
|||
|
"\n",
|
|||
|
" outputs = self.model(\n",
|
|||
|
" input_ids=input_ids,\n",
|
|||
|
" attention_mask=attention_mask\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" preds = torch.argmax(outputs.logits, dim=1)\n",
|
|||
|
" loss = self.loss_fn(outputs.logits, targets)\n",
|
|||
|
"\n",
|
|||
|
" correct_predictions += torch.sum(preds == targets)\n",
|
|||
|
"\n",
|
|||
|
" losses.append(loss.item())\n",
|
|||
|
" \n",
|
|||
|
" loss.backward()\n",
|
|||
|
" torch.nn.utils.clip_grad_norm_(self.model.parameters(), max_norm=1.0)\n",
|
|||
|
" self.optimizer.step()\n",
|
|||
|
" self.scheduler.step()\n",
|
|||
|
" self.optimizer.zero_grad()\n",
|
|||
|
"\n",
|
|||
|
" train_acc = correct_predictions.double() / len(self.train_set)\n",
|
|||
|
" train_loss = np.mean(losses)\n",
|
|||
|
" return train_acc, train_loss\n",
|
|||
|
" \n",
|
|||
|
" def eval(self):\n",
|
|||
|
" self.model = self.model.eval()\n",
|
|||
|
" losses = []\n",
|
|||
|
" correct_predictions = 0\n",
|
|||
|
"\n",
|
|||
|
" with torch.no_grad():\n",
|
|||
|
" for data in self.valid_loader:\n",
|
|||
|
" input_ids = data[\"input_ids\"].to(self.device)\n",
|
|||
|
" attention_mask = data[\"attention_mask\"].to(self.device)\n",
|
|||
|
" targets = data[\"targets\"].to(self.device)\n",
|
|||
|
"\n",
|
|||
|
" outputs = self.model(\n",
|
|||
|
" input_ids=input_ids,\n",
|
|||
|
" attention_mask=attention_mask\n",
|
|||
|
" )\n",
|
|||
|
"\n",
|
|||
|
" preds = torch.argmax(outputs.logits, dim=1)\n",
|
|||
|
" loss = self.loss_fn(outputs.logits, targets)\n",
|
|||
|
" correct_predictions += torch.sum(preds == targets)\n",
|
|||
|
" losses.append(loss.item())\n",
|
|||
|
" \n",
|
|||
|
" val_acc = correct_predictions.double() / len(self.valid_set)\n",
|
|||
|
" val_loss = np.mean(losses)\n",
|
|||
|
" return val_acc, val_loss\n",
|
|||
|
" \n",
|
|||
|
" def train(self):\n",
|
|||
|
" best_accuracy = 0\n",
|
|||
|
" for epoch in range(self.epochs):\n",
|
|||
|
" print(f'Epoch {epoch + 1}/{self.epochs}')\n",
|
|||
|
" train_acc, train_loss = self.fit()\n",
|
|||
|
" print(f'Train loss {train_loss} accuracy {train_acc}')\n",
|
|||
|
"\n",
|
|||
|
" val_acc, val_loss = self.eval()\n",
|
|||
|
" print(f'Val loss {val_loss} accuracy {val_acc}')\n",
|
|||
|
" print('-' * 10)\n",
|
|||
|
"\n",
|
|||
|
" if val_acc > best_accuracy:\n",
|
|||
|
" torch.save(self.model, self.model_save_path)\n",
|
|||
|
" best_accuracy = val_acc\n",
|
|||
|
"\n",
|
|||
|
" self.model = torch.load(self.model_save_path)\n",
|
|||
|
" \n",
|
|||
|
" def predict(self, text):\n",
|
|||
|
" encoding = self.tokenizer.encode_plus(\n",
|
|||
|
" text,\n",
|
|||
|
" add_special_tokens=True,\n",
|
|||
|
" max_length=self.max_len,\n",
|
|||
|
" return_token_type_ids=False,\n",
|
|||
|
" truncation=True,\n",
|
|||
|
" padding='max_length',\n",
|
|||
|
" return_attention_mask=True,\n",
|
|||
|
" return_tensors='pt',\n",
|
|||
|
" )\n",
|
|||
|
" \n",
|
|||
|
" out = {\n",
|
|||
|
" 'text': text,\n",
|
|||
|
" 'input_ids': encoding['input_ids'].flatten(),\n",
|
|||
|
" 'attention_mask': encoding['attention_mask'].flatten()\n",
|
|||
|
" }\n",
|
|||
|
" \n",
|
|||
|
" input_ids = out[\"input_ids\"].to(self.device)\n",
|
|||
|
" attention_mask = out[\"attention_mask\"].to(self.device)\n",
|
|||
|
" \n",
|
|||
|
" outputs = self.model(\n",
|
|||
|
" input_ids=input_ids.unsqueeze(0),\n",
|
|||
|
" attention_mask=attention_mask.unsqueeze(0)\n",
|
|||
|
" )\n",
|
|||
|
" \n",
|
|||
|
" prediction = torch.argmax(outputs.logits, dim=1).cpu().numpy()[0]\n",
|
|||
|
"\n",
|
|||
|
" return prediction"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 12,
|
|||
|
"id": "38cf183b-a3ee-4ef2-94b9-051bcb8918c7",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Some weights of the model checkpoint at sberbank-ai/ruBert-base were not used when initializing BertForSequenceClassification: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.decoder.weight', 'cls.predictions.decoder.bias', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias']\n",
|
|||
|
"- This IS expected if you are initializing BertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).\n",
|
|||
|
"- This IS NOT expected if you are initializing BertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).\n",
|
|||
|
"Some weights of BertForSequenceClassification were not initialized from the model checkpoint at sberbank-ai/ruBert-base and are newly initialized: ['classifier.weight', 'classifier.bias']\n",
|
|||
|
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"#make bert\n",
|
|||
|
"\n",
|
|||
|
"classifier = BertClassifier(\n",
|
|||
|
" model_path='sberbank-ai/ruBert-base',\n",
|
|||
|
" tokenizer_path='sberbank-ai/ruBert-base',\n",
|
|||
|
" n_classes=39,\n",
|
|||
|
" epochs=10,\n",
|
|||
|
" model_save_path='bert_fit_models/bert.pt'\n",
|
|||
|
")"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 13,
|
|||
|
"id": "2b3a3cb5-1dd5-42aa-9df7-903604ba28c4",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#prepare data to classification\n",
|
|||
|
"classifier.preparation(\n",
|
|||
|
" X_train=list(X_data),\n",
|
|||
|
" y_train=list(y_data),\n",
|
|||
|
" X_valid=list(X_val),\n",
|
|||
|
" y_valid=list(y_val),\n",
|
|||
|
" )"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 13,
|
|||
|
"id": "54dacb80-c43f-47b1-83f9-490ad0d6d176",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Epoch 1/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:31<00:00, 1.33it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 1.6872646148563648 accuracy 0.5666815485681486\n",
|
|||
|
"Val loss 1.412977649804649 accuracy 0.6115892139988525\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 2/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:32<00:00, 1.33it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 1.1436501777863928 accuracy 0.6886918808597488\n",
|
|||
|
"Val loss 1.2984553687616225 accuracy 0.6374067699368904\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 3/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:32<00:00, 1.33it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 0.9005808831667718 accuracy 0.7508131896166848\n",
|
|||
|
"Val loss 1.2479785930946332 accuracy 0.6666666666666666\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 4/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:32<00:00, 1.33it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 0.7234191348244037 accuracy 0.7962242489954717\n",
|
|||
|
"Val loss 1.2792062138062004 accuracy 0.6580608146873207\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 5/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:30<00:00, 1.33it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 0.5877058356572703 accuracy 0.8332164041074048\n",
|
|||
|
"Val loss 1.3536883816464778 accuracy 0.6678141135972461\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 6/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:30<00:00, 1.33it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 0.49206937486923547 accuracy 0.8616620957969259\n",
|
|||
|
"Val loss 1.4424607625248236 accuracy 0.6752725186460126\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 7/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:25<00:00, 1.34it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 0.40955075885392533 accuracy 0.8821353402640475\n",
|
|||
|
"Val loss 1.5361568299250319 accuracy 0.6620768789443487\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 8/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|███████████████████████████████████████| 1960/1960 [24:25<00:00, 1.34it/s]\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"Train loss 0.3543910782568024 accuracy 0.899292046686651\n",
|
|||
|
"Val loss 1.6124461362428895 accuracy 0.6712564543889844\n",
|
|||
|
"----------\n",
|
|||
|
"Epoch 9/10\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
" 58%|██████████████████████▌ | 1132/1960 [14:04<10:16, 1.34it/s]IOPub message rate exceeded.\n",
|
|||
|
"The Jupyter server will temporarily stop sending output\n",
|
|||
|
"to the client in order to avoid crashing it.\n",
|
|||
|
"To change this limit, set the config variable\n",
|
|||
|
"`--ServerApp.iopub_msg_rate_limit`.\n",
|
|||
|
"\n",
|
|||
|
"Current values:\n",
|
|||
|
"ServerApp.iopub_msg_rate_limit=1000.0 (msgs/sec)\n",
|
|||
|
"ServerApp.rate_limit_window=3.0 (secs)\n",
|
|||
|
"\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"#train\n",
|
|||
|
"classifier.train()"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 20,
|
|||
|
"id": "8dece2c7-b3be-4e69-b51b-a5a1b70bfaaf",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#save best model again\n",
|
|||
|
"\n",
|
|||
|
"torch.save(classifier.model,'bert_magnus_opum.pt')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 10,
|
|||
|
"id": "0e3977a9-ddeb-46e1-9b2a-46fc7b31ea1a",
|
|||
|
"metadata": {
|
|||
|
"tags": []
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#load bert and truncate last layer\n",
|
|||
|
"#get the embeddings layer\n",
|
|||
|
"\n",
|
|||
|
"model = torch.load('bert_opossum_best_0.6753.pt')\n",
|
|||
|
"model = model.bert\n",
|
|||
|
"model.to(device)\n",
|
|||
|
"pass\n",
|
|||
|
"\n",
|
|||
|
"#load tokenizer\n",
|
|||
|
"tokenizer = BertTokenizer.from_pretrained('sberbank-ai/ruBert-base')"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 11,
|
|||
|
"id": "defe53ec-baa1-45f8-8d52-74ef2b425828",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#get token and embedding functions\n",
|
|||
|
"\n",
|
|||
|
"def get_token(text):\n",
|
|||
|
" return tokenizer.encode_plus(\n",
|
|||
|
" text,\n",
|
|||
|
" add_special_tokens=True,\n",
|
|||
|
" max_length=512,\n",
|
|||
|
" return_token_type_ids=False,\n",
|
|||
|
" truncation=True,\n",
|
|||
|
" padding='max_length',\n",
|
|||
|
" return_attention_mask=True,\n",
|
|||
|
" return_tensors='pt')\n",
|
|||
|
"\n",
|
|||
|
"def get_embeddings(text):\n",
|
|||
|
" encoding = get_token(text)\n",
|
|||
|
" out = {\n",
|
|||
|
" 'text': text,\n",
|
|||
|
" 'input_ids': encoding['input_ids'].flatten(),\n",
|
|||
|
" 'attention_mask': encoding['attention_mask'].flatten()\n",
|
|||
|
" }\n",
|
|||
|
"\n",
|
|||
|
" input_ids = out[\"input_ids\"].to(device)\n",
|
|||
|
" attention_mask = out[\"attention_mask\"].to(device)\n",
|
|||
|
"\n",
|
|||
|
" outputs = model(\n",
|
|||
|
" input_ids=input_ids.unsqueeze(0),\n",
|
|||
|
" attention_mask=attention_mask.unsqueeze(0)\n",
|
|||
|
" )\n",
|
|||
|
" return outputs[1].cpu().detach().numpy()[0]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 12,
|
|||
|
"id": "14627fdd-fa38-4cb8-b4c0-70a83f22c00e",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stderr",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"100%|█████████████████████████████████████| 17422/17422 [10:11<00:00, 28.48it/s]\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"#get embeddings from text\n",
|
|||
|
"\n",
|
|||
|
"df['emb'] = df.r_text.progress_apply(get_embeddings)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 45,
|
|||
|
"id": "b23c2f54-9533-4fac-a28f-db02f97d4ce6",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#split data again\n",
|
|||
|
"\n",
|
|||
|
"X_full = np.asarray([a for a in df['emb'].values])\n",
|
|||
|
"y_full = df['type'].values.astype(int)\n",
|
|||
|
"\n",
|
|||
|
"X_data, X_val, y_data, y_val = train_test_split(X_full, y_full, test_size=0.1, random_state=42)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 46,
|
|||
|
"id": "142b7f1a-4701-48a0-a801-f275efe683a4",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"## check upsampling data\n",
|
|||
|
"## permutation data\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"np.random.seed(77112)\n",
|
|||
|
"\n",
|
|||
|
"class_size=833\n",
|
|||
|
"X_data_r, y_data_r = [],[]\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"for d in np.unique(y_data):\n",
|
|||
|
" X_data_r.append(resample(X_data[y_data==d],\n",
|
|||
|
" replace=True,\n",
|
|||
|
" n_samples=833,\n",
|
|||
|
" random_state=42))\n",
|
|||
|
" y_data_r.append(np.full([class_size],d))\n",
|
|||
|
"\n",
|
|||
|
"X_data, y_data = np.vstack(X_data_r), np.hstack(y_data_r)\n",
|
|||
|
"\n",
|
|||
|
"permutations = np.random.permutation(len(X_data))\n",
|
|||
|
"\n",
|
|||
|
"X_data, y_data = X_data[permutations], y_data[permutations]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 47,
|
|||
|
"id": "dc89ab58-527d-4691-8ae0-37281426f3e9",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"(32487, 768)"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 47,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"X_data.shape"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 48,
|
|||
|
"id": "565440c4-0f36-4b20-804b-74ea26e03fdc",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0.03843947217441193\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"<AxesSubplot:xlabel='real'>"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 48,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"def classes_plot(y_val,y_pred):\n",
|
|||
|
" vd = pd.DataFrame([y_pred,y_val],index=['pred','real']).T\n",
|
|||
|
" vd_pred_true = vd[vd.pred==vd.real].groupby(by='real').count()\n",
|
|||
|
" vd_pred_all = vd.groupby(by='real').count()\n",
|
|||
|
" vd_pred = pd.concat([vd_pred_true,vd_pred_all-vd_pred_true],axis=1)\n",
|
|||
|
" # vd_pred.false[vd_pred.isna().iloc[:,0]]=vd.real[vd_pred.isna().iloc[:,0]].values\n",
|
|||
|
" vd_pred.columns = ['true','false']\n",
|
|||
|
" #print(vd_pred_all.pred[vd_pred.false.isna().values])\n",
|
|||
|
" #print(vd_pred_true.pred[vd_pred_true[vd_pred.false.isna()]])\n",
|
|||
|
" vd_pred.false[vd_pred.false.isna()]=vd_pred_all.pred[vd_pred.false.isna().values]\n",
|
|||
|
" vd_pred = vd_pred.fillna(0)\n",
|
|||
|
" vd_pred_sum = vd_pred.sum()\n",
|
|||
|
" print(vd_pred_sum.true/(vd_pred_sum.true+vd_pred_sum.false))\n",
|
|||
|
" return vd_pred.plot(kind='bar',stacked=True,color=['#66FF99','#ff6666'],rot=70)\n",
|
|||
|
"\n",
|
|||
|
"classes_plot(y_val, y_pred)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 49,
|
|||
|
"id": "78fc9075-6f7f-442a-addc-42eee1a6d83e",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"0.6523235800344234\n"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"text/plain": [
|
|||
|
"<AxesSubplot:xlabel='real'>"
|
|||
|
]
|
|||
|
},
|
|||
|
"execution_count": 49,
|
|||
|
"metadata": {},
|
|||
|
"output_type": "execute_result"
|
|||
|
},
|
|||
|
{
|
|||
|
"data": {
|
|||
|
"image/png": "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
|
|||
|
"text/plain": [
|
|||
|
"<Figure size 640x480 with 1 Axes>"
|
|||
|
]
|
|||
|
},
|
|||
|
"metadata": {},
|
|||
|
"output_type": "display_data"
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"#fit svc\n",
|
|||
|
"\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"from sklearn.pipeline import make_pipeline\n",
|
|||
|
"from sklearn.preprocessing import StandardScaler\n",
|
|||
|
"from sklearn.metrics import f1_score\n",
|
|||
|
"\n",
|
|||
|
"from sklearn.svm import SVC\n",
|
|||
|
"clf = make_pipeline(StandardScaler(),\n",
|
|||
|
" SVC(gamma='auto'))\n",
|
|||
|
"clf.fit(X_data, y_data)\n",
|
|||
|
"y_pred = clf.predict(X_val)\n",
|
|||
|
"classes_plot(y_val, y_pred)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 36,
|
|||
|
"id": "2e8eeba1-44d6-4036-8413-785cc99bc9c9",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#fit random_forest\n",
|
|||
|
"\n",
|
|||
|
"import numpy as np\n",
|
|||
|
"from sklearn.pipeline import make_pipeline\n",
|
|||
|
"from sklearn.ensemble import RandomForestClassifier\n",
|
|||
|
"from sklearn.metrics import f1_score\n",
|
|||
|
"\n",
|
|||
|
"from sklearn.svm import SVC\n",
|
|||
|
"clf = make_pipeline(RandomForestClassifier(n_jobs=-1))\n",
|
|||
|
"clf.fit(X_data, y_data)\n",
|
|||
|
"y_pred = clf.predict(X_val)\n",
|
|||
|
"classes_plot(y_val, y_pred)"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": null,
|
|||
|
"id": "2cc2f449-c297-4294-a03e-235d76a5ad7f",
|
|||
|
"metadata": {},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"#fit Linear SVC\n",
|
|||
|
"\n",
|
|||
|
"\n",
|
|||
|
"from sklearn.pipeline import make_pipeline\n",
|
|||
|
"from sklearn.naive_bayes import MultinomialNB, ComplementNB\n",
|
|||
|
"from sklearn.metrics import f1_score\n",
|
|||
|
"\n",
|
|||
|
"from sklearn.svm import LinearSVC\n",
|
|||
|
"clf = make_pipeline(LinearSVC(C=1000, penalty='l1', max_iter=500, dual=False))\n",
|
|||
|
"clf.fit(X_data, y_data)\n",
|
|||
|
"y_pred = clf.predict(X_val)\n",
|
|||
|
"classes_plot(y_val, y_pred)"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"kernelspec": {
|
|||
|
"display_name": "hack",
|
|||
|
"language": "python",
|
|||
|
"name": "hack"
|
|||
|
},
|
|||
|
"language_info": {
|
|||
|
"codemirror_mode": {
|
|||
|
"name": "ipython",
|
|||
|
"version": 3
|
|||
|
},
|
|||
|
"file_extension": ".py",
|
|||
|
"mimetype": "text/x-python",
|
|||
|
"name": "python",
|
|||
|
"nbconvert_exporter": "python",
|
|||
|
"pygments_lexer": "ipython3",
|
|||
|
"version": "3.8.10"
|
|||
|
}
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 5
|
|||
|
}
|