ЁЯМР Update translations via Co-op Translator
This commit is contained in:
parent
0301722051
commit
f635cebed9
|
|
@ -0,0 +1,478 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"# рдкреНрд░рд╛рдгреА рддрдЬреНрдЬреНрдЮ рдкреНрд░рдгрд╛рд▓реА рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреЗ\n",
|
||||
"\n",
|
||||
"[AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) рдордзреАрд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдирдореБрдиреНрдпрд╛рдд, рдЖрдкрдг рдХрд╛рд╣реА рд╢рд╛рд░реАрд░рд┐рдХ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╛рдгреА рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзреА рдЬреНрдЮрд╛рди-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдЕрдВрдорд▓рд╛рдд рдЖрдгреВ. рд╣реА рдкреНрд░рдгрд╛рд▓реА рдЦрд╛рд▓реАрд▓ AND-OR рдЭрд╛рдбрд╛рджреНрд╡рд╛рд░реЗ рджрд░реНрд╢рд╡рд┐рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ (рд╣реЗ рд╕рдВрдкреВрд░реНрдг рдЭрд╛рдбрд╛рдЪрд╛ рдПрдХ рднрд╛рдЧ рдЖрд╣реЗ, рдЖрдкрдг рд╕рд╣рдЬрдкрдгреЗ рдЖрдгрдЦреА рдХрд╛рд╣реА рдирд┐рдпрдо рдЬреЛрдбреВ рд╢рдХрддреЛ):\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдорд╛рдЧреАрд▓ рдЕрдиреБрдорд╛рдирд╛рд╕рд╣ рдЖрдордЪреА рд╕реНрд╡рддрдГрдЪреА рддрдЬреНрдЬреНрдЮ рдкреНрд░рдгрд╛рд▓реА рд╢реЗрд▓\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рдЙрддреНрдкрд╛рджрди рдирд┐рдпрдорд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЬреНрдЮрд╛рдирд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзреА рднрд╛рд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдирд┐рдпрдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА Python рд╡рд░реНрдЧрд╛рдВрдЪрд╛ рдХреАрд╡рд░реНрдб рдореНрд╣рдгреВрди рд╡рд╛рдкрд░ рдХрд░реВ. рдореБрдЦреНрдпрддрдГ 3 рдкреНрд░рдХрд╛рд░рдЪреЗ рд╡рд░реНрдЧ рдЕрд╕рддреАрд▓:\n",
|
||||
"* `Ask` рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд╡рд┐рдЪрд╛рд░рд╛рдпрдЪреНрдпрд╛ рдкреНрд░рд╢реНрдирд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ. рдпрд╛рдд рд╕рдВрднрд╛рд╡реНрдп рдЙрддреНрддрд░рд╛рдВрдЪрд╛ рд╕рдВрдЪ рдЕрд╕рддреЛ.\n",
|
||||
"* `If` рдирд┐рдпрдорд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ, рдЖрдгрд┐ рдирд┐рдпрдорд╛рдЪреНрдпрд╛ рд╕рд╛рдордЧреНрд░реА рд╕рд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рдПрдХ рд╕рд┐рдВрдЯреЕрдХреНрдЯрд┐рдХ рд╢реБрдЧрд░ рдЖрд╣реЗ.\n",
|
||||
"* `AND`/`OR` рд╣реЗ рд╡рд░реНрдЧ рдЭрд╛рдбрд╛рдЪреНрдпрд╛ AND/OR рд╢рд╛рдЦрд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗрдд. рддреЗ рдлрдХреНрдд рдЖрддрд▓реНрдпрд╛ рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рдВрдЪреА рдпрд╛рджреА рд╕рд╛рдард╡рддрд╛рдд. рдХреЛрдб рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╕рд░реНрд╡ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд╛рд▓рдХ рд╡рд░реНрдЧ `Content` рдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Ask():\n",
|
||||
" def __init__(self,choices=['y','n']):\n",
|
||||
" self.choices = choices\n",
|
||||
" def ask(self):\n",
|
||||
" if max([len(x) for x in self.choices])>1:\n",
|
||||
" for i,x in enumerate(self.choices):\n",
|
||||
" print(\"{0}. {1}\".format(i,x),flush=True)\n",
|
||||
" x = int(input())\n",
|
||||
" return self.choices[x]\n",
|
||||
" else:\n",
|
||||
" print(\"/\".join(self.choices),flush=True)\n",
|
||||
" return input()\n",
|
||||
"\n",
|
||||
"class Content():\n",
|
||||
" def __init__(self,x):\n",
|
||||
" self.x=x\n",
|
||||
" \n",
|
||||
"class If(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class AND(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class OR(Content):\n",
|
||||
" pass"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдордЪреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реАрдордзреНрдпреЗ, рдХрд╛рд░реНрдпрд░рдд рд╕реНрдореГрддреАрдордзреНрдпреЗ **рдЧреБрдгрдзрд░реНрдо-рдореВрд▓реНрдп рдЬреЛрдбреНрдпрд╛** рдореНрд╣рдгреВрди **рддрдереНрдпрд╛рдВрдЪреА** рдпрд╛рджреА рдЕрд╕реЗрд▓. рдЬреНрдЮрд╛рдирдХреЛрд╢рд╛рд▓рд╛ рдПрдХ рдореЛрдард╛ рд╢рдмреНрджрдХреЛрд╢ рдореНрд╣рдгреВрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рдпреЗрдИрд▓, рдЬреЛ рдХреНрд░рд┐рдпрд╛ (рдХрд╛рд░реНрдпрд░рдд рд╕реНрдореГрддреАрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛рд╡рдпрд╛рдЪреНрдпрд╛ рдирд╡реАрди рддрдереНрдпреЗ) рдЕрдЯреАрдВрд╢реА рдирдХрд╛рд╢рд┐рдд рдХрд░рддреЛ, рдЬреНрдпрд╛ AND-OR рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдореНрд╣рдгреВрди рд╡реНрдпрдХреНрдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рддрд╕реЗрдЪ, рдХрд╛рд╣реА рддрдереНрдпреЗ `рд╡рд┐рдЪрд╛рд░рд▓реА` рдЬрд╛рдК рд╢рдХрддрд╛рдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rules = {\n",
|
||||
" 'default': Ask(['y','n']),\n",
|
||||
" 'color' : Ask(['red-brown','black and white','other']),\n",
|
||||
" 'pattern' : Ask(['dark stripes','dark spots']),\n",
|
||||
" 'mammal': If(OR(['hair','gives milk'])),\n",
|
||||
" 'carnivor': If(OR([AND(['sharp teeth','claws','forward-looking eyes']),'eats meat'])),\n",
|
||||
" 'ungulate': If(['mammal',OR(['has hooves','chews cud'])]),\n",
|
||||
" 'bird': If(OR(['feathers',AND(['flies','lies eggs'])])),\n",
|
||||
" 'animal:monkey' : If(['mammal','carnivor','color:red-brown','pattern:dark spots']),\n",
|
||||
" 'animal:tiger' : If(['mammal','carnivor','color:red-brown','pattern:dark stripes']),\n",
|
||||
" 'animal:giraffe' : If(['ungulate','long neck','long legs','pattern:dark spots']),\n",
|
||||
" 'animal:zebra' : If(['ungulate','pattern:dark stripes']),\n",
|
||||
" 'animal:ostrich' : If(['bird','long nech','color:black and white','cannot fly']),\n",
|
||||
" 'animal:pinguin' : If(['bird','swims','color:black and white','cannot fly']),\n",
|
||||
" 'animal:albatross' : If(['bird','flies well'])\n",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдмреЕрдХрд╡рд░реНрдб рдЗрдирдлрд░рдиреНрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `Knowledgebase` рдирд╛рд╡рд╛рдЪрд╛ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ. рд╣рд╛ рд╡рд░реНрдЧ рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдХрд░реЗрд▓:\n",
|
||||
"* рдХрд╛рд░реНрдпрд░рдд `memory` - рдПрдХ рдбрд┐рдХреНрд╢рдирд░реА рдЬреА рдЧреБрдгрдзрд░реНрдорд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдореВрд▓реНрдпрд╛рдВрд╢реА рдирдХрд╛рд╢рд┐рдд рдХрд░рддреЗ\n",
|
||||
"* `rules` - рд╡рд░реАрд▓рдкреНрд░рдорд╛рдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рддреАрд▓ рдЬреНрдЮрд╛рдирднрд╛рдВрдбрд╛рд░ рдирд┐рдпрдо\n",
|
||||
"\n",
|
||||
"рдореБрдЦреНрдп рджреЛрди рдкрджреНрдзрддреА рдЖрд╣реЗрдд:\n",
|
||||
"* `get` - рдПрдЦрд╛рджреНрдпрд╛ рдЧреБрдгрдзрд░реНрдорд╛рдЪреЗ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЗрдирдлрд░рдиреНрд╕ рдХрд░рдгреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, `get('color')` рд╣реЗ рд░рдВрдЧрд╛рдЪреНрдпрд╛ рд╕реНрд▓реЙрдЯрдЪреЗ рдореВрд▓реНрдп рдорд┐рд│рд╡реЗрд▓ (рдЬрд░ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓ рддрд░ рд╡рд┐рдЪрд╛рд░реЗрд▓ рдЖрдгрд┐ рдирдВрддрд░рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдХрд╛рд░реНрдпрд░рдд рдореЗрдорд░реАрдордзреНрдпреЗ рдореВрд▓реНрдп рд╕рд╛рдард╡реЗрд▓). рдЬрд░ рдЖрдкрдг `get('color:blue')` рд╡рд┐рдЪрд╛рд░рд▓реЗ, рддрд░ рддреЗ рд░рдВрдЧ рд╡рд┐рдЪрд╛рд░реЗрд▓ рдЖрдгрд┐ рдирдВрддрд░ рд░рдВрдЧрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд `y`/`n` рдореВрд▓реНрдп рдкрд░рдд рдХрд░реЗрд▓.\n",
|
||||
"* `eval` - рдкреНрд░рддреНрдпрдХреНрд╖ рдЗрдирдлрд░рдиреНрд╕ рдХрд░рддреЗ, рдореНрд╣рдгрдЬреЗ AND/OR рдЯреНрд░реА рдЯреНрд░реЕрд╡реНрд╣рд░реНрд╕ рдХрд░рддреЗ, рдЙрдк-рд▓рдХреНрд╖реНрдпрд╛рдВрдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ, рдЗрддреНрдпрд╛рджреА.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class KnowledgeBase():\n",
|
||||
" def __init__(self,rules):\n",
|
||||
" self.rules = rules\n",
|
||||
" self.memory = {}\n",
|
||||
" \n",
|
||||
" def get(self,name):\n",
|
||||
" if ':' in name:\n",
|
||||
" k,v = name.split(':')\n",
|
||||
" vv = self.get(k)\n",
|
||||
" return 'y' if v==vv else 'n'\n",
|
||||
" if name in self.memory.keys():\n",
|
||||
" return self.memory[name]\n",
|
||||
" for fld in self.rules.keys():\n",
|
||||
" if fld==name or fld.startswith(name+\":\"):\n",
|
||||
" # print(\" + proving {}\".format(fld))\n",
|
||||
" value = 'y' if fld==name else fld.split(':')[1]\n",
|
||||
" res = self.eval(self.rules[fld],field=name)\n",
|
||||
" if res!='y' and res!='n' and value=='y':\n",
|
||||
" self.memory[name] = res\n",
|
||||
" return res\n",
|
||||
" if res=='y':\n",
|
||||
" self.memory[name] = value\n",
|
||||
" return value\n",
|
||||
" # field is not found, using default\n",
|
||||
" res = self.eval(self.rules['default'],field=name)\n",
|
||||
" self.memory[name]=res\n",
|
||||
" return res\n",
|
||||
" \n",
|
||||
" def eval(self,expr,field=None):\n",
|
||||
" # print(\" + eval {}\".format(expr))\n",
|
||||
" if isinstance(expr,Ask):\n",
|
||||
" print(field)\n",
|
||||
" return expr.ask()\n",
|
||||
" elif isinstance(expr,If):\n",
|
||||
" return self.eval(expr.x)\n",
|
||||
" elif isinstance(expr,AND) or isinstance(expr,list):\n",
|
||||
" expr = expr.x if isinstance(expr,AND) else expr\n",
|
||||
" for x in expr:\n",
|
||||
" if self.eval(x)=='n':\n",
|
||||
" return 'n'\n",
|
||||
" return 'y'\n",
|
||||
" elif isinstance(expr,OR):\n",
|
||||
" for x in expr.x:\n",
|
||||
" if self.eval(x)=='y':\n",
|
||||
" return 'y'\n",
|
||||
" return 'n'\n",
|
||||
" elif isinstance(expr,str):\n",
|
||||
" return self.get(expr)\n",
|
||||
" else:\n",
|
||||
" print(\"Unknown expr: {}\".format(expr))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЖрдкрд▓реЗ рдкреНрд░рд╛рдгреА рдЬреНрдЮрд╛рдирдХреЛрд╢ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛ рдЖрдгрд┐ рд╕рд▓реНрд▓рд╛рдорд╕рд▓рдд рдХрд░реВрдпрд╛. рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░реЗрд▓. рддреБрдореНрд╣реА `y`/`n` рдЯрд╛рдЗрдк рдХрд░реВрди рд╣реЛрдп-рдирд╛рд╣реА рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрдК рд╢рдХрддрд╛, рдХрд┐рдВрд╡рд╛ рд▓рд╛рдВрдм рдмрд╣реБрдкрд░реНрдпрд╛рдпреА рдЙрддреНрддрд░рд╛рдВрд╕рд╛рдареА рд╕рдВрдЦреНрдпрд╛ (0..N) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрди рдЙрддреНрддрд░ рджреЗрдК рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"hair\n",
|
||||
"y/n\n",
|
||||
"sharp teeth\n",
|
||||
"y/n\n",
|
||||
"claws\n",
|
||||
"y/n\n",
|
||||
"forward-looking eyes\n",
|
||||
"y/n\n",
|
||||
"color\n",
|
||||
"0. red-brown\n",
|
||||
"1. black and white\n",
|
||||
"2. other\n",
|
||||
"has hooves\n",
|
||||
"y/n\n",
|
||||
"long neck\n",
|
||||
"y/n\n",
|
||||
"long legs\n",
|
||||
"y/n\n",
|
||||
"pattern\n",
|
||||
"0. dark stripes\n",
|
||||
"1. dark spots\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'giraffe'"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"kb = KnowledgeBase(rules)\n",
|
||||
"kb.get('animal')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## PyKnow рд╡рд╛рдкрд░реВрди рдлреЙрд░рд╡рд░реНрдб рдЗрдирдлрд░рдиреНрд╕\n",
|
||||
"\n",
|
||||
"рдкреБрдвреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЬреНрдЮрд╛рди рд╕рд╛рджрд░реАрдХрд░рдгрд╛рд╕рд╛рдареАрдЪреНрдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрдВрдкреИрдХреА рдПрдХ, [PyKnow](https://github.com/buguroo/pyknow/) рд╡рд╛рдкрд░реВрди рдлреЙрд░рд╡рд░реНрдб рдЗрдирдлрд░рдиреНрд╕ рдХрд╕реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВ. **PyKnow** рд╣реА Python рдордзреНрдпреЗ рдлреЙрд░рд╡рд░реНрдб рдЗрдирдлрд░рдиреНрд╕ рд╕рд┐рд╕реНрдЯреАрдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареАрдЪреА рд▓рд╛рдпрдмреНрд░рд░реА рдЖрд╣реЗ, рдЬреА рдЬреБрдиреНрдпрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░рдгрд╛рд▓реА [CLIPS](http://www.clipsrules.net/index.html) рд╕рд╛рд░рдЦреА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг рд╕реНрд╡рддрдГ рдлреЙрд░рд╡рд░реНрдб рдЪреЗрдирд┐рдВрдЧ рдЕрдВрдорд▓рд╛рдд рдЖрдгреВ рд╢рдХрд▓реЛ рдЕрд╕рддреЛ, рдЖрдгрд┐ рддреНрдпрд╛рдд рдлрд╛рд░рд╕реЗ рдЕрдбрдЪрдгреАрд╣реА рдЖрд▓реНрдпрд╛ рдирд╕рддреНрдпрд╛, рдкрдг рд╕рд╛рдзреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рд╣рд╕рд╛ рдлрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдирд╕рддрд╛рдд. рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рдирд┐рдпрдо рдЬреБрд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо [Rete](https://en.wikipedia.org/wiki/Rete_algorithm) рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Collecting git+https://github.com/buguroo/pyknow/\n",
|
||||
" Cloning https://github.com/buguroo/pyknow/ to /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Running command git clone --filter=blob:none --quiet https://github.com/buguroo/pyknow/ /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Resolved https://github.com/buguroo/pyknow/ to commit 48818336f2e9a126f1964f2d8dc22d37ff800fe8\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting frozendict==1.2\n",
|
||||
" Using cached frozendict-1.2.tar.gz (2.6 kB)\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting schema==0.6.7\n",
|
||||
" Using cached schema-0.6.7-py2.py3-none-any.whl (14 kB)\n",
|
||||
"Building wheels for collected packages: pyknow, frozendict\n",
|
||||
" Building wheel for pyknow (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for pyknow: filename=pyknow-1.7.0-py3-none-any.whl size=34228 sha256=b7de5b09292c4007667c72f69b98d5a1b5f7324ff15f9dd8e077c3d5f7aade42\n",
|
||||
" Stored in directory: /tmp/pip-ephem-wheel-cache-k7jpave7/wheels/81/1a/d3/f6c15dbe1955598a37755215f2a10449e7418500d7bd4b9508\n",
|
||||
" Building wheel for frozendict (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for frozendict: filename=frozendict-1.2-py3-none-any.whl size=3148 sha256=2863d55c240d2409cddf05ccfe600591f8478681549fc97555c47c90dc6bb160\n",
|
||||
" Stored in directory: /home/rg/.cache/pip/wheels/49/ac/f8/cb8120244e710bdb479c86198b03c7b08c3c2d3d2bf448fd6e\n",
|
||||
"Successfully built pyknow frozendict\n",
|
||||
"Installing collected packages: schema, frozendict, pyknow\n",
|
||||
"Successfully installed frozendict-1.2 pyknow-1.7.0 schema-0.6.7\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install git+https://github.com/buguroo/pyknow/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pyknow import *\n",
|
||||
"#import pyknow"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдЖрдордЪреА рдкреНрд░рдгрд╛рд▓реА `KnowledgeEngine` рдЪреЗ рдЙрдкрд╡рд░реНрдЧ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд░реНрдЧ рдореНрд╣рдгреВрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ. рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо `@Rule` рдпрд╛ рдЕреЕрдиреЛрдЯреЗрд╢рдирд╕рд╣ рд╕реНрд╡рддрдВрддреНрд░ рдлрдВрдХреНрд╢рдирджреНрд╡рд╛рд░реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдЬреЛ рдирд┐рдпрдо рдХрдзреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдИрд▓ рд╣реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЛ. рдирд┐рдпрдорд╛рдЪреНрдпрд╛ рдЖрдд, рдЖрдореНрд╣реА `declare` рдлрдВрдХреНрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдирд╡реАрди рддрдереНрдпреЗ рдЬреЛрдбреВ рд╢рдХрддреЛ, рдЖрдгрд┐ рддреА рддрдереНрдпреЗ рдЬреЛрдбрд▓реНрдпрд╛рдиреЗ рдкреБрдвреАрд▓ рдЕрдиреБрдорд╛рди рдЗрдВрдЬрд┐рдирджреНрд╡рд╛рд░реЗ рдЖрдгрдЦреА рдХрд╛рд╣реА рдирд┐рдпрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Animals(KnowledgeEngine):\n",
|
||||
" @Rule(OR(\n",
|
||||
" AND(Fact('sharp teeth'),Fact('claws'),Fact('forward looking eyes')),\n",
|
||||
" Fact('eats meat')))\n",
|
||||
" def cornivor(self):\n",
|
||||
" self.declare(Fact('carnivor'))\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('hair'),Fact('gives milk')))\n",
|
||||
" def mammal(self):\n",
|
||||
" self.declare(Fact('mammal'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),\n",
|
||||
" OR(Fact('has hooves'),Fact('chews cud')))\n",
|
||||
" def hooves(self):\n",
|
||||
" self.declare('ungulate')\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('feathers'),AND(Fact('flies'),Fact('lays eggs'))))\n",
|
||||
" def bird(self):\n",
|
||||
" self.declare('bird')\n",
|
||||
" \n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def monkey(self):\n",
|
||||
" self.declare(Fact(animal='monkey'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def tiger(self):\n",
|
||||
" self.declare(Fact(animal='tiger'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('long legs'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def giraffe(self):\n",
|
||||
" self.declare(Fact(animal='giraffe'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def zebra(self):\n",
|
||||
" self.declare(Fact(animal='zebra'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def straus(self):\n",
|
||||
" self.declare(Fact(animal='ostrich'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('swims'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def pinguin(self):\n",
|
||||
" self.declare(Fact(animal='pinguin'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('flies well'))\n",
|
||||
" def albatros(self):\n",
|
||||
" self.declare(Fact(animal='albatross'))\n",
|
||||
" \n",
|
||||
" @Rule(Fact(animal=MATCH.a))\n",
|
||||
" def print_result(self,a):\n",
|
||||
" print('Animal is {}'.format(a))\n",
|
||||
" \n",
|
||||
" def factz(self,l):\n",
|
||||
" for x in l:\n",
|
||||
" self.declare(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдПрдХрджрд╛ рдЖрдкрдг рдЬреНрдЮрд╛рдирдХреЛрд╢ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓рд╛ рдХреА, рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдХрд╛рд░реНрдпрд░рдд рд╕реНрдореГрддреАрдд рдХрд╛рд╣реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрдереНрдпреЗ рднрд░рддреЛ рдЖрдгрд┐ рдирдВрддрд░ `run()` рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░реВрди рдЕрдиреБрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЛ. рдкрд░рд┐рдгрд╛рдореА, рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рдирд╡реАрди рдЕрдиреБрдорд╛рдирд┐рдд рддрдереНрдпреЗ рдХрд╛рд░реНрдпрд░рдд рд╕реНрдореГрддреАрдд рдЬреЛрдбрд▓реА рдЬрд╛рддрд╛рдд, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рд╛рдгреНрдпрд╛рдмрджреНрджрд▓рдЪреЗ рдЕрдВрддрд┐рдо рддрдереНрдп рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ (рдЬрд░ рдЖрдкрдг рд╕рд░реНрд╡ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрдереНрдпреЗ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рд╕реЗрдЯ рдХреЗрд▓реА рдЕрд╕рддреАрд▓ рддрд░).\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Animal is tiger\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"FactList([(0, InitialFact()),\n",
|
||||
" (1, Fact(color='red-brown')),\n",
|
||||
" (2, Fact(pattern='dark stripes')),\n",
|
||||
" (3, Fact('sharp teeth')),\n",
|
||||
" (4, Fact('claws')),\n",
|
||||
" (5, Fact('forward looking eyes')),\n",
|
||||
" (6, Fact('gives milk')),\n",
|
||||
" (7, Fact('mammal')),\n",
|
||||
" (8, Fact('carnivor')),\n",
|
||||
" (9, Fact(animal='tiger'))])"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"ex1 = Animals()\n",
|
||||
"ex1.reset()\n",
|
||||
"ex1.factz([\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'),\n",
|
||||
" Fact('sharp teeth'),\n",
|
||||
" Fact('claws'),\n",
|
||||
" Fact('forward looking eyes'),\n",
|
||||
" Fact('gives milk')])\n",
|
||||
"ex1.run()\n",
|
||||
"ex1.facts"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"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.11.2"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "ab2bd97b0453415b89a469284609a8ce",
|
||||
"translation_date": "2025-08-28T08:34:45+00:00",
|
||||
"source_file": "lessons/2-Symbolic/Animals.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,593 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"# рдХреБрдЯреБрдВрдм рд╕рдВрдмрдВрдзрд╛рдВрдЪреЗ рдСрдВрдЯреЛрд▓реЙрдЬреА\n",
|
||||
"\n",
|
||||
"рд╣рд╛ рдЙрджрд╛рд╣рд░рдг [AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) рдЪрд╛ рдПрдХ рднрд╛рдЧ рдЖрд╣реЗ, рдЖрдгрд┐ [рдпрд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ](https://habr.com/post/270857/) рджреНрд╡рд╛рд░реЗ рдкреНрд░реЗрд░рд┐рдд рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдорд▓рд╛ рдиреЗрд╣рдореАрдЪ рдХреБрдЯреБрдВрдмрд╛рддреАрд▓ рд▓реЛрдХрд╛рдВрдордзреАрд▓ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рд╕рдВрдмрдВрдз рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреЗ рдХрдареАрдг рд╡рд╛рдЯрддреЗ. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдкрдг рдХреБрдЯреБрдВрдм рд╕рдВрдмрдВрдз рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгрд╛рд░реЗ рдСрдВрдЯреЛрд▓реЙрдЬреА рдЖрдгрд┐ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рдВрд╢рд╛рд╡рд│ рдШреЗрдК, рдЖрдгрд┐ рдирдВрддрд░ рдЖрдкреЛрдЖрдк рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдвреВрди рд╕рд░реНрд╡ рдирд╛рддреЗрд╡рд╛рдИрдХ рд╢реЛрдзрдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рджрд╛рдЦрд╡реВ.\n",
|
||||
"\n",
|
||||
"### рд╡рдВрд╢рд╛рд╡рд│ рдорд┐рд│рд╡рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, рдЖрдкрдг [Romanov Tsar Family](https://en.wikipedia.org/wiki/House_of_Romanov) рдЪреА рд╡рдВрд╢рд╛рд╡рд│ рдШреЗрдК. рдХреБрдЯреБрдВрдм рд╕рдВрдмрдВрдзрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд╡рд░реВрдк [GEDCOM](https://en.wikipedia.org/wiki/GEDCOM) рдЖрд╣реЗ. рдЖрдкрдг Romanov рдХреБрдЯреБрдВрдмрд╛рдЪреА рд╡рдВрд╢рд╛рд╡рд│ GEDCOM рд╕реНрд╡рд░реВрдкрд╛рдд рдШреЗрдК:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"0 HEAD\n",
|
||||
"1 CHAR UTF8\n",
|
||||
"1 GEDC\n",
|
||||
"2 VERS 5.5\n",
|
||||
"0 @0@ INDI\n",
|
||||
"1 NAME Mihail Fedorovich /Romanov/\n",
|
||||
"1 SEX M\n",
|
||||
"1 BIRT\n",
|
||||
"2 DATE 1613\n",
|
||||
"1 DEAT \n",
|
||||
"2 DATE 1645\n",
|
||||
"1 FAMS @41@\n",
|
||||
"0 @1@ INDI\n",
|
||||
"1 NAME Evdokija Lukjanovna /Streshneva/\n",
|
||||
"1 SEX F\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!head -15 data/tsars.ged"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"GEDCOM рдлрд╛рдЗрд▓ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `python-gedcom` рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Collecting python-gedcom\n",
|
||||
" Downloading python_gedcom-1.0.0-py2.py3-none-any.whl (35 kB)\n",
|
||||
"Installing collected packages: python-gedcom\n",
|
||||
"Successfully installed python-gedcom-1.0.0\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install python-gedcom"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣реА рд▓рд╛рдпрдмреНрд░рд░реА рдлрд╛рдЗрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧрд╕рдВрдмрдВрдзреА рдХрд╛рд╣реА рддрд╛рдВрддреНрд░рд┐рдХ рд╕рдорд╕реНрдпрд╛ рджреВрд░ рдХрд░рддреЗ, рдкрд░рдВрддреБ рддрд░реАрд╣реА рддреА рдЭрд╛рдбрд╛рддреАрд▓ рд╕рд░реНрд╡ рд╡реНрдпрдХреНрддреА рдЖрдгрд┐ рдХреБрдЯреБрдВрдмрд╛рдВрдкрд░реНрдпрдВрдд рдЦреВрдкрдЪ рд▓реЛ-рд▓реЗрд╡реНрд╣рд▓ рдкреНрд░рд╡реЗрд╢ рджреЗрддреЗ. рдпреЗрдереЗ рдЖрдкрдг рдлрд╛рдЗрд▓ рдХрд╢реА рдкрд╛рд░реНрд╕ рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рд╕рд░реНрд╡ рд╡реНрдпрдХреНрддреАрдВрдЪреА рдпрд╛рджреА рдХрд╢реА рджрд╛рдЦрд╡реВ рд╢рдХрддреЛ рддреЗ рджрд┐рд▓реЗ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from gedcom.parser import Parser\n",
|
||||
"from gedcom.element.individual import IndividualElement\n",
|
||||
"from gedcom.element.family import FamilyElement\n",
|
||||
"g = Parser()\n",
|
||||
"g.parse_file('data/tsars.ged')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"scrolled": true,
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[('@0@', ('Mihail Fedorovich', 'Romanov')),\n",
|
||||
" ('@1@', ('Evdokija Lukjanovna', 'Streshneva')),\n",
|
||||
" ('@2@', ('Aleksej Mihajlovich', 'Romanov')),\n",
|
||||
" ('@3@', ('Marija Ilinichna', 'Miloslavskaja')),\n",
|
||||
" ('@4@', ('Natalja Kirillovna', 'Naryshkina')),\n",
|
||||
" ('@5@', ('Marfa Matveevna', 'Apraksina')),\n",
|
||||
" ('@6@', ('Fedor Alekseevich', 'Romanov')),\n",
|
||||
" ('@7@', ('Sofja Aleksevna', 'Romanova')),\n",
|
||||
" ('@8@', ('Ivan V Alekseevich', 'Romanov')),\n",
|
||||
" ('@9@', ('Praskovja Fedorovna', 'Saltykova')),\n",
|
||||
" ('@10@', ('Ekaterina Ivanovna', 'Romanova')),\n",
|
||||
" ('@11@', ('Anna Ivanovna', 'Romanova')),\n",
|
||||
" ('@12@', ('Fridrih Vilgelm', 'Kurlandskij')),\n",
|
||||
" ('@13@', ('Karl Leopold', 'Meklenburg-Shverinskij')),\n",
|
||||
" ('@14@', ('Anna Leopoldovna', 'Meklenburg-Shverinskaja')),\n",
|
||||
" ('@15@', ('Anton Ulrih', 'Braunshvejg-Volfenbjuttelskij')),\n",
|
||||
" ('@16@', ('Ivan VI Antonovich', 'Braunshvejg-Volfenbjuttelskij')),\n",
|
||||
" ('@17@', ('Petr I Alekseevich', 'Romanov')),\n",
|
||||
" ('@18@', ('Evdokija Fedorovna', 'Lopuhina')),\n",
|
||||
" ('@19@', ('Ekaterina I Alekseevna', 'Mihajlova')),\n",
|
||||
" ('@20@', ('Aleksej Petrovich', 'Romanov')),\n",
|
||||
" ('@21@', ('Sharlotta Kristina', 'Braunshvejg-Volfenbjuttelskaja')),\n",
|
||||
" ('@22@', ('Petr II Alekseevich', 'Romanov')),\n",
|
||||
" ('@23@', ('Anna Petrovna', 'Romanova')),\n",
|
||||
" ('@24@', ('Elizaveta Petrovna', 'Romanova')),\n",
|
||||
" ('@25@', ('Karl Fridrih', 'Golshtejn-Gottorpskij')),\n",
|
||||
" ('@26@', ('Petr III Fedorovich', 'Romanov')),\n",
|
||||
" ('@27@', ('Ekaterina II', 'Alekseevna')),\n",
|
||||
" ('@28@', ('Pavel I Petrovich', 'Romanov')),\n",
|
||||
" ('@29@', ('Natalja Alekseevna', 'Gessen-Darmshtadskaja')),\n",
|
||||
" ('@30@', ('Marija Fedorovna', 'Vjurtembergskaja')),\n",
|
||||
" ('@31@', ('Aleksandr I Pavlovich', 'Romanov')),\n",
|
||||
" ('@32@', ('Elizaveta Alekseevna', 'Baden-Durlahskaja')),\n",
|
||||
" ('@33@', ('Nikolaj I Pavlovich', 'Romanov')),\n",
|
||||
" ('@34@', ('Aleksandra Fedorovna', 'Prusskaja')),\n",
|
||||
" ('@35@', ('Aleksandr II Nikolaevich', 'Romanov')),\n",
|
||||
" ('@36@', ('Marija Aleksandrovna', 'Gessenskaja')),\n",
|
||||
" ('@37@', ('Aleksandr III Aleksandrovich', 'Romanov')),\n",
|
||||
" ('@38@', ('Marija Fedorovna', 'Datskaja')),\n",
|
||||
" ('@39@', ('Nikolaj II Aleksandrovich', 'Romanov')),\n",
|
||||
" ('@40@', ('Aleksandra Fedorovna', 'Gessenskaja'))]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"d = g.get_element_dictionary()\n",
|
||||
"[ (k,v.get_name()) for k,v in d.items() if isinstance(v,IndividualElement)]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдХреБрдЯреБрдВрдмрд╛рдВрдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдХрд╢реА рдорд┐рд│рд╡рд╛рдпрдЪреА рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ. рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ **рдУрд│рдЦрдкрддреНрд░рд╛рдВрдЪреА** рдпрд╛рджреА рджреЗрддреЗ, рдЖрдгрд┐ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрддрд╛ рд╣рд╡реА рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреА рдирд╛рд╡реЗ рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рд╡реА рд▓рд╛рдЧрддреАрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[('@41@', ['@0@', '@1@', '@2@']),\n",
|
||||
" ('@42@', ['@2@', '@3@', '@6@', '@7@', '@8@']),\n",
|
||||
" ('@43@', ['@8@', '@9@', '@10@', '@11@']),\n",
|
||||
" ('@44@', ['@13@', '@10@', '@14@']),\n",
|
||||
" ('@45@', ['@15@', '@14@', '@16@']),\n",
|
||||
" ('@46@', ['@2@', '@4@', '@17@']),\n",
|
||||
" ('@47@', ['@17@', '@18@', '@20@']),\n",
|
||||
" ('@48@', ['@20@', '@21@', '@22@']),\n",
|
||||
" ('@49@', ['@17@', '@19@', '@23@', '@24@']),\n",
|
||||
" ('@50@', ['@25@', '@23@', '@26@']),\n",
|
||||
" ('@51@', ['@26@', '@27@', '@28@']),\n",
|
||||
" ('@52@', ['@28@', '@30@', '@31@', '@33@']),\n",
|
||||
" ('@53@', ['@33@', '@34@', '@35@']),\n",
|
||||
" ('@54@', ['@35@', '@36@', '@37@']),\n",
|
||||
" ('@55@', ['@37@', '@38@', '@39@'])]"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"d = g.get_element_dictionary()\n",
|
||||
"[ (k,[x.get_value() for x in v.get_child_elements()]) for k,v in d.items() if isinstance(v,FamilyElement)]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдХреБрдЯреБрдВрдм рдСрдВрдЯреЛрд▓реЙрдЬреА рдорд┐рд│рд╡рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛, [рдХреБрдЯреБрдВрдм рдСрдВрдЯреЛрд▓реЙрдЬреА](https://raw.githubusercontent.com/blokhin/genealogical-trees/master/data/header.ttl) рд╡рд░ рдПрдХ рдирдЬрд░ рдЯрд╛рдХреВрдпрд╛, рдЬреА рд╕реЗрдордБрдЯрд┐рдХ рд╡реЗрдм рдЯреНрд░рд┐рдкрд▓реЗрдЯреНрд╕рдЪреНрдпрд╛ рд╕рдВрдЪрд╛рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ. рдпрд╛ рдСрдВрдЯреЛрд▓реЙрдЬреАрдордзреНрдпреЗ `isUncleOf`, `isCousinOf` рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ рдирд╛рддреЗрд╕рдВрдмрдВрдз рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд. рд╣реЗ рд╕рд░реНрд╡ рдирд╛рддреЗрд╕рдВрдмрдВрдз рдореВрд▓рднреВрдд рдкреНрд░реЗрдбрд┐рдХреЗрдЯреНрд╕ `isMotherOf`, `isFatherOf`, `isBrotherOf` рдЖрдгрд┐ `isSisterOf` рдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд. рдЖрдкрдг рдСрдВрдЯреЛрд▓реЙрдЬреАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рддрд░реНрдХрд╢рдХреНрддреАрдЪреНрдпрд╛ рдорджрддреАрдиреЗ рдЗрддрд░ рд╕рд░реНрд╡ рдирд╛рддреЗрд╕рдВрдмрдВрдз рд╢реЛрдзреВрди рдХрд╛рдврдгрд╛рд░ рдЖрд╣реЛрдд.\n",
|
||||
"\n",
|
||||
"`isAuntOf` рдкреНрд░реЙрдкрд░реНрдЯреАрдЪреНрдпрд╛ рдкрд░рд┐рднрд╛рд╖реЗрдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпреЗрдереЗ рджрд┐рд▓реЗ рдЖрд╣реЗ, рдЬреА `isSisterOf` рдЖрдгрд┐ `isParentOf` рдЪреНрдпрд╛ рд╕рдВрдпреЛрдЬрдирд╛рдиреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реА рдЖрд╣реЗ (*рдЖрдЬреА рдореНрд╣рдгрдЬреЗ рдПрдЦрд╛рджреНрдпрд╛рдЪреНрдпрд╛ рдкрд╛рд▓рдХрд╛рдЪреА рдмрд╣реАрдг*).\n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"fhkb:isAuntOf a owl:ObjectProperty ;\n",
|
||||
" rdfs:domain fhkb:Woman ;\n",
|
||||
" rdfs:range fhkb:Person ;\n",
|
||||
" owl:propertyChainAxiom ( fhkb:isSisterOf fhkb:isParentOf ) .\n",
|
||||
"```\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"@prefix fhkb: <http://www.example.com/genealogy.owl#> .\n",
|
||||
"@prefix owl: <http://www.w3.org/2002/07/owl#> .\n",
|
||||
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n",
|
||||
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n",
|
||||
"@prefix xml: <http://www.w3.org/XML/1998/namespace> .\n",
|
||||
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n",
|
||||
"\n",
|
||||
"<http://www.example.com/genealogy.owl#> a owl:Ontology .\n",
|
||||
"\n",
|
||||
"fhkb:DomainEntity a owl:Class .\n",
|
||||
"\n",
|
||||
"fhkb:Man a owl:Class ;\n",
|
||||
" owl:equivalentClass [ a owl:Class ;\n",
|
||||
" owl:intersectionOf ( fhkb:Person [ a owl:Restriction ;\n",
|
||||
" owl:onProperty fhkb:hasSex ;\n",
|
||||
" owl:someValuesFrom fhkb:Male ] ) ] .\n",
|
||||
"\n",
|
||||
"fhkb:Woman a owl:Class ;\n",
|
||||
" owl:equivalentClass [ a owl:Class ;\n",
|
||||
" owl:intersectionOf ( fhkb:Person [ a owl:Restriction ;\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!head -20 data/onto.ttl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдЕрдиреБрдорд╛рдирд╛рд╕рд╛рдареА рдСрдВрдЯреЛрд▓реЙрдЬреА рддрдпрд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ, рдЖрдкрдг рдПрдХ рдСрдВрдЯреЛрд▓реЙрдЬреА рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░реВ рдЬреНрдпрд╛рдордзреНрдпреЗ рдХреМрдЯреБрдВрдмрд┐рдХ рдСрдВрдЯреЛрд▓реЙрдЬреАрдордзреАрд▓ рдореВрд│ рдирд┐рдпрдо рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ GEDCOM рдлрд╛рдЗрд▓рдордзреАрд▓ рд╡реНрдпрдХреНрддреАрдВрдЪреНрдпрд╛ рддрдереНрдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕реЗрд▓. рдЖрдкрдг GEDCOM рдлрд╛рдЗрд▓рдордзреВрди рдХреБрдЯреБрдВрдмреЗ рдЖрдгрд┐ рд╡реНрдпрдХреНрддреАрдВрдмрджреНрджрд▓рдЪреА рдорд╛рд╣рд┐рддреА рдХрд╛рдвреВ рдЖрдгрд┐ рддреА рддреНрд░рд┐рдХреБрдЯрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реВ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!cp data/onto.ttl .\n",
|
||||
"\n",
|
||||
"gedcom_dict = g.get_element_dictionary()\n",
|
||||
"individuals, marriages = {}, {}\n",
|
||||
"\n",
|
||||
"def term2id(el):\n",
|
||||
" return \"i\" + el.get_pointer().replace('@', '').lower()\n",
|
||||
"\n",
|
||||
"out = open(\"onto.ttl\",\"a\")\n",
|
||||
"\n",
|
||||
"for k, v in gedcom_dict.items():\n",
|
||||
" if isinstance(v,IndividualElement):\n",
|
||||
" children, siblings = set(), set()\n",
|
||||
" idx = term2id(v)\n",
|
||||
"\n",
|
||||
" title = v.get_name()[0] + \" \" + v.get_name()[1]\n",
|
||||
" title = title.replace('\"', '').replace('[', '').replace(']', '').replace('(', '').replace(')', '').strip()\n",
|
||||
"\n",
|
||||
" own_families = g.get_families(v, 'FAMS')\n",
|
||||
" for fam in own_families:\n",
|
||||
" children |= set(term2id(i) for i in g.get_family_members(fam, \"CHIL\"))\n",
|
||||
"\n",
|
||||
" parent_families = g.get_families(v, 'FAMC')\n",
|
||||
" if len(parent_families):\n",
|
||||
" for member in g.get_family_members(parent_families[0], \"CHIL\"): # NB adoptive families i.e len(parent_families)>1 are not considered (TODO?)\n",
|
||||
" if member.get_pointer() == v.get_pointer():\n",
|
||||
" continue\n",
|
||||
" siblings.add(term2id(member))\n",
|
||||
"\n",
|
||||
" if idx in individuals:\n",
|
||||
" children |= individuals[idx].get('children', set())\n",
|
||||
" siblings |= individuals[idx].get('siblings', set())\n",
|
||||
" individuals[idx] = {'sex': v.get_gender().lower(), 'children': children, 'siblings': siblings, 'title': title}\n",
|
||||
"\n",
|
||||
" elif isinstance(v,FamilyElement):\n",
|
||||
" wife, husb, children = None, None, set()\n",
|
||||
" children = set(term2id(i) for i in g.get_family_members(v, \"CHIL\"))\n",
|
||||
"\n",
|
||||
" try:\n",
|
||||
" wife = g.get_family_members(v, \"WIFE\")[0]\n",
|
||||
" wife = term2id(wife)\n",
|
||||
" if wife in individuals: individuals[wife]['children'] |= children\n",
|
||||
" else: individuals[wife] = {'children': children}\n",
|
||||
" except IndexError: pass\n",
|
||||
" try:\n",
|
||||
" husb = g.get_family_members(v, \"HUSB\")[0]\n",
|
||||
" husb = term2id(husb)\n",
|
||||
" if husb in individuals: individuals[husb]['children'] |= children\n",
|
||||
" else: individuals[husb] = {'children': children}\n",
|
||||
" except IndexError: pass\n",
|
||||
"\n",
|
||||
" if wife and husb: marriages[wife + husb] = (term2id(v), wife, husb)\n",
|
||||
"\n",
|
||||
"for idx, val in individuals.items():\n",
|
||||
" added_terms = ''\n",
|
||||
" if val['sex'] == 'f':\n",
|
||||
" parent_predicate, sibl_predicate = \"isMotherOf\", \"isSisterOf\"\n",
|
||||
" else:\n",
|
||||
" parent_predicate, sibl_predicate = \"isFatherOf\", \"isBrotherOf\"\n",
|
||||
" if len(val['children']):\n",
|
||||
" added_terms += \" ;\\n fhkb:\" + parent_predicate + \" \" + \", \".join([\"fhkb:\" + i for i in val['children']])\n",
|
||||
" if len(val['siblings']):\n",
|
||||
" added_terms += \" ;\\n fhkb:\" + sibl_predicate + \" \" + \", \".join([\"fhkb:\" + i for i in val['siblings']])\n",
|
||||
" out.write(\"fhkb:%s a owl:NamedIndividual, owl:Thing%s ;\\n rdfs:label \\\"%s\\\" .\\n\" % (idx, added_terms, val['title']))\n",
|
||||
"\n",
|
||||
"for k, v in marriages.items():\n",
|
||||
" out.write(\"fhkb:%s a owl:NamedIndividual, owl:Thing ;\\n fhkb:hasFemalePartner fhkb:%s ;\\n fhkb:hasMalePartner fhkb:%s .\\n\" % v)\n",
|
||||
"\n",
|
||||
"out.write(\"[] a owl:AllDifferent ;\\n owl:distinctMembers (\")\n",
|
||||
"for idx in individuals.keys():\n",
|
||||
" out.write(\" fhkb:\" + idx)\n",
|
||||
"for k, v in marriages.items():\n",
|
||||
" out.write(\" fhkb:\" + v[0])\n",
|
||||
"out.write(\" ) .\")\n",
|
||||
"out.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" fhkb:hasFemalePartner fhkb:i34 ;\n",
|
||||
" fhkb:hasMalePartner fhkb:i33 .\n",
|
||||
"fhkb:i54 a owl:NamedIndividual, owl:Thing ;\n",
|
||||
" fhkb:hasFemalePartner fhkb:i36 ;\n",
|
||||
" fhkb:hasMalePartner fhkb:i35 .\n",
|
||||
"fhkb:i55 a owl:NamedIndividual, owl:Thing ;\n",
|
||||
" fhkb:hasFemalePartner fhkb:i38 ;\n",
|
||||
" fhkb:hasMalePartner fhkb:i37 .\n",
|
||||
"[] a owl:AllDifferent ;\n",
|
||||
" owl:distinctMembers ( fhkb:i0 fhkb:i1 fhkb:i2 fhkb:i3 fhkb:i4 fhkb:i5 fhkb:i6 fhkb:i7 fhkb:i8 fhkb:i9 fhkb:i10 fhkb:i11 fhkb:i12 fhkb:i13 fhkb:i14 fhkb:i15 fhkb:i16 fhkb:i17 fhkb:i18 fhkb:i19 fhkb:i20 fhkb:i21 fhkb:i22 fhkb:i23 fhkb:i24 fhkb:i25 fhkb:i26 fhkb:i27 fhkb:i28 fhkb:i29 fhkb:i30 fhkb:i31 fhkb:i32 fhkb:i33 fhkb:i34 fhkb:i35 fhkb:i36 fhkb:i37 fhkb:i38 fhkb:i39 fhkb:i40 fhkb:i41 fhkb:i42 fhkb:i43 fhkb:i44 fhkb:i45 fhkb:i46 fhkb:i47 fhkb:i48 fhkb:i49 fhkb:i50 fhkb:i51 fhkb:i52 fhkb:i53 fhkb:i54 fhkb:i55 ) ."
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!tail onto.ttl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдЕрдиреБрдорд╛рди рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдпрд╛ рдСрдВрдЯреЛрд▓реЙрдЬреАрдЪрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдорд╛рди рдЖрдгрд┐ рдХреНрд╡реЗрд░реАрд╕рд╛рдареА рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ. рдпрд╛рд╕рд╛рдареА рдЖрдкрдг [RDFLib](https://github.com/RDFLib) рдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ, рдЬреА RDF рдЧреНрд░рд╛рдл рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╡рд╛рдЪрдгреЗ, рддреНрдпрд╛рд╡рд░ рдХреНрд╡реЗрд░реА рдХрд░рдгреЗ рдЗрддреНрдпрд╛рджреАрд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рддрд╛рд░реНрдХрд┐рдХ рдЕрдиреБрдорд╛рдирд╛рд╕рд╛рдареА, рдЖрдкрдг [OWL-RL](https://github.com/RDFLib/OWL-RL) рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ, рдЬреА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ RDF рдЧреНрд░рд╛рдлрдЪреЗ **рдХреНрд▓реЛрдЬрд░** рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рдореНрд╣рдгрдЬреЗрдЪ рд╕рд░реНрд╡ рд╢рдХреНрдп рд╕рдВрдХрд▓реНрдкрдирд╛ рдЖрдгрд┐ рдирд╛рддреЗрд╕рдВрдмрдВрдз рдЬреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд рддреЗ рдЬреЛрдбрдгреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Requirement already satisfied: rdflib in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (6.3.2)\n",
|
||||
"Requirement already satisfied: isodate<0.7.0,>=0.6.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib) (0.6.1)\n",
|
||||
"Requirement already satisfied: pyparsing<4,>=2.1.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib) (3.0.9)\n",
|
||||
"Requirement already satisfied: six in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from isodate<0.7.0,>=0.6.0->rdflib) (1.16.0)\n",
|
||||
"Collecting git+https://github.com/RDFLib/OWL-RL.git\n",
|
||||
" Cloning https://github.com/RDFLib/OWL-RL.git to /tmp/pip-req-build-lbfzwi3m\n",
|
||||
" Running command git clone --filter=blob:none --quiet https://github.com/RDFLib/OWL-RL.git /tmp/pip-req-build-lbfzwi3m\n",
|
||||
" Resolved https://github.com/RDFLib/OWL-RL.git to commit a77e1791b88b54aace609bc6000aac14c7add4ff\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hRequirement already satisfied: rdflib>=6.0.2 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from owlrl==6.0.2) (6.3.2)\n",
|
||||
"Requirement already satisfied: isodate<0.7.0,>=0.6.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib>=6.0.2->owlrl==6.0.2) (0.6.1)\n",
|
||||
"Requirement already satisfied: pyparsing<4,>=2.1.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib>=6.0.2->owlrl==6.0.2) (3.0.9)\n",
|
||||
"Requirement already satisfied: six in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from isodate<0.7.0,>=0.6.0->rdflib>=6.0.2->owlrl==6.0.2) (1.16.0)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!{sys.executable} -m pip install rdflib\n",
|
||||
"!{sys.executable} -m pip install git+https://github.com/RDFLib/OWL-RL.git"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдСрдВрдЯреЛрд▓реЙрдЬреА рдлрд╛рдЗрд▓ рдЙрдШрдбреВ рдЖрдгрд┐ рддреНрдпрд╛рдд рдХрд┐рддреА рддреНрд░рд┐рдХреБрдЯреЗ рдЖрд╣реЗрдд рддреЗ рдкрд╛рд╣реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Triplets found:669\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import rdflib\n",
|
||||
"from owlrl import DeductiveClosure, OWLRL_Extension\n",
|
||||
"\n",
|
||||
"g = rdflib.Graph()\n",
|
||||
"g.parse(\"onto.ttl\", format=\"turtle\")\n",
|
||||
"\n",
|
||||
"print(\"Triplets found:%d\" % len(g))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Triplets after inference:4246\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"DeductiveClosure(OWLRL_Extension).expand(g)\n",
|
||||
"print(\"Triplets after inference:%d\" % len(g))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдирд╛рддреЗрд╡рд╛рдИрдХрд╛рдВрд╕рд╛рдареА рдХреНрд╡реЗрд░реА рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЧреНрд░рд╛рдл рдХреНрд╡реЗрд░реА рдХрд░реВрди рд▓реЛрдХрд╛рдВрдордзреАрд▓ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдирд╛рддреЗрд╕рдВрдмрдВрдзрд╛рдВрдЪрд╛ рд╢реЛрдз рдШреЗрдК рд╢рдХрддреЛ. рдЖрдкрдг **SPARQL** рднрд╛рд╖рд╛ `query` рдкрджреНрдзрддреАрд╕рд╣ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ. рдЖрдкрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдкрд▓реНрдпрд╛ рдХреБрдЯреБрдВрдмрд╛рдЪреНрдпрд╛ рд╡рдВрд╢рд╡реГрдХреНрд╖рд╛рддреАрд▓ рд╕рд░реНрд╡ **рдХрд╛рдХрд╛** рдкрд╛рд╣реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Fedor Alekseevich Romanov is uncle of Ekaterina Ivanovna Romanova\n",
|
||||
"Aleksandr I Pavlovich Romanov is uncle of Aleksandr II Nikolaevich Romanov\n",
|
||||
"Fedor Alekseevich Romanov is uncle of Anna Ivanovna Romanova\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"qres = g.query(\n",
|
||||
" \"\"\"SELECT DISTINCT ?aname ?bname\n",
|
||||
" WHERE {\n",
|
||||
" ?a fhkb:isUncleOf ?b .\n",
|
||||
" ?a rdfs:label ?aname .\n",
|
||||
" ?b rdfs:label ?bname .\n",
|
||||
" }\"\"\")\n",
|
||||
"\n",
|
||||
"for row in qres:\n",
|
||||
" print(\"%s is uncle of %s\" % row)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдХреБрдЯреБрдВрдмреАрдп рд╕рдВрдмрдВрдзрд╛рдВрд╢реА рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЛрдХрд│реНрдпрд╛ рдордирд╛рдиреЗ рдкреНрд░рдпрддреНрди рдХрд░рд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА `isAncestorOf` рд╕рдВрдмрдВрдз рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдиреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╡реНрдпрдХреНрддреАрдЪреЗ рд╕рд░реНрд╡ рдкреВрд░реНрд╡рдЬ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"рд╢реЗрд╡рдЯреА, рдЪрд▓рд╛ рд╕рд╛рдлрд╕рдлрд╛рдИ рдХрд░реВрдпрд╛!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!rm onto.ttl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.6",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.11.2"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "6537d5597320e27b6052b4377b8ff8bb",
|
||||
"translation_date": "2025-08-28T08:31:48+00:00",
|
||||
"source_file": "lessons/2-Symbolic/FamilyOntology.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,548 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"## рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдЧреНрд░рд╛рдл\n",
|
||||
"\n",
|
||||
"[Microsoft Concept Graph](https://concept.research.microsoft.com/) рд╣реА рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░реВрди рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдЪреА рдореЛрдареА рд╡рд░реНрдЧрд╡рд╛рд░реА рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдордзреАрд▓ `is-a` рд╕рдВрдмрдВрдз рдЖрд╣реЗрдд.\n",
|
||||
"\n",
|
||||
"рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдЧреНрд░рд╛рдл рджреЛрди рдкреНрд░рдХрд╛рд░рд╛рдВрдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ:\n",
|
||||
" * рдбрд╛рдЙрдирд▓реЛрдбрд╕рд╛рдареА рдореЛрдард╛ рдордЬрдХреВрд░ рдлрд╛рдЗрд▓\n",
|
||||
" * REST API\n",
|
||||
"\n",
|
||||
"рдЖрдХрдбреЗрд╡рд╛рд░реА:\n",
|
||||
" * 5401933 рдЕрджреНрд╡рд┐рддреАрдп рд╕рдВрдХрд▓реНрдкрдирд╛,\n",
|
||||
" * 12551613 рдЕрджреНрд╡рд┐рддреАрдп рдЙрджрд╛рд╣рд░рдгреЗ\n",
|
||||
" * 87603947 `is-a` рд╕рдВрдмрдВрдз\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╡реЗрдм рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рд╡реЗрдм рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд┐рдз рдЧрдЯрд╛рдВрдордзреНрдпреЗ рдПрдЦрд╛рджреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрдЪреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рддрддреЗрдЪреА рд╢рдХреНрдпрддрд╛ рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдХреЙрд▓реНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА [рдпреЗрдереЗ](https://concept.research.microsoft.com/Home/Api) рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ. \n",
|
||||
"рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдирдореБрдирд╛ URL рдпреЗрдереЗ рджрд┐рд▓рд╛ рдЖрд╣реЗ: `https://concept.research.microsoft.com/api/Concept/ScoreByProb?instance=microsoft&topK=10`\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'company': 0.6105356614382954,\n",
|
||||
" 'vendor': 0.08858636677518003,\n",
|
||||
" 'client': 0.048239124001183784,\n",
|
||||
" 'firm': 0.045476965571668145,\n",
|
||||
" 'large company': 0.043109401203511886,\n",
|
||||
" 'organization': 0.043010752688172046,\n",
|
||||
" 'corporation': 0.035908059583703265,\n",
|
||||
" 'brand': 0.03383644076156654,\n",
|
||||
" 'software company': 0.027522935779816515,\n",
|
||||
" 'technology company': 0.023774292196902438}"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import urllib\n",
|
||||
"import json\n",
|
||||
"import ssl\n",
|
||||
"\n",
|
||||
"def http(x):\n",
|
||||
" ssl._create_default_https_context = ssl._create_unverified_context\n",
|
||||
" response = urllib.request.urlopen(x)\n",
|
||||
" data = response.read()\n",
|
||||
" return data.decode('utf-8')\n",
|
||||
"\n",
|
||||
"def query(x):\n",
|
||||
" return json.loads(http(\"https://concept.research.microsoft.com/api/Concept/ScoreByProb?instance={}&topK=10\".format(urllib.parse.quote(x))))\n",
|
||||
"\n",
|
||||
"query('microsoft')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рдХрд╛рдВрдирд╛ рдореБрдЦреНрдп рд╕рдВрдХрд▓реНрдкрдирд╛рдВрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдмрд╛рддрдореНрдпрд╛рдВрдЪреА рд╢реАрд░реНрд╖рдХреЗ рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг [NewsApi.org](http://newsapi.org) рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. рд╣реА рд╕реЗрд╡рд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рддрдГрдЪрд╛ API рдХреА рдорд┐рд│рд╡рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓ - рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рдЬрд╛ рдЖрдгрд┐ рдореЛрдлрдд рдбреЗрд╡реНрд╣рд▓рдкрд░ рдкреНрд▓реЕрдирд╕рд╛рдареА рдиреЛрдВрджрдгреА рдХрд░рд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"newsapi_key = '<your API key here>'\n",
|
||||
"def get_news(country='us'):\n",
|
||||
" res = json.loads(http(\"https://newsapi.org/v2/top-headlines?country={0}&apiKey={1}\".format(country,newsapi_key)))\n",
|
||||
" return res['articles']\n",
|
||||
"\n",
|
||||
"all_titles = [x['title'] for x in get_news('us')+get_news('gb')]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['Covid-19 Live Updates: Vaccines and Boosters News - The New York Times',\n",
|
||||
" 'Ukrainians Flee Mariupol as Russian Forces Push to Take Port City - The Wall Street Journal',\n",
|
||||
" 'Bond Yields Jump, Stock Futures Rise After Powell Says Fed Is Ready to Be More Aggressive - The Wall Street Journal',\n",
|
||||
" 'Putin critic Alexei Navalny found guilty by Russian court - New York Post ',\n",
|
||||
" \"Supreme Court nominee Ketanji Brown Jackson will face questions at confirmation hearing's second day - CNN\",\n",
|
||||
" '2 teachers killed at Swedish high school, student arrested - ABC News',\n",
|
||||
" 'Clues to Covid-19тАЩs Next Moves Come From Sewers - The Wall Street Journal',\n",
|
||||
" 'Republicans to roll dice by grilling Jackson over child-pornography sentencing decisions | TheHill - The Hill',\n",
|
||||
" 'тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent',\n",
|
||||
" 'NASA confirms there are 5,000 planets outside our solar system - Daily Mail',\n",
|
||||
" \"US stocks whipsawed overnight after Fed Chair Powell's remarks - Fox Business\",\n",
|
||||
" \"'We've learned absolutely nothing': Tests could again be in short supply if Covid surges - POLITICO\",\n",
|
||||
" \"Duchess of Cambridge swaps khaki jungle gear for Vampire's Wife dress on Belize trip - Daily Mail\",\n",
|
||||
" 'China searches for victims, flight recorders after first plane crash in 12 years - Reuters',\n",
|
||||
" 'Second superyacht linked to Russian oligarch Abramovich docks in Turkey - Reuters',\n",
|
||||
" 'Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol',\n",
|
||||
" 'Powers Remain and Threats Lurk as WomenтАЩs Sweet 16 Is Set - The New York Times',\n",
|
||||
" 'Webb Space Telescope Begins Multi-Instrument Alignment - SciTechDaily',\n",
|
||||
" \"UConn vs UCF - NCAA women's tournament second-round highlights - March Madness\",\n",
|
||||
" 'Bucking Republican Trend, Indiana Governor Vetoes Transgender Sports Bill - The New York Times',\n",
|
||||
" \"Maggie Fox dead: Coronation Street and Shameless actress dies after 'sudden accident' - Mirror Online - The Mirror\",\n",
|
||||
" 'China plane crash тАУ live: Search for survivors continues as witness describes moment flight fell from sky - The Independent',\n",
|
||||
" 'Daniel Morgan murder: damning report condemns Met police - The Guardian',\n",
|
||||
" 'What to expect from Rishi SunakтАЩs Spring Statement - BBC.com',\n",
|
||||
" 'UK and Republic of Ireland in line to host Euro 2028 after no one else bids - The Guardian',\n",
|
||||
" \"Friends beg Vladimir Putin's 'lover' to persuade him to end Ukraine invasion - The Mirror\",\n",
|
||||
" 'Brass EyeтАЩs outtakes show the brutal TV comedy was the tip of an iceberg - The Guardian',\n",
|
||||
" \"Vladimir Putin threatens civilians to break Mariupol's spirit - The Times\",\n",
|
||||
" 'Shell U-turn on Cambo oilfield would threaten green targets, say campaigners - The Guardian',\n",
|
||||
" 'St Helens dog attack: Girl aged 17 months killed at home - BBC',\n",
|
||||
" \"PlayStation to buy 'Assassin's Creed' veteran Jade Raymond's Haven Studios - NME\",\n",
|
||||
" 'тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent',\n",
|
||||
" 'NASA confirms there are 5,000 planets outside our solar system - Daily Mail',\n",
|
||||
" 'Nintendo Switch finally has folders тАв Eurogamer.net - Eurogamer.net',\n",
|
||||
" 'FA to тАЬfind a solutionтАЭ as Liverpool fan group blasts тАЬshambolicтАЭ Wembley travel - This Is Anfield',\n",
|
||||
" 'Manchester United transfer news LIVE Erik ten Hag latest and Man Utd manager updates - Manchester Evening News',\n",
|
||||
" 'Inflation raises cost of UK government borrowing in February; crude oil up again тАУ business live - The Guardian',\n",
|
||||
" 'Alexei Navalny: Kremlin critic found guilty of large-scale fraud and contempt of court by Russian court - Sky News',\n",
|
||||
" \"UK prepares to nationalize Russia natural gas giant Gazprom's retail unit - Business Insider\",\n",
|
||||
" 'Zaghari-Ratcliffe: Hunt calls for inquiry into delay over Iran debt payment - The Guardian']"
|
||||
]
|
||||
},
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"all_titles"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдореНрд╣рд╛рд▓рд╛ рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рдХрд╛рдВрдордзреВрди рдирд╛рдореЗ рдХрд╛рдврддрд╛ рдпрд╛рд╡реАрдд рдЕрд╕реЗ рд╣рд╡реЗ рдЖрд╣реЗ. рдЖрдореНрд╣реА рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА `TextBlob` рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ, рдЬреА рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЕрдиреЗрдХ рд╕рд╛рдорд╛рдиреНрдп NLP рдХрд╛рд░реНрдпрд╛рдВрдирд╛ рд╕реБрд▓рдн рдХрд░рддреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Requirement already satisfied: textblob in c:\\winapp\\miniconda3\\lib\\site-packages (0.17.1)\n",
|
||||
"Requirement already satisfied: nltk>=3.1 in c:\\winapp\\miniconda3\\lib\\site-packages (from textblob) (3.5)\n",
|
||||
"Requirement already satisfied: joblib in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (1.0.1)\n",
|
||||
"Requirement already satisfied: regex in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (2021.11.10)\n",
|
||||
"Requirement already satisfied: tqdm in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (4.61.2)\n",
|
||||
"Requirement already satisfied: click in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (8.0.3)\n",
|
||||
"Requirement already satisfied: colorama in c:\\winapp\\miniconda3\\lib\\site-packages (from click->nltk>=3.1->textblob) (0.4.4)\n",
|
||||
"Finished.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[nltk_data] Downloading package brown to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package brown is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package punkt to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package punkt is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package wordnet to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package wordnet is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package averaged_perceptron_tagger to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package averaged_perceptron_tagger is already up-to-\n",
|
||||
"[nltk_data] date!\n",
|
||||
"[nltk_data] Downloading package conll2000 to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package conll2000 is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package movie_reviews to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package movie_reviews is already up-to-date!\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install textblob\n",
|
||||
"!{sys.executable} -m textblob.download_corpora\n",
|
||||
"from textblob import TextBlob"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'covid-19 live updates': 1,\n",
|
||||
" 'vaccines': 1,\n",
|
||||
" 'boosters': 1,\n",
|
||||
" 'york': 4,\n",
|
||||
" 'ukrainians flee mariupol': 1,\n",
|
||||
" 'forces push': 1,\n",
|
||||
" 'port city': 1,\n",
|
||||
" 'wall street journal': 3,\n",
|
||||
" 'bond yields': 1,\n",
|
||||
" 'futures rise': 1,\n",
|
||||
" 'powell says fed': 1,\n",
|
||||
" 'ready': 1,\n",
|
||||
" 'be': 1,\n",
|
||||
" 'aggressive': 1,\n",
|
||||
" 'putin': 3,\n",
|
||||
" 'alexei navalny': 2,\n",
|
||||
" 'russian': 2,\n",
|
||||
" 'supreme court nominee': 1,\n",
|
||||
" 'ketanji brown jackson': 1,\n",
|
||||
" \"confirmation hearing 's\": 1,\n",
|
||||
" 'cnn': 1,\n",
|
||||
" 'swedish': 1,\n",
|
||||
" 'high school': 1,\n",
|
||||
" 'abc': 1,\n",
|
||||
" 'clues': 1,\n",
|
||||
" 'covid-19': 1,\n",
|
||||
" 'тАЩ s': 2,\n",
|
||||
" 'moves': 1,\n",
|
||||
" 'sewers': 1,\n",
|
||||
" 'roll dice': 1,\n",
|
||||
" 'jackson': 1,\n",
|
||||
" 'decisions |': 1,\n",
|
||||
" 'thehill': 1,\n",
|
||||
" 'clear': 2,\n",
|
||||
" 'chemical weapons': 2,\n",
|
||||
" 'ukraine': 3,\n",
|
||||
" 'claims president': 2,\n",
|
||||
" 'biden': 2,\n",
|
||||
" 'nasa': 2,\n",
|
||||
" 'solar system': 2,\n",
|
||||
" 'daily mail': 3,\n",
|
||||
" 'us stocks': 1,\n",
|
||||
" 'fed chair powell': 1,\n",
|
||||
" \"'s remarks\": 1,\n",
|
||||
" 'fox': 1,\n",
|
||||
" \"'we 've\": 1,\n",
|
||||
" 'tests': 1,\n",
|
||||
" 'covid': 1,\n",
|
||||
" 'politico': 1,\n",
|
||||
" 'duchess': 1,\n",
|
||||
" 'cambridge': 1,\n",
|
||||
" 'swaps khaki jungle gear': 1,\n",
|
||||
" 'vampire': 1,\n",
|
||||
" 'wife': 1,\n",
|
||||
" 'belize': 1,\n",
|
||||
" 'china': 2,\n",
|
||||
" 'flight recorders': 1,\n",
|
||||
" 'plane crash': 1,\n",
|
||||
" 'reuters': 2,\n",
|
||||
" 'russian oligarch': 1,\n",
|
||||
" 'abramovich': 1,\n",
|
||||
" 'live': 1,\n",
|
||||
" 'russia': 2,\n",
|
||||
" 'stops talks': 1,\n",
|
||||
" 'japan': 1,\n",
|
||||
" 'espa├▒ol': 1,\n",
|
||||
" 'powers remain': 1,\n",
|
||||
" 'threats lurk': 1,\n",
|
||||
" 'set': 1,\n",
|
||||
" 'webb': 1,\n",
|
||||
" 'telescope begins multi-instrument alignment': 1,\n",
|
||||
" 'scitechdaily': 1,\n",
|
||||
" 'uconn': 1,\n",
|
||||
" 'ucf': 1,\n",
|
||||
" 'ncaa': 1,\n",
|
||||
" \"women 's tournament second-round highlights\": 1,\n",
|
||||
" 'march madness': 1,\n",
|
||||
" 'bucking republican trend': 1,\n",
|
||||
" 'indiana': 1,\n",
|
||||
" 'vetoes transgender': 1,\n",
|
||||
" 'bill': 1,\n",
|
||||
" 'maggie fox': 1,\n",
|
||||
" 'coronation': 1,\n",
|
||||
" 'shameless': 1,\n",
|
||||
" \"'sudden accident\": 1,\n",
|
||||
" 'mirror online': 1,\n",
|
||||
" 'mirror': 2,\n",
|
||||
" 'plane crash тАУ': 1,\n",
|
||||
" 'search': 1,\n",
|
||||
" 'moment flight': 1,\n",
|
||||
" 'daniel morgan': 1,\n",
|
||||
" 'report condemns': 1,\n",
|
||||
" 'met': 1,\n",
|
||||
" 'guardian': 6,\n",
|
||||
" 'rishi sunak': 1,\n",
|
||||
" 'тАЩ s spring': 1,\n",
|
||||
" 'statement': 1,\n",
|
||||
" 'bbc.com': 1,\n",
|
||||
" 'uk': 3,\n",
|
||||
" 'ireland': 1,\n",
|
||||
" 'euro': 1,\n",
|
||||
" 'vladimir putin': 2,\n",
|
||||
" \"'s 'lover\": 1,\n",
|
||||
" 'brass eye': 1,\n",
|
||||
" 'тАЩ s outtakes': 1,\n",
|
||||
" 'brutal tv comedy': 1,\n",
|
||||
" 'threatens civilians': 1,\n",
|
||||
" 'mariupol': 1,\n",
|
||||
" \"'s spirit\": 1,\n",
|
||||
" 'shell u-turn': 1,\n",
|
||||
" 'cambo': 1,\n",
|
||||
" 'green targets': 1,\n",
|
||||
" 'st helens': 1,\n",
|
||||
" 'dog attack': 1,\n",
|
||||
" 'girl': 1,\n",
|
||||
" 'bbc': 1,\n",
|
||||
" 'playstation': 1,\n",
|
||||
" \"'assassin 's\": 1,\n",
|
||||
" 'creed': 1,\n",
|
||||
" 'jade raymond': 1,\n",
|
||||
" 'haven studios': 1,\n",
|
||||
" 'nme': 1,\n",
|
||||
" 'nintendo switch': 1,\n",
|
||||
" 'folders тАв': 1,\n",
|
||||
" 'eurogamer.net': 2,\n",
|
||||
" 'fa': 1,\n",
|
||||
" 'solution тАЭ': 1,\n",
|
||||
" 'liverpool': 1,\n",
|
||||
" 'fan group blasts тАЬ shambolic тАЭ': 1,\n",
|
||||
" 'wembley': 1,\n",
|
||||
" 'anfield': 1,\n",
|
||||
" 'manchester': 1,\n",
|
||||
" 'live erik': 1,\n",
|
||||
" 'hag': 1,\n",
|
||||
" 'utd': 1,\n",
|
||||
" 'manager updates': 1,\n",
|
||||
" 'manchester evening': 1,\n",
|
||||
" 'inflation': 1,\n",
|
||||
" 'government borrowing': 1,\n",
|
||||
" 'february': 1,\n",
|
||||
" 'crude oil': 1,\n",
|
||||
" 'тАУ business': 1,\n",
|
||||
" 'kremlin': 1,\n",
|
||||
" 'large-scale fraud': 1,\n",
|
||||
" 'sky': 1,\n",
|
||||
" 'natural gas': 1,\n",
|
||||
" 'gazprom': 1,\n",
|
||||
" 'retail unit': 1,\n",
|
||||
" 'insider': 1,\n",
|
||||
" 'zaghari-ratcliffe': 1,\n",
|
||||
" 'hunt': 1,\n",
|
||||
" 'iran': 1,\n",
|
||||
" 'debt payment': 1}"
|
||||
]
|
||||
},
|
||||
"execution_count": 22,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w = {}\n",
|
||||
"for x in all_titles:\n",
|
||||
" for n in TextBlob(x).noun_phrases:\n",
|
||||
" if n in w:\n",
|
||||
" w[n].append(x)\n",
|
||||
" else:\n",
|
||||
" w[n]=[x]\n",
|
||||
"{ x:len(w[x]) for x in w.keys()}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддреЛ рдХреА рдирд╛рдореЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдореЛрдареНрдпрд╛ рд╡рд┐рд╖рдпрд╛рддреНрдордХ рдЧрдЯ рджреЗрдд рдирд╛рд╣реАрдд. рдЪрд▓рд╛ рд╕рдВрдХрд▓реНрдкрдирд╛ рдЧреНрд░рд╛рдлрдордзреВрди рдорд┐рд│рд╡рд▓реЗрд▓реНрдпрд╛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрд╛рдВрдиреА рдирд╛рдореЗ рдмрджрд▓реВрдпрд╛. рдпрд╛рд╕рд╛рдареА рдХрд╛рд╣реА рд╡реЗрд│ рд▓рд╛рдЧреЗрд▓, рдХрд╛рд░рдг рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдо рд╡рд╛рдХреНрдпрд╛рдВрд╢рд╛рд╕рд╛рдареА REST рдХреЙрд▓ рдХрд░рдд рдЖрд╣реЛрдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 23,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"w = {}\n",
|
||||
"for x in all_titles:\n",
|
||||
" for noun in TextBlob(x).noun_phrases:\n",
|
||||
" terms = query(noun.replace(' ','%20'))\n",
|
||||
" for term in [u for u in terms.keys() if terms[u]>0.1]:\n",
|
||||
" if term in w:\n",
|
||||
" w[term].append(x)\n",
|
||||
" else:\n",
|
||||
" w[term]=[x]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 24,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'city': 9,\n",
|
||||
" 'brand': 4,\n",
|
||||
" 'place': 9,\n",
|
||||
" 'town': 4,\n",
|
||||
" 'factor': 4,\n",
|
||||
" 'film': 4,\n",
|
||||
" 'nation': 11,\n",
|
||||
" 'state': 5,\n",
|
||||
" 'person': 4,\n",
|
||||
" 'organization': 5,\n",
|
||||
" 'publication': 10,\n",
|
||||
" 'market': 5,\n",
|
||||
" 'economy': 4,\n",
|
||||
" 'company': 6,\n",
|
||||
" 'newspaper': 6,\n",
|
||||
" 'relationship': 6}"
|
||||
]
|
||||
},
|
||||
"execution_count": 24,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"{ x:len(w[x]) for x in w.keys() if len(w[x])>3}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 27,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"ECONOMY:\n",
|
||||
"China searches for victims, flight recorders after first plane crash in 12 years - Reuters\n",
|
||||
"Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol\n",
|
||||
"China plane crash тАУ live: Search for survivors continues as witness describes moment flight fell from sky - The Independent\n",
|
||||
"UK prepares to nationalize Russia natural gas giant Gazprom's retail unit - Business Insider\n",
|
||||
"\n",
|
||||
"NATION:\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n",
|
||||
"Duchess of Cambridge swaps khaki jungle gear for Vampire's Wife dress on Belize trip - Daily Mail\n",
|
||||
"China searches for victims, flight recorders after first plane crash in 12 years - Reuters\n",
|
||||
"Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol\n",
|
||||
"Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol\n",
|
||||
"China plane crash тАУ live: Search for survivors continues as witness describes moment flight fell from sky - The Independent\n",
|
||||
"UK and Republic of Ireland in line to host Euro 2028 after no one else bids - The Guardian\n",
|
||||
"Friends beg Vladimir Putin's 'lover' to persuade him to end Ukraine invasion - The Mirror\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n",
|
||||
"UK prepares to nationalize Russia natural gas giant Gazprom's retail unit - Business Insider\n",
|
||||
"Zaghari-Ratcliffe: Hunt calls for inquiry into delay over Iran debt payment - The Guardian\n",
|
||||
"\n",
|
||||
"PERSON:\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n",
|
||||
"Duchess of Cambridge swaps khaki jungle gear for Vampire's Wife dress on Belize trip - Daily Mail\n",
|
||||
"Second superyacht linked to Russian oligarch Abramovich docks in Turkey - Reuters\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print('\\nECONOMY:\\n'+'\\n'.join(w['economy']))\n",
|
||||
"print('\\nNATION:\\n'+'\\n'.join(w['nation']))\n",
|
||||
"print('\\nPERSON:\\n'+'\\n'.join(w['person']))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬреБрддреАрдВрд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрде рд▓рд╛рд╡рдгреНрдпрд╛рд╕ рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"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.9.5"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "4087f998407d06ceb2947016ba4605d0",
|
||||
"translation_date": "2025-08-28T08:33:32+00:00",
|
||||
"source_file": "lessons/2-Symbolic/MSConceptGraph.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,183 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдПрдордПрдирд┐рд╕реНрдЯ рдЕрдВрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдЖрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрд╕рд╣\n",
|
||||
"\n",
|
||||
"[рдПрдЖрдп рдлреЙрд░ рдмрд┐рдЧрд┐рдирд░реНрд╕ рдХрд░рд┐рдХреНрдпреБрд▓рдо](https://github.com/microsoft/ai-for-beginners) рдордзреАрд▓ рдкреНрд░рдпреЛрдЧрд╢рд╛рд│рд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ.\n",
|
||||
"\n",
|
||||
"### рдбреЗрдЯрд╛рд╕реЗрдЯ рд╡рд╛рдЪрдгреЗ\n",
|
||||
"\n",
|
||||
"рд╣рд╛ рдХреЛрдб рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░реАрд▓ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдордзреВрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЛ. рддреБрдореНрд╣реА рдПрдЖрдп рдХрд░рд┐рдХреНрдпреБрд▓рдо рд░рд┐рдкреЛрдЪреНрдпрд╛ `/data` рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреВрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЕрдиреНрдпреБрдЕрд▓реА рдХреЙрдкреА рджреЗрдЦреАрд▓ рдХрд░реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" % Total % Received % Xferd Average Speed Time Time Time Current\n",
|
||||
" Dload Upload Total Spent Left Speed\n",
|
||||
"\n",
|
||||
" 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\n",
|
||||
"100 9.9M 100 9.9M 0 0 9.9M 0 0:00:01 --:--:-- 0:00:01 15.8M\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!rm *.pkl\n",
|
||||
"!wget https://raw.githubusercontent.com/microsoft/AI-For-Beginners/main/data/mnist.pkl.gz\n",
|
||||
"!gzip -d mnist.pkl.gz"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pickle\n",
|
||||
"with open('mnist.pkl','rb') as f:\n",
|
||||
" MNIST = pickle.load(f)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"labels = MNIST['Train']['Labels']\n",
|
||||
"data = MNIST['Train']['Features']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪрд╛ рдЖрдХрд╛рд░ рдХрд╛рдп рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(42000, 784)"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"data.shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдбреЗрдЯрд╛рдЪреЗ рд╡рд┐рднрд╛рдЬрди\n",
|
||||
"\n",
|
||||
"рдЖрдореНрд╣реА Scikit Learn рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдбреЗрдЯрд╛рдЪреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрди рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Train samples: 33600, test samples: 8400\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.model_selection import train_test_split\n",
|
||||
"\n",
|
||||
"features_train, features_test, labels_train, labels_test = train_test_split(data,labels,test_size=0.2)\n",
|
||||
"\n",
|
||||
"print(f\"Train samples: {len(features_train)}, test samples: {len(features_test)}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рд╕реВрдЪрдирд╛\n",
|
||||
"\n",
|
||||
"1. рдзрдбрд╛ рджрд┐рд▓реЗрд▓рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛрдб рдпрд╛ рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ рдкреЗрд╕реНрдЯ рдХрд░рд╛, рдХрд┐рдВрд╡рд╛ (рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ) рд╡реЗрдЧрд│реНрдпрд╛ Python рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдкреЗрд╕реНрдЯ рдХрд░рд╛.\n",
|
||||
"1. рдПрдХ-рд╕реНрддрд░реАрдп рдкрд░рд╕реЗрдкреНрдЯреНрд░реЙрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рд╛, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЖрдгрд┐ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдЪреВрдХрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рд╛.\n",
|
||||
"1. рдУрд╡реНрд╣рд░рдлрд┐рдЯрд┐рдВрдЧ рдЭрд╛рд▓реЗ рдЖрд╣реЗ рдХрд╛ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛ рдЖрдгрд┐ рдЕрдЪреВрдХрддрд╛ рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрддрд░рд╛рдЪреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рд╛.\n",
|
||||
"1. 2- рдЖрдгрд┐ 3-рд╕реНрддрд░реАрдп рдкрд░рд╕реЗрдкреНрдЯреНрд░реЙрдирд╕рд╛рдареА рдорд╛рдЧреАрд▓ рдЪрд░рдгрд╛рдВрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рд╛. рд╕реНрддрд░рд╛рдВрдордзреАрд▓ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдХреНрд░рд┐рдпрддрд╛ рдлрдВрдХреНрд╢рдиреНрд╕рд╕рд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛.\n",
|
||||
"1. рдЦрд╛рд▓реАрд▓ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛:\n",
|
||||
" - рд╕реНрддрд░рд╛рдВрдордзреАрд▓ рд╕рдХреНрд░рд┐рдпрддрд╛ рдлрдВрдХреНрд╢рди рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рддреЗ рдХрд╛?\n",
|
||||
" - рдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ 2- рдХрд┐рдВрд╡рд╛ 3-рд╕реНрддрд░реАрдп рдиреЗрдЯрд╡рд░реНрдХрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдХрд╛?\n",
|
||||
" - рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддрд╛рдирд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрд▓реНрдпрд╛ рдХрд╛? рд╡рд┐рд╢реЗрд╖рддрдГ рд╕реНрддрд░рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд▓реНрдпрд╛рд╡рд░.\n",
|
||||
" - рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рд╡рдЬрди рдХрд╕реЗ рд╡рд╛рдЧрддрд╛рдд? рд╡рдЬрдирд╛рдЪрд╛ рдХрдорд╛рд▓ abs рдореВрд▓реНрдп vs. epoch рдкреНрд▓реЙрдЯ рдХрд░реВрди рд╕рдВрдмрдВрдз рд╕рдордЬреВрди рдШреЗрддрд╛ рдпреЗрдИрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░реЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдиреЗ рдпреБрдХреНрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"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.9.5"
|
||||
},
|
||||
"orig_nbformat": 2,
|
||||
"coopTranslator": {
|
||||
"original_hash": "6fa055f484eb5d6bdf41166a356d3abf",
|
||||
"translation_date": "2025-08-28T08:43:39+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдСрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рд╡рд╛рдкрд░реВрди рддрд│рд╣рд╛рддрд╛рдЪреНрдпрд╛ рд╣рд╛рд▓рдЪрд╛рд▓реАрдВрдЪрд╛ рд╢реЛрдз\n",
|
||||
"\n",
|
||||
"рд╣рд╛ рдкреНрд░рдпреЛрдЧ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"[рд╣рд╛ рд╡реНрд╣рд┐рдбрд┐рдУ](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4) рдкрд╣рд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рдПрдХрд╛ рд╡реНрдпрдХреНрддреАрдЪрд╛ рддрд│рд╣рд╛рдд рд╕реНрдерд┐рд░ рдкрд╛рд░реНрд╢реНрд╡рднреВрдореАрд╡рд░ рдбрд╛рд╡реАрдХрдбреЗ/рдЙрдЬрд╡реАрдХрдбреЗ/рд╡рд░/рдЦрд╛рд▓реА рд╣рд▓рддреЛ.\n",
|
||||
"\n",
|
||||
"**рддреБрдордЪреЗ рдЙрджреНрджрд┐рд╖реНрдЯ** рдСрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рд╡рд╛рдкрд░реВрди рдард░рд╡рдгреЗ рдЖрд╣реЗ рдХреА рд╡реНрд╣рд┐рдбрд┐рдУрдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд░/рдЦрд╛рд▓реА/рдбрд╛рд╡реЗ/рдЙрдЬрд╡реЗ рд╣рд╛рд▓рдЪрд╛рд▓реА рдЖрд╣реЗрдд.\n",
|
||||
"\n",
|
||||
"рд▓реЗрдХреНрдЪрд░рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рд╡реНрд╣рд┐рдбрд┐рдУ рдлреНрд░реЗрдореНрд╕ рдорд┐рд│рд╡реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░рд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛, рд╡реНрдпрд╛рдЦреНрдпрд╛рдирд╛рдд рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рдШрдирджрд╛рдЯ рдСрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рдлреНрд░реЗрдореНрд╕рдЪреА рдЧрдгрдирд╛ рдХрд░рд╛, рдЖрдгрд┐ рдШрдирджрд╛рдЯ рдСрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛрд▓рд╛ рдзреНрд░реБрд╡реАрдп рд╕рдордиреНрд╡рдпрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдСрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рдлреНрд░реЗрдорд╕рд╛рдареА рджрд┐рд╢рд╛рдВрдЪрд╛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рддрдпрд╛рд░ рдХрд░рд╛. рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рджрд╛рдЦрд╡рддреЛ рдХреА рдХрд┐рддреА рд╡реНрд╣реЗрдХреНрдЯрд░реНрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдирдордзреНрдпреЗ рдпреЗрддрд╛рдд, рдЖрдгрд┐ рддреЛ рдлреНрд░реЗрдорд╡рд░реАрд▓ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рджрд┐рд╢рд╛рдВрдЪреНрдпрд╛ рд╣рд╛рд▓рдЪрд╛рд▓реА рд╡реЗрдЧрд│реНрдпрд╛ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"> рддреБрдореНрд╣рд╛рд▓рд╛ рдХрджрд╛рдЪрд┐рдд рдЕрд╢рд╛ рд╕рд░реНрд╡ рд╡реНрд╣реЗрдХреНрдЯрд░реНрд╕рдирд╛ рд╢реВрдиреНрдп рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рдЬреНрдпрд╛рдВрдЪреА рдореЕрдЧреНрдирд┐рдЯреНрдпреВрдб рдард░рд╛рд╡рд┐рдХ рдереНрд░реЗрд╢рд╣реЛрд▓реНрдбрдЪреНрдпрд╛ рдЦрд╛рд▓реА рдЖрд╣реЗ. рдпрд╛рдореБрд│реЗ рд╡реНрд╣рд┐рдбрд┐рдУрдордзреАрд▓ рдбреЛрд│реЗ рдЖрдгрд┐ рдбреЛрдХреЗ рдпрд╛рдВрд╕рд╛рд░рдЦреНрдпрд╛ рдЫреЛрдЯреНрдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣рд╛рд▓рдЪрд╛рд▓реА рджреВрд░ рд╣реЛрддреАрд▓.\n",
|
||||
"\n",
|
||||
"рдХрд╛рд╣реА рдлреНрд░реЗрдореНрд╕рд╕рд╛рдареА рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдореНрд╕ рдкреНрд▓реЙрдЯ рдХрд░рд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдордХрдбреЗ рдкрд╛рд╣рддрд╛рдирд╛, рд╣рд╛рд▓рдЪрд╛рд▓реАрдЪреА рджрд┐рд╢рд╛ рдХрд╢реА рдард░рд╡рд╛рдпрдЪреА рд╣реЗ рд╕рдордЬрдгреЗ рд╕реЛрдкреЗ рдЕрд╕рд╛рд╡реЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛ рдмрд┐рдиреНрд╕ рдирд┐рд╡рдбрд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓ рдЬреНрдпрд╛ рд╡рд░/рдЦрд╛рд▓реА/рдбрд╛рд╡реАрдХрдбреЗ/рдЙрдЬрд╡реАрдХрдбреЗ рджрд┐рд╢рд╛рдВрдирд╛ рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд рдЖрдгрд┐ рдЬреНрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд░реНрдпрд╛рджреЗрдкреЗрдХреНрд╖рд╛ рд╡рд░ рдЖрд╣реЗрдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрднрд┐рдирдВрджрди! рдЬрд░ рддреБрдореНрд╣реА рд╡рд░реАрд▓ рд╕рд░реНрд╡ рдЪрд░рдг рдкреВрд░реНрдг рдХреЗрд▓реЗ рдЕрд╕рддреАрд▓, рддрд░ рддреБрдореНрд╣реА рдкреНрд░рдпреЛрдЧрд╢рд╛рд│рд╛ рдкреВрд░реНрдг рдХреЗрд▓реА рдЖрд╣реЗ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "153d9e417e079bf62f8f693002d0deaf",
|
||||
"translation_date": "2025-08-28T08:09:26+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,577 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдордЬрдХреВрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп\n",
|
||||
"\n",
|
||||
"рдЬрд╕реЗ рдЖрдкрдг рдЖрдзреА рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓реЗ рдЖрд╣реЗ, рдЖрдкрдг **AG_NEWS** рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕рд╛рдзреЗ рдордЬрдХреВрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рдордерд│реНрдпрд╛рдВрдирд╛ рдЪрд╛рд░ рд╢реНрд░реЗрдгреАрдВрдордзреНрдпреЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ: рдЬрд╛рдЧрддрд┐рдХ, рдХреНрд░реАрдбрд╛, рд╡реНрдпрд╡рд╕рд╛рдп рдЖрдгрд┐ рд╡рд┐рдЬреНрдЮрд╛рди/рддрдВрддреНрд░рдЬреНрдЮрд╛рди.\n",
|
||||
"\n",
|
||||
"## рдбреЗрдЯрд╛рд╕реЗрдЯ\n",
|
||||
"\n",
|
||||
"рд╣рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ [`torchtext`](https://github.com/pytorch/text) рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдЕрдВрдЧрднреВрдд рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрдг рдпрд╛рд▓рд╛ рд╕рд╣рдЬрдкрдгреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import os\n",
|
||||
"import collections\n",
|
||||
"os.makedirs('./data',exist_ok=True)\n",
|
||||
"train_dataset, test_dataset = torchtext.datasets.AG_NEWS(root='./data')\n",
|
||||
"classes = ['World', 'Sports', 'Business', 'Sci/Tech']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЗрдереЗ, `train_dataset` рдЖрдгрд┐ `test_dataset` рдордзреНрдпреЗ рдЕрд╢рд╛ рд╕рдВрдЧреНрд░рд╣рд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ рдЬреЗ рдЕрдиреБрдХреНрд░рдореЗ рд╡рд░реНрдЧрд╛рдЪрд╛ рдХреНрд░рдорд╛рдВрдХ (рд▓реЗрдмрд▓) рдЖрдгрд┐ рдордЬрдХреВрд░рд╛рдЪреА рдЬреЛрдб рдкрд░рдд рдХрд░рддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(3,\n",
|
||||
" \"Wall St. Bears Claw Back Into the Black (Reuters) Reuters - Short-sellers, Wall Street's dwindling\\\\band of ultra-cynics, are seeing green again.\")"
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"list(train_dataset)[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдордЧ, рдЪрд▓рд╛ рдЖрдкрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреАрд▓ рдкрд╣рд┐рд▓реНрдпрд╛ 10 рдирд╡реАрди рд╣реЗрдбрд▓рд╛рдИрдиреНрд╕ рдкреНрд░рд┐рдВрдЯ рдХрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"**Sci/Tech** -> Wall St. Bears Claw Back Into the Black (Reuters) Reuters - Short-sellers, Wall Street's dwindling\\band of ultra-cynics, are seeing green again.\n",
|
||||
"**Sci/Tech** -> Carlyle Looks Toward Commercial Aerospace (Reuters) Reuters - Private investment firm Carlyle Group,\\which has a reputation for making well-timed and occasionally\\controversial plays in the defense industry, has quietly placed\\its bets on another part of the market.\n",
|
||||
"**Sci/Tech** -> Oil and Economy Cloud Stocks' Outlook (Reuters) Reuters - Soaring crude prices plus worries\\about the economy and the outlook for earnings are expected to\\hang over the stock market next week during the depth of the\\summer doldrums.\n",
|
||||
"**Sci/Tech** -> Iraq Halts Oil Exports from Main Southern Pipeline (Reuters) Reuters - Authorities have halted oil export\\flows from the main pipeline in southern Iraq after\\intelligence showed a rebel militia could strike\\infrastructure, an oil official said on Saturday.\n",
|
||||
"**Sci/Tech** -> Oil prices soar to all-time record, posing new menace to US economy (AFP) AFP - Tearaway world oil prices, toppling records and straining wallets, present a new economic menace barely three months before the US presidential elections.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for i,x in zip(range(5),train_dataset):\n",
|
||||
" print(f\"**{classes[x[0]]}** -> {x[1]}\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕ рдЗрдЯрд░реЗрдЯрд░ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЬрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдбреЗрдЯрд╛ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓ рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреЛ рдпрд╛рджреАрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"train_dataset, test_dataset = torchtext.datasets.AG_NEWS(root='./data')\n",
|
||||
"train_dataset = list(train_dataset)\n",
|
||||
"test_dataset = list(test_dataset)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рди\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдордЬрдХреВрд░ **рд╕рдВрдЦреНрдпрд╛рдВрдордзреНрдпреЗ** рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЯреЗрдиреНрд╕рд░реНрд╕ рдореНрд╣рдгреВрди рдХрд░рддрд╛ рдпреЗрдИрд▓. рдЬрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╢рдмреНрдж-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣рд╡реЗ рдЕрд╕реЗрд▓, рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреЛрди рдЧреЛрд╖реНрдЯреА рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓:\n",
|
||||
"* **рдЯреЛрдХрдирд╛рдпрдЭрд░** рд╡рд╛рдкрд░реВрди рдордЬрдХреВрд░ **рдЯреЛрдХрдиреНрд╕** рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреЗ\n",
|
||||
"* рддреНрдпрд╛ рдЯреЛрдХрдиреНрд╕рдЪреЗ **рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣** рддрдпрд╛рд░ рдХрд░рдгреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['he', 'said', 'hello']"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer = torchtext.data.utils.get_tokenizer('basic_english')\n",
|
||||
"tokenizer('He said: hello')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" counter.update(tokenizer(line))\n",
|
||||
"vocab = torchtext.vocab.vocab(counter, min_freq=1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рд╡рд╛рдкрд░реВрди, рдЖрдкрдг рд╕рд╣рдЬрдкрдгреЗ рдЖрдордЪреНрдпрд╛ рдЯреЛрдХрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрд▓рд╛ рд╕рдВрдЦреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЪрд╛рдордзреНрдпреЗ рдПрдиреНрдХреЛрдб рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocab size if 95810\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[599, 3279, 97, 1220, 329, 225, 7368]"
|
||||
]
|
||||
},
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(f\"Vocab size if {vocab_size}\")\n",
|
||||
"\n",
|
||||
"stoi = vocab.get_stoi() # dict to convert tokens to indices\n",
|
||||
"\n",
|
||||
"def encode(x):\n",
|
||||
" return [stoi[s] for s in tokenizer(x)]\n",
|
||||
"\n",
|
||||
"encode('I love to play with my words')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╢рдмреНрджрд╛рдВрдЪреА рдкрд┐рд╢рд╡реА (Bag of Words) рдордЬрдХреВрд░рд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡\n",
|
||||
"\n",
|
||||
"рдХрд╛рд░рдг рд╢рдмреНрдж рдЕрд░реНрде рд╡реНрдпрдХреНрдд рдХрд░рддрд╛рдд, рдХрдзреА рдХрдзреА рдЖрдкрдг рдлрдХреНрдд рд╕реНрд╡рддрдВрддреНрд░ рд╢рдмреНрджрд╛рдВрдХрдбреЗ рдкрд╛рд╣реВрди, рд╡рд╛рдХреНрдпрд╛рддреАрд▓ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреНрд░рдорд╛рдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░реВрди, рдордЬрдХреВрд░рд╛рдЪрд╛ рдЕрд░реНрде рд╕рдордЬреВ рд╢рдХрддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ рдмрд╛рддрдореНрдпрд╛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рд╛рдпрдЪреНрдпрд╛ рдЕрд╕рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ *weather* (рд╣рд╡рд╛рдорд╛рди), *snow* (рд╣рд┐рдорд╡реГрд╖реНрдЯреА) рдпрд╛рдВрд╕рд╛рд░рдЦреЗ рд╢рдмреНрдж *рд╣рд╡рд╛рдорд╛рди рдЕрдВрджрд╛рдЬ* рджрд░реНрд╢рд╡рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЕрд╕рддреЗ, рддрд░ *stocks* (рд╢реЗрдЕрд░реНрд╕), *dollar* (рдбреЙрд▓рд░) рдпрд╛рдВрд╕рд╛рд░рдЦреЗ рд╢рдмреНрдж *рдЖрд░реНрдерд┐рдХ рдмрд╛рддрдореНрдпрд╛* рдпрд╛рдХрдбреЗ рдЭреБрдХрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"**рд╢рдмреНрджрд╛рдВрдЪреА рдкрд┐рд╢рд╡реА** (BoW) рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдВрдкреИрдХреА рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдгрд╛рд░реЗ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдПрдХрд╛ рд╡реЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рд╢реА рдЬреЛрдбрд▓реЗрд▓рд╛ рдЕрд╕рддреЛ, рдЖрдгрд┐ рд╡реЗрдХреНрдЯрд░ рдШрдЯрдХ рджрд┐рд▓реЗрд▓реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдд рддреНрдпрд╛ рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреА рд╕рдВрдЦреНрдпрд╛ рджрд░реНрд╢рд╡рддреЛ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк**: рддреБрдореНрд╣реА BoW рд▓рд╛ рдордЬрдХреВрд░рд╛рддреАрд▓ рд╕реНрд╡рддрдВрддреНрд░ рд╢рдмреНрджрд╛рдВрд╕рд╛рдареА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдПрдХ-рд╣реЙрдЯ-рдПрдиреНрдХреЛрдбреЗрдб рд╡реЗрдХреНрдЯрд░рдЪреНрдпрд╛ рдмреЗрд░реАрдЬрдкреНрд░рдорд╛рдгреЗ рджреЗрдЦреАрд▓ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛.\n",
|
||||
"\n",
|
||||
"рдЦрд╛рд▓реА Scikit Learn рдкрд╛рдпрдерди рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░реВрди рд╢рдмреНрджрд╛рдВрдЪреА рдкрд┐рд╢рд╡реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдпрд╛рдЪреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рд▓реЗ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 1, 0, 2, 0, 0, 0, 0, 0]], dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import CountVectorizer\n",
|
||||
"vectorizer = CountVectorizer()\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"vectorizer.fit_transform(corpus)\n",
|
||||
"vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдордЪреНрдпрд╛ AG_NEWS рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреНрдпрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзреАрддреВрди рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рд╡реНрд╣реЗрдХреНрдЯрд░ рдЧрдгрдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"tensor([2., 1., 2., ..., 0., 0., 0.])\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = len(vocab)\n",
|
||||
"\n",
|
||||
"def to_bow(text,bow_vocab_size=vocab_size):\n",
|
||||
" res = torch.zeros(bow_vocab_size,dtype=torch.float32)\n",
|
||||
" for i in encode(text):\n",
|
||||
" if i<bow_vocab_size:\n",
|
||||
" res[i] += 1\n",
|
||||
" return res\n",
|
||||
"\n",
|
||||
"print(to_bow(train_dataset[0][1]))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк:** рдпреЗрдереЗ рдЖрдореНрд╣реА рдЬрд╛рдЧрддрд┐рдХ `vocab_size` рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдбреАрдлреЙрд▓реНрдЯ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдХрд╛рд░рдг рдЕрдиреЗрдХрджрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдЦреВрдк рдореЛрдард╛ рдЕрд╕рддреЛ, рдЖрдкрдг рд╕рд░реНрд╡рд╛рдд рд╡рд╛рд░рдВрд╡рд╛рд░ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдкрд░реНрдпрдВрдд рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ рд╢рдХрддреЛ. `vocab_size` рдореВрд▓реНрдп рдХрдореА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛ рдЖрдгрд┐ рдЦрд╛рд▓реАрд▓ рдХреЛрдб рдЪрд╛рд▓рд╡рд╛, рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдЕрдЪреВрдХрддреЗрд╡рд░ рдХрд╕рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЛ рддреЗ рдкрд╣рд╛. рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рдЕрдЪреВрдХрддреЗрдд рдШрдЯ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЕрд╕рд╛рд╡реА, рдкрд░рдВрддреБ рддреА рдирд╛рдЯреНрдпрдордп рдирд╕рд╛рд╡реА, рдЙрдЪреНрдЪ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреНрдпрд╛ рдмрджрд▓реНрдпрд╛рдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BoW рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдордЬрдХреБрд░рд╛рдЪреЗ рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ (BoW) рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рддреЗ рд╢рд┐рдХрд▓реЛ рдЖрд╣реЛрдд, рдЪрд▓рд╛ рддреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдКрдпрд╛. рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрдкрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рдЕрд╕реЗ рд░реВрдкрд╛рдВрддрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХреА, рд╕рд░реНрд╡ рд╕реНрдерд┐рддреА рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддреАрд▓. рд╣реЗ `bowify` рдлрдВрдХреНрд╢рдирд▓рд╛ `collate_fn` рдкреЕрд░рд╛рдореАрдЯрд░ рдореНрд╣рдгреВрди рд╕реНрдЯрдБрдбрд░реНрдб torch `DataLoader` рдордзреНрдпреЗ рдкрд╛рд╕ рдХрд░реВрди рд╕рд╛рдзреНрдп рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from torch.utils.data import DataLoader\n",
|
||||
"import numpy as np \n",
|
||||
"\n",
|
||||
"# this collate function gets list of batch_size tuples, and needs to \n",
|
||||
"# return a pair of label-feature tensors for the whole minibatch\n",
|
||||
"def bowify(b):\n",
|
||||
" return (\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([to_bow(t[1]) for t in b])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = DataLoader(train_dataset, batch_size=16, collate_fn=bowify, shuffle=True)\n",
|
||||
"test_loader = DataLoader(test_dataset, batch_size=16, collate_fn=bowify, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдПрдХ рд╕рд╛рдзрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рдгрд╛рд░рд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдПрдХрдЪ рд░реЗрдЦреАрдп рд╕реНрддрд░ рдЖрд╣реЗ. рдЗрдирдкреБрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рдЪрд╛ рдЖрдХрд╛рд░ `vocab_size` рдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪрд╛ рдЖрд╣реЗ, рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯрдЪрд╛ рдЖрдХрд╛рд░ рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрд╢реА (4) рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рдХрд╛рд░рдг рдЖрдкрдг рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рд╕реЛрдбрд╡рдд рдЖрд╣реЛрдд, рдЕрдВрддрд┐рдо рд╕рдХреНрд░рд┐рдпрддрд╛ рдлрдВрдХреНрд╢рди `LogSoftmax()` рдЖрд╣реЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"net = torch.nn.Sequential(torch.nn.Linear(vocab_size,4),torch.nn.LogSoftmax(dim=1))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдорд╛рдирдХ PyTorch рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реВрдк рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ. рдХрд╛рд░рдг рдЖрдкрд▓рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдЦреВрдк рдореЛрдард╛ рдЖрд╣реЗ, рд╢рд┐рдХреНрд╖рдгрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ рдЖрдкрдг рдлрдХреНрдд рдПрдХрд╛ epoch рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдК, рдЖрдгрд┐ рдХрдзреА рдХрдзреА рдПрдХрд╛ epoch рдкреЗрдХреНрд╖рд╛ рдХрдореА (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА `epoch_size` рдкреЕрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ). рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рд╕рдВрдЪрд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЕрдЪреВрдХрддрд╛ рджреЗрдЦреАрд▓ рдЖрдореНрд╣реА рдиреЛрдВрджрд╡реВ; рдиреЛрдВрджрд╡рдгреНрдпрд╛рдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ `report_freq` рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рд╛рдкрд░реВрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реА рдЬрд╛рддреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 24,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def train_epoch(net,dataloader,lr=0.01,optimizer=None,loss_fn = torch.nn.NLLLoss(),epoch_size=None, report_freq=200):\n",
|
||||
" optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr)\n",
|
||||
" net.train()\n",
|
||||
" total_loss,acc,count,i = 0,0,0,0\n",
|
||||
" for labels,features in dataloader:\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" out = net(features)\n",
|
||||
" loss = loss_fn(out,labels) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" total_loss+=loss\n",
|
||||
" _,predicted = torch.max(out,1)\n",
|
||||
" acc+=(predicted==labels).sum()\n",
|
||||
" count+=len(labels)\n",
|
||||
" i+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"{count}: acc={acc.item()/count}\")\n",
|
||||
" if epoch_size and count>epoch_size:\n",
|
||||
" break\n",
|
||||
" return total_loss.item()/count, acc.item()/count"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 25,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.8028125\n",
|
||||
"6400: acc=0.8371875\n",
|
||||
"9600: acc=0.8534375\n",
|
||||
"12800: acc=0.85765625\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.026090790722161722, 0.8620069296375267)"
|
||||
]
|
||||
},
|
||||
"execution_count": 25,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_epoch(net,train_loader,epoch_size=15000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдмрд╛рдпрдЧреНрд░рд╛рдореНрд╕, рдЯреНрд░рд╛рдпрдЧреНрд░рд╛рдореНрд╕ рдЖрдгрд┐ рдПрди-рдЧреНрд░рд╛рдореНрд╕\n",
|
||||
"\n",
|
||||
"рдмреЕрдЧ рдСрдл рд╡рд░реНрдбреНрд╕ рдкрджреНрдзрддреАрдЪреА рдПрдХ рдорд░реНрдпрд╛рджрд╛ рдореНрд╣рдгрдЬреЗ рдХрд╛рд╣реА рд╢рдмреНрдж рд╣реЗ рдмрд╣реБ-рд╢рдмреНрдж рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдЪрд╛ рднрд╛рдЧ рдЕрд╕рддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 'hot dog' рдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рдЕрд░реНрде рдЗрддрд░ рд╕рдВрджрд░реНрднрд╛рдВрддреАрд▓ 'hot' рдЖрдгрд┐ 'dog' рдпрд╛ рд╢рдмреНрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│рд╛ рдЕрд╕рддреЛ. рдЬрд░ рдЖрдкрдг 'hot' рдЖрдгрд┐ 'dog' рдпрд╛ рд╢рдмреНрджрд╛рдВрдЪреЗ рдиреЗрд╣рдореА рд╕рдорд╛рди рд╡реНрд╣реЗрдХреНрдЯрд░рджреНрд╡рд╛рд░реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗрд▓реЗ, рддрд░ рддреЗ рдЖрдкрд▓реНрдпрд╛ рдореЙрдбреЗрд▓рд╕рд╛рдареА рдЧреЛрдВрдзрд│ рдирд┐рд░реНрдорд╛рдг рдХрд░реВ рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдпрд╛рд╡рд░ рдЙрдкрд╛рдп рдореНрд╣рдгреВрди, **рдПрди-рдЧреНрд░рд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡** рджрд╕реНрддрдРрд╡рдЬ рд╡рд░реНрдЧреАрдХрд░рдгрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рдЬрд┐рдереЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж, рджреНрд╡рд┐-рд╢рдмреНрдж рдХрд┐рдВрд╡рд╛ рддреНрд░рд┐-рд╢рдмреНрджрд╛рдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рдгрд╛рд░реЗ рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдард░рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдмрд╛рдпрдЧреНрд░рд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдордзреНрдпреЗ, рдореВрд│ рд╢рдмреНрджрд╛рдВрд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╕рд░реНрд╡ рд╢рдмреНрджрдЬреЛрдбреНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдЦрд╛рд▓реА рджрд┐рд▓реЗрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХрд╛рдпрдХреАрдЯ рд▓рд░реНрди рд╡рд╛рдкрд░реВрди рдмрд╛рдпрдЧреНрд░рд╛рдо рдмреЕрдЧ рдСрдл рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рд╣реЗ рджрд░реНрд╢рд╡рддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary:\n",
|
||||
" {'i': 7, 'like': 11, 'hot': 4, 'dogs': 2, 'i like': 8, 'like hot': 12, 'hot dogs': 5, 'the': 16, 'dog': 0, 'ran': 14, 'fast': 3, 'the dog': 17, 'dog ran': 1, 'ran fast': 15, 'its': 9, 'outside': 13, 'its hot': 10, 'hot outside': 6}\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 26,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"bigram_vectorizer = CountVectorizer(ngram_range=(1, 2), token_pattern=r'\\b\\w+\\b', min_df=1)\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"bigram_vectorizer.fit_transform(corpus)\n",
|
||||
"print(\"Vocabulary:\\n\",bigram_vectorizer.vocabulary_)\n",
|
||||
"bigram_vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"N-gram рдкрджреНрдзрддреАрдЪрд╛ рдореБрдЦреНрдп рддреЛрдЯрд╛ рдореНрд╣рдгрдЬреЗ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдЦреВрдк рд╡реЗрдЧрд╛рдиреЗ рд╡рд╛рдврддреЛ. рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ N-gram рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛рд╣реА рдкрд░рд┐рдорд╛рдг рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддрдВрддреНрд░рд╛рдВрд╕рд╣ рдПрдХрддреНрд░ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреЗ, рдЬрд╕реЗ рдХреА *embeddings*, рдЬреНрдпрд╛рдмрджреНрджрд▓ рдЖрдкрдг рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЪрд░реНрдЪрд╛ рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"**AG News** рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреНрдпреЗ N-gram рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡рд┐рд╢реЗрд╖ ngram рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 27,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Bigram vocabulary length = 1308842\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" l = tokenizer(line)\n",
|
||||
" counter.update(torchtext.data.utils.ngrams_iterator(l,ngrams=2))\n",
|
||||
" \n",
|
||||
"bi_vocab = torchtext.vocab.vocab(counter, min_freq=1)\n",
|
||||
"\n",
|
||||
"print(\"Bigram vocabulary length = \",len(bi_vocab))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдкрдг рд╡рд░ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдХреЛрдбрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рд╣реЗ рдЦреВрдк рдореЗрдорд░реА-рдЕрдХрд╛рд░реНрдпрдХреНрд╖рдо рдард░реЗрд▓. рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдЖрдкрдг рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рд╡рд╛рдкрд░реВрди рдмрд┐рдЧреНрд░рд╛рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк:** рддреБрдореНрд╣реА рдлрдХреНрдд рддреЗ ngrams рдареЗрд╡реВ рд╢рдХрддрд╛ рдЬреЗ рдордЬрдХреБрд░рд╛рдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡реЗрд│реЗрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│рд╛ рдпреЗрддрд╛рдд. рдпрд╛рдореБрд│реЗ рдХрдореА рд╡рд╛рд░рдВрд╡рд╛рд░ рдпреЗрдгрд╛рд░реЗ рдмрд┐рдЧреНрд░рд╛рдо рд╡рдЧрд│рд▓реЗ рдЬрд╛рддреАрд▓ рдЖрдгрд┐ рдкрд░рд┐рдорд╛рдгрд╛рддреНрдордХрддрд╛ рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдХрдореА рд╣реЛрдИрд▓. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, `min_freq` рдкреЕрд░рд╛рдореАрдЯрд░рд▓рд╛ рдЙрдЪреНрдЪ рдореВрд▓реНрдпрд╛рд╡рд░ рд╕реЗрдЯ рдХрд░рд╛ рдЖрдгрд┐ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрддреАрд▓ рдмрджрд▓ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реА рдЗрдиреНрд╡реНрд╣рд░реНрд╕ рдбреЙрдХреНрдпреБрдореЗрдВрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реА TF-IDF\n",
|
||||
"\n",
|
||||
"BoW (рдмреЕрдЧ рдСрдл рд╡рд░реНрдбреНрд╕) рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдордзреНрдпреЗ, рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрд▓рд╛ рд╕рдорд╛рди рд╡рдЬрди рджрд┐рд▓реЗ рдЬрд╛рддреЗ, рд╢рдмреНрдж рд╕реНрд╡рддрдГ рдХреЛрдгрддрд╛рд╣реА рд╡рд┐рдЪрд╛рд░ рди рдХрд░рддрд╛. рдкрд░рдВрддреБ, рд╣реЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ рдХреА рд╡рд╛рд░рдВрд╡рд╛рд░ рдпреЗрдгрд╛рд░реЗ рд╢рдмреНрдж, рдЬрд╕реЗ рдХреА *a*, *in*, рдЗрддреНрдпрд╛рджреА рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА рдХрдореА рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЕрд╕рддрд╛рдд, рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд. рдЦрд░рдВ рддрд░, рдмрд╣реБрддреЗрдХ NLP рдХрд╛рд░реНрдпрд╛рдВрдордзреНрдпреЗ рдХрд╛рд╣реА рд╢рдмреНрдж рдЗрддрд░рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЕрд╕рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"**TF-IDF** рдореНрд╣рдгрдЬреЗ **рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реАтАУрдЗрдиреНрд╡реНрд╣рд░реНрд╕ рдбреЙрдХреНрдпреБрдореЗрдВрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реА**. рд╣реЗ рдмреЕрдЧ рдСрдл рд╡рд░реНрдбреНрд╕рдЪреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ 0/1 рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдореВрд▓реНрдпрд╛рдЪреНрдпрд╛ рдРрд╡рдЬреА, рдЬреЗ рдПрдЦрд╛рджреНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреЗ рд╕реВрдЪрдХ рдЕрд╕рддреЗ, рдПрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдореВрд▓реНрдп рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рдЬреЗ рдХреЙрд░реНрдкрд╕рдордзреНрдпреЗ рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рддреЗ.\n",
|
||||
"\n",
|
||||
"рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХрдкрдгреЗ, рджрд╕реНрддрдРрд╡рдЬ $j$ рдордзреАрд▓ рд╢рдмреНрдж $i$ рдЪреЗ рд╡рдЬрди $w_{ij}$ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ:\n",
|
||||
"$$\n",
|
||||
"w_{ij} = tf_{ij}\\times\\log({N\\over df_i})\n",
|
||||
"$$\n",
|
||||
"рдЬрд┐рдереЗ\n",
|
||||
"* $tf_{ij}$ рдореНрд╣рдгрдЬреЗ $j$ рдордзреНрдпреЗ $i$ рдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреА рд╕рдВрдЦреНрдпрд╛, рдореНрд╣рдгрдЬреЗрдЪ рдЖрдкрдг рдпрд╛рдкреВрд░реНрд╡реА рдкрд╛рд╣рд┐рд▓реЗрд▓реЗ BoW рдореВрд▓реНрдп\n",
|
||||
"* $N$ рдореНрд╣рдгрдЬреЗ рд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛\n",
|
||||
"* $df_i$ рдореНрд╣рдгрдЬреЗ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣рд╛рдд рд╢рдмреНрдж $i$ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛\n",
|
||||
"\n",
|
||||
"TF-IDF рдореВрд▓реНрдп $w_{ij}$ рджрд╕реНрддрдРрд╡рдЬрд╛рдордзреНрдпреЗ рдПрдЦрд╛рджрд╛ рд╢рдмреНрдж рдХрд┐рддреА рд╡реЗрд│рд╛ рджрд┐рд╕рддреЛ рдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╡рд╛рдврддреЗ рдЖрдгрд┐ рдХреЙрд░реНрдкрд╕рдордзреНрдпреЗ рддреНрдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдХрд╛рд╣реА рд╢рдмреНрдж рдЗрддрд░рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рд╡рд╛рд░рдВрд╡рд╛рд░ рджрд┐рд╕рддрд╛рдд рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рдПрдЦрд╛рджрд╛ рд╢рдмреНрдж рд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ *рдкреНрд░рддреНрдпреЗрдХ* рджрд╕реНрддрдРрд╡рдЬрд╛рдордзреНрдпреЗ рджрд┐рд╕рддреЛ, рддрд░ $df_i=N$, рдЖрдгрд┐ $w_{ij}=0$, рдЖрдгрд┐ рдЕрд╕реЗ рд╢рдмреНрдж рдкреВрд░реНрдгрдкрдгреЗ рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓.\n",
|
||||
"\n",
|
||||
"рддреБрдореНрд╣реА Scikit Learn рд╡рд╛рдкрд░реВрди рд╕рд╣рдЬрдкрдгреЗ рдЯреЗрдХреНрд╕реНрдЯрдЪреЗ TF-IDF рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭреЗрд╢рди рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 28,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[0.43381609, 0. , 0.43381609, 0. , 0.65985664,\n",
|
||||
" 0.43381609, 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. , 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. ]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 28,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
|
||||
"vectorizer = TfidfVectorizer(ngram_range=(1,2))\n",
|
||||
"vectorizer.fit_transform(corpus)\n",
|
||||
"vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдирд┐рд╖реНрдХрд░реНрд╖\n",
|
||||
"\n",
|
||||
"рдЬрд░реА TF-IDF рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдирд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрдЪреЗ рд╡рдЬрди рдкреНрд░рджрд╛рди рдХрд░рдд рдЕрд╕рд▓реЗ рддрд░реА рддреЗ рдЕрд░реНрде рдХрд┐рдВрд╡рд╛ рдХреНрд░рдо рджрд░реНрд╢рд╡реВ рд╢рдХрдд рдирд╛рд╣реАрдд. рдкреНрд░рд╕рд┐рджреНрдз рднрд╛рд╖рд╛рд╢рд╛рд╕реНрддреНрд░рдЬреНрдЮ рдЬреЗ. рдЖрд░. рдлрд░реНрде рдпрд╛рдВрдиреА 1935 рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, тАЬрд╢рдмреНрджрд╛рдЪрд╛ рд╕рдВрдкреВрд░реНрдг рдЕрд░реНрде рдиреЗрд╣рдореАрдЪ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдЕрд╕рддреЛ, рдЖрдгрд┐ рд╕рдВрджрд░реНрднрд╛рд╢рд┐рд╡рд╛рдп рдЕрд░реНрдерд╛рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдЧрдВрднреАрд░рдкрдгреЗ рдШреЗрддрд▓рд╛ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.тАЭ. рдпрд╛ рдЕрднреНрдпрд╛рд╕рдХреНрд░рдорд╛рдд рдкреБрдвреЗ рдЖрдкрдг рднрд╛рд╖реЗрдЪреЗ рдореЙрдбреЗрд▓рд┐рдВрдЧ рд╡рд╛рдкрд░реВрди рдордЬрдХреБрд░рд╛рддреВрди рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдорд╛рд╣рд┐рддреА рдХрд╢реА рдорд┐рд│рд╡рд╛рдпрдЪреА рддреЗ рд╢рд┐рдХреВ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░реЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдиреЗ рдпреБрдХреНрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "7b9040985e748e4e2d4c689892456ad7",
|
||||
"translation_date": "2025-08-28T09:50:31+00:00",
|
||||
"source_file": "lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,647 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдордЬрдХреВрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ, рдЖрдкрдг **[AG_NEWS](http://www.di.unipi.it/~gulli/AG_corpus_of_news_articles.html)** рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рдПрдХ рд╕рд╛рдзреЗ рдордЬрдХреВрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рд╕реБрд░реВ рдХрд░реВ. рдЖрдкрдг рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рдордерд│реНрдпрд╛рдВрдирд╛ рдЪрд╛рд░ рд╢реНрд░реЗрдгреАрдВрдордзреНрдпреЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реВ: рдЬрд╛рдЧрддрд┐рдХ, рдХреНрд░реАрдбрд╛, рд╡реНрдпрд╡рд╕рд╛рдп рдЖрдгрд┐ рд╡рд┐рдЬреНрдЮрд╛рди/рддрдВрддреНрд░рдЬреНрдЮрд╛рди.\n",
|
||||
"\n",
|
||||
"## рдбреЗрдЯрд╛рд╕реЗрдЯ\n",
|
||||
"\n",
|
||||
"рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг **[TensorFlow Datasets](https://www.tensorflow.org/datasets)** API рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"\n",
|
||||
"# In this tutorial, we will be training a lot of models. In order to use GPU memory cautiously,\n",
|
||||
"# we will set tensorflow option to grow GPU memory allocation when required.\n",
|
||||
"physical_devices = tf.config.list_physical_devices('GPU') \n",
|
||||
"if len(physical_devices)>0:\n",
|
||||
" tf.config.experimental.set_memory_growth(physical_devices[0], True)\n",
|
||||
"\n",
|
||||
"dataset = tfds.load('ag_news_subset')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг `dataset['train']` рдЖрдгрд┐ `dataset['test']` рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреНрдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЖрдгрд┐ рдЪрд╛рдЪрдгреА рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Length of train dataset = 120000\n",
|
||||
"Length of test dataset = 7600\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"ds_train = dataset['train']\n",
|
||||
"ds_test = dataset['test']\n",
|
||||
"\n",
|
||||
"print(f\"Length of train dataset = {len(ds_train)}\")\n",
|
||||
"print(f\"Length of test dataset = {len(ds_test)}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдЖрдкрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреАрд▓ рдкрд╣рд┐рд▓реНрдпрд╛ 10 рдирд╡реАрди рдордерд│реЗ рдЫрд╛рдкреВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3 (Sci/Tech) -> b'AMD Debuts Dual-Core Opteron Processor' b'AMD #39;s new dual-core Opteron chip is designed mainly for corporate computing applications, including databases, Web services, and financial transactions.'\n",
|
||||
"1 (Sports) -> b\"Wood's Suspension Upheld (Reuters)\" b'Reuters - Major League Baseball\\\\Monday announced a decision on the appeal filed by Chicago Cubs\\\\pitcher Kerry Wood regarding a suspension stemming from an\\\\incident earlier this season.'\n",
|
||||
"2 (Business) -> b'Bush reform may have blue states seeing red' b'President Bush #39;s quot;revenue-neutral quot; tax reform needs losers to balance its winners, and people claiming the federal deduction for state and local taxes may be in administration planners #39; sights, news reports say.'\n",
|
||||
"3 (Sci/Tech) -> b\"'Halt science decline in schools'\" b'Britain will run out of leading scientists unless science education is improved, says Professor Colin Pillinger.'\n",
|
||||
"1 (Sports) -> b'Gerrard leaves practice' b'London, England (Sports Network) - England midfielder Steven Gerrard injured his groin late in Thursday #39;s training session, but is hopeful he will be ready for Saturday #39;s World Cup qualifier against Austria.'\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"classes = ['World', 'Sports', 'Business', 'Sci/Tech']\n",
|
||||
"\n",
|
||||
"for i,x in zip(range(5),ds_train):\n",
|
||||
" print(f\"{x['label']} ({classes[x['label']]}) -> {x['title']} {x['description']}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯреЗрдХреНрд╕реНрдЯ рд╡реЗрдХреНрдЯрд░рд╛рдпрдЭреЗрд╢рди\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯреЗрдХреНрд╕реНрдЯрд▓рд╛ **рд╕рдВрдЦреНрдпрд╛** рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЯреЗрдиреНрд╕рд░реНрд╕ рдореНрд╣рдгреВрди рдХрд░рддрд╛ рдпреЗрдИрд▓. рдЬрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╢рдмреНрдж-рд╕реНрддрд░реАрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣рд╡реЗ рдЕрд╕реЗрд▓, рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреЛрди рдЧреЛрд╖реНрдЯреА рдХрд░рд╛рд╡реНрдпрд╛ рд▓рд╛рдЧрддреАрд▓:\n",
|
||||
"\n",
|
||||
"* рдЯреЗрдХреНрд╕реНрдЯрд▓рд╛ **рдЯреЛрдХрдиреНрд╕** рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА **рдЯреЛрдХрдирд╛рдпрдЭрд░** рд╡рд╛рдкрд░рд╛.\n",
|
||||
"* рддреНрдпрд╛ рдЯреЛрдХрдиреНрд╕рдЪреЗ **рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣** рддрдпрд╛рд░ рдХрд░рд╛.\n",
|
||||
"\n",
|
||||
"### рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"AG News рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдЦреВрдк рдореЛрдард╛ рдЖрд╣реЗ, 100k рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рд╢рдмреНрдж. рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯреЗрдХреНрд╕реНрдЯрдордзреНрдпреЗ рдХреНрд╡рдЪрд┐рддрдЪ рдЖрдврд│рдгрд╛рд░реЗ рд╢рдмреНрдж рдЖрд╡рд╢реНрдпрдХ рдирд╕рддрд╛рдд тАФ рдлрдХреНрдд рдХрд╛рд╣реА рд╡рд╛рдХреНрдпрд╛рдВрдордзреНрдпреЗ рддреЗ рдЕрд╕рддреАрд▓, рдЖрдгрд┐ рдореЙрдбреЗрд▓ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдкрд╛рд╕реВрди рдХрд╛рд╣реА рд╢рд┐рдХрдгрд╛рд░ рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ, рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреЛ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ рдПрдХ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдкрд╛рд╕ рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдард░рддреЗ:\n",
|
||||
"\n",
|
||||
"рд╡рд░реАрд▓ рджреЛрдиреНрд╣реА рдЯрдкреНрдкреЗ **TextVectorization** рд▓реЗрдпрд░ рд╡рд╛рдкрд░реВрди рд╣рд╛рддрд╛рд│рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдЪрд▓рд╛ рд╡реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдирдВрддрд░ `adapt` рдореЗрдердб рдХреЙрд▓ рдХрд░реВрди рд╕рд░реНрд╡ рдЯреЗрдХреНрд╕реНрдЯрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реВрди рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vocab_size = 50000\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size)\n",
|
||||
"vectorizer.adapt(ds_train.take(500).map(lambda x: x['title']+' '+x['description']))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк** рдЖрдореНрд╣реА рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдкреИрдХреА рдлрдХреНрдд рдПрдХ рдЙрдкрд╕рдВрдЪ рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдЖрдореНрд╣реА рд╣реЗ рдХрд╛рд░реНрдп рд╡реЗрд│реЗрдЪреА рдмрдЪрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдЯ рдкрд╛рд╣рдгреНрдпрд╛рдкрд╛рд╕реВрди рд░реЛрдЦрдгреНрдпрд╛рд╕рд╛рдареА рдХрд░рдд рдЖрд╣реЛрдд. рдорд╛рддреНрд░, рдпрд╛рдореБрд│реЗ рдХрд╛рд╣реА рд╢рдмреНрдж рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреВрди рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реАрдд рдЖрдгрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓. рддреНрдпрд╛рдореБрд│реЗ, рд╕рдВрдкреВрд░реНрдг рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рд╡рд╛рдкрд░рдгреЗ рдЖрдгрд┐ `adapt` рджрд░рдореНрдпрд╛рди рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ рдЕрдВрддрд┐рдо рдЕрдЪреВрдХрддрд╛ рд╡рд╛рдврд╡реВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдлрд╛рд░рд╕рд╛ рдлрд░рдХ рдкрдбрдгрд╛рд░ рдирд╛рд╣реА.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдкреНрд░рддреНрдпрдХреНрд╖ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рд╡рд░ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"['', '[UNK]', 'the', 'to', 'a', 'in', 'of', 'and', 'on', 'for']\n",
|
||||
"Length of vocabulary: 5335\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab = vectorizer.get_vocabulary()\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(vocab[:10])\n",
|
||||
"print(f\"Length of vocabulary: {vocab_size}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рд╡рд╛рдкрд░реВрди, рдЖрдкрдг рдХреЛрдгрддрд╛рд╣реА рдордЬрдХреВрд░ рд╕рд╣рдЬрдкрдгреЗ рд╕рдВрдЦреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЪрд╛рдордзреНрдпреЗ рдПрдиреНрдХреЛрдб рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tf.Tensor: shape=(7,), dtype=int64, numpy=array([ 112, 3695, 3, 304, 11, 1041, 1], dtype=int64)>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vectorizer('I love to play with my words')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдордЬрдХреВрд░рд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡\n",
|
||||
"\n",
|
||||
"рд╢рдмреНрдж рдЕрд░реНрде рд╡реНрдпрдХреНрдд рдХрд░рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рдХрдзреА рдХрдзреА рдЖрдкрдг рдПрдЦрд╛рджреНрдпрд╛ рдордЬрдХреВрд░рд╛рдЪрд╛ рдЕрд░реНрде рдлрдХреНрдд рддреНрдпрд╛рддреАрд▓ рд╕реНрд╡рддрдВрддреНрд░ рд╢рдмреНрджрд╛рдВрдХрдбреЗ рдкрд╛рд╣реВрди рд╕рдордЬреВ рд╢рдХрддреЛ, рд╡рд╛рдХреНрдпрд╛рддреАрд▓ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреНрд░рдорд╛рдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░реВрди. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ рдмрд╛рддрдореНрдпрд╛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рд╛рдпрдЪреНрдпрд╛ рдЕрд╕рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ *weather* рдЖрдгрд┐ *snow* рд╕рд╛рд░рдЦреЗ рд╢рдмреНрдж *рд╣рд╡рд╛рдорд╛рди рдЕрдВрджрд╛рдЬ* рд╕реВрдЪрд┐рдд рдХрд░рддрд╛рдд, рддрд░ *stocks* рдЖрдгрд┐ *dollar* рд╕рд╛рд░рдЦреЗ рд╢рдмреНрдж *рдЖрд░реНрдерд┐рдХ рдмрд╛рддрдореНрдпрд╛* рджрд░реНрд╢рд╡рддреАрд▓.\n",
|
||||
"\n",
|
||||
"**рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕** (BoW) рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдВрдкреИрдХреА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреЗ рдЖрдгрд┐ рд╕рдордЬрдгреНрдпрд╛рд╕ рд╕реЛрдкреЗ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдПрдХрд╛ рд╡реЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рд╢реА рдЬреЛрдбрд▓реЗрд▓рд╛ рдЕрд╕рддреЛ, рдЖрдгрд┐ рд╡реЗрдХреНрдЯрд░ рдШрдЯрдХ рджрд┐рд▓реЗрд▓реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдд рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХрд┐рддреА рд╡реЗрд│рд╛ рдЖрдврд│рддреЛ рддреЗ рджрд░реНрд╢рд╡рддреЛ.\n",
|
||||
"\n",
|
||||
" \n",
|
||||
"\n",
|
||||
"> **Note**: BoW рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдЖрдкрдг рдордЬрдХреВрд░рд╛рддреАрд▓ рд╕реНрд╡рддрдВрддреНрд░ рд╢рдмреНрджрд╛рдВрд╕рд╛рдареА рдПрдХрддреНрд░рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рд╡рди-рд╣реЙрдЯ-рдПрдиреНрдХреЛрдбреЗрдб рд╡реЗрдХреНрдЯрд░рдЪреНрдпрд╛ рдмреЗрд░реАрдЬ рдореНрд╣рдгреВрди рдХрд░реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"рдЦрд╛рд▓реА Scikit Learn рдкрд╛рдпрдерди рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░реВрди рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рд▓реЗ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 1, 0, 2, 0, 0, 0, 0, 0]], dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import CountVectorizer\n",
|
||||
"sc_vectorizer = CountVectorizer()\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"sc_vectorizer.fit_transform(corpus)\n",
|
||||
"sc_vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рд╡рд░реАрд▓рдкреНрд░рдорд╛рдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓рд╛ Keras рд╡реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреНрд░рдорд╛рдВрдХрд╛рд▓рд╛ рд╡рди-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реВрди рдЖрдгрд┐ рддреНрдпрд╛ рд╕рд░реНрд╡ рд╡реЗрдХреНрдЯрд░рд╛рдВрдЪрд╛ рдпреЛрдЧ рдХрд░реВрди:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([0., 5., 0., ..., 0., 0., 0.], dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def to_bow(text):\n",
|
||||
" return tf.reduce_sum(tf.one_hot(vectorizer(text),vocab_size),axis=0)\n",
|
||||
"\n",
|
||||
"to_bow('My dog likes hot dogs on a hot day.').numpy()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк**: рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╡рд╛рдЯреВ рд╢рдХрддреЗ рдХреА рдкрд░рд┐рдгрд╛рдо рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│рд╛ рдЖрд╣реЗ. рдХрд╛рд░рдг рдЕрд╕реЗ рдЖрд╣реЗ рдХреА Keras рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреА рд▓рд╛рдВрдмреА рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдЬреЛ рд╕рдВрдкреВрд░реНрдг AG News рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреВрди рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рд╣реЛрддрд╛, рддрд░ Scikit Learn рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдореНрд╣реА рдирдореБрдирд╛ рдордЬрдХреБрд░рд╛рд╡рд░реВрди рддрд╛рддреНрдХрд╛рд│ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХреЗрд▓рд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BoW рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдордЬрдХреБрд░рд╛рдЪреЗ рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рддреЗ рд╢рд┐рдХрд▓реЛ рдЖрд╣реЛрдд, рдЪрд▓рд╛ рдЖрддрд╛ рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгрд╛рд░рд╛ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдКрдпрд╛. рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрдкрд▓рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рд╣реЗ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ `map` рдлрдВрдХреНрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╕рд╛рдзреНрдп рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"batch_size = 128\n",
|
||||
"\n",
|
||||
"ds_train_bow = ds_train.map(lambda x: (to_bow(x['title']+x['description']),x['label'])).batch(batch_size)\n",
|
||||
"ds_test_bow = ds_test.map(lambda x: (to_bow(x['title']+x['description']),x['label'])).batch(batch_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдПрдХ рд╕рд╛рдзрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рдгрд╛рд░рд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдПрдХ рд░реЗрдЦреАрдп рд╕реНрддрд░ рдЖрд╣реЗ. рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ `vocab_size` рдЖрд╣реЗ, рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрд╢реА (4) рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рдХрд╛рд░рдг рдЖрдкрдг рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рд╕реЛрдбрд╡рдд рдЖрд╣реЛрдд, рдЕрдВрддрд┐рдо рд╕рдХреНрд░рд┐рдпрддрд╛ рдлрдВрдХреНрд╢рди **softmax** рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"938/938 [==============================] - 66s 70ms/step - loss: 0.6144 - acc: 0.8427 - val_loss: 0.4416 - val_acc: 0.8697\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c70a947f0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Dense(4,activation='softmax',input_shape=(vocab_size,))\n",
|
||||
"])\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train_bow,validation_data=ds_test_bow)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдордЪреНрдпрд╛рдХрдбреЗ 4 рд╡рд░реНрдЧ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, 80% рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЕрдЪреВрдХрддрд╛ рд╣рд╛ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рдкрд░рд┐рдгрд╛рдо рдорд╛рдирд▓рд╛ рдЬрд╛рддреЛ.\n",
|
||||
"\n",
|
||||
"## рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдореНрд╣рдгреВрди рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ\n",
|
||||
"\n",
|
||||
"рдХрд╛рд░рдг рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рджреЗрдЦреАрд▓ Keras рд▓реЗрдпрд░ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ рд╢рдХрддреЛ рдЬреНрдпрд╛рдордзреНрдпреЗ рддреЛ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдК рд╢рдХрддреЛ. рдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ `map` рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛рд╕реЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдЗрдЭ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА, рдЖрдкрдг рдлрдХреНрдд рдореВрд│ рдбреЗрдЯрд╛рд╕реЗрдЯ рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдЗрдирдкреБрдЯрд▓рд╛ рдкрд╛рд╕ рдХрд░реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк**: рддрд░реАрд╣реА рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ `map` рд▓рд╛рдЧреВ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдЬреЗрдгреЗрдХрд░реВрди рдбрд┐рдХреНрд╢рдирд░реАрдордзреАрд▓ рдлреАрд▓реНрдбреНрд╕ (рдЬрд╕реЗ рдХреА `title`, `description` рдЖрдгрд┐ `label`) рдЯреНрдпреБрдкрд▓реНрд╕рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддреАрд▓. рдорд╛рддреНрд░, рдЬреЗрд╡реНрд╣рд╛ рдбрд┐рд╕реНрдХрд╡рд░реВрди рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрдирдЪ рдЖрд╡рд╢реНрдпрдХ рд░рдЪрдиреЗрд╕рд╣ рдбреЗрдЯрд╛рд╕реЗрдЯ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"model\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
" Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
" input_1 (InputLayer) [(None, 1)] 0 \n",
|
||||
" \n",
|
||||
" text_vectorization (TextVec (None, None) 0 \n",
|
||||
" torization) \n",
|
||||
" \n",
|
||||
" tf.one_hot (TFOpLambda) (None, None, 5335) 0 \n",
|
||||
" \n",
|
||||
" tf.math.reduce_sum (TFOpLam (None, 5335) 0 \n",
|
||||
" bda) \n",
|
||||
" \n",
|
||||
" dense_2 (Dense) (None, 4) 21344 \n",
|
||||
" \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 21,344\n",
|
||||
"Trainable params: 21,344\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n",
|
||||
"938/938 [==============================] - 73s 77ms/step - loss: 0.6057 - acc: 0.8414 - val_loss: 0.4202 - val_acc: 0.8736\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c721521f0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"inp = keras.Input(shape=(1,),dtype=tf.string)\n",
|
||||
"x = vectorizer(inp)\n",
|
||||
"x = tf.reduce_sum(tf.one_hot(x,vocab_size),axis=1)\n",
|
||||
"out = keras.layers.Dense(4,activation='softmax')(x)\n",
|
||||
"model = keras.models.Model(inp,out)\n",
|
||||
"model.summary()\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдмрд╛рдпрдЧреНрд░рд╛рдореНрд╕, рдЯреНрд░рд╛рдпрдЧреНрд░рд╛рдореНрд╕ рдЖрдгрд┐ рдПрди-рдЧреНрд░рд╛рдореНрд╕\n",
|
||||
"\n",
|
||||
"рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдкрджреНрдзрддреАрдЪреА рдПрдХ рдорд░реНрдпрд╛рджрд╛ рдореНрд╣рдгрдЬреЗ рдХрд╛рд╣реА рд╢рдмреНрдж рдмрд╣реБ-рд╢рдмреНрдж рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдЪрд╛ рднрд╛рдЧ рдЕрд╕рддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 'hot dog' рдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рдЕрд░реНрде рдЗрддрд░ рд╕рдВрджрд░реНрднрд╛рдВрддреАрд▓ 'hot' рдЖрдгрд┐ 'dog' рдпрд╛ рд╢рдмреНрджрд╛рдВрдкреЗрдХреНрд╖рд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│рд╛ рдЕрд╕рддреЛ. рдЬрд░ рдЖрдкрдг 'hot' рдЖрдгрд┐ 'dog' рдпрд╛ рд╢рдмреНрджрд╛рдВрдирд╛ рдиреЗрд╣рдореА рд╕рдорд╛рди рд╡реНрд╣реЗрдХреНрдЯрд░ рд╡рд╛рдкрд░реВрди рджрд░реНрд╢рд╡рд▓реЗ, рддрд░ рддреЗ рдЖрдкрд▓реНрдпрд╛ рдореЙрдбреЗрд▓рд╕рд╛рдареА рдЧреЛрдВрдзрд│ рдирд┐рд░реНрдорд╛рдг рдХрд░реВ рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдпрд╛рд╡рд░ рдЙрдкрд╛рдп рдореНрд╣рдгреВрди, **рдПрди-рдЧреНрд░рд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡** рджрд╕реНрддрдРрд╡рдЬ рд╡рд░реНрдЧреАрдХрд░рдгрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рдЬрд┐рдереЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж, рджреНрд╡рд┐-рд╢рдмреНрдж рдХрд┐рдВрд╡рд╛ рддреНрд░рд┐-рд╢рдмреНрджрд╛рдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рдгрд╛рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдЕрд╕рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдмрд╛рдпрдЧреНрд░рд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдордзреНрдпреЗ, рдореВрд│ рд╢рдмреНрджрд╛рдВрд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЖрдкрдг рд╕рд░реНрд╡ рд╢рдмреНрдж рдЬреЛрдбреНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"рдЦрд╛рд▓реА Scikit Learn рд╡рд╛рдкрд░реВрди рдмрд╛рдпрдЧреНрд░рд╛рдо рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рд▓реЗ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary:\n",
|
||||
" {'i': 7, 'like': 11, 'hot': 4, 'dogs': 2, 'i like': 8, 'like hot': 12, 'hot dogs': 5, 'the': 16, 'dog': 0, 'ran': 14, 'fast': 3, 'the dog': 17, 'dog ran': 1, 'ran fast': 15, 'its': 9, 'outside': 13, 'its hot': 10, 'hot outside': 6}\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"bigram_vectorizer = CountVectorizer(ngram_range=(1, 2), token_pattern=r'\\b\\w+\\b', min_df=1)\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"bigram_vectorizer.fit_transform(corpus)\n",
|
||||
"print(\"Vocabulary:\\n\",bigram_vectorizer.vocabulary_)\n",
|
||||
"bigram_vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"n-gram рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдЪрд╛ рдореБрдЦреНрдп рддреЛрдЯрд╛ рдореНрд╣рдгрдЬреЗ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдЦреВрдк рд╡реЗрдЧрд╛рдиреЗ рд╡рд╛рдврддреЛ. рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ n-gram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдПрдХрд╛ рдкрд░рд┐рдорд╛рдг рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддрдВрддреНрд░рд╛рд╕реЛрдмрдд рдПрдХрддреНрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ, рдЬрд╕реЗ рдХреА *embeddings*, рдЬреНрдпрд╛рдмрджреНрджрд▓ рдЖрдкрдг рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЪрд░реНрдЪрд╛ рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"**AG News** рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреНрдпреЗ n-gram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ `TextVectorization` рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ `ngrams` рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рдмрд╛рдпрдЧреНрд░рд╛рдо рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪреА рд▓рд╛рдВрдмреА **рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рдореЛрдареА** рдЕрд╕рддреЗ, рдЖрдкрд▓реНрдпрд╛ рдмрд╛рдмрддреАрдд рддреА 1.3 рджрд╢рд▓рдХреНрд╖рд╛рдВрд╣реВрди рдЕрдзрд┐рдХ рдЯреЛрдХрдиреНрд╕ рдЖрд╣реЗ! рддреНрдпрд╛рдореБрд│реЗ рдмрд╛рдпрдЧреНрд░рд╛рдо рдЯреЛрдХрдиреНрд╕рдирд╛ рдХрд╛рд╣реАрддрд░реА рд╡рд╛рдЬрд╡реА рдорд░реНрдпрд╛рджреЗрдиреЗ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдард░реЗрд▓.\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг рд╡рд░реАрд▓рдкреНрд░рдорд╛рдгреЗрдЪ рдХреЛрдб рд╡рд╛рдкрд░реВрди рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реВ рд╢рдХрддреЛ, рдкрд░рдВрддреБ рд╣реЗ рдЦреВрдкрдЪ рдореЗрдорд░реА-рдЕрдХрд╛рд░реНрдпрдХреНрд╖рдо рдард░реЗрд▓. рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдЖрдкрдг embeddings рд╡рд╛рдкрд░реВрди рдмрд╛рдпрдЧреНрд░рд╛рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реВ. рддреЛрдкрд░реНрдпрдВрдд, рдЖрдкрдг рдпрд╛ рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ рдмрд╛рдпрдЧреНрд░рд╛рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдЕрдзрд┐рдХ рдЕрдЪреВрдХрддрд╛ рдорд┐рд│рд╡рддрд╛ рдпреЗрддреЗ рдХрд╛ рддреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BoW рд╡реНрд╣реЗрдХреНрдЯрд░ рдЖрдкреЛрдЖрдк рдЧрдгрдирд╛ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдкрдг рд╡реИрдпрдХреНрддрд┐рдХ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рд╡рди-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧреНрд╕рдЪреА рдмреЗрд░реАрдЬ рдХрд░реВрди BoW рд╡реНрд╣реЗрдХреНрдЯрд░ рд╣рд╛рддрд╛рдиреЗ рдЧрдгрдирд╛ рдХреЗрд▓реА. рддрдерд╛рдкрд┐, TensorFlow рдЪреНрдпрд╛ рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ, рдЖрдкрдг `output_mode='count'` рдкреЕрд░рд╛рдореАрдЯрд░ рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ рдкрд╛рд╕ рдХрд░реВрди BoW рд╡реНрд╣реЗрдХреНрдЯрд░ рдЖрдкреЛрдЖрдк рдЧрдгрдирд╛ рдХрд░реВ рд╢рдХрддреЛ. рдпрд╛рдореБрд│реЗ рдЖрдкрд▓реЗ рдореЙрдбреЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ рдЦреВрдкрдЪ рд╕реЛрдкреЗ рд╣реЛрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n",
|
||||
"938/938 [==============================] - 7s 7ms/step - loss: 0.5929 - acc: 0.8486 - val_loss: 0.4168 - val_acc: 0.8772\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c725217c0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,output_mode='count'),\n",
|
||||
" keras.layers.Dense(4,input_shape=(vocab_size,), activation='softmax')\n",
|
||||
"])\n",
|
||||
"print(\"Training vectorizer\")\n",
|
||||
"model.layers[0].adapt(ds_train.take(500).map(extract_text))\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реА - рдЗрдиреНрд╡реНрд╣рд░реНрд╕ рдбреЙрдХреНрдпреБрдореЗрдВрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реА (TF-IDF)\n",
|
||||
"\n",
|
||||
"BoW (рдмреЕрдЧ рдСрдл рд╡рд░реНрдбреНрд╕) рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдордзреНрдпреЗ, рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреЗ рд╡рдЬрди рдиреЗрд╣рдореА рдПрдХрд╛рдЪ рддрдВрддреНрд░рд╛рдиреЗ рджрд┐рд▓реЗ рдЬрд╛рддреЗ, рд╢рдмреНрдж рдХреЛрдгрддрд╛рд╣реА рдЕрд╕реЛ. рдорд╛рддреНрд░, рдЕрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ рдХреА *a* рдЖрдгрд┐ *in* рд╕рд╛рд░рдЦреЗ рд╡рд╛рд░рдВрд╡рд╛рд░ рдпреЗрдгрд╛рд░реЗ рд╢рдмреНрдж рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА рддрд┐рддрдХреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╕рддрд╛рдд рдЬрд┐рддрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрдж рдЕрд╕рддрд╛рдд. рдмрд╣реБрддреЗрдХ NLP рдХрд╛рд░реНрдпрд╛рдВрдордзреНрдпреЗ рдХрд╛рд╣реА рд╢рдмреНрдж рдЗрддрд░рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЕрд╕рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"**TF-IDF** рдореНрд╣рдгрдЬреЗ **рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реА - рдЗрдиреНрд╡реНрд╣рд░реНрд╕ рдбреЙрдХреНрдпреБрдореЗрдВрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдВрд╕реА**. рд╣реЗ рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕рдЪреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗ, рдЬрд┐рдереЗ рдПрдЦрд╛рджреНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреЗ рд╕реВрдЪрдХ 0/1 рдореВрд▓реНрдп рд╡рд╛рдкрд░рдгреНрдпрд╛рдРрд╡рдЬреА, рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдореВрд▓реНрдп рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ, рдЬреЗ рдХреЙрд░реНрдкрд╕рдордзреНрдпреЗ рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рддреЗ.\n",
|
||||
"\n",
|
||||
"рдЕрдзрд┐рдХ рдФрдкрдЪрд╛рд░рд┐рдХрдкрдгреЗ, рджрд╕реНрддрдРрд╡рдЬ $j$ рдордзреАрд▓ рд╢рдмреНрдж $i$ рдЪреЗ рд╡рдЬрди $w_{ij}$ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ:\n",
|
||||
"$$\n",
|
||||
"w_{ij} = tf_{ij}\\times\\log({N\\over df_i})\n",
|
||||
"$$\n",
|
||||
"рдЬрд┐рдереЗ\n",
|
||||
"* $tf_{ij}$ рдореНрд╣рдгрдЬреЗ $j$ рдордзреНрдпреЗ $i$ рдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреА рд╕рдВрдЦреНрдпрд╛, рдореНрд╣рдгрдЬреЗрдЪ рдЖрдкрдг рдпрд╛рдкреВрд░реНрд╡реА рдкрд╛рд╣рд┐рд▓реЗрд▓реЗ BoW рдореВрд▓реНрдп\n",
|
||||
"* $N$ рдореНрд╣рдгрдЬреЗ рд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛\n",
|
||||
"* $df_i$ рдореНрд╣рдгрдЬреЗ рд╕рдВрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣рд╛рдордзреНрдпреЗ рд╢рдмреНрдж $i$ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛\n",
|
||||
"\n",
|
||||
"TF-IDF рдореВрд▓реНрдп $w_{ij}$ рджрд╕реНрддрдРрд╡рдЬрд╛рдордзреНрдпреЗ рдПрдЦрд╛рджрд╛ рд╢рдмреНрдж рдХрд┐рддреА рд╡реЗрд│рд╛ рджрд┐рд╕рддреЛ рдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╡рд╛рдврддреЗ рдЖрдгрд┐ рдХреЙрд░реНрдкрд╕рдордзреНрдпреЗ рддреНрдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджрд╕реНрддрдРрд╡рдЬрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдХрд╛рд╣реА рд╢рдмреНрдж рдЗрддрд░рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рд╡рд╛рд░рдВрд╡рд╛рд░ рджрд┐рд╕рддрд╛рдд рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рдПрдЦрд╛рджрд╛ рд╢рдмреНрдж рд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ *рдкреНрд░рддреНрдпреЗрдХ* рджрд╕реНрддрдРрд╡рдЬрд╛рдордзреНрдпреЗ рджрд┐рд╕рдд рдЕрд╕реЗрд▓, рддрд░ $df_i=N$, рдЖрдгрд┐ $w_{ij}=0$, рдЖрдгрд┐ рдЕрд╕реЗ рд╢рдмреНрдж рдкреВрд░реНрдгрдкрдгреЗ рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓.\n",
|
||||
"\n",
|
||||
"рддреБрдореНрд╣реА Scikit Learn рд╡рд╛рдкрд░реВрди рд╕рд╣рдЬрдкрдгреЗ рдЯреЗрдХреНрд╕реНрдЯрдЪреЗ TF-IDF рд╡реЗрдХреНрдЯрд░рд╛рдпрдЭреЗрд╢рди рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[0.43381609, 0. , 0.43381609, 0. , 0.65985664,\n",
|
||||
" 0.43381609, 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. , 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. ]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
|
||||
"vectorizer = TfidfVectorizer(ngram_range=(1,2))\n",
|
||||
"vectorizer.fit_transform(corpus)\n",
|
||||
"vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Keras рдордзреНрдпреЗ, `TextVectorization` рд▓реЗрдпрд░ `output_mode='tf-idf'` рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реВрди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ TF-IDF рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрдЪреА рдЧрдгрдирд╛ рдХрд░реВ рд╢рдХрддреЗ. TF-IDF рд╡рд╛рдкрд░рд▓реНрдпрд╛рдиреЗ рдЕрдЪреВрдХрддрд╛ рд╡рд╛рдврддреЗ рдХрд╛ рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрдг рд╡рд░ рд╡рд╛рдкрд░рд▓реЗрд▓рд╛ рдХреЛрдб рдкреБрдиреНрд╣рд╛ рд╡рд╛рдкрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n",
|
||||
"938/938 [==============================] - 12s 12ms/step - loss: 0.4197 - acc: 0.8662 - val_loss: 0.3432 - val_acc: 0.8849\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c729dfd30>"
|
||||
]
|
||||
},
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,output_mode='tf-idf'),\n",
|
||||
" keras.layers.Dense(4,input_shape=(vocab_size,), activation='softmax')\n",
|
||||
"])\n",
|
||||
"print(\"Training vectorizer\")\n",
|
||||
"model.layers[0].adapt(ds_train.take(500).map(extract_text))\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдирд┐рд╖реНрдХрд░реНрд╖\n",
|
||||
"\n",
|
||||
"рдЬрд░реА TF-IDF рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдирд╛ рд╡рд╛рд░рдВрд╡рд╛рд░рддреЗрдЪреЗ рд╡рдЬрди рдкреНрд░рджрд╛рди рдХрд░рдд рдЕрд╕рд▓реЗ рддрд░реА, рддреЗ рдЕрд░реНрде рдХрд┐рдВрд╡рд╛ рдХреНрд░рдо рджрд░реНрд╢рд╡реВ рд╢рдХрдд рдирд╛рд╣реАрдд. рдкреНрд░рд╕рд┐рджреНрдз рднрд╛рд╖рд╛рд╢рд╛рд╕реНрддреНрд░рдЬреНрдЮ рдЬреЗ. рдЖрд░. рдлрд░реНрде рдпрд╛рдВрдиреА 1935 рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, \"рд╢рдмреНрджрд╛рдЪрд╛ рд╕рдВрдкреВрд░реНрдг рдЕрд░реНрде рдиреЗрд╣рдореАрдЪ рд╕рдВрджрд░реНрднрд╛рдиреБрд╕рд╛рд░ рдЕрд╕рддреЛ, рдЖрдгрд┐ рд╕рдВрджрд░реНрднрд╛рд╢рд┐рд╡рд╛рдп рдЕрд░реНрдерд╛рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдЧрдВрднреАрд░рдкрдгреЗ рдШреЗрддрд▓рд╛ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.\" рдпрд╛ рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдкреБрдвреЗ рдЖрдкрдг рднрд╛рд╖реЗрдЪреЗ рдореЙрдбреЗрд▓рд┐рдВрдЧ рд╡рд╛рдкрд░реВрди рдордЬрдХреБрд░рд╛рддреВрди рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдорд╛рд╣рд┐рддреА рдХрд╢реА рдХреЕрдкреНрдЪрд░ рдХрд░рд╛рдпрдЪреА рд╣реЗ рд╢рд┐рдХреВ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "19b43951d55b377a76209c24c1f017e4",
|
||||
"translation_date": "2025-08-28T09:53:58+00:00",
|
||||
"source_file": "lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,720 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬ\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдореНрд╣реА `vocab_size` рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдЙрдЪреНрдЪ-рдЖрдпрд╛рдореА рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рд╡реНрд╣реЗрдХреНрдЯрд░рд╡рд░ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ, рдЖрдгрд┐ рдЖрдореНрд╣реА рдХрдореА-рдЖрдпрд╛рдореА рд╕реНрдерд╛рдирд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреВрди рд╡рд┐рд░рд│ рд╡рди-рд╣реЙрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдордзреНрдпреЗ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдд рд╣реЛрддреЛ. рд╣реЗ рд╡рди-рд╣реЙрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдорд░реАрд╕рд╛рдареА рдХрд╛рд░реНрдпрдХреНрд╖рдо рдирд╛рд╣реА, рдпрд╛рд╢рд┐рд╡рд╛рдп рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рд╣рд╛рддрд╛рд│рд▓рд╛ рдЬрд╛рддреЛ, рдореНрд╣рдгрдЬреЗрдЪ рд╡рди-рд╣реЙрдЯ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ рд╡реНрд╣реЗрдХреНрдЯрд░ рд╢рдмреНрджрд╛рдВрдордзреАрд▓ рдХреЛрдгрддреЗрд╣реА рдЕрд░реНрдердкреВрд░реНрдг рд╕рд╛рдореНрдп рд╡реНрдпрдХреНрдд рдХрд░рдд рдирд╛рд╣реАрдд.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдЖрдкрдг **News AG** рдбреЗрдЯрд╛рд╕реЗрдЯрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рд╕реБрд░реВ рдареЗрд╡реВ. рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдорд╛рдЧреАрд▓ рдиреЛрдЯрдмреБрдХрдордзреАрд▓ рдХрд╛рд╣реА рд╕рдВрдХрд▓реНрдкрдирд╛ рдШреЗрдКрдпрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"d:\\WORK\\ai-for-beginners\\5-NLP\\14-Embeddings\\data\\train.csv: 29.5MB [00:01, 18.8MB/s] \n",
|
||||
"d:\\WORK\\ai-for-beginners\\5-NLP\\14-Embeddings\\data\\test.csv: 1.86MB [00:00, 11.2MB/s] \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Building vocab...\n",
|
||||
"Vocab size = 95812\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import numpy as np\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(\"Vocab size = \",vocab_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?\n",
|
||||
"\n",
|
||||
"**рдПрдореНрдмреЗрдбрд┐рдВрдЧ** рд╣реА рдХрд▓реНрдкрдирд╛ рдореНрд╣рдгрдЬреЗ рд╢рдмреНрджрд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрдореА-рдЖрдпрд╛рдореА рдШрди рд╡реНрд╣реЗрдХреНрдЯрд░рджреНрд╡рд╛рд░реЗ рдХрд░рдгреЗ, рдЬреЗ рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рд╢рдмреНрджрд╛рдЪрд╛ рдЕрд░реНрде рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛рдд. рдЖрдкрдг рдирдВрддрд░ рдЕрд░реНрдердкреВрд░реНрдг рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдпрд╛рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░реВ, рдкрдг рд╕рдзреНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧрд▓рд╛ рд╢рдмреНрдж рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреА рдЖрдпрд╛рдо рдХрдореА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдорд╛рд░реНрдЧ рдореНрд╣рдгреВрди рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдпрд╛.\n",
|
||||
"\n",
|
||||
"рддрд░, рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рдПрдХ рд╢рдмреНрдж рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрдИрд▓ рдЖрдгрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ `embedding_size` рдЪрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░реЗрд▓. рдПрдХрд╛ рдЕрд░реНрдерд╛рдиреЗ, рд╣реЗ `Linear` рд▓реЗрдпрд░рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ, рдкрдг рдПрдХ-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбреЗрдб рд╡реНрд╣реЗрдХреНрдЯрд░ рдШреЗрдгреНрдпрд╛рдРрд╡рдЬреА, рддреЗ рд╢рдмреНрдж рдХреНрд░рдорд╛рдВрдХ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрдК рд╢рдХреЗрд▓.\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рдкреНрд░рдердо рд▓реЗрдпрд░ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реНрдпрд╛рдиреЗ, рдЖрдкрдг рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдореЙрдбреЗрд▓рд╡рд░реВрди **рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдмреЕрдЧ** рдореЙрдбреЗрд▓рдХрдбреЗ рд╕реНрд╡рд┐рдЪ рдХрд░реВ рд╢рдХрддреЛ, рдЬрд┐рдереЗ рдЖрдкрдг рдкреНрд░рдердо рдЖрдкрд▓реНрдпрд╛ рдордЬрдХреБрд░рд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рд╕рдВрдмрдВрдзрд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛ рд╕рд░реНрд╡ рдПрдореНрдмреЗрдбрд┐рдВрдЧрд╡рд░ рдХрд╛рд╣реА рдПрдХрддреНрд░рд┐рдд рдлрдВрдХреНрд╢рди рдЧрдгрдирд╛ рдХрд░рддреЛ, рдЬрд╕реЗ рдХреА `sum`, `average` рдХрд┐рдВрд╡рд╛ `max`.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реЗ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдиреЗ рд╕реБрд░реВ рд╣реЛрдИрд▓, рддреНрдпрд╛рдирдВрддрд░ рдПрдХрддреНрд░реАрдХрд░рдг рд▓реЗрдпрд░ рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ рд▓реАрдирд┐рдпрд░ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдЕрд╕реЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class EmbedClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.fc = torch.nn.Linear(embed_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x = torch.mean(x,dim=1)\n",
|
||||
" return self.fc(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдмрджрд▓рддреНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЕрдиреБрдХреНрд░рдо рдЖрдХрд╛рд░рд╛рд╢реА рд╕рд╛рдордирд╛ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдореБрд│реЗ, рдЖрдордЪреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрд╕рд╛рдареА рдорд┐рдиреАрдмреЕрдЪреЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрджреНрдзрддреАрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдИрд▓. рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рд╡рд╛рдкрд░рддрд╛рдирд╛, рдорд┐рдиреАрдмреЕрдЪрдордзреАрд▓ рд╕рд░реНрд╡ BoW рдЯреЗрдиреНрд╕рд░реНрд╕рдЪрд╛ рдЖрдХрд╛рд░ `vocab_size` рдЗрддрдХрд╛рдЪ рд╣реЛрддрд╛, рдЖрдкрд▓реНрдпрд╛ рдордЬрдХреВрд░ рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдВрдмреАрдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛. рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рд╡рд░реНрдб рдПрдореНрдмреЗрдбрд┐рдВрдЧрдХрдбреЗ рдЬрд╛рддреЛ, рддреЗрд╡реНрд╣рд╛ рдкреНрд░рддреНрдпреЗрдХ рдордЬрдХреВрд░ рдирдореБрдиреНрдпрд╛рдд рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╢рдмреНрдж рдЕрд╕рддреАрд▓, рдЖрдгрд┐ рддреЗ рдирдореБрдиреЗ рдорд┐рдиреАрдмреЕрдЪрдордзреНрдпреЗ рдПрдХрддреНрд░ рдХрд░рддрд╛рдирд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╛рд╣реА рдкреЕрдбрд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.\n",
|
||||
"\n",
|
||||
"рд╣реЗ `collate_fn` рдлрдВрдХреНрд╢рди рдбреЗрдЯрд╛ рд╕реНрд░реЛрддрд╛рд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░реВрди рддреНрдпрд╛рдЪ рддрдВрддреНрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдХрд░рддрд╛ рдпреЗрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def padify(b):\n",
|
||||
" # b is the list of tuples of length batch_size\n",
|
||||
" # - first element of a tuple = label, \n",
|
||||
" # - second = feature (text sequence)\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [encode(x[1]) for x in b]\n",
|
||||
" # first, compute max length of a sequence in this minibatch\n",
|
||||
" l = max(map(len,v))\n",
|
||||
" return ( # tuple of two tensors - labels and features\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=padify, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡рд░реНрдЧреАрдХрд░рдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдпреЛрдЧреНрдп рдбреЗрдЯрд╛рд▓реЛрдбрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдЖрдкрдг рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдлрдВрдХреНрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдК рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6415625\n",
|
||||
"6400: acc=0.6865625\n",
|
||||
"9600: acc=0.7103125\n",
|
||||
"12800: acc=0.726953125\n",
|
||||
"16000: acc=0.739375\n",
|
||||
"19200: acc=0.75046875\n",
|
||||
"22400: acc=0.7572321428571429\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.889799795315499, 0.7623160588611644)"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = EmbedClassifier(vocab_size,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=1, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк**: рд╡реЗрд│реЗрдЪреНрдпрд╛ рдмрдЪрддреАрд╕рд╛рдареА рдЖрдореНрд╣реА рдпреЗрдереЗ рдлрдХреНрдд реирел,режрежреж рдиреЛрдВрджреАрдВрд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдд рдЖрд╣реЛрдд (рдПрдХ рдкреВрд░реНрдг рдпреБрдЧрд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА), рдкрд░рдВрддреБ рддреБрдореНрд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдареЗрд╡реВ рд╢рдХрддрд╛, рдЕрдиреЗрдХ рдпреБрдЧрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдлрдВрдХреНрд╢рди рд▓рд┐рд╣реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдЙрдЪреНрдЪ рдЕрдЪреВрдХрддрд╛ рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╢рд┐рдХреНрд╖рдг рджрд░ рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ рдкреНрд░рдпреЛрдЧ рдХрд░реВ рд╢рдХрддрд╛. рддреБрдореНрд╣реА рд╕реБрдорд╛рд░реЗ репреж% рдЕрдЪреВрдХрддреЗрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### EmbeddingBag рд▓реЗрдпрд░ рдЖрдгрд┐ рдмрджрд▓рддреНрдпрд╛ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡\n",
|
||||
"\n",
|
||||
"рдорд╛рдЧреАрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ, рд╕рд░реНрд╡ рдЕрдиреБрдХреНрд░рдо рд╕рдорд╛рди рд▓рд╛рдВрдмреАрдЪреЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдирд╛ рдкреЕрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ, рдЬреЗрдгреЗрдХрд░реВрди рддреЗ рдорд┐рдиреАрдмреЕрдЪрдордзреНрдпреЗ рдмрд╕рддреАрд▓. рдмрджрд▓рддреНрдпрд╛ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рдХрд╛рд░реНрдпрдХреНрд╖рдо рдорд╛рд░реНрдЧ рдирд╛рд╣реА - рджреБрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рдореНрд╣рдгрдЬреЗ **рдСрдлрд╕реЗрдЯ** рд╡реНрд╣реЗрдХреНрдЯрд░ рд╡рд╛рдкрд░рдгреЗ, рдЬреЛ рдПрдХрд╛ рдореЛрдареНрдпрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдЕрдиреБрдХреНрд░рдорд╛рдВрдЪреЗ рдСрдлрд╕реЗрдЯ рдареЗрд╡реЗрд▓.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> **Note**: рд╡рд░реАрд▓ рдЪрд┐рддреНрд░рд╛рдд, рдЖрдореНрд╣реА рдЕрдХреНрд╖рд░рд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдЪреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗрд▓реЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдореНрд╣реА рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрд╡рд░ рдХрд╛рдо рдХрд░рдд рдЖрд╣реЛрдд. рддрдерд╛рдкрд┐, рдСрдлрд╕реЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рд╕рд╣ рдЕрдиреБрдХреНрд░рдорд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрддреНрддреНрд╡ рд╕рдорд╛рди рд░рд╛рд╣рддреЛ.\n",
|
||||
"\n",
|
||||
"рдСрдлрд╕реЗрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА [`EmbeddingBag`](https://pytorch.org/docs/stable/generated/torch.nn.EmbeddingBag.html) рд▓реЗрдпрд░ рд╡рд╛рдкрд░рддреЛ. рд╣реЗ `Embedding` рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреЗ рдХрдВрдЯреЗрдВрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░ рдЖрдгрд┐ рдСрдлрд╕реЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддреЛ, рдЖрдгрд┐ рддреНрдпрд╛рдд рд╕рд░рд╛рд╕рд░реАрдХрд░рдг рд▓реЗрдпрд░ рджреЗрдЦреАрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдЬреЗ `mean`, `sum` рдХрд┐рдВрд╡рд╛ `max` рдЕрд╕реВ рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдпреЗрдереЗ `EmbeddingBag` рд╡рд╛рдкрд░рдгрд╛рд░реЗ рд╕реБрдзрд╛рд░рд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class EmbedClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.embedding = torch.nn.EmbeddingBag(vocab_size, embed_dim)\n",
|
||||
" self.fc = torch.nn.Linear(embed_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, text, off):\n",
|
||||
" x = self.embedding(text, off)\n",
|
||||
" return self.fc(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдбреЗрдЯрд╛рд╕реЗрдЯ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдСрдлрд╕реЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгрд╛рд░реА рд░реВрдкрд╛рдВрддрд░рдг рдлрдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def offsetify(b):\n",
|
||||
" # first, compute data tensor from all sequences\n",
|
||||
" x = [torch.tensor(encode(t[1])) for t in b]\n",
|
||||
" # now, compute the offsets by accumulating the tensor of sequence lengths\n",
|
||||
" o = [0] + [len(t) for t in x]\n",
|
||||
" o = torch.tensor(o[:-1]).cumsum(dim=0)\n",
|
||||
" return ( \n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]), # labels\n",
|
||||
" torch.cat(x), # text \n",
|
||||
" o\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=offsetify, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛, рдХреА рд╕рд░реНрд╡ рдкреВрд░реНрд╡реАрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд│реЗ, рдЖрдордЪреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЖрддрд╛ рджреЛрди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реНрд╡реАрдХрд╛рд░рддреЗ: рдбреЗрдЯрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░ рдЖрдгрд┐ рдСрдлрд╕реЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░, рдЬреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреЗ рдЖрд╣реЗрдд. рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ, рдЖрдордЪрд╛ рдбреЗрдЯрд╛ рд▓реЛрдбрд░ рджреЗрдЦреАрд▓ рдЖрдореНрд╣рд╛рд▓рд╛ 2 рдРрд╡рдЬреА 3 рдореВрд▓реНрдпреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЛ: рдордЬрдХреВрд░ рдЖрдгрд┐ рдСрдлрд╕реЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░ рджреЛрдиреНрд╣реА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдореНрд╣рдгреВрди рдкреНрд░рджрд╛рди рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рддреНрдпрд╛рдореБрд│реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рдереЛрдбрд╛рд╕рд╛ рдмрджрд▓ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6153125\n",
|
||||
"6400: acc=0.6615625\n",
|
||||
"9600: acc=0.6932291666666667\n",
|
||||
"12800: acc=0.715078125\n",
|
||||
"16000: acc=0.7270625\n",
|
||||
"19200: acc=0.7382291666666667\n",
|
||||
"22400: acc=0.7486160714285715\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(22.771553103007037, 0.7551983365323096)"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = EmbedClassifier(vocab_size,32,len(classes)).to(device)\n",
|
||||
"\n",
|
||||
"def train_epoch_emb(net,dataloader,lr=0.01,optimizer=None,loss_fn = torch.nn.CrossEntropyLoss(),epoch_size=None, report_freq=200):\n",
|
||||
" optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr)\n",
|
||||
" loss_fn = loss_fn.to(device)\n",
|
||||
" net.train()\n",
|
||||
" total_loss,acc,count,i = 0,0,0,0\n",
|
||||
" for labels,text,off in dataloader:\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" labels,text,off = labels.to(device), text.to(device), off.to(device)\n",
|
||||
" out = net(text, off)\n",
|
||||
" loss = loss_fn(out,labels) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" total_loss+=loss\n",
|
||||
" _,predicted = torch.max(out,1)\n",
|
||||
" acc+=(predicted==labels).sum()\n",
|
||||
" count+=len(labels)\n",
|
||||
" i+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"{count}: acc={acc.item()/count}\")\n",
|
||||
" if epoch_size and count>epoch_size:\n",
|
||||
" break\n",
|
||||
" return total_loss.item()/count, acc.item()/count\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"train_epoch_emb(net,train_loader, lr=4, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕: рд╡рд░реНрдб2рд╡реНрд╣реЗрдХ\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдореЙрдбреЗрд▓рдЪреНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдиреЗ рд╢рдмреНрджрд╛рдВрдирд╛ рд╡реНрд╣реЗрдХреНрдЯрд░ рд╕реНрд╡рд░реВрдкрд╛рдд рдореЕрдк рдХрд░рдгреЗ рд╢рд┐рдХрд▓реЗ, рдкрд░рдВрддреБ рдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдлрд╛рд░рд╕рд╛ рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдЕрд░реНрде рдирд╡реНрд╣рддрд╛. рдЕрд╕реЗ рд╡реНрд╣реЗрдХреНрдЯрд░ рд╕реНрд╡рд░реВрдк рд╢рд┐рдХрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдард░реЗрд▓, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рдорд╛рди рд╢рдмреНрдж рдХрд┐рдВрд╡рд╛ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рдЕрд╢рд╛ рд╡реНрд╣реЗрдХреНрдЯрд░рдирд╛ рд╕рд╛рджрд░ рдХрд░рддреАрд▓ рдЬреЗ рдХрд╛рд╣реА рд╡реНрд╣реЗрдХреНрдЯрд░ рдЕрдВрддрд░ (рдЙрджрд╛. рдпреБрдХреНрд▓рд┐рдбрд┐рдпрди рдЕрдВрддрд░) рдпрд╛рдВрдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ рдПрдХрдореЗрдХрд╛рдВрдЪреНрдпрд╛ рдЬрд╡рд│ рдЕрд╕рддреАрд▓.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рддреАрд▓ рдордЬрдХреБрд░рд╛рд╡рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрджреНрдзрддреАрдиреЗ рдЖрдкрд▓реЗ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореЙрдбреЗрд▓ рдкреНрд░реА-рдЯреНрд░реЗрди рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдЯреНрд░реЗрди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ [Word2Vec](https://en.wikipedia.org/wiki/Word2vec). рд╣реЗ рджреЛрди рдореБрдЦреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░реНрд╕рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ, рдЬреЗ рд╢рдмреНрджрд╛рдВрдЪреЗ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд:\n",
|
||||
"\n",
|
||||
" - **рдХрдВрдЯрд┐рдиреНрдпреБрдЕрд╕ рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕** (CBoW) тАФ рдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ, рдЖрдкрдг рдореЙрдбреЗрд▓рд▓рд╛ рдЖрдЬреВрдмрд╛рдЬреВрдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рддреВрди рдПрдЦрд╛рджрд╛ рд╢рдмреНрдж рднрд╛рдХреАрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреНрд░реЗрди рдХрд░рддреЛ. рджрд┐рд▓реЗрд▓реНрдпрд╛ ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$ рдордзреНрдпреЗ, рдореЙрдбреЗрд▓рдЪреЗ рдЙрджреНрджрд┐рд╖реНрдЯ $(W_{-2},W_{-1},W_1,W_2)$ рд╡рд░реВрди $W_0$ рднрд╛рдХреАрдд рдХрд░рдгреЗ рдЖрд╣реЗ.\n",
|
||||
" - **рдХрдВрдЯрд┐рдиреНрдпреБрдЕрд╕ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо** рд╣реЗ CBoW рдЪреНрдпрд╛ рдЙрд▓рдЯ рдЖрд╣реЗ. рдореЙрдбреЗрд▓ рд╕рдзреНрдпрд╛рдЪрд╛ рд╢рдмреНрдж рднрд╛рдХреАрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрджрд░реНрднрд╛рддреАрд▓ рдЖрдЬреВрдмрд╛рдЬреВрдЪреНрдпрд╛ рд╢рдмреНрджрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреЗ.\n",
|
||||
"\n",
|
||||
"CBoW рдЬрд▓рдж рдЖрд╣реЗ, рддрд░ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо рдереЛрдбрд╛ рдзреАрдорд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рджреБрд░реНрдорд┐рд│ рд╢рдмреНрджрд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рдо рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Google News рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдкреНрд░реА-рдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ word2vec рдПрдореНрдмреЗрдбрд┐рдВрдЧрд╕рд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг **gensim** рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ рд╢рдХрддреЛ. рдЦрд╛рд▓реА 'neural' рдпрд╛ рд╢рдмреНрджрд╛рд╢реА рд╕рд░реНрд╡рд╛рдзрд┐рдХ рд╕рдорд╛рди рд╢рдмреНрдж рд╢реЛрдзрд▓реЗ рдЖрд╣реЗрдд:\n",
|
||||
"\n",
|
||||
"> **Note:** рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдкреНрд░рдердордЪ рд╢рдмреНрджрд╛рдВрдЪреЗ рд╡реНрд╣реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдВрдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреНрдпрд╛рдд рдХрд╛рд╣реА рд╡реЗрд│ рд▓рд╛рдЧреВ рд╢рдХрддреЛ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import gensim.downloader as api\n",
|
||||
"w2v = api.load('word2vec-google-news-300')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"neuronal -> 0.7804799675941467\n",
|
||||
"neurons -> 0.7326500415802002\n",
|
||||
"neural_circuits -> 0.7252851724624634\n",
|
||||
"neuron -> 0.7174385190010071\n",
|
||||
"cortical -> 0.6941086649894714\n",
|
||||
"brain_circuitry -> 0.6923246383666992\n",
|
||||
"synaptic -> 0.6699118614196777\n",
|
||||
"neural_circuitry -> 0.6638563275337219\n",
|
||||
"neurochemical -> 0.6555314064025879\n",
|
||||
"neuronal_activity -> 0.6531826257705688\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for w,p in w2v.most_similar('neural'):\n",
|
||||
" print(f\"{w} -> {p}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рд╢рдмреНрджрд╛рддреВрди рд╡реНрд╣реЗрдХреНрдЯрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рджреЗрдЦреАрд▓ рдЧрдгрдирд╛ рдХрд░реВ рд╢рдХрддреЛ, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ (рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА рдЖрдореНрд╣реА рдлрдХреНрдд рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреЗ рдкрд╣рд┐рд▓реЗ 20 рдШрдЯрдХ рджрд╛рдЦрд╡рддреЛ):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([ 0.01226807, 0.06225586, 0.10693359, 0.05810547, 0.23828125,\n",
|
||||
" 0.03686523, 0.05151367, -0.20703125, 0.01989746, 0.10058594,\n",
|
||||
" -0.03759766, -0.1015625 , -0.15820312, -0.08105469, -0.0390625 ,\n",
|
||||
" -0.05053711, 0.16015625, 0.2578125 , 0.10058594, -0.25976562],\n",
|
||||
" dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v.word_vec('play')[:20]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"('queen', 0.7118192911148071)"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v.most_similar(positive=['king','woman'],negative=['man'])[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рджреЛрдиреНрд╣реА CBoW рдЖрдгрд┐ Skip-Grams рд╣реЗ \"рднрд╛рдХреАрдд рдХрд░рдгрд╛рд░реЗ\" рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдЖрд╣реЗрдд, рдХрд╛рд░рдг рддреЗ рдлрдХреНрдд рд╕реНрдерд╛рдирд┐рдХ рд╕рдВрджрд░реНрднрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрд╕рддрд╛рдд. Word2Vec рдЬрд╛рдЧрддрд┐рдХ рд╕рдВрджрд░реНрднрд╛рдЪрд╛ рдлрд╛рдпрджрд╛ рдШреЗрдд рдирд╛рд╣реА.\n",
|
||||
"\n",
|
||||
"**FastText** рд╣реЗ Word2Vec рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреНрдпрд╛ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рдЖрдврд│рдгрд╛рд▒реНрдпрд╛ рдЕрдХреНрд╖рд░ n-grams рд╕рд╛рдареА рд╡реНрд╣реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╢рд┐рдХрд╡рд▓реЗ рдЬрд╛рддреЗ. рдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдВрдЪреЗ рдореВрд▓реНрдп рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдПрдХрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рд╕рд░рд╛рд╕рд░реА рдХрд╛рдврд▓реЗ рдЬрд╛рддреЗ. рдЬрд░реА рдпрд╛рдореБрд│реЗ рдкреНрд░реА-рдЯреНрд░реЗрдирд┐рдВрдЧрд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдгрдирд╛ рд▓рд╛рдЧрддреЗ, рддрд░реАрд╣реА рд╣реЗ рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдирд╛ рдЙрдк-рд╢рдмреНрдж рдорд╛рд╣рд┐рддреА рдПрдиреНрдХреЛрдб рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдХрд░рддреЗ.\n",
|
||||
"\n",
|
||||
"рдЖрдгрдЦреА рдПрдХ рдкрджреНрдзрдд, **GloVe**, рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЕрдЯреНрд░рд┐рдХреНрд╕рдЪреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрдЪрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдЖрдгрд┐ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдореЕрдЯреНрд░рд┐рдХреНрд╕рд▓рд╛ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрдд рдЖрдгрд┐ рдиреЙрди-рд▓рд┐рдирд┐рдпрд░ рд╢рдмреНрдж рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рд╡рд┐рдШрдЯрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдиреНрдпреВрд░рд▓ рдкрджреНрдзрддреАрдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреЗ.\n",
|
||||
"\n",
|
||||
"рддреБрдореНрд╣реА рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдмрджрд▓реВрди FastText рдЖрдгрд┐ GloVe рд╡рд╛рдкрд░реВрди рдЙрджрд╛рд╣рд░рдг рдЦреЗрд│реВ рд╢рдХрддрд╛, рдХрд╛рд░рдг gensim рд╡рд┐рд╡рд┐рдз рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореЙрдбреЗрд▓реНрд╕рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## PyTorch рдордзреНрдпреЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬ рд╡рд╛рдкрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдг рдмрджрд▓реВрди рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдордзреАрд▓ рдореЕрдЯреНрд░рд┐рдХреНрд╕рд▓рд╛ Word2Vec рд╕рд╛рд░рдЦреНрдпрд╛ рдЕрд░реНрдердкреВрд░реНрдг рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬрдиреЗ рдкреВрд░реНрд╡-рднрд░реВ рд╢рдХрддреЛ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рдХреА рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдХреЙрд░реНрдкрд╕рдЪреЗ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ (vocabularies) рдмрд╣реБрдзрд╛ рдЬреБрд│рдгрд╛рд░ рдирд╛рд╣реАрдд, рддреНрдпрд╛рдореБрд│реЗ рдЧрд╣рд╛рд│ рд╢рдмреНрджрд╛рдВрд╕рд╛рдареА рд╡реЗрдЯреНрд╕ (weights) рдпрд╛рджреГрдЪреНрдЫрд┐рдХ (random) рдореВрд▓реНрдпрд╛рдВрдиреА рдкреНрд░рд╛рд░рдВрдн рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Embedding size: 300\n",
|
||||
"Populating matrix, this will take some time...Done, found 41080 words, 54732 words missing\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"embed_size = len(w2v.get_vector('hello'))\n",
|
||||
"print(f'Embedding size: {embed_size}')\n",
|
||||
"\n",
|
||||
"net = EmbedClassifier(vocab_size,embed_size,len(classes))\n",
|
||||
"\n",
|
||||
"print('Populating matrix, this will take some time...',end='')\n",
|
||||
"found, not_found = 0,0\n",
|
||||
"for i,w in enumerate(vocab.get_itos()):\n",
|
||||
" try:\n",
|
||||
" net.embedding.weight[i].data = torch.tensor(w2v.get_vector(w))\n",
|
||||
" found+=1\n",
|
||||
" except:\n",
|
||||
" net.embedding.weight[i].data = torch.normal(0.0,1.0,(embed_size,))\n",
|
||||
" not_found+=1\n",
|
||||
"\n",
|
||||
"print(f\"Done, found {found} words, {not_found} words missing\")\n",
|
||||
"net = net.to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6359375\n",
|
||||
"6400: acc=0.68109375\n",
|
||||
"9600: acc=0.7067708333333333\n",
|
||||
"12800: acc=0.723671875\n",
|
||||
"16000: acc=0.73625\n",
|
||||
"19200: acc=0.7463541666666667\n",
|
||||
"22400: acc=0.7560714285714286\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(214.1013875559821, 0.7626759436980166)"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_epoch_emb(net,train_loader, lr=4, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдЪреВрдХрддреЗрдд рдореЛрдареА рд╡рд╛рдв рджрд┐рд╕рдд рдирд╛рд╣реА, рдЬреНрдпрд╛рдЪреЗ рдореБрдЦреНрдп рдХрд╛рд░рдг рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдВрдореБрд│реЗ рдЕрд╕рд╛рд╡реЗ. \n",
|
||||
"рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдВрдЪреНрдпрд╛ рд╕рдорд╕реНрдпреЗрд╡рд░ рдорд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдЦрд╛рд▓реАрд▓ рдЙрдкрд╛рдпрд╛рдВрдкреИрдХреА рдПрдХ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ: \n",
|
||||
"* рдЖрдкрд▓реНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рд╡рд░ word2vec рдореЙрдбреЗрд▓ рдкреБрдиреНрд╣рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рд╛ \n",
|
||||
"* рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд word2vec рдореЙрдбреЗрд▓рдордзреАрд▓ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рд╕рд╣ рдЖрдкрд▓рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░рд╛. рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдгрд╛рд░рд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. \n",
|
||||
"\n",
|
||||
"рджреБрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╕реЛрдкрд╛ рд╡рд╛рдЯрддреЛ, рд╡рд┐рд╢реЗрд╖рддрдГ рдХрд╛рд░рдг PyTorch `torchtext` рдлреНрд░реЗрдорд╡рд░реНрдХрдордзреНрдпреЗ рдПрдореНрдмреЗрдбрд┐рдВрдЧрд╕рд╛рдареА рдЕрдВрдЧрднреВрдд рд╕рдорд░реНрдерди рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдкрдг рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ GloVe-рдЖрдзрд╛рд░рд┐рдд рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ: \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦЙ| 399999/400000 [00:15<00:00, 25411.14it/s]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab = torchtext.vocab.GloVe(name='6B', dim=50)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдореВрд▓рднреВрдд рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗрдд:\n",
|
||||
"* `vocab.stoi` рд╢рдмреНрджрдХреЛрд╢ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╢рдмреНрдж рддреНрдпрд╛рдЪреНрдпрд╛ рд╢рдмреНрджрдХреЛрд╢ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ\n",
|
||||
"* `vocab.itos` рдпрд╛рдЙрд▓рдЯ рдХрд░рддреЗ - рд╕рдВрдЦреНрдпрд╛ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ\n",
|
||||
"* `vocab.vectors` рд╣рд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡реНрд╣реЗрдХреНрдЯрд░рдЪрд╛ рд╕рд░рдгреА рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдПрдЦрд╛рджреНрдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ `s` рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ `vocab.vectors[vocab.stoi[s]]` рд╡рд╛рдкрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓\n",
|
||||
"\n",
|
||||
"рдпреЗрдереЗ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдордзреНрдпреЗ рдлреЗрд░рдлрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рд▓реЗ рдЖрд╣реЗ, рдЬреЗрдгреЗрдХрд░реВрди рд╕рдореАрдХрд░рдг **kind-man+woman = queen** рд╕рд┐рджреНрдз рдХрд░рддрд╛ рдпреЗрдИрд▓ (рд╣реЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдорд▓рд╛ рдЧреБрдгрд╛рдВрдХ рдереЛрдбрд╛рд╕рд╛ рдмрджрд▓рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'queen'"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# get the vector corresponding to kind-man+woman\n",
|
||||
"qvec = vocab.vectors[vocab.stoi['king']]-vocab.vectors[vocab.stoi['man']]+1.3*vocab.vectors[vocab.stoi['woman']]\n",
|
||||
"# find the index of the closest embedding vector \n",
|
||||
"d = torch.sum((vocab.vectors-qvec)**2,dim=1)\n",
|
||||
"min_idx = torch.argmin(d)\n",
|
||||
"# find the corresponding word\n",
|
||||
"vocab.itos[min_idx]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛ GloVe рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдПрдиреНрдХреЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рдердо рддреНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def offsetify(b):\n",
|
||||
" # first, compute data tensor from all sequences\n",
|
||||
" x = [torch.tensor(encode(t[1],voc=vocab)) for t in b] # pass the instance of vocab to encode function!\n",
|
||||
" # now, compute the offsets by accumulating the tensor of sequence lengths\n",
|
||||
" o = [0] + [len(t) for t in x]\n",
|
||||
" o = torch.tensor(o[:-1]).cumsum(dim=0)\n",
|
||||
" return ( \n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]), # labels\n",
|
||||
" torch.cat(x), # text \n",
|
||||
" o\n",
|
||||
" )"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд╕реЗ рдЖрдкрдг рд╡рд░ рдкрд╛рд╣рд┐рд▓реЗ, рд╕рд░реНрд╡ рд╡реНрд╣реЗрдХреНрдЯрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬ `vocab.vectors` рдореЕрдЯреНрд░рд┐рдХреНрд╕рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рд╕рд╛рдзреНрдпрд╛ рдХреЙрдкреАрдВрдЧрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рддреНрдпрд╛ рд╡реЗрдЯреНрд╕ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдЪреНрдпрд╛ рд╡реЗрдЯреНрд╕рдордзреНрдпреЗ рд▓реЛрдб рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рд╣реЛрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"net = EmbedClassifier(len(vocab),len(vocab.vectors[0]),len(classes))\n",
|
||||
"net.embedding.weight.data = vocab.vectors\n",
|
||||
"net = net.to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6271875\n",
|
||||
"6400: acc=0.68078125\n",
|
||||
"9600: acc=0.7030208333333333\n",
|
||||
"12800: acc=0.71984375\n",
|
||||
"16000: acc=0.7346875\n",
|
||||
"19200: acc=0.7455729166666667\n",
|
||||
"22400: acc=0.7529464285714286\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(35.53972978646833, 0.7575175943698017)"
|
||||
]
|
||||
},
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=offsetify, shuffle=True)\n",
|
||||
"train_epoch_emb(net,train_loader, lr=4, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрдордзреНрдпреЗ рд▓рдХреНрд╖рдгреАрдп рд╡рд╛рдв рдкрд╛рд╣рдд рдирд╛рд╣реА рдпрд╛рдЪреЗ рдПрдХ рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреАрд▓ рдХрд╛рд╣реА рд╢рдмреНрдж рдкреНрд░реА-рдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ GloVe рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рдЕрдиреБрдкрд╕реНрдерд┐рдд рдЖрд╣реЗрдд, рдЖрдгрд┐ рддреНрдпрд╛рдореБрд│реЗ рддреНрдпрд╛рдХрдбреЗ рдореВрд▓рдд: рджреБрд░реНрд▓рдХреНрд╖ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдпрд╛ рдЧреЛрд╖реНрдЯреАрд╡рд░ рдорд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рд╕реНрд╡рддрдГрдЪреЗ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдЯреНрд░реЗрди рдХрд░реВ рд╢рдХрддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕\n",
|
||||
"\n",
|
||||
"рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдЬрд╕реЗ рдХреА Word2Vec рдпрд╛рдВрдЪреА рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдорд░реНрдпрд╛рджрд╛ рдореНрд╣рдгрдЬреЗ рд╢рдмреНрдж рдЕрд░реНрде рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ (word sense disambiguation) рдЪреА рд╕рдорд╕реНрдпрд╛. рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рд╢рдмреНрджрд╛рдВрдЪрд╛ рд╕рдВрджрд░реНрднрд╛рддреАрд▓ рдЕрд░реНрде рдкрдХрдбреВ рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡реНрдп рдЕрд░реНрде рдПрдХрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧрдордзреНрдпреЗрдЪ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдпрд╛рдореБрд│реЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдореЙрдбреЗрд▓реНрд╕рдордзреНрдпреЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдК рд╢рдХрддрд╛рдд, рдХрд╛рд░рдг рдЕрдиреЗрдХ рд╢рдмреНрдж, рдЬрд╕реЗ рдХреА 'play', рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдВрдордзреНрдпреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдЕрд░реНрде рджрд░реНрд╢рд╡рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 'play' рдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рдЦрд╛рд▓реАрд▓ рджреЛрди рд╡рд╛рдХреНрдпрд╛рдВрдордзреНрдпреЗ рдЕрд░реНрде рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│рд╛ рдЖрд╣реЗ:\n",
|
||||
"- рдореА рдерд┐рдПрдЯрд░рдордзреНрдпреЗ рдПрдХ **play** рдкрд╛рд╣рд╛рдпрд▓рд╛ рдЧреЗрд▓реЛ.\n",
|
||||
"- рдЬреЙрдирд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдорд┐рддреНрд░рд╛рдВрд╕реЛрдмрдд **play** рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рд╡рд░реАрд▓ рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ 'play' рдпрд╛ рд╢рдмреНрджрд╛рдЪреЗ рджреЛрдиреНрд╣реА рдЕрд░реНрде рдПрдХрд╛рдЪ рдПрдореНрдмреЗрдбрд┐рдВрдЧрдордзреНрдпреЗ рджрд░реНрд╢рд╡рддрд╛рдд. рд╣реА рдорд░реНрдпрд╛рджрд╛ рджреВрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ **рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓** рдЖрдзрд╛рд░рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рддреАрд▓ рдордЬрдХреВрд░рд╛рд╡рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ *рдЬрд╛рдгрддреЗ* рдХреА рд╢рдмреНрдж рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдВрдордзреНрдпреЗ рдХрд╕реЗ рдПрдХрддреНрд░ рдареЗрд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рдгреЗ рдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рдЪреНрдпрд╛ рдХрдХреНрд╖реЗрдмрд╛рд╣реЗрд░ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдкрдг рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓реНрд╕рдмрджреНрджрд▓ рдмреЛрд▓рддрд╛рдирд╛ рддреНрдпрд╛рдХрдбреЗ рдкрд░рдд рдпреЗрдК.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_pytorch",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "f50b026abce5cf36783a560ea72cb9b1",
|
||||
"translation_date": "2025-08-28T09:46:19+00:00",
|
||||
"source_file": "lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,693 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬ\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдореНрд╣реА `vocab_size` рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдЙрдЪреНрдЪ-рдЖрдпрд╛рдореА рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рд╡реНрд╣реЗрдХреНрдЯрд░рд╡рд░ рдХрд╛рд░реНрдп рдХреЗрд▓реЗ рдЖрдгрд┐ рдХрдореА-рдЖрдпрд╛рдореА рд╕реНрдерд╛рдирд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╡реНрд╣реЗрдХреНрдЯрд░ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рд╡рд┐рд░рд│ рд╡рди-рд╣реЙрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдд рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ. рд╣реЗ рд╡рди-рд╣реЙрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдорд░реАрд╕рд╛рдареА рдХрд╛рд░реНрдпрдХреНрд╖рдо рдирд╛рд╣реА. рдпрд╛рд╢рд┐рд╡рд╛рдп, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓рд╛ рдЬрд╛рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рд╡рди-рд╣реЙрдЯ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ рд╡реНрд╣реЗрдХреНрдЯрд░ рд╢рдмреНрджрд╛рдВрдордзреАрд▓ рдЕрд░реНрдердкреВрд░реНрдг рд╕рдорд╛рдирддрд╛ рд╡реНрдпрдХреНрдд рдХрд░рдд рдирд╛рд╣реАрдд.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдЖрдкрдг **News AG** рдбреЗрдЯрд╛рд╕реЗрдЯрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рд╕реБрд░реВ рдареЗрд╡реВ. рд╕реБрд░реБрд╡рд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреАрд▓ рдХрд╛рд╣реА рд╕рдВрдХрд▓реНрдкрдирд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?\n",
|
||||
"\n",
|
||||
"**рдПрдореНрдмреЗрдбрд┐рдВрдЧ** рд╣реА рдХрд▓реНрдкрдирд╛ рдореНрд╣рдгрдЬреЗ рд╢рдмреНрджрд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрдореА-рдЖрдпрд╛рдореА рдШрди рдЧрдЯрд╛рдВрджреНрд╡рд╛рд░реЗ рдХрд░рдгреЗ, рдЬреЗ рддреНрдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рдЕрд░реНрдердкреВрд░реНрдг рдЕрд░реНрде рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рддрд╛рдд. рдЖрдкрдг рдирдВрддрд░ рдХрд╕реЗ рдЕрд░реНрдердкреВрд░реНрдг рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдпрд╛рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░реВ, рдкрдг рд╕рдзреНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧрд▓рд╛ рд╢рдмреНрдж рд╡реЗрдХреНрдЯрд░рдЪреА рдЖрдпрд╛рдорд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдорд╛рд░реНрдЧ рдореНрд╣рдгреВрди рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдпрд╛.\n",
|
||||
"\n",
|
||||
"рддрд░, рдПрдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рд╢рдмреНрджрд╛рд▓рд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддреЗ рдЖрдгрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ `embedding_size` рдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╡реЗрдХреНрдЯрд░рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ. рдПрдХрд╛ рдЕрд░реНрдерд╛рдиреЗ, рд╣реЗ `Dense` рд▓реЗрдпрд░рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ, рдкрдг рдПрдХ-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбреЗрдб рд╡реЗрдХреНрдЯрд░ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрдгреНрдпрд╛рдРрд╡рдЬреА, рд╣реЗ рд╢рдмреНрдж рдХреНрд░рдорд╛рдВрдХ рдШреЗрдК рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдкрд╣рд┐рд▓реНрдпрд╛ рд▓реЗрдпрд░ рдореНрд╣рдгреВрди рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рд╡рд╛рдкрд░рд▓реНрдпрд╛рдиреЗ, рдЖрдкрдг рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдореЙрдбреЗрд▓рдРрд╡рдЬреА **рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдмреЕрдЧ** рдореЙрдбреЗрд▓рдХрдбреЗ рд╕реНрд╡рд┐рдЪ рдХрд░реВ рд╢рдХрддреЛ, рдЬрд┐рдереЗ рдЖрдкрдг рдкреНрд░рдердо рдЖрдкрд▓реНрдпрд╛ рдордЬрдХреБрд░рд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЛ, рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛ рд╕рд░реНрд╡ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рд╡рд░ рдХрд╛рд╣реА рдПрдХрддреНрд░рд┐рдд рдлрдВрдХреНрд╢рди (рдЬрд╕реЗ рдХреА `sum`, `average` рдХрд┐рдВрд╡рд╛ `max`) рдЧрдгрдирд╛ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рд▓реЗрдпрд░реНрд╕ рдЕрд╕рддрд╛рдд:\n",
|
||||
"\n",
|
||||
"* `TextVectorization` рд▓реЗрдпрд░, рдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧрд▓рд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддреЗ рдЖрдгрд┐ рдЯреЛрдХрди рдХреНрд░рдорд╛рдВрдХрд╛рдВрдЪрд╛ рдЯреЗрдиреНрд╕рд░ рддрдпрд╛рд░ рдХрд░рддреЗ. рдЖрдкрдг рдХрд╛рд╣реА рд╡рд╛рдЬрд╡реА рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рдЖрдХрд╛рд░ `vocab_size` рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ, рдЖрдгрд┐ рдХрдореА-рд╡рд╛рд░рдВрд╡рд╛рд░ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рд╢рдмреНрдж рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХрд░реВ. рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ 1 рдЕрд╕реЗрд▓, рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ $n$ рдЕрд╕реЗрд▓, рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ $n$ рдЯреЛрдХрдиреНрд╕ рдорд┐рд│рддреАрд▓, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрди 0 рддреЗ `vocab_size` рдордзреАрд▓ рдХреНрд░рдорд╛рдВрдХ рдЕрд╕рддреАрд▓.\n",
|
||||
"* `Embedding` рд▓реЗрдпрд░, рдЬреА $n$ рдХреНрд░рдорд╛рдВрдХ рдШреЗрддреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рдорд╛рдВрдХрд╛рд▓рд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдШрди рдЧрдЯрд╛рдд (рдЙрджрд╛. рдЖрдкрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд 100) рдХрдореА рдХрд░рддреЗ. рддреНрдпрд╛рдореБрд│реЗ, $n$ рдЖрдХрд╛рд░рд╛рдЪрд╛ рдЗрдирдкреБрдЯ рдЯреЗрдиреНрд╕рд░ $n\\times 100$ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рдЯреЗрдиреНрд╕рд░рдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрдИрд▓.\n",
|
||||
"* рдПрдХрддреНрд░реАрдХрд░рдг рд▓реЗрдпрд░, рдЬреА рдпрд╛ рдЯреЗрдиреНрд╕рд░рдЪрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдЕрдХреНрд╖рд╛рд╡рд░ рд╕рд░рд╛рд╕рд░реА рдХрд╛рдврддреЗ, рдореНрд╣рдгрдЬреЗрдЪ рддреА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╛рдВрд╕рд╛рдареА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ $n$ рдЗрдирдкреБрдЯ рдЯреЗрдиреНрд╕рд░реНрд╕рдЪреА рд╕рд░рд╛рд╕рд░реА рдХрд╛рдвреЗрд▓. рд╣реЗ рд▓реЗрдпрд░ рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `Lambda` рд▓реЗрдпрд░ рд╡рд╛рдкрд░реВ, рдЖрдгрд┐ рддреНрдпрд╛рдд рд╕рд░рд╛рд╕рд░реА рдХрд╛рдврдгреНрдпрд╛рдЪреЗ рдлрдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░реВ. рдЖрдЙрдЯрдкреБрдЯрдЪрд╛ рдЖрдХрд╛рд░ 100 рдЕрд╕реЗрд▓, рдЖрдгрд┐ рддреЛ рд╕рдВрдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рдЪреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЕрд╕реЗрд▓.\n",
|
||||
"* рдЕрдВрддрд┐рдо `Dense` рд░реЗрд╖реАрдп рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
" Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
" text_vectorization (TextVec (None, None) 0 \n",
|
||||
" torization) \n",
|
||||
" \n",
|
||||
" embedding (Embedding) (None, None, 100) 3000000 \n",
|
||||
" \n",
|
||||
" lambda (Lambda) (None, 100) 0 \n",
|
||||
" \n",
|
||||
" dense (Dense) (None, 4) 404 \n",
|
||||
" \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 3,000,404\n",
|
||||
"Trainable params: 3,000,404\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = 30000\n",
|
||||
"batch_size = 128\n",
|
||||
"\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,input_shape=(1,))\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer, \n",
|
||||
" keras.layers.Embedding(vocab_size,100),\n",
|
||||
" keras.layers.Lambda(lambda x: tf.reduce_mean(x,axis=1)),\n",
|
||||
" keras.layers.Dense(4, activation='softmax')\n",
|
||||
"])\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`summary` рдЪреНрдпрд╛ рдкреНрд░рд┐рдВрдЯрдЖрдЙрдЯрдордзреНрдпреЗ, **output shape** рдХреЙрд▓рдордордзреНрдпреЗ, рдкрд╣рд┐рд▓рд╛ рдЯреЗрдиреНрд╕рд░ рдбрд╛рдпрдореЗрдВрд╢рди `None` рдорд┐рдиреАрдмреЕрдЪрдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдЖрдгрд┐ рджреБрд╕рд░рд╛ рдЯреЛрдХрди рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ. рдорд┐рдиреАрдмреЕрдЪрдордзреАрд▓ рд╕рд░реНрд╡ рдЯреЛрдХрди рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рдЪреА рд▓рд╛рдВрдмреА рд╡реЗрдЧрд╡реЗрдЧрд│реА рдЕрд╕рддреЗ. рдпрд╛рд╡рд░ рдХрд╕реЗ рдХрд╛рдо рдХрд░рд╛рдпрдЪреЗ, рдпрд╛рдмрджреНрджрд▓ рдЖрдкрдг рдкреБрдвреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд рдЪрд░реНрдЪрд╛ рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдКрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n",
|
||||
"938/938 [==============================] - 20s 20ms/step - loss: 0.7891 - acc: 0.8155 - val_loss: 0.4470 - val_acc: 0.8642\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x22255515100>"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"print(\"Training vectorizer\")\n",
|
||||
"vectorizer.adapt(ds_train.take(500).map(extract_text))\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"> **рдЯреАрдк** рдХреА рдЖрдореНрд╣реА рдбреЗрдЯрд╛рдЪреНрдпрд╛ рдЙрдкрд╕рдореБрдЪреНрдЪреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рддрдпрд╛рд░ рдХрд░рдд рдЖрд╣реЛрдд. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡реЗрдЧрд╡рд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЖрдгрд┐ рдпрд╛рдореБрд│реЗ рдЕрд╢реА рдкрд░рд┐рд╕реНрдерд┐рддреА рдирд┐рд░реНрдорд╛рдг рд╣реЛрдК рд╢рдХрддреЗ рдХреА рдЖрдордЪреНрдпрд╛ рдордЬрдХреБрд░рд╛рддреАрд▓ рд╕рд░реНрд╡ рдЯреЛрдХрдиреНрд╕ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рдЙрдкрд╕реНрдерд┐рдд рдирд╕рддреАрд▓. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рддреНрдпрд╛ рдЯреЛрдХрдиреНрд╕ рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓, рдЬреНрдпрд╛рдореБрд│реЗ рдЕрдЪреВрдХрддреЗрдд рдереЛрдбреАрд╢реА рдШрдЯ рд╣реЛрдК рд╢рдХрддреЗ. рддрдерд╛рдкрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирд╛рдд рдордЬрдХреБрд░рд╛рдЪрд╛ рдЙрдкрд╕рдореБрдЪреНрдЪрд╛ рдЕрдиреЗрдХрджрд╛ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЕрдВрджрд╛рдЬ рджреЗрддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдЪрд▓ рдмрджрд▓рддреНрдпрд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХреЗрдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдВрд╢реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рд╕рдордЬреВрди рдШреЗрдКрдпрд╛ рдХреА рдорд┐рдиреАрдмреЕрдЪреЗрд╕рдордзреНрдпреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╕реЗ рд╣реЛрддреЗ. рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЗрдирдкреБрдЯ рдЯреЗрдиреНрд╕рд░рдЪреЗ рдкрд░рд┐рдорд╛рдг 1 рдЖрд╣реЗ, рдЖрдгрд┐ рдЖрдкрдг 128-рд▓рд╛рдВрдм рдорд┐рдиреАрдмреЕрдЪреЗрд╕ рд╡рд╛рдкрд░рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рдЯреЗрдиреНрд╕рд░рдЪрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ $128 \\times 1$ рдЖрд╣реЗ. рдорд╛рддреНрд░, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдХреНрдпрд╛рддреАрд▓ рдЯреЛрдХрдиреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡реЗрдЧрд│реА рдЕрд╕рддреЗ. рдЬрд░ рдЖрдкрдг `TextVectorization` рд╕реНрддрд░ рдПрдХрд╛ рдЗрдирдкреБрдЯрд╡рд░ рд▓рд╛рдЧреВ рдХреЗрд▓рд╛, рддрд░ рдкрд░рдд рдорд┐рд│рдгрд╛рд▒реНрдпрд╛ рдЯреЛрдХрдиреНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡реЗрдЧрд│реА рдЕрд╕рддреЗ, рдХрд╛рд░рдг рддреА рдордЬрдХреВрд░ рдХрд╕рд╛ рдЯреЛрдХрдирд╛рдЗрдЭ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"tf.Tensor([ 1 45], shape=(2,), dtype=int64)\n",
|
||||
"tf.Tensor([ 112 1271 1 3 1747 158], shape=(6,), dtype=int64)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print(vectorizer('Hello, world!'))\n",
|
||||
"print(vectorizer('I am glad to meet you!'))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рддрдерд╛рдкрд┐, рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рд╡реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рдЕрдиреЗрдХ рдЕрдиреБрдХреНрд░рдорд╛рдВрд╡рд░ рд▓рд╛рдЧреВ рдХрд░рддреЛ, рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рд▓рд╛ рдЖрдпрддрд╛рдХреГрддреА рдЖрдХрд╛рд░рд╛рдЪрд╛ рдЯреЗрдиреНрд╕рд░ рддрдпрд╛рд░ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ, рддреНрдпрд╛рдореБрд│реЗ рддреЛ рди рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдВрдирд╛ PAD рдЯреЛрдХрдирдиреЗ (рдЬреЛ рдЖрдкрд▓реНрдпрд╛ рдмрд╛рдмрддреАрдд рд╢реВрдиреНрдп рдЖрд╣реЗ) рднрд░рддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tf.Tensor: shape=(2, 6), dtype=int64, numpy=\n",
|
||||
"array([[ 1, 45, 0, 0, 0, 0],\n",
|
||||
" [ 112, 1271, 1, 3, 1747, 158]], dtype=int64)>"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vectorizer(['Hello, world!','I am glad to meet you!'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЗрдереЗ рдЖрдкрдг рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдкрд╛рд╣реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[[ 1.53059261e-02, 6.80514947e-02, 3.14026810e-02, ...,\n",
|
||||
" -8.92002955e-02, 1.52911525e-04, -5.65562584e-02],\n",
|
||||
" [ 2.57456154e-01, 2.79364467e-01, -2.03605562e-01, ...,\n",
|
||||
" -2.07474351e-01, 8.31158683e-02, -2.03911960e-01],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02]],\n",
|
||||
"\n",
|
||||
" [[ 1.89674050e-01, 2.61548996e-01, -3.67433839e-02, ...,\n",
|
||||
" -2.07366899e-01, -1.05442435e-01, -2.36952081e-01],\n",
|
||||
" [ 6.16133213e-02, 1.80511594e-01, 9.77298319e-02, ...,\n",
|
||||
" -5.46628237e-02, -1.07340455e-01, -1.06589928e-01],\n",
|
||||
" [ 1.53059261e-02, 6.80514947e-02, 3.14026810e-02, ...,\n",
|
||||
" -8.92002955e-02, 1.52911525e-04, -5.65562584e-02],\n",
|
||||
" [-4.84890305e-02, -8.41715634e-02, 1.51529670e-01, ...,\n",
|
||||
" 1.28192469e-01, -7.77286515e-02, 1.26041949e-01],\n",
|
||||
" [-4.17212099e-02, -5.60694858e-02, 4.08860669e-02, ...,\n",
|
||||
" 8.70475471e-02, 8.92383084e-02, 1.67974353e-01],\n",
|
||||
" [ 2.85779923e-01, 4.57767487e-01, 4.52292450e-02, ...,\n",
|
||||
" -1.97419018e-01, -2.04659685e-01, -2.79758364e-01]]],\n",
|
||||
" dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.layers[1](vectorizer(['Hello, world!','I am glad to meet you!'])).numpy()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕: Word2Vec\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдиреЗ рд╢рдмреНрджрд╛рдВрдирд╛ рд╡реНрд╣реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдд рдореЕрдк рдХрд░рдгреЗ рд╢рд┐рдХрд▓реЗ, рдкрд░рдВрддреБ рдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдВрдирд╛ рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдЕрд░реНрде рдирд╡реНрд╣рддрд╛. рдЕрд╕реЗ рд╡реНрд╣реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╢рд┐рдХрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рдорд╛рди рд╢рдмреНрдж рдХрд┐рдВрд╡рд╛ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рдХрд╛рд╣реА рд╡реНрд╣реЗрдХреНрдЯрд░ рдЕрдВрддрд░рд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдпреБрдХреНрд▓рд┐рдбрд┐рдпрди рдЕрдВрддрд░) рдПрдХрдореЗрдХрд╛рдВрдЪреНрдпрд╛ рдЬрд╡рд│ рдЕрд╕рддреАрд▓.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ [Word2Vec](https://en.wikipedia.org/wiki/Word2vec) рд╕рд╛рд░рдЦреНрдпрд╛ рддрдВрддреНрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рддреАрд▓ рдордЬрдХреВрд░рд╛рд╡рд░ рдЖрдкрд▓рд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореЙрдбреЗрд▓ рдкреНрд░реАрдЯреНрд░реЗрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рджреЛрди рдореБрдЦреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ рдЬреЗ рд╢рдмреНрджрд╛рдВрдЪреЗ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд:\n",
|
||||
"\n",
|
||||
" - **рдХрдВрдЯрд┐рдиреНрдпреБрдЕрд╕ рдмреЕрдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕** (CBoW), рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдкрдг рдореЙрдбреЗрд▓рд▓рд╛ рдЖрдЬреВрдмрд╛рдЬреВрдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рддреВрди рд╢рдмреНрджрд╛рдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЛ. рджрд┐рд▓реЗрд▓реНрдпрд╛ ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$ рдордзреНрдпреЗ, рдореЙрдбреЗрд▓рдЪреЗ рдЙрджреНрджрд┐рд╖реНрдЯ $(W_{-2},W_{-1},W_1,W_2)$ рдкрд╛рд╕реВрди $W_0$ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреЗ рдЖрд╣реЗ.\n",
|
||||
" - **рдХрдВрдЯрд┐рдиреНрдпреБрдЕрд╕ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо** CBoW рдЪреНрдпрд╛ рдЙрд▓рдЯ рдЖрд╣реЗ. рдореЙрдбреЗрд▓ рд╕рдзреНрдпрд╛рдЪрд╛ рд╢рдмреНрдж рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрджрд░реНрдн рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдВрдбреЛрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреЗ.\n",
|
||||
"\n",
|
||||
"CBoW рдЬрд▓рдж рдЖрд╣реЗ, рдЖрдгрд┐ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо рдЬрд░реА рд╣рд│реВ рдЕрд╕рд▓рд╛ рддрд░реА, рддреЛ рджреБрд░реНрдорд┐рд│ рд╢рдмреНрджрд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Google News рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ Word2Vec рдПрдореНрдмреЗрдбрд┐рдВрдЧрд╕рд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг **gensim** рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ рд╢рдХрддреЛ. рдЦрд╛рд▓реА 'neural' рд╢рдмреНрджрд╛рд╢реА рд╕рд░реНрд╡рд╛рдзрд┐рдХ рд╕рдорд╛рди рдЕрд╕рд▓реЗрд▓реЗ рд╢рдмреНрдж рд╢реЛрдзрд▓реЗ рдЖрд╣реЗрдд.\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк:** рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдкреНрд░рдердо рд╢рдмреНрдж рд╡реНрд╣реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░рддрд╛, рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдВрдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рдереЛрдбрд╛ рд╡реЗрд│ рдШреЗрдК рд╢рдХрддреЗ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import gensim.downloader as api\n",
|
||||
"w2v = api.load('word2vec-google-news-300')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"neuronal -> 0.7804799675941467\n",
|
||||
"neurons -> 0.7326500415802002\n",
|
||||
"neural_circuits -> 0.7252851724624634\n",
|
||||
"neuron -> 0.7174385190010071\n",
|
||||
"cortical -> 0.6941086649894714\n",
|
||||
"brain_circuitry -> 0.6923246383666992\n",
|
||||
"synaptic -> 0.6699118614196777\n",
|
||||
"neural_circuitry -> 0.6638563275337219\n",
|
||||
"neurochemical -> 0.6555314064025879\n",
|
||||
"neuronal_activity -> 0.6531826257705688\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for w,p in w2v.most_similar('neural'):\n",
|
||||
" print(f\"{w} -> {p}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рд╢рдмреНрджрд╛рддреВрди рд╡реНрд╣реЗрдХреНрдЯрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рджреЗрдЦреАрд▓ рдХрд╛рдвреВ рд╢рдХрддреЛ, рдЬреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдПрдореНрдмреЗрдбрд┐рдВрдЧрдордзреНрдпреЗ 300 рдШрдЯрдХ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА рдпреЗрдереЗ рдЖрдореНрд╣реА рдлрдХреНрдд рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреЗ рдкрд╣рд┐рд▓реЗ 20 рдШрдЯрдХ рджрд╛рдЦрд╡рддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([ 0.01226807, 0.06225586, 0.10693359, 0.05810547, 0.23828125,\n",
|
||||
" 0.03686523, 0.05151367, -0.20703125, 0.01989746, 0.10058594,\n",
|
||||
" -0.03759766, -0.1015625 , -0.15820312, -0.08105469, -0.0390625 ,\n",
|
||||
" -0.05053711, 0.16015625, 0.2578125 , 0.10058594, -0.25976562],\n",
|
||||
" dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v['play'][:20]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрдерд╛рдЪреНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдмрджреНрджрд▓рдЪреА рдорд╣рд╛рди рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣реА рдЕрд░реНрдерд╛рдЪреНрдпрд╛ рдЖрдзрд╛рд░рд╛рд╡рд░ рд╡реНрд╣реЗрдХреНрдЯрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧрдордзреНрдпреЗ рдлреЗрд░рдлрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдкрдг рдЕрд╕реЗ рд╡рд┐рдЪрд╛рд░реВ рд╢рдХрддреЛ рдХреА *рд░рд╛рдЬрд╛* рдЖрдгрд┐ *рд╕реНрддреНрд░реА* рдпрд╛ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЬрд┐рддрдХреЗ рдЬрд╡рд│рдЬрд╡рд│ рд╡реНрд╣реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЕрд╕реЗрд▓ рдЖрдгрд┐ *рдкреБрд░реБрд╖* рдпрд╛ рд╢рдмреНрджрд╛рдкрд╛рд╕реВрди рдЬрд┐рддрдХреЗ рджреВрд░ рдЕрд╕реЗрд▓ рдЕрд╕рд╛ рд╢рдмреНрдж рд╢реЛрдзрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"('queen', 0.7118192911148071)"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v.most_similar(positive=['king','woman'],negative=['man'])[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"source": [
|
||||
"рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ рдХрд╛рд╣реА рдЕрдВрддрд░реНрдЧрдд GenSym рдЬрд╛рджреВрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореВрд│ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдЦреВрдкрдЪ рд╕реЛрдкреЗ рдЖрд╣реЗ. рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдмрджреНрджрд▓ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣реА рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡реЗрдХреНрдЯрд░рд╡рд░ рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░ рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░реВ рд╢рдХрддрд╛, рдЖрдгрд┐ рддреЗ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ **рдЕрд░реНрдерд╛рдВрд╡рд░** рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░реЗрд▓. рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдг рд╡реЗрдХреНрдЯрд░ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ рд╡реНрдпрдХреНрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ: рдЖрдореНрд╣реА **KING-MAN+WOMAN** рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╡реЗрдХреНрдЯрд░рдЪреА рдЧрдгрдирд╛ рдХрд░рддреЛ (`+` рдЖрдгрд┐ `-` рдСрдкрд░реЗрд╢рдиреНрд╕ рд╕рдВрдмрдВрдзрд┐рдд рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзреАрдВрд╡рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд), рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛ рд╡реЗрдХреНрдЯрд░рдЪреНрдпрд╛ рдЬрд╡рд│рдЪрд╛ рд╢рдмреНрдж рд╢рдмреНрджрдХреЛрд╢рд╛рдд рд╢реЛрдзрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'queen'"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# get the vector corresponding to kind-man+woman\n",
|
||||
"qvec = w2v['king']-1.7*w2v['man']+1.7*w2v['woman']\n",
|
||||
"# find the index of the closest embedding vector \n",
|
||||
"d = np.sum((w2v.vectors-qvec)**2,axis=1)\n",
|
||||
"min_idx = np.argmin(d)\n",
|
||||
"# find the corresponding word\n",
|
||||
"w2v.index_to_key[min_idx]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк**: рдЖрдореНрд╣рд╛рд▓рд╛ *man* рдЖрдгрд┐ *woman* рд╡реЗрдХреНрдЯрд░рдордзреНрдпреЗ рдЫреЛрдЯреЗ coefficients рдЬреЛрдбрд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ - рддреЗ рдХрд╛рдвреВрди рдЯрд╛рдХреВрди рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдкрд╛рд╣рд╛.\n",
|
||||
"\n",
|
||||
"рд╕рд░реНрд╡рд╛рдд рдЬрд╡рд│рдЪрд╛ рд╡реЗрдХреНрдЯрд░ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА TensorFlow рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЖрдордЪреНрдпрд╛ рд╡реЗрдХреНрдЯрд░ рдЖрдгрд┐ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ рд╕рд░реНрд╡ рд╡реЗрдХреНрдЯрд░рдордзреАрд▓ рдЕрдВрддрд░рд╛рдЪрд╛ рд╡реЗрдХреНрдЯрд░ рдореЛрдЬрддреЛ, рдЖрдгрд┐ рдирдВрддрд░ `argmin` рд╡рд╛рдкрд░реВрди рдХрд┐рдорд╛рди рд╢рдмреНрджрд╛рдЪрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╢реЛрдзрддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд░реА Word2Vec рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЕрд░реНрдердкреВрд░реНрдгрддреЗрд╕рд╛рдареА рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкрджреНрдзрдд рд╡рд╛рдЯрдд рдЕрд╕рд▓реА рддрд░реА, рддреНрдпрд╛рд▓рд╛ рдЕрдиреЗрдХ рдорд░реНрдпрд╛рджрд╛ рдЖрд╣реЗрдд, рдЬрд╕реЗ рдХреА рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ:\n",
|
||||
"\n",
|
||||
"* CBoW рдЖрдгрд┐ skip-gram рдореЙрдбреЗрд▓реНрд╕ рд╣реЗ **predictive embeddings** рдЖрд╣реЗрдд, рдЖрдгрд┐ рддреЗ рдлрдХреНрдд рд╕реНрдерд╛рдирд┐рдХ рд╕рдВрджрд░реНрднрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛рдд. Word2Vec рдЬрд╛рдЧрддрд┐рдХ рд╕рдВрджрд░реНрднрд╛рдЪрд╛ рдлрд╛рдпрджрд╛ рдШреЗрдд рдирд╛рд╣реА.\n",
|
||||
"* Word2Vec рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ **рд░реВрдкрд╡рд┐рдЬреНрдЮрд╛рдирд╛рдЪрд╛** рд╡рд┐рдЪрд╛рд░ рдХрд░рдд рдирд╛рд╣реА, рдореНрд╣рдгрдЬреЗрдЪ рд╢рдмреНрджрд╛рдЪрд╛ рдЕрд░реНрде рддреНрдпрд╛рдЪреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рднрд╛рдЧрд╛рдВрд╡рд░ (рдЬрд╕реЗ рдХреА рдореВрд│ рд╢рдмреНрдж) рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЛ.\n",
|
||||
"\n",
|
||||
"**FastText** рджреБрд╕рд▒реНрдпрд╛ рдорд░реНрдпрд╛рджреЗрд╡рд░ рдорд╛рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЗ рдЖрдгрд┐ Word2Vec рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ. рд╣реЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд╛рд╕рд╛рдареА рдЖрдгрд┐ рддреНрдпрд╛ рд╢рдмреНрджрд╛рдордзреНрдпреЗ рдЖрдврд│рдгрд╛рд▒реНрдпрд╛ рдЕрдХреНрд╖рд░ n-grams рд╕рд╛рдареА рд╡реНрд╣реЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╢рд┐рдХрддреЗ. рдпрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдВрдЪреНрдпрд╛ рдореВрд▓реНрдпрд╛рдВрдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдПрдХрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рд╕рд░рд╛рд╕рд░реА рдХреЗрд▓реА рдЬрд╛рддреЗ. рдЬрд░реА рдпрд╛рдореБрд│реЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдгрдирд╛ рд▓рд╛рдЧрддреЗ, рддрд░реАрд╣реА рдпрд╛рдореБрд│реЗ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ embeddings рдордзреНрдпреЗ рдЙрдк-рд╢рдмреНрдж рдорд╛рд╣рд┐рддреА рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рд╣реЛрдК рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рджреБрд╕рд░реА рдкрджреНрдзрдд, **GloVe**, рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ embeddings рд╕рд╛рдареА рд╡реЗрдЧрд│рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рд╡рд╛рдкрд░рддреЗ, рдЬреЛ рд╢рдмреНрдж-рд╕рдВрджрд░реНрдн рдореЕрдЯреНрд░рд┐рдХреНрд╕рдЪреНрдпрд╛ рдШрдЯрдХрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗ. рдкреНрд░рдердо, рддреА рдПрдХ рдореЛрдареА рдореЕрдЯреНрд░рд┐рдХреНрд╕ рддрдпрд╛рд░ рдХрд░рддреЗ рдЬреА рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдВрдордзреНрдпреЗ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪреА рд╕рдВрдЦреНрдпрд╛ рдореЛрдЬрддреЗ, рдЖрдгрд┐ рдирдВрддрд░ рддреА рдпрд╛ рдореЕрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рдХрдореА рдкрд░рд┐рдорд╛рдгрд╛рдВрдордзреНрдпреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдкреБрдирд░реНрд░рдЪрдирд╛ рддреЛрдЯрд╛ (reconstruction loss) рдХрдореА рд╣реЛрддреЛ.\n",
|
||||
"\n",
|
||||
"gensim рд▓рд╛рдпрдмреНрд░рд░реА рдпрд╛ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ embeddings рд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ, рдЖрдгрд┐ рддреБрдореНрд╣реА рд╡рд░реАрд▓ рдореЙрдбреЗрд▓ рд▓реЛрдбрд┐рдВрдЧ рдХреЛрдб рдмрджрд▓реВрди рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╕реЛрдмрдд рдкреНрд░рдпреЛрдЧ рдХрд░реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдХреЗрд░рд╕ рдордзреНрдпреЗ рдкреВрд░реНрд╡рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдЪрд╛ рд╡рд╛рдкрд░\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдг рдмрджрд▓реВрди рдЖрдкрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдордзреНрдпреЗ Word2Vec рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рд╕рд╣ рдореЕрдЯреНрд░рд┐рдХреНрд╕ рдкреВрд░реНрд╡рдкреНрд░рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддреЛ. рдкреВрд░реНрд╡рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдЖрдгрд┐ рдордЬрдХреВрд░ рдХреЙрд░реНрдкрд╕рдЪреА рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ (vocabularies) рдмрд╣реБрдзрд╛ рдЬреБрд│рдгрд╛рд░ рдирд╛рд╣реАрдд, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХ рдирд┐рд╡рдб рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рдпреЗрдереЗ рдЖрдкрдг рджреЛрди рд╢рдХреНрдп рдкрд░реНрдпрд╛рдпрд╛рдВрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рддреЛ: рдЯреЛрдХрдирд╛рдпрдЭрд░ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ рдЖрдгрд┐ Word2Vec рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдордзреАрд▓ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ.\n",
|
||||
"\n",
|
||||
"### рдЯреЛрдХрдирд╛рдпрдЭрд░ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рд╡рд╛рдкрд░\n",
|
||||
"\n",
|
||||
"рдЯреЛрдХрдирд╛рдпрдЭрд░ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддрд╛рдирд╛, рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ рдХрд╛рд╣реА рд╢рдмреНрджрд╛рдВрдирд╛ Word2Vec рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдЕрд╕рддреАрд▓, рддрд░ рдХрд╛рд╣реА рдЧрд╣рд╛рд│ рдЕрд╕рддреАрд▓. рдЧреГрд╣реАрдд рдзрд░рд▓реЗ рдХреА рдЖрдкрд▓рд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рдЖрдХрд╛рд░ `vocab_size` рдЖрд╣реЗ, рдЖрдгрд┐ Word2Vec рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреА рд▓рд╛рдВрдмреА `embed_size` рдЖрд╣реЗ, рддрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ `vocab_size`$\\times$`embed_size` рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рд╡реЗрдЯ рдореЕрдЯреНрд░рд┐рдХреНрд╕рдиреЗ рджрд░реНрд╢рд╡рд┐рд▓рд╛ рдЬрд╛рдИрд▓. рдЖрдкрдг рд╣рд╛ рдореЕрдЯреНрд░рд┐рдХреНрд╕ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдордзреВрди рдЬрд╛рдКрди рднрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Embedding size: 300\n",
|
||||
"Populating matrix, this will take some time...Done, found 4551 words, 784 words missing\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"embed_size = len(w2v.get_vector('hello'))\n",
|
||||
"print(f'Embedding size: {embed_size}')\n",
|
||||
"\n",
|
||||
"vocab = vectorizer.get_vocabulary()\n",
|
||||
"W = np.zeros((vocab_size,embed_size))\n",
|
||||
"print('Populating matrix, this will take some time...',end='')\n",
|
||||
"found, not_found = 0,0\n",
|
||||
"for i,w in enumerate(vocab):\n",
|
||||
" try:\n",
|
||||
" W[i] = w2v.get_vector(w)\n",
|
||||
" found+=1\n",
|
||||
" except:\n",
|
||||
" # W[i] = np.random.normal(0.0,0.3,size=(embed_size,))\n",
|
||||
" not_found+=1\n",
|
||||
"\n",
|
||||
"print(f\"Done, found {found} words, {not_found} words missing\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬреНрдпрд╛ рд╢рдмреНрджрд╛рдВрд╕рд╛рдареА Word2Vec рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рд╢рдмреНрдж рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реАрдд, рддреНрдпрд╛рдВрдирд╛ рд╢реВрдиреНрдп рдореНрд╣рдгреВрди рдареЗрд╡реВ рд╢рдХрддреЛ рдХрд┐рдВрд╡рд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╡реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдкреНрд░реАрдЯреНрд░реЗрдВрдб рд╡рдЬрдирд╛рдВрд╕рд╣ рдПрдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"emb = keras.layers.Embedding(vocab_size,embed_size,weights=[W],trainable=False)\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer, emb,\n",
|
||||
" keras.layers.Lambda(lambda x: tf.reduce_mean(x,axis=1)),\n",
|
||||
" keras.layers.Dense(4, activation='softmax')\n",
|
||||
"])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"938/938 [==============================] - 10s 10ms/step - loss: 1.1075 - acc: 0.7822 - val_loss: 0.9134 - val_acc: 0.8175\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x2220226ef10>"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),\n",
|
||||
" validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк**: рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА `Embedding` рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдЖрдореНрд╣реА `trainable=False` рд╕реЗрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ, рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЖрдореНрд╣реА Embedding рд▓реЗрдпрд░ рдкреБрдиреНрд╣рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдд рдирд╛рд╣реА. рдпрд╛рдореБрд│реЗ рдЕрдЪреВрдХрддрд╛ рдереЛрдбреА рдХрдореА рд╣реЛрдК рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪрд╛ рд╡реЗрдЧ рд╡рд╛рдврддреЛ.\n",
|
||||
"\n",
|
||||
"### рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рд╡рд╛рдкрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдорд╛рдЧреАрд▓ рдкрджреНрдзрддреАрд╕рд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореНрд╣рдгрдЬреЗ TextVectorization рдЖрдгрд┐ Embedding рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдЖрд╣реЗрдд. рдпрд╛ рд╕рдорд╕реНрдпреЗрд╡рд░ рдорд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдЦрд╛рд▓реАрд▓рдкреИрдХреА рдПрдХ рдЙрдкрд╛рдп рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ:\n",
|
||||
"* рдЖрдордЪреНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рд╡рд░ Word2Vec рдореЙрдбреЗрд▓ рдкреБрдиреНрд╣рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреНрдпрд╛.\n",
|
||||
"* рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ Word2Vec рдореЙрдбреЗрд▓рдордзреАрд▓ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рд╕рд╣ рдЖрдордЪрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░рд╛. рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░рддрд╛рдирд╛ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рджреБрд╕рд░реА рдкрджреНрдзрдд рд╕реЛрдкреА рд╡рд╛рдЯрддреЗ, рдореНрд╣рдгреВрди рддреА рдЕрдВрдорд▓рд╛рдд рдЖрдгреВрдпрд╛. рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдореНрд╣реА Word2Vec рдПрдореНрдмреЗрдбрд┐рдВрдЧрдордзреВрди рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рд╕рд╣ `TextVectorization` рд▓реЗрдпрд░ рддрдпрд╛рд░ рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vocab = list(w2v.vocab.keys())\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(input_shape=(1,))\n",
|
||||
"vectorizer.set_vocabulary(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬреЗрдирд╕рд┐рдо рд╡рд░реНрдб рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬ рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рдПрдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдлрдВрдХреНрд╢рди, `get_keras_embeddings`, рдЖрд╣реЗ, рдЬреЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЗрд░рд╕ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬ рд▓реЗрдпрд░ рддрдпрд╛рд░ рдХрд░реЗрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Epoch 1/5\n",
|
||||
"938/938 [==============================] - 20s 14ms/step - loss: 1.3377 - acc: 0.4978 - val_loss: 1.2995 - val_acc: 0.5647\n",
|
||||
"Epoch 2/5\n",
|
||||
"938/938 [==============================] - 10s 10ms/step - loss: 1.2587 - acc: 0.5722 - val_loss: 1.2339 - val_acc: 0.5842\n",
|
||||
"Epoch 3/5\n",
|
||||
"938/938 [==============================] - 10s 10ms/step - loss: 1.1980 - acc: 0.5884 - val_loss: 1.1826 - val_acc: 0.5954\n",
|
||||
"Epoch 4/5\n",
|
||||
"938/938 [==============================] - 12s 13ms/step - loss: 1.1503 - acc: 0.6002 - val_loss: 1.1417 - val_acc: 0.6018\n",
|
||||
"Epoch 5/5\n",
|
||||
"938/938 [==============================] - 11s 12ms/step - loss: 1.1120 - acc: 0.6097 - val_loss: 1.1083 - val_acc: 0.6104\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x2220ccb81c0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer, \n",
|
||||
" w2v.get_keras_embedding(train_embeddings=False),\n",
|
||||
" keras.layers.Lambda(lambda x: tf.reduce_mean(x,axis=1)),\n",
|
||||
" keras.layers.Dense(4, activation='softmax')\n",
|
||||
"])\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128),epochs=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдЙрдЪреНрдЪ рдЕрдЪреВрдХрддрд╛ рдкрд╛рд╣рдд рдирд╛рд╣реА рдпрд╛рдЪреЗ рдПрдХ рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреАрд▓ рдХрд╛рд╣реА рд╢рдмреНрдж рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ GloVe рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ рддреЗ рдореВрд▓рдд: рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдпрд╛рд╡рд░ рдорд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ рд╕реНрд╡рддрдГрдЪреЗ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдК рд╢рдХрддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕\n",
|
||||
"\n",
|
||||
"Word2Vec рд╕рд╛рд░рдЦреНрдпрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдЪреЗ рдПрдХ рдореБрдЦреНрдп рдорд░реНрдпрд╛рджрд┐рдд рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдореНрд╣рдгрдЬреЗ, рдЬрд░реА рддреНрдпрд╛ рдПрдЦрд╛рджреНрдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рдХрд╛рд╣реА рдЕрд░реНрде рдкрдХрдбреВ рд╢рдХрддрд╛рдд, рддрд░реА рддреНрдпрд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЕрд░реНрдерд╛рдВрдордзреНрдпреЗ рдлрд░рдХ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реАрдд. рдпрд╛рдореБрд│реЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдореЙрдбреЗрд▓реНрд╕рдордзреНрдпреЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдК рд╢рдХрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, 'play' рдпрд╛ рд╢рдмреНрджрд╛рдЪрд╛ рджреЛрди рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рд╛рдХреНрдпрд╛рдВрдордзреНрдпреЗ рд╡реЗрдЧрд│рд╛ рдЕрд░реНрде рдЖрд╣реЗ:\n",
|
||||
"- рдореА рдерд┐рдПрдЯрд░рдордзреНрдпреЗ рдПрдХ **play** рдкрд╛рд╣рд╛рдпрд▓рд╛ рдЧреЗрд▓реЛ.\n",
|
||||
"- рдЬреЙрдирд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдорд┐рддреНрд░рд╛рдВрд╕реЛрдмрдд **play** рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг рдЬреНрдпрд╛ рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рдмрджреНрджрд▓ рдмреЛрд▓рд▓реЛ, рддреНрдпрд╛ 'play' рдпрд╛ рд╢рдмреНрджрд╛рдЪреНрдпрд╛ рджреЛрдиреНрд╣реА рдЕрд░реНрдерд╛рдВрдирд╛ рдПрдХрд╛рдЪ рдПрдореНрдмреЗрдбрд┐рдВрдЧрдордзреНрдпреЗ рджрд░реНрд╢рд╡рддрд╛рдд. рд╣реА рдорд░реНрдпрд╛рджрд╛ рджреВрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ **рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓**рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреЗ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдордЬрдХреВрд░рд╛рд╡рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ *рдЬрд╛рдгрддреЗ* рдХреА рд╢рдмреНрдж рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдВрдордзреНрдпреЗ рдХрд╕реЗ рдПрдХрддреНрд░ рдареЗрд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рдгреЗ рдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рдЪреНрдпрд╛ рдХрдХреНрд╖реЗрдмрд╛рд╣реЗрд░ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдкрдг рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓реНрд╕рд╡рд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛рдирд╛ рдкрд░рдд рдпреЗрдК.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░реЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдиреЗ рдпреБрдХреНрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдирд┐рд░реНрдорд╛рдг рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "b859482be7f61d1eadc2c6a2720a37e4",
|
||||
"translation_date": "2025-08-28T09:41:54+00:00",
|
||||
"source_file": "lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,574 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "NXTSugt6ieXh"
|
||||
},
|
||||
"source": [
|
||||
"## CBoW рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдиреЛрдЯрдмреБрдХ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдЪрд╛ рдПрдХ рднрд╛рдЧ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдкрдг CBoW рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдКрди рдЖрдкрд▓реЗ рд╕реНрд╡рддрдГрдЪреЗ Word2Vec рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрдкреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ. рдЖрдореНрд╣реА AG News рдбреЗрдЯрд╛рд╕реЗрдЯ рдордЬрдХреБрд░рд╛рдЪрд╛ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди рд╡рд╛рдкрд░реВ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import os\n",
|
||||
"import collections\n",
|
||||
"import builtins\n",
|
||||
"import random\n",
|
||||
"import numpy as np"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "q-UiiJUKaxHj"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "TFbR8CZaTZ1q"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"рдкреНрд░рдердо рдЖрдкрдг рдЖрдкрд▓рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдЯреЛрдХрдирд╛рдпрдЭрд░ рдЖрдгрд┐ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛. рдЖрдкрдг `vocab_size` 5000 рд╡рд░ рд╕реЗрдЯ рдХрд░реВ рдЬреЗрдгреЗрдХрд░реВрди рдЧрдгрдирд╛рдВрд╡рд░ рдереЛрдбреА рдорд░реНрдпрд╛рджрд╛ рдпреЗрдИрд▓.\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "HIwC7lI5T-ov"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def load_dataset(ngrams = 1, min_freq = 1, vocab_size = 5000 , lines_cnt = 500):\n",
|
||||
" tokenizer = torchtext.data.utils.get_tokenizer('basic_english')\n",
|
||||
" print(\"Loading dataset...\")\n",
|
||||
" test_dataset, train_dataset = torchtext.datasets.AG_NEWS(root='./data')\n",
|
||||
" train_dataset = list(train_dataset)\n",
|
||||
" test_dataset = list(test_dataset)\n",
|
||||
" classes = ['World', 'Sports', 'Business', 'Sci/Tech']\n",
|
||||
" print('Building vocab...')\n",
|
||||
" counter = collections.Counter()\n",
|
||||
" for i, (_, line) in enumerate(train_dataset):\n",
|
||||
" counter.update(torchtext.data.utils.ngrams_iterator(tokenizer(line),ngrams=ngrams))\n",
|
||||
" if i == lines_cnt:\n",
|
||||
" break\n",
|
||||
" vocab = torchtext.vocab.Vocab(collections.Counter(dict(counter.most_common(vocab_size))), min_freq=min_freq)\n",
|
||||
" return train_dataset, test_dataset, classes, vocab, tokenizer"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "wdZuygtgiuLG"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"train_dataset, test_dataset, _, vocab, tokenizer = load_dataset()"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "4d1nU1gsivGu",
|
||||
"outputId": "949fe272-ae0e-49f5-c373-6703458b3a74"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def encode(x, vocabulary, tokenizer = tokenizer):\n",
|
||||
" return [vocabulary[s] for s in tokenizer(x)]"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "1XDYNhG8ToFV"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "LIlQk6_PaHVY"
|
||||
},
|
||||
"source": [
|
||||
"## CBoW рдореЙрдбреЗрд▓\n",
|
||||
"\n",
|
||||
"CBoW $2N$ рд╢реЗрдЬрд╛рд░реАрд▓ рд╢рдмреНрджрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдПрдЦрд╛рджрд╛ рд╢рдмреНрдж рдЕрдВрджрд╛рдЬ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╢рд┐рдХрддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ $N=1$ рдЕрд╕реЗрд▓, рддреЗрд╡реНрд╣рд╛ рд╡рд╛рдХреНрдп *I like to train networks* рдордзреВрди рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рдЬреЛрдбреНрдпрд╛ рдорд┐рд│рддреАрд▓: (like,I), (I, like), (to, like), (like,to), (train,to), (to, train), (networks, train), (train,networks). рдпреЗрдереЗ, рдкрд╣рд┐рд▓рд╛ рд╢рдмреНрдж рд╣рд╛ рд╢реЗрдЬрд╛рд░реАрд▓ рд╢рдмреНрдж рдЖрд╣реЗ рдЬреЛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ, рдЖрдгрд┐ рджреБрд╕рд░рд╛ рд╢рдмреНрдж рд╣рд╛ рдЖрдкрдг рдЕрдВрджрд╛рдЬ рдХрд░рдд рдЕрд╕рд▓реЗрд▓рд╛ рд╢рдмреНрдж рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдкреБрдвреАрд▓ рд╢рдмреНрджрд╛рдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╢реЗрдЬрд╛рд░реАрд▓ рд╢рдмреНрдж рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рджреНрдпрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓, рдЖрдгрд┐ рд╢рдмреНрдж рдХреНрд░рдорд╛рдВрдХ рдЖрдЙрдЯрдкреБрдЯ рдореНрд╣рдгреВрди рдорд┐рд│рд╡рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. CBoW рдиреЗрдЯрд╡рд░реНрдХрдЪреА рд░рдЪрдирд╛ рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ:\n",
|
||||
"\n",
|
||||
"* рдЗрдирдкреБрдЯ рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдордзреВрди рдкрд╛рд╕ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╣рд╛рдЪ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рдЖрдкрд▓рд╛ Word2Vec рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдЕрд╕реЗрд▓, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрдг рддреНрдпрд╛рд▓рд╛ `embedder` рдирд╛рд╡рд╛рдЪреНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрдг рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕рд╛рдЗрдЬ = 30 рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рдЬрд░реА рддреБрдореНрд╣рд╛рд▓рд╛ рдЙрдЪреНрдЪ рдбрд┐рдореЗрдиреНрд╢рдиреНрд╕рд╕рд╣ рдкреНрд░рдпреЛрдЧ рдХрд░рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓ (рдЦрд▒реНрдпрд╛ Word2Vec рдордзреНрдпреЗ 300 рдЕрд╕рддреЛ).\n",
|
||||
"* рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡реНрд╣реЗрдХреНрдЯрд░ рдирдВрддрд░ рдПрдХрд╛ рд▓реАрдирд┐рдпрд░ рд▓реЗрдпрд░рдордзреВрди рдкрд╛рд╕ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рд╢рдмреНрджрд╛рдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡реЗрд▓. рддреНрдпрд╛рдореБрд│реЗ рддреНрдпрд╛рдд `vocab_size` рдиреНрдпреВрд░реЙрдиреНрд╕ рдЕрд╕рддреАрд▓.\n",
|
||||
"\n",
|
||||
"рдЖрдЙрдЯрдкреБрдЯрд╕рд╛рдареА, рдЬрд░ рдЖрдкрдг `CrossEntropyLoss` рд▓рд╛ рд▓реЙрд╕ рдлрдВрдХреНрд╢рди рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реЗ, рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгреВрди рдлрдХреНрдд рд╢рдмреНрдж рдХреНрд░рдорд╛рдВрдХ рджреНрдпрд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓, рд╡рди-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбрд┐рдВрдЧрд╢рд┐рд╡рд╛рдп.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"vocab_size = len(vocab)\n",
|
||||
"\n",
|
||||
"embedder = torch.nn.Embedding(num_embeddings = vocab_size, embedding_dim = 30)\n",
|
||||
"model = torch.nn.Sequential(\n",
|
||||
" embedder,\n",
|
||||
" torch.nn.Linear(in_features = 30, out_features = vocab_size),\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"print(model)"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "akKTcKQKkfl2",
|
||||
"outputId": "da687e3e-a8ec-4c1a-e456-ab8cd6ac7dad"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"Sequential(\n",
|
||||
" (0): Embedding(5002, 30)\n",
|
||||
" (1): Linear(in_features=30, out_features=5002, bias=True)\n",
|
||||
")\n"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "Nud6jgGPaHVa"
|
||||
},
|
||||
"source": [
|
||||
"## рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдореБрдЦреНрдп рдлрдВрдХреНрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░реВрдпрд╛, рдЬреЗ рдордЬрдХреВрд░рд╛рддреВрди CBoW рд╢рдмреНрдж рдЬреЛрдбреНрдпрд╛ рддрдпрд╛рд░ рдХрд░реЗрд▓. рд╣реЗ рдлрдВрдХреНрд╢рди рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡рд┐рдВрдбреЛ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдИрд▓ рдЖрдгрд┐ рдЗрдирдкреБрдЯ рд╡ рдЖрдЙрдЯрдкреБрдЯ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдЬреЛрдбреНрдпрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдкрд░рдд рдХрд░реЗрд▓. рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╣реЗ рдлрдВрдХреНрд╢рди рд╢рдмреНрджрд╛рдВрд╡рд░ рддрд╕реЗрдЪ рд╡реЗрдХреНрдЯрд░/рдЯреЗрдВрд╕рд░рд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ - рдЬреНрдпрд╛рдореБрд│реЗ рдЖрдкрдг рдордЬрдХреВрд░ рдПрдиреНрдХреЛрдб рдХрд░реВ рд╢рдХрддреЛ, `to_cbow` рдлрдВрдХреНрд╢рдирд▓рд╛ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "x-dsXygOieXn",
|
||||
"outputId": "c2218280-e540-40ba-9546-efe48d0d714f"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"[['like', 'I'], ['to', 'I'], ['I', 'like'], ['to', 'like'], ['train', 'like'], ['I', 'to'], ['like', 'to'], ['train', 'to'], ['networks', 'to'], ['like', 'train'], ['to', 'train'], ['networks', 'train'], ['to', 'networks'], ['train', 'networks']]\n",
|
||||
"[[232, 172], [5, 172], [172, 232], [5, 232], [0, 232], [172, 5], [232, 5], [0, 5], [1202, 5], [232, 0], [5, 0], [1202, 0], [5, 1202], [0, 1202]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def to_cbow(sent,window_size=2):\n",
|
||||
" res = []\n",
|
||||
" for i,x in enumerate(sent):\n",
|
||||
" for j in range(max(0,i-window_size),min(i+window_size+1,len(sent))):\n",
|
||||
" if i!=j:\n",
|
||||
" res.append([sent[j],x])\n",
|
||||
" return res\n",
|
||||
"\n",
|
||||
"print(to_cbow(['I','like','to','train','networks']))\n",
|
||||
"print(to_cbow(encode('I like to train networks', vocab)))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "XVaaDLjaaHVb"
|
||||
},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. рдЖрдкрдг рд╕рд░реНрд╡ рдмрд╛рддрдореНрдпрд╛ рдкрд╛рд╣реВ, `to_cbow` рдХреЙрд▓ рдХрд░реВрди рд╢рдмреНрдж рдЬреЛрдбреНрдпрд╛рдВрдЪреА рдпрд╛рджреА рдорд┐рд│рд╡реВ, рдЖрдгрд┐ рддреНрдпрд╛ рдЬреЛрдбреНрдпрд╛ `X` рдЖрдгрд┐ `Y` рдордзреНрдпреЗ рдЬреЛрдбреВ. рд╡реЗрд│реЗрдЪреНрдпрд╛ рдмрдЪрддреАрд╕рд╛рдареА, рдЖрдкрдг рдлрдХреНрдд рдкрд╣рд┐рд▓реНрдпрд╛ 10k рдмрд╛рддрдореНрдпрд╛ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдК - рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдгрд┐ рдЪрд╛рдВрдЧрд▓реЗ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрдЬ рдорд┐рд│рд╡рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕ рддреБрдореНрд╣реА рд╣реА рдорд░реНрдпрд╛рджрд╛ рд╕рд╣рдЬ рдХрд╛рдвреВрди рдЯрд╛рдХреВ рд╢рдХрддрд╛ :)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "54b-Gd9TieXo"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X = []\n",
|
||||
"Y = []\n",
|
||||
"for i, x in zip(range(10000), train_dataset):\n",
|
||||
" for w1, w2 in to_cbow(encode(x[1], vocab), window_size = 5):\n",
|
||||
" X.append(w1)\n",
|
||||
" Y.append(w2)\n",
|
||||
"\n",
|
||||
"X = torch.tensor(X)\n",
|
||||
"Y = torch.tensor(Y)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рддреНрдпрд╛ рдбреЗрдЯрд╛рд▓рд╛ рдПрдХрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реВ рдЖрдгрд┐ рдбрд╛рдЯрд╛рд▓реЛрдбрд░ рддрдпрд╛рд░ рдХрд░реВ:\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "cwWy0PzXWhN5"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"class SimpleIterableDataset(torch.utils.data.IterableDataset):\n",
|
||||
" def __init__(self, X, Y):\n",
|
||||
" super(SimpleIterableDataset).__init__()\n",
|
||||
" self.data = []\n",
|
||||
" for i in range(len(X)):\n",
|
||||
" self.data.append( (Y[i], X[i]) )\n",
|
||||
" random.shuffle(self.data)\n",
|
||||
"\n",
|
||||
" def __iter__(self):\n",
|
||||
" return iter(self.data)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "mfoAcGPFZU8p"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "e4NQ_-5waHVc"
|
||||
},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рддреНрдпрд╛ рдбреЗрдЯрд╛рд▓рд╛ рдПрдХ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реВ рдЖрдгрд┐ рдбреЗрдЯрд╛рд▓реЛрдбрд░ рддрдпрд╛рд░ рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "AbLUcojlieXo"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ds = SimpleIterableDataset(X, Y)\n",
|
||||
"dl = torch.utils.data.DataLoader(ds, batch_size = 256)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "pKQr7sXeaHVc"
|
||||
},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд░реВрдпрд╛. рдЖрдкрдг `SGD` рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░ рдЙрдЪреНрдЪ рд╢рд┐рдХреНрд╖рдг рджрд░рд╛рд╕рд╣ рд╡рд╛рдкрд░реВ. рддреБрдореНрд╣реА `Adam` рд╕рд╛рд░рдЦреНрдпрд╛ рдЗрддрд░ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрдирд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛. рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдЖрдкрдг 10 рдпреБрдЧрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдШреЗрдК - рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рдХрдореА рддреЛрдЯрд╛ рд╣рд╡рд╛ рдЕрд╕реЗрд▓ рддрд░ рддреБрдореНрд╣реА рд╣реА рд╕реЗрд▓ рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def train_epoch(net, dataloader, lr = 0.01, optimizer = None, loss_fn = torch.nn.CrossEntropyLoss(), epochs = None, report_freq = 1):\n",
|
||||
" optimizer = optimizer or torch.optim.Adam(net.parameters(), lr = lr)\n",
|
||||
" loss_fn = loss_fn.to(device)\n",
|
||||
" net.train()\n",
|
||||
"\n",
|
||||
" for i in range(epochs):\n",
|
||||
" total_loss, j = 0, 0, \n",
|
||||
" for labels, features in dataloader:\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" features, labels = features.to(device), labels.to(device)\n",
|
||||
" out = net(features)\n",
|
||||
" loss = loss_fn(out, labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" total_loss += loss\n",
|
||||
" j += 1\n",
|
||||
" if i % report_freq == 0:\n",
|
||||
" print(f\"Epoch: {i+1}: loss={total_loss.item()/j}\")\n",
|
||||
"\n",
|
||||
" return total_loss.item()/j"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "HeeCYKr_KF1w"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"train_epoch(net = model, dataloader = dl, optimizer = torch.optim.SGD(model.parameters(), lr = 0.1), loss_fn = torch.nn.CrossEntropyLoss(), epochs = 10)"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "KVgwGtDHgDlT",
|
||||
"outputId": "2447833f-f0e3-4566-c33d-addbfe2f451d"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"Epoch: 1: loss=5.664632366860172\n",
|
||||
"Epoch: 2: loss=5.632101973960962\n",
|
||||
"Epoch: 3: loss=5.610399051405015\n",
|
||||
"Epoch: 4: loss=5.594621561080262\n",
|
||||
"Epoch: 5: loss=5.582538017415446\n",
|
||||
"Epoch: 6: loss=5.572900234519603\n",
|
||||
"Epoch: 7: loss=5.564951676341915\n",
|
||||
"Epoch: 8: loss=5.558288112064614\n",
|
||||
"Epoch: 9: loss=5.552576955031129\n",
|
||||
"Epoch: 10: loss=5.547634165194347\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"5.547634165194347"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 16
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "W8u2qXZmaHVd"
|
||||
},
|
||||
"source": [
|
||||
"## Word2Vec рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди\n",
|
||||
"\n",
|
||||
"Word2Vec рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ рд╕рд░реНрд╡ рд╢рдмреНрджрд╛рдВрд╕рд╛рдареА рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрд╣реЗрдХреНрдЯрд░ рдХрд╛рдвреВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "r8TatcXjkU_t"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vectors = torch.stack([embedder(torch.tensor(vocab[s])) for s in vocab.itos], 0)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "3OcX21UOaHVd"
|
||||
},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "bz6tAeLzieXp",
|
||||
"outputId": "5b20850e-4342-45e9-f840-cfac2b4d61d8"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"tensor([-0.0915, 2.1224, -0.0281, -0.6819, 1.1219, 0.6458, -1.3704, -1.3314,\n",
|
||||
" -1.1437, 0.4496, 0.2301, -0.3515, -0.8485, 1.0481, 0.4386, -0.8949,\n",
|
||||
" 0.5644, 1.0939, -2.5096, 3.2949, -0.2601, -0.8640, 0.1421, -0.0804,\n",
|
||||
" -0.5083, -1.0560, 0.9753, -0.5949, -1.6046, 0.5774],\n",
|
||||
" grad_fn=<EmbeddingBackward>)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"paris_vec = embedder(torch.tensor(vocab['paris']))\n",
|
||||
"print(paris_vec)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "pHTJlaeYaHVd"
|
||||
},
|
||||
"source": [
|
||||
"рд╡рд░реНрдб2рд╡реНрд╣реЗрдХрдЪрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдХрд░рдгреЗ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ. рдЦрд╛рд▓реАрд▓ рдлрдВрдХреНрд╢рди рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЗрдирдкреБрдЯрд╕рд╛рдареА `n` рдЬрд╡рд│рдЪреЗ рд╢рдмреНрдж рдкрд░рдд рдХрд░реЗрд▓. рддреНрдпрд╛рдВрдирд╛ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг $|w_i - v|$ рдЪреЗ рдиреЙрд░реНрдо рдореЛрдЬрддреЛ, рдЬрд┐рдереЗ $v$ рд╣рд╛ рдЖрдкрд▓реНрдпрд╛ рдЗрдирдкреБрдЯ рд╢рдмреНрджрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╡реНрд╣реЗрдХреНрдЯрд░ рдЖрд╣реЗ, рдЖрдгрд┐ $w_i$ рд╣рд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ `i`-рд╡реНрдпрд╛ рд╢рдмреНрджрд╛рдЪреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЖрд╣реЗ. рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рдЕреЕрд░реЗ рд╕реЙрд░реНрдЯ рдХрд░рддреЛ рдЖрдгрд┐ `argsort` рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд░рдд рдХрд░рддреЛ, рдЖрдгрд┐ рдпрд╛рджреАрддреАрд▓ рдкрд╣рд┐рд▓реЗ `n` рдШрдЯрдХ рдШреЗрддреЛ, рдЬреЗ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ рдЬрд╡рд│рдЪреНрдпрд╛ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдВрдЪреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░рддрд╛рдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "NlZyi-_olFar",
|
||||
"outputId": "b5dbb163-88c4-4d5a-eaf2-6751f700e98c"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['microsoft', 'quoted', 'lp', 'rate', 'top']"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 56
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def close_words(x, n = 5):\n",
|
||||
" vec = embedder(torch.tensor(vocab[x]))\n",
|
||||
" top5 = np.linalg.norm(vectors.detach().numpy() - vec.detach().numpy(), axis = 1).argsort()[:n]\n",
|
||||
" return [ vocab.itos[x] for x in top5 ]\n",
|
||||
"\n",
|
||||
"close_words('microsoft')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "-dQq7xeAln0U",
|
||||
"outputId": "66f768c3-c248-4bfd-ce4f-c8ffc6d0dd0d"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['basketball', 'lot', 'sinai', 'states', 'healthdaynews']"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 51
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"close_words('basketball')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "fJXqK26b29sa",
|
||||
"outputId": "78f0baba-ffd0-485a-dd87-0a12bedfd7fa"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['funds', 'travel', 'sydney', 'japan', 'business']"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 77
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"close_words('funds')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "My0VeTDd3Ji8"
|
||||
},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдореБрджреНрджрд╛\n",
|
||||
"\n",
|
||||
"CBoW рд╕рд╛рд░рдЦреНрдпрд╛ рд╣реБрд╢рд╛рд░ рддрдВрддреНрд░рд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЖрдкрдг Word2Vec рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реВ рд╢рдХрддреЛ. рддреБрдореНрд╣реА skip-gram рдореЙрдбреЗрд▓ рджреЗрдЦреАрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛, рдЬреЗ рдордзреНрдпрд╡рд░реНрддреА рд╢рдмреНрдж рджрд┐рд▓реНрдпрд╛рд╕ рд╢реЗрдЬрд╛рд░реАрд▓ рд╢рдмреНрджрд╛рдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдЖрдгрд┐ рддреЗ рдХрд┐рддреА рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рддреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░реЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдиреЗ рдпреБрдХреНрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"collapsed_sections": [],
|
||||
"name": "CBoW-PyTorch.ipynb",
|
||||
"provenance": []
|
||||
},
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"gpuClass": "standard",
|
||||
"coopTranslator": {
|
||||
"original_hash": "36df28efe3fe40b6fb0a7fa48fe3ea82",
|
||||
"translation_date": "2025-08-28T09:18:17+00:00",
|
||||
"source_file": "lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,477 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕\n",
|
||||
"\n",
|
||||
"рдорд╛рдЧреАрд▓ рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ, рдЖрдкрдг рдордЬрдХреВрд░рд╛рдЪреНрдпрд╛ рд╕рдореГрджреНрдз рдЕрд░реНрдердкреВрд░реНрдг рдкреНрд░рддрд┐рдирд┐рдзреАрдВрдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЖрдгрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рд╡рд░ рдПрдХ рд╕рд╛рдзрд╛ рд░реЗрд╖реАрдп рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд╡рд╛рдкрд░рд▓рд╛. рдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪреЗ рдХрд╛рд░реНрдп рдореНрд╣рдгрдЬреЗ рд╡рд╛рдХреНрдпрд╛рддреАрд▓ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдПрдХрддреНрд░рд┐рдд рдЕрд░реНрде рдкрдХрдбрдгреЗ, рдкрд░рдВрддреБ рддреЗ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ **рдХреНрд░рдо** рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рдПрдореНрдмреЗрдбрд┐рдВрдЧреНрд╕рд╡рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдХрддреНрд░реАрдХрд░рдгрд╛рдореБрд│реЗ рдореВрд│ рдордЬрдХреВрд░рд╛рддреАрд▓ рд╣реА рдорд╛рд╣рд┐рддреА рдЧрдорд╛рд╡рд▓реА рдЬрд╛рддреЗ. рдпрд╛ рдореЙрдбреЗрд▓реНрд╕рдирд╛ рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдХреНрд░рдорд╛рдЪреА рдорд╛рдВрдбрдгреА рдХрд░рддрд╛ рдпреЗрдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рддреЗ рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА рдХрд┐рдВрд╡рд╛ рдкреНрд░рд╢реНрдиреЛрддреНрддрд░рд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд┐рдВрд╡рд╛ рд╕рдВрджрд┐рдЧреНрдз рдХрд╛рд░реНрдпреЗ рд╕реЛрдбрд╡реВ рд╢рдХрдд рдирд╛рд╣реАрдд.\n",
|
||||
"\n",
|
||||
"рдордЬрдХреВрд░ рдЕрдиреБрдХреНрд░рдорд╛рдЪрд╛ рдЕрд░реНрде рдкрдХрдбрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХ рд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд╛рдкрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ, рдЬреНрдпрд╛рд▓рд╛ **рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ** рдХрд┐рдВрд╡рд╛ RNN рдореНрд╣рдгрддрд╛рдд. RNN рдордзреНрдпреЗ, рдЖрдкрдг рдЖрдкрд▓реЗ рд╡рд╛рдХреНрдп рдиреЗрдЯрд╡рд░реНрдХрдордзреВрди рдПрдХрд╛рд╡реЗрд│реА рдПрдХ рдЪрд┐рдиреНрд╣ рдкрд╛рдард╡рддреЛ, рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд╣реА **рд╕реНрдерд┐рддреА** рддрдпрд╛рд░ рдХрд░рддреЗ, рдЬреА рдЖрдкрдг рдкреБрдвреАрд▓ рдЪрд┐рдиреНрд╣рд╛рд╕рд╣ рдкреБрдиреНрд╣рд╛ рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдкрд╛рдард╡рддреЛ.\n",
|
||||
"\n",
|
||||
"рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рдЯреЛрдХрдиреНрд╕ $X_0,\\dots,X_n$, RNN рдПрдХ рдЕрдиреБрдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рддреЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХреНрд╕ рдЕрд╕рддрд╛рдд, рдЖрдгрд┐ рд╣реЗ рдЕрдиреБрдХреНрд░рдо рдПрдВрдб-рдЯреВ-рдПрдВрдб рдмреЕрдХ рдкреНрд░реЛрдкреЛрдЧреЗрд╢рди рд╡рд╛рдкрд░реВрди рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдкреНрд░рддреНрдпреЗрдХ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХ $(X_i,S_i)$ рдпрд╛ рдЬреЛрдбреАрд▓рд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддреЛ рдЖрдгрд┐ $S_{i+1}$ рддрдпрд╛рд░ рдХрд░рддреЛ. рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддреА $S_n$ рдХрд┐рдВрд╡рд╛ рдЖрдЙрдЯрдкреБрдЯ $X_n$ рд░реЗрд╖реАрдп рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддреНрдпрд╛рдордзреНрдпреЗ рдЬрд╛рддреЗ рдЬреЗрдгреЗрдХрд░реВрди рдирд┐рдХрд╛рд▓ рддрдпрд╛рд░ рдХрд░рддрд╛ рдпреЗрдИрд▓. рд╕рд░реНрд╡ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХреНрд╕ рд╕рдорд╛рди рд╡рдЬрди рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рддрд╛рдд рдЖрдгрд┐ рдПрдХрд╛рдЪ рдмреЕрдХ рдкреНрд░реЛрдкреЛрдЧреЗрд╢рди рдкрд╛рд╕рджреНрд╡рд╛рд░реЗ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдХрд╛рд░рдг рд╕реНрдерд┐рддреА рд╡реЗрдХреНрдЯрд░ $S_0,\\dots,S_n$ рдиреЗрдЯрд╡рд░реНрдХрдордзреВрди рдкрд╛рд╕ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ рд╢рдмреНрджрд╛рдВрдордзреАрд▓ рдЕрдиреБрдХреНрд░рдорд┐рдХ рд╕рдВрдмрдВрдз рд╢рд┐рдХрддрд╛ рдпреЗрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ *not* рд╣рд╛ рд╢рдмреНрдж рдЕрдиреБрдХреНрд░рдорд╛рдд рдХреБрдареЗрддрд░реА рджрд┐рд╕рддреЛ, рддреЗрд╡реНрд╣рд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрдерд┐рддреА рд╡реЗрдХреНрдЯрд░рдордзреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХрд╛рдВрдирд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╢рд┐рдХреВ рд╢рдХрддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдирдХрд╛рд░ рддрдпрд╛рд░ рд╣реЛрддреЛ.\n",
|
||||
"\n",
|
||||
"> рдХрд╛рд░рдг рдЪрд┐рддреНрд░рд╛рддреАрд▓ рд╕рд░реНрд╡ RNN рдмреНрд▓реЙрдХреНрд╕рдЪреЗ рд╡рдЬрди рд╕рд╛рдорд╛рдпрд┐рдХ рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рддреЗрдЪ рдЪрд┐рддреНрд░ рдПрдХрд╛ рдмреНрд▓реЙрдХрд╕рд╛рд░рдЦреЗ (рдЙрдЬрд╡реАрдХрдбреЗ) рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлреАрдбрдмреЕрдХ рд▓реВрдкрд╕рд╣ рджрд░реНрд╢рд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдЬреЗ рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддреАрд▓рд╛ рдкреБрдиреНрд╣рд╛ рдЗрдирдкреБрдЯрдордзреНрдпреЗ рдкрд╛рдард╡рддреЗ.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдЖрдордЪреНрдпрд╛ рдиреНрдпреВрдЬ рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рдд рдХрд╕реЗ рдорджрдд рдХрд░реВ рд╢рдХрддрд╛рдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_size = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рд╛рдзрд╛ RNN рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛\n",
|
||||
"\n",
|
||||
"рд╕рд╛рдзреНрдпрд╛ RNN рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдпреБрдирд┐рдЯ рдПрдХ рд╕рд╛рдзреЗ рд░реЗрдЦреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдЕрд╕рддреЗ, рдЬреЗ рдПрдХрддреНрд░рд┐рдд рдЗрдирдкреБрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░ рдЖрдгрд┐ рд╕реНрдерд┐рддреА рд╡реНрд╣реЗрдХреНрдЯрд░ рдШреЗрддреЛ рдЖрдгрд┐ рдирд╡реАрди рд╕реНрдерд┐рддреА рд╡реНрд╣реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░рддреЛ. PyTorch рдпрд╛ рдпреБрдирд┐рдЯрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ `RNNCell` рд╡рд░реНрдЧрд╛рдиреЗ рдХрд░рддреЛ, рдЖрдгрд┐ рдЕрд╢рд╛ рд╕реЗрд▓реНрд╕рдЪреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ `RNN` рд╕реНрддрд░ рдореНрд╣рдгреВрди.\n",
|
||||
"\n",
|
||||
"RNN рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдкреНрд░рдердо рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрддрд░ рд▓рд╛рдЧреВ рдХрд░реВ рдЬреЗ рдЗрдирдкреБрдЯ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪреА рдкрд░рд┐рдорд╛рдг рдХрдореА рдХрд░реЗрд▓, рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ RNN рд╕реНрддрд░ рдареЗрд╡реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class RNNClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.rnn = torch.nn.RNN(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,h = self.rnn(x)\n",
|
||||
" return self.fc(x.mean(dim=1))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк:** рдпреЗрдереЗ рд╕реЛрдкреЗрдкрдгрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЕрдирдЯреНрд░реЗрдВрдб рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рд╡рд╛рдкрд░рддреЛ, рдкрд░рдВрддреБ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрд╕рд╛рдареА рдЖрдкрдг Word2Vec рдХрд┐рдВрд╡рд╛ GloVe рдПрдореНрдмреЗрдбрд┐рдВрдЧрд╕рд╣ рдкреНрд░реА-рдЯреНрд░реЗрдВрдб рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ, рдЬрд╕реЗ рдХреА рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рд╕рдордЬрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рд╣рд╛ рдХреЛрдб рдкреНрд░реА-рдЯреНрд░реЗрдВрдб рдПрдореНрдмреЗрдбрд┐рдВрдЧрд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реВ рд╢рдХрддрд╛.\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдореНрд╣реА рдкреЕрдбреЗрдб рдбреЗрдЯрд╛ рд▓реЛрдбрд░ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рддреНрдпрд╛рдореБрд│реЗ рдкреНрд░рддреНрдпреЗрдХ рдмреЕрдЪрдордзреНрдпреЗ рд╕рдорд╛рди рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдкреЕрдбреЗрдб рд╕рд┐рдХреНрд╡реЗрдиреНрд╕реЗрд╕рдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕реЗрд▓. RNN рд▓реЗрдпрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдЯреЗрдиреНрд╕рд░реНрд╕рдЪреНрдпрд╛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рд▓рд╛ рдШреЗрдИрд▓ рдЖрдгрд┐ рджреЛрди рдЖрдЙрдЯрдкреБрдЯ рддрдпрд╛рд░ рдХрд░реЗрд▓:\n",
|
||||
"* $x$ рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдЯреЗрдкрд╡рд░ RNN рд╕реЗрд▓ рдЖрдЙрдЯрдкреБрдЯреНрд╕рдЪреА рд╕рд┐рдХреНрд╡реЗрдиреНрд╕\n",
|
||||
"* $h$ рдореНрд╣рдгрдЬреЗ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдШрдЯрдХрд╛рд╕рд╛рдареА рдЕрдВрддрд┐рдо рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯ\n",
|
||||
"\n",
|
||||
"рдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рдкреВрд░реНрдгрдкрдгреЗ рдХрдиреЗрдХреНрдЯреЗрдб рд▓реАрдирд┐рдпрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рд▓рд╛рдЧреВ рдХрд░рддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рд╡рд░реНрдЧрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдорд┐рд│рддреЗ.\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк:** RNN рдЯреНрд░реЗрди рдХрд░рдгреЗ рдЦреВрдк рдХрдареАрдг рдЕрд╕рддреЗ, рдХрд╛рд░рдг RNN рд╕реЗрд▓реНрд╕ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕ рд▓рд╛рдВрдмреАрд╕рд╛рдареА рдЕрдирд░реЛрд▓ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдмреЕрдХ рдкреНрд░реЛрдкреЛрдЧреЗрд╢рдирдордзреНрдпреЗ рд╕рд╣рднрд╛рдЧреА рд╣реЛрдгрд╛рд▒реНрдпрд╛ рд▓реЗрдпрд░реНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдЦреВрдк рдореЛрдареА рдЕрд╕рддреЗ. рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд▓рд╣рд╛рди рд▓рд░реНрдирд┐рдВрдЧ рд░реЗрдЯ рдирд┐рд╡рдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдореЛрдареНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реЗрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛рд╕рд╛рдареА рдЦреВрдк рд╡реЗрд│ рд▓рд╛рдЧреВ рд╢рдХрддреЛ, рддреНрдпрд╛рдореБрд│реЗ GPU рд╡рд╛рдкрд░рдгреЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдард░рддреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.3090625\n",
|
||||
"6400: acc=0.38921875\n",
|
||||
"9600: acc=0.4590625\n",
|
||||
"12800: acc=0.511953125\n",
|
||||
"16000: acc=0.5506875\n",
|
||||
"19200: acc=0.57921875\n",
|
||||
"22400: acc=0.6070089285714285\n",
|
||||
"25600: acc=0.6304296875\n",
|
||||
"28800: acc=0.6484027777777778\n",
|
||||
"32000: acc=0.66509375\n",
|
||||
"35200: acc=0.6790056818181818\n",
|
||||
"38400: acc=0.6929166666666666\n",
|
||||
"41600: acc=0.7035817307692308\n",
|
||||
"44800: acc=0.7137276785714286\n",
|
||||
"48000: acc=0.72225\n",
|
||||
"51200: acc=0.73001953125\n",
|
||||
"54400: acc=0.7372794117647059\n",
|
||||
"57600: acc=0.7436631944444444\n",
|
||||
"60800: acc=0.7503947368421052\n",
|
||||
"64000: acc=0.75634375\n",
|
||||
"67200: acc=0.7615773809523809\n",
|
||||
"70400: acc=0.7662642045454545\n",
|
||||
"73600: acc=0.7708423913043478\n",
|
||||
"76800: acc=0.7751822916666666\n",
|
||||
"80000: acc=0.7790625\n",
|
||||
"83200: acc=0.7825\n",
|
||||
"86400: acc=0.7858564814814815\n",
|
||||
"89600: acc=0.7890513392857142\n",
|
||||
"92800: acc=0.7920474137931034\n",
|
||||
"96000: acc=0.7952708333333334\n",
|
||||
"99200: acc=0.7982258064516129\n",
|
||||
"102400: acc=0.80099609375\n",
|
||||
"105600: acc=0.8037594696969697\n",
|
||||
"108800: acc=0.8060569852941176\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=padify, shuffle=True)\n",
|
||||
"net = RNNClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд▓рд╛рдБрдЧ рд╢реЙрд░реНрдЯ рдЯрд░реНрдо рдореЗрдорд░реА (LSTM)\n",
|
||||
"\n",
|
||||
"рдкрд╛рд░рдВрдкрд░рд┐рдХ RNNs рдЪреНрдпрд╛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ **vanishing gradients** рд╕рдорд╕реНрдпрд╛. рдХрд╛рд░рдг RNNs рдПрдХрд╛рдЪ рдмреЕрдХ-рдкреНрд░реЛрдкрд╛рдЧреЗрд╢рди рдкрд╛рд╕рдордзреНрдпреЗ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рд╕реНрддрд░рд╛рдВрдкрд░реНрдпрдВрдд рддреНрд░реБрдЯреА рдкреЛрд╣реЛрдЪрд╡рдгреЗ рдХрдареАрдг рд╣реЛрддреЗ, рдЖрдгрд┐ рддреНрдпрд╛рдореБрд│реЗ рдиреЗрдЯрд╡рд░реНрдХ рджреВрд░рдЪреНрдпрд╛ рдЯреЛрдХрдирдордзреАрд▓ рд╕рдВрдмрдВрдз рд╢рд┐рдХреВ рд╢рдХрдд рдирд╛рд╣реА. рд╣реА рд╕рдорд╕реНрдпрд╛ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ **explicit state management** рд╡рд╛рдкрд░рдгреЗ, рдЬреНрдпрд╛рд╕рд╛рдареА **gates** рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рджреЛрди рд╕рд░реНрд╡рд╛рдд рдкреНрд░рд╕рд┐рджреНрдз рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрд╣реЗрдд: **рд▓рд╛рдБрдЧ рд╢реЙрд░реНрдЯ рдЯрд░реНрдо рдореЗрдорд░реА** (LSTM) рдЖрдгрд┐ **рдЧреЗрдЯреЗрдб рд░рд┐рд▓реЗ рдпреБрдирд┐рдЯ** (GRU).\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM рдиреЗрдЯрд╡рд░реНрдХ RNN рдкреНрд░рдорд╛рдгреЗрдЪ рдЖрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдкрдг рдпреЗрдереЗ рджреЛрди рд╕реНрдЯреЗрдЯреНрд╕ рд╕реНрддрд░рд╛рдВрдордзреВрди рдкрд╛рд╕ рд╣реЛрддрд╛рдд: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдЯреЗрдЯ $c$, рдЖрдгрд┐ рд╣рд┐рдбрди рд╡реНрд╣реЗрдХреНрдЯрд░ $h$. рдкреНрд░рддреНрдпреЗрдХ рдпреБрдирд┐рдЯрд╡рд░, рд╣рд┐рдбрди рд╡реНрд╣реЗрдХреНрдЯрд░ $h_i$ рдЗрдирдкреБрдЯ $x_i$ рд╕реЛрдмрдд рдЬреЛрдбрд▓рд╛ рдЬрд╛рддреЛ, рдЖрдгрд┐ рддреЗ **gates** рдЪреНрдпрд╛ рдорд╛рдзреНрдпрдорд╛рддреВрди рд╕реНрдЯреЗрдЯ $c$ рд╡рд░ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рдЧреЗрдЯ рд╣реЗ рд╕рд┐рдЧреНрдореЙрдЗрдб рдЕреЕрдХреНрдЯрд┐рд╡реЗрд╢рди рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╕рд╛рд░рдЦреЗ рдЕрд╕рддреЗ (рдЖрдЙрдЯрдкреБрдЯ рд╢реНрд░реЗрдгреА $[0,1]$ рдордзреНрдпреЗ), рдЬреЗ рд╕реНрдЯреЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рд╕реЛрдмрдд рдЧреБрдгрд╛рдХрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╡рд░ рдмрд┐рдЯрд╡рд╛рдЗрдЬ рдорд╛рд╕реНрдХрд╕рд╛рд░рдЦреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рдпреЗрддреЗ. рдЦрд╛рд▓реАрд▓ рдЧреЗрдЯреНрд╕ рдЕрд╕рддрд╛рдд (рд╡рд░рдЪреНрдпрд╛ рдЪрд┐рддреНрд░рд╛рдд рдбрд╛рд╡реАрдХрдбреВрди рдЙрдЬрд╡реАрдХрдбреЗ):\n",
|
||||
"* **forget gate** рд╣рд┐рдбрди рд╡реНрд╣реЗрдХреНрдЯрд░ рдШреЗрддреЛ рдЖрдгрд┐ рдард░рд╡рддреЛ рдХреА рд╕реНрдЯреЗрдЯ $c$ рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рдШрдЯрдХрд╛рдВрдирд╛ рд╡рд┐рд╕рд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдХреЛрдгрддреЗ рдкрд╛рд╕ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗрдд.\n",
|
||||
"* **input gate** рдЗрдирдкреБрдЯ рдЖрдгрд┐ рд╣рд┐рдбрди рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреВрди рдХрд╛рд╣реА рдорд╛рд╣рд┐рддреА рдШреЗрддреЛ рдЖрдгрд┐ рддреА рд╕реНрдЯреЗрдЯрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рддреЛ.\n",
|
||||
"* **output gate** рд╕реНрдЯреЗрдЯрд▓рд╛ $\\tanh$ рдЕреЕрдХреНрдЯрд┐рд╡реЗрд╢рдирд╕рд╣ рдХрд╛рд╣реА рд░реЗрд╖реАрдп рд╕реНрддрд░рд╛рджреНрд╡рд╛рд░реЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЛ, рдирдВрддрд░ рд╣рд┐рдбрди рд╡реНрд╣реЗрдХреНрдЯрд░ $h_i$ рд╡рд╛рдкрд░реВрди рддреНрдпрд╛рдЪреЗ рдХрд╛рд╣реА рдШрдЯрдХ рдирд┐рд╡рдбрддреЛ рдЖрдгрд┐ рдирд╡реАрди рд╕реНрдЯреЗрдЯ $c_{i+1}$ рддрдпрд╛рд░ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"рд╕реНрдЯреЗрдЯ $c$ рдЪреЗ рдШрдЯрдХ рдХрд╛рд╣реА рдлреНрд▓реЕрдЧреНрд╕рд╕рд╛рд░рдЦреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рдпреЗрддрд╛рдд, рдЬреЗ рдСрди рдЖрдгрд┐ рдСрдл рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдЕрдиреБрдХреНрд░рдорд╛рдд *Alice* рдирд╛рд╡ рдкрд╛рд╣рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдЧреГрд╣реАрдд рдзрд░реВ рд╢рдХрддреЛ рдХреА рддреЗ рдПрдХрд╛ рдорд╣рд┐рд▓рд╛ рдкрд╛рддреНрд░рд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ, рдЖрдгрд┐ рд╕реНрдЯреЗрдЯрдордзреНрдпреЗ рдлреНрд▓реЕрдЧ рдЙрдЪрд▓рддреЛ рдХреА рд╡рд╛рдХреНрдпрд╛рдд рдорд╣рд┐рд▓рд╛ рдирд╛рдо рдЖрд╣реЗ. рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдкреБрдвреЗ *and Tom* рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкрд╛рд╣рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдлреНрд▓реЕрдЧ рдЙрдЪрд▓рддреЛ рдХреА рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдмрд╣реБрд╡рдЪрди рдирд╛рдо рдЖрд╣реЗ. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕реНрдЯреЗрдЯрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХрд░реВрди рдЖрдкрдг рд╡рд╛рдХреНрдпрд╛рдЪреНрдпрд╛ рднрд╛рдЧрд╛рдВрдЪреЗ рд╡реНрдпрд╛рдХрд░рдгрд╛рддреНрдордХ рдЧреБрдгрдзрд░реНрдо рдЯреНрд░реЕрдХ рдХрд░реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"> **Note**: LSTM рдЪреЗ рдЕрдВрддрд░реНрдЧрдд рдХрд╛рд░реНрдп рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕рдВрд╕рд╛рдзрди рдореНрд╣рдгрдЬреЗ рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдУрд▓рд╛рд╣ рдпрд╛рдВрдЪрд╛ рд╣рд╛ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/).\n",
|
||||
"\n",
|
||||
"рдЬрд░реА LSTM рд╕реЗрд▓рдЪреА рдЕрдВрддрд░реНрдЧрдд рд░рдЪрдирд╛ рдЬрдЯрд┐рд▓ рджрд┐рд╕рдд рдЕрд╕рд▓реА рддрд░реА, PyTorch рд╣реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА `LSTMCell` рд╡рд░реНрдЧрд╛рдордзреНрдпреЗ рд▓рдкрд╡рддреЗ, рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг LSTM рд╕реНрддрд░рд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА `LSTM` рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рддреНрдпрд╛рдореБрд│реЗ, LSTM рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡рд░ рдкрд╛рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рд╕рд╛рдзреНрдпрд╛ RNN рдкреНрд░рдорд╛рдгреЗрдЪ рдЕрд╕реЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,(h,c) = self.rnn(x)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.259375\n",
|
||||
"6400: acc=0.25859375\n",
|
||||
"9600: acc=0.26177083333333334\n",
|
||||
"12800: acc=0.2784375\n",
|
||||
"16000: acc=0.313\n",
|
||||
"19200: acc=0.3528645833333333\n",
|
||||
"22400: acc=0.3965625\n",
|
||||
"25600: acc=0.4385546875\n",
|
||||
"28800: acc=0.4752777777777778\n",
|
||||
"32000: acc=0.505375\n",
|
||||
"35200: acc=0.5326704545454546\n",
|
||||
"38400: acc=0.5557552083333334\n",
|
||||
"41600: acc=0.5760817307692307\n",
|
||||
"44800: acc=0.5954910714285714\n",
|
||||
"48000: acc=0.6118333333333333\n",
|
||||
"51200: acc=0.62681640625\n",
|
||||
"54400: acc=0.6404779411764706\n",
|
||||
"57600: acc=0.6520138888888889\n",
|
||||
"60800: acc=0.662828947368421\n",
|
||||
"64000: acc=0.673546875\n",
|
||||
"67200: acc=0.6831547619047619\n",
|
||||
"70400: acc=0.6917897727272727\n",
|
||||
"73600: acc=0.6997146739130434\n",
|
||||
"76800: acc=0.707109375\n",
|
||||
"80000: acc=0.714075\n",
|
||||
"83200: acc=0.7209134615384616\n",
|
||||
"86400: acc=0.727037037037037\n",
|
||||
"89600: acc=0.7326674107142858\n",
|
||||
"92800: acc=0.7379633620689655\n",
|
||||
"96000: acc=0.7433645833333333\n",
|
||||
"99200: acc=0.7479032258064516\n",
|
||||
"102400: acc=0.752119140625\n",
|
||||
"105600: acc=0.7562405303030303\n",
|
||||
"108800: acc=0.76015625\n",
|
||||
"112000: acc=0.7641339285714286\n",
|
||||
"115200: acc=0.7677777777777778\n",
|
||||
"118400: acc=0.7711233108108108\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.03487814127604167, 0.7728)"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкреЕрдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдиреБрдХреНрд░рдо\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдорд┐рдиреАрдмреЕрдЪрдордзреАрд▓ рд╕рд░реНрд╡ рдЕрдиреБрдХреНрд░рдо рд╢реВрдиреНрдп рд╡реЗрдХреНрдЯрд░рд╕рд╣ рдкреЕрдб рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ. рдпрд╛рдореБрд│реЗ рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рдореЗрдорд░реА рд╡рд╛рдпрд╛ рдЬрд╛рддреЗ, рдкрд░рдВрддреБ RNN рдордзреНрдпреЗ рдЕрдзрд┐рдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореНрд╣рдгрдЬреЗ рдкреЕрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЗрдирдкреБрдЯ рдЖрдпрдЯрдорд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд RNN рд╕реЗрд▓реНрд╕ рддрдпрд╛рд░ рд╣реЛрддрд╛рдд, рдЬреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдд рднрд╛рдЧ рдШреЗрддрд╛рдд, рдкрд░рдВрддреБ рдХреЛрдгрддреАрд╣реА рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдЗрдирдкреБрдЯ рдорд╛рд╣рд┐рддреА рд╡рд╛рд╣реВрди рдиреЗрдд рдирд╛рд╣реАрдд. рдлрдХреНрдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рд╡рд░ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рд╣реЛрдИрд▓.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, PyTorch рдордзреНрдпреЗ рдкреЕрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЪрдпрд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрд╡рд░реВрдк рд╕рд╛рджрд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рд╕рдордЬрд╛ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЗрдирдкреБрдЯ рдкреЕрдб рдХреЗрд▓реЗрд▓рд╛ рдорд┐рдиреАрдмреЕрдЪ рдЖрд╣реЗ рдЬреЛ рдЕрд╕реЗ рджрд┐рд╕рддреЛ:\n",
|
||||
"```\n",
|
||||
"[[1,2,3,4,5],\n",
|
||||
" [6,7,8,0,0],\n",
|
||||
" [9,0,0,0,0]]\n",
|
||||
"```\n",
|
||||
"рдпреЗрдереЗ 0 рдкреЕрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдореВрд▓реНрдпрд╛рдВрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЛ, рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рдВрдЪреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рдВрдмреА рд╡реНрд╣реЗрдХреНрдЯрд░ `[5,3,1]` рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдкреЕрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рд╕рд╣ RNN рдкреНрд░рднрд╛рд╡реАрдкрдгреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ RNN рд╕реЗрд▓реНрд╕рдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рдЧрдЯрд╛рдЪреЗ рдореЛрдареНрдпрд╛ рдорд┐рдиреАрдмреЕрдЪрд╕рд╣ (`[1,6,9]`) рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдирдВрддрд░ рддрд┐рд╕рд▒реНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ рдЖрдгрд┐ рдЫреЛрдЯреНрдпрд╛ рдорд┐рдиреАрдмреЕрдЪрд╕рд╣ (`[2,7]`, `[3,8]`) рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдареЗрд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдЖрдгрд┐ рдЕрд╕реЗрдЪ рдкреБрдвреЗ. рддреНрдпрд╛рдореБрд│реЗ, рдкреЕрдХ рдХреЗрд▓реЗрд▓рд╛ рдЕрдиреБрдХреНрд░рдо рдПрдХрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рджрд░реНрд╢рд╡рд┐рд▓рд╛ рдЬрд╛рддреЛ - рдЖрдкрд▓реНрдпрд╛ рдмрд╛рдмрддреАрдд `[1,6,9,2,7,3,8,4,5]`, рдЖрдгрд┐ рд▓рд╛рдВрдмреА рд╡реНрд╣реЗрдХреНрдЯрд░ (`[5,3,1]`), рдЬреНрдпрд╛рдореБрд│реЗ рдЖрдкрдг рдореВрд│ рдкреЕрдб рдХреЗрд▓реЗрд▓рд╛ рдорд┐рдиреАрдмреЕрдЪ рд╕рд╣рдЬрдкрдгреЗ рдкреБрдиреНрд╣рд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"рдкреЕрдХ рдХреЗрд▓реЗрд▓рд╛ рдЕрдиреБрдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `torch.nn.utils.rnn.pack_padded_sequence` рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ. рд╕рд░реНрд╡ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдгрд╛рд▒реНрдпрд╛ рд╕реНрддрд░рд╛рдВрдордзреНрдпреЗ, RNN, LSTM рдЖрдгрд┐ GRU рдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ, рдкреЕрдХ рдХреЗрд▓реЗрд▓реЗ рдЕрдиреБрдХреНрд░рдо рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рд╕реНрд╡реАрдХрд╛рд░рд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдкреЕрдХ рдХреЗрд▓реЗрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рддрдпрд╛рд░ рдХрд░рддрд╛рдд, рдЬреЗ `torch.nn.utils.rnn.pad_packed_sequence` рд╡рд╛рдкрд░реВрди рдбрд┐рдХреЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдкреЕрдХ рдХреЗрд▓реЗрд▓рд╛ рдЕрдиреБрдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ рд▓рд╛рдВрдмреА рд╡реНрд╣реЗрдХреНрдЯрд░ рдкрд╛рд╕ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ, рдЖрдгрд┐ рддреНрдпрд╛рдореБрд│реЗ рдорд┐рдиреАрдмреЕрдЪ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрдЧрд│реНрдпрд╛ рдлрдВрдХреНрд╢рдирдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_length(b):\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch and length sequence itself\n",
|
||||
" len_seq = list(map(len,v))\n",
|
||||
" l = max(len_seq)\n",
|
||||
" return ( # tuple of three tensors - labels, padded features, length sequence\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v]),\n",
|
||||
" torch.tensor(len_seq)\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader_len = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=pad_length, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЦрд░рдВ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд░реАрд▓ `LSTMClassifier` рд╕рд╛рд░рдЦрдВрдЪ рдЕрд╕реЗрд▓, рдкрдг `forward` рдкрд╛рд╕рдордзреНрдпреЗ рдкреЕрдб рдХреЗрд▓реЗрд▓рд╛ рдорд┐рдиреАрдмреЕрдЪ рдЖрдгрд┐ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕ рд▓рд╛рдВрдмреАрдВрдЪрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░ рдорд┐рд│реЗрд▓. рдПрдореНрдмреЗрдбрд┐рдВрдЧрдЪреА рдЧрдгрдирд╛ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рдкреЕрдХ рдХреЗрд▓реЗрд▓рд╛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕ рддрдпрд╛рд░ рдХрд░рддреЛ, рддреЛ LSTM рд▓реЗрдпрд░рд▓рд╛ рдкрд╛рд╕ рдХрд░рддреЛ, рдЖрдгрд┐ рдордЧ рдкрд░рд┐рдгрд╛рдо рдкреБрдиреНрд╣рд╛ рдЕрдирдкреЕрдХ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"> **Note**: рдЖрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЕрдирдкреЕрдХ рдХреЗрд▓реЗрд▓рд╛ рдкрд░рд┐рдгрд╛рдо `x` рд╡рд╛рдкрд░рдд рдирд╛рд╣реА, рдХрд╛рд░рдг рдкреБрдвреАрд▓ рдЧрдгрдирд╛рдВрдордзреНрдпреЗ рдЖрдореНрд╣реА рд╣рд┐рдбрди рд▓реЗрдпрд░рдордзреВрди рдорд┐рд│рд╛рд▓реЗрд▓рд╛ рдЖрдЙрдЯрдкреБрдЯ рд╡рд╛рдкрд░рддреЛ. рддреНрдпрд╛рдореБрд│реЗ, рдЖрдореНрд╣реА рдпрд╛ рдХреЛрдбрдордзреВрди рдЕрдирдкреЕрдХрд┐рдВрдЧ рдкреВрд░реНрдгрдкрдгреЗ рдХрд╛рдвреВрди рдЯрд╛рдХреВ рд╢рдХрддреЛ. рдЖрдореНрд╣реА рддреЗ рдЗрдереЗ рдареЗрд╡рдгреНрдпрд╛рдЪрдВ рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣рд╛ рдХреЛрдб рд╕рд╣рдЬрдкрдгреЗ рдмрджрд▓рддрд╛ рдпрд╛рд╡рд╛, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреБрдвреАрд▓ рдЧрдгрдирд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMPackClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x, lengths):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" pad_x = torch.nn.utils.rnn.pack_padded_sequence(x,lengths,batch_first=True,enforce_sorted=False)\n",
|
||||
" pad_x,(h,c) = self.rnn(pad_x)\n",
|
||||
" x, _ = torch.nn.utils.rnn.pad_packed_sequence(pad_x,batch_first=True)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.285625\n",
|
||||
"6400: acc=0.33359375\n",
|
||||
"9600: acc=0.3876041666666667\n",
|
||||
"12800: acc=0.44078125\n",
|
||||
"16000: acc=0.4825\n",
|
||||
"19200: acc=0.5235416666666667\n",
|
||||
"22400: acc=0.5559821428571429\n",
|
||||
"25600: acc=0.58609375\n",
|
||||
"28800: acc=0.6116666666666667\n",
|
||||
"32000: acc=0.63340625\n",
|
||||
"35200: acc=0.6525284090909091\n",
|
||||
"38400: acc=0.668515625\n",
|
||||
"41600: acc=0.6822596153846154\n",
|
||||
"44800: acc=0.6948214285714286\n",
|
||||
"48000: acc=0.7052708333333333\n",
|
||||
"51200: acc=0.71521484375\n",
|
||||
"54400: acc=0.7239889705882353\n",
|
||||
"57600: acc=0.7315277777777778\n",
|
||||
"60800: acc=0.7388486842105263\n",
|
||||
"64000: acc=0.74571875\n",
|
||||
"67200: acc=0.7518303571428572\n",
|
||||
"70400: acc=0.7576988636363636\n",
|
||||
"73600: acc=0.7628940217391305\n",
|
||||
"76800: acc=0.7681510416666667\n",
|
||||
"80000: acc=0.7728125\n",
|
||||
"83200: acc=0.7772235576923077\n",
|
||||
"86400: acc=0.7815393518518519\n",
|
||||
"89600: acc=0.7857700892857142\n",
|
||||
"92800: acc=0.7895043103448276\n",
|
||||
"96000: acc=0.7930520833333333\n",
|
||||
"99200: acc=0.7959072580645161\n",
|
||||
"102400: acc=0.798994140625\n",
|
||||
"105600: acc=0.802064393939394\n",
|
||||
"108800: acc=0.8051378676470589\n",
|
||||
"112000: acc=0.8077857142857143\n",
|
||||
"115200: acc=0.8104600694444445\n",
|
||||
"118400: acc=0.8128293918918919\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.029785829671223958, 0.8138166666666666)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMPackClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch_emb(net,train_loader_len, lr=0.001,use_pack_sequence=True)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рдЖрдгрд┐ рдмрд╣реБрдкрд░рдд RNNs\n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдордзреНрдпреЗ, рд╕рд░реНрд╡ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдПрдХрд╛ рджрд┐рд╢реЗрдиреЗ рдХрд╛рд░реНрдп рдХрд░рдд рд╣реЛрддреА, рдореНрд╣рдгрдЬреЗ рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрди рд╢реЗрд╡рдЯрд╛рдкрд░реНрдпрдВрдд. рд╣реЗ рдиреИрд╕рд░реНрдЧрд┐рдХ рд╡рд╛рдЯрддреЗ, рдХрд╛рд░рдг рд╣реЗ рдЖрдкрдг рд╡рд╛рдЪрддреЛ рдХрд┐рдВрд╡рд╛ рднрд╛рд╖рдг рдРрдХрддреЛ рддреНрдпрд╛ рдкрджреНрдзрддреАрд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ. рдкрд░рдВрддреБ, рдЕрдиреЗрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд░рд┐рд╕реНрдерд┐рддреАрдВрдордзреНрдпреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рд╡рд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЧрдгрдирд╛ рджреЛрдиреНрд╣реА рджрд┐рд╢рд╛рдВрдиреА рдЪрд╛рд▓рд╡рдгреЗ рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ. рдЕрд╢рд╛ рдиреЗрдЯрд╡рд░реНрдХреНрд╕рд▓рд╛ **рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ** RNNs рдореНрд╣рдгрддрд╛рдд, рдЖрдгрд┐ RNN/LSTM/GRU рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ `bidirectional=True` рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реВрди рддреА рддрдпрд╛рд░ рдХрд░рддрд╛ рдпреЗрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рдиреЗрдЯрд╡рд░реНрдХ рд╣рд╛рддрд╛рд│рддрд╛рдирд╛, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рджреЛрди рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ, рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╢реЗрд╕рд╛рдареА рдПрдХ. PyTorch рд╣реЗ рд╡реНрд╣реЗрдХреНрдЯрд░ рдПрдХрд╛ рдореЛрдареНрдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рдПрдиреНрдХреЛрдб рдХрд░рддреЗ, рдЬреЗ рдЦреВрдк рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ, рдХрд╛рд░рдг рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЖрдкрдг рдкрд░рд┐рдгрд╛рдореА рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯ рдкреВрд░реНрдгрдкрдгреЗ рдХрдиреЗрдХреНрдЯреЗрдб рд▓реАрдирд┐рдпрд░ рд▓реЗрдпрд░рд▓рд╛ рдкрд╛рд╕ рдХрд░рддреЛ, рдЖрдгрд┐ рд▓реЗрдпрд░ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдлрдХреНрдд рдпрд╛ рдЖрдХрд╛рд░рд╡рд╛рдвреАрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ.\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХ, рдПрдХрджрд┐рд╢рд╛рддреНрдордХ рдХрд┐рдВрд╡рд╛ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ, рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирдореБрдиреЗ рдХреЕрдкреНрдЪрд░ рдХрд░рддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рд╕реНрдЯреЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рд╕рд╛рдард╡рддреЗ рдХрд┐рдВрд╡рд╛ рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рдкрд╛рд╕ рдХрд░рддреЗ. рдЬрд╕реЗ рдХреЙрдирд╡реНрд╣реЛрд▓реНрдпреВрд╢рдирд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕рдордзреНрдпреЗ рд╣реЛрддреЗ, рддрд╕реЗрдЪ рдЖрдкрдг рдкрд╣рд┐рд▓реНрдпрд╛ рд▓реЗрдпрд░рдиреЗ рдХрд╛рдврд▓реЗрд▓реНрдпрд╛ рдХрдореА-рд╕реНрддрд░реАрдп рдирдореБрдиреНрдпрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдирдореБрдиреЗ рдХреЕрдкреНрдЪрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд╣рд┐рд▓реНрдпрд╛ рд▓реЗрдпрд░рдЪреНрдпрд╛ рд╡рд░ рдЖрдгрдЦреА рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд▓реЗрдпрд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ. рдпрд╛рдореБрд│реЗ **рдмрд╣реБрдкрд░рдд RNN** рдЪреА рд╕рдВрдХрд▓реНрдкрдирд╛ рддрдпрд╛рд░ рд╣реЛрддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдЕрд╕рддрд╛рдд, рдЬрд┐рдереЗ рдорд╛рдЧреАрд▓ рд▓реЗрдпрд░рдЪрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреБрдвреАрд▓ рд▓реЗрдпрд░рд▓рд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рджрд┐рд▓рд╛ рдЬрд╛рддреЛ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*рдлрд░реНрдирд╛рдВрдбреЛ рд▓реЛрдкреЗрдЭ рдпрд╛рдВрдЪреНрдпрд╛ [рдпрд╛ рдЕрдкреНрд░рддрд┐рдо рдкреЛрд╕реНрдЯрдордзреВрди](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) рдШреЗрддрд▓реЗрд▓реА рдкреНрд░рддрд┐рдорд╛*\n",
|
||||
"\n",
|
||||
"PyTorch рдЕрд╢рд╛ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдмрдирд╡рддреЗ, рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд RNN/LSTM/GRU рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ `num_layers` рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рд╛рдпрдЪрд╛ рдЕрд╕рддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдЪреНрдпрд╛ рдЕрдиреЗрдХ рд╕реНрддрд░ рдЖрдкреЛрдЖрдк рддрдпрд╛рд░ рд╣реЛрддрд╛рдд. рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╣рд┐рдбрди/рд╕реНрдЯреЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рдЪрд╛ рдЖрдХрд╛рд░ рдкреНрд░рдорд╛рдгрд╛рдиреБрд╕рд╛рд░ рд╡рд╛рдвреЗрд▓, рдЖрдгрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд▓реЗрдпрд░рдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣рд╛рддрд╛рд│рддрд╛рдирд╛ рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЗрддрд░ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА RNNs\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдЖрдкрдг рдкрд╛рд╣рд┐рд▓реЗ рдХреА RNNs рдЕрдиреБрдХреНрд░рдо рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рддреЗ рдЖрдгрдЦреА рдмрд▒реНрдпрд╛рдЪ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рд╕рдХреНрд╖рдо рдЖрд╣реЗрдд, рдЬрд╕реЗ рдХреА рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА, рдпрдВрддреНрд░ рдЕрдиреБрд╡рд╛рдж, рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА. рдЖрдкрдг рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рд╣реА рдХрд╛рд░реНрдпреЗ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдК.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬрд╛рдВрд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "522ee52ae3d5ae933e283286254e9a55",
|
||||
"translation_date": "2025-08-28T09:37:56+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNPyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,460 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдкреБрдирд░рд╛рд╡реГрддреНрддреА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ\n",
|
||||
"\n",
|
||||
"рдорд╛рдЧреАрд▓ рд╡рд┐рднрд╛рдЧрд╛рдд, рдЖрдкрдг рдордЬрдХреВрд░рд╛рдЪреНрдпрд╛ рд╕рдореГрджреНрдз рдЕрд░реНрдердкреВрд░реНрдг рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдВрдмрджреНрджрд▓ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА. рдЖрдкрдг рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд╛рдХреНрдпрд╛рддреАрд▓ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдПрдХрддреНрд░рд┐рдд рдЕрд░реНрде рдкрдХрдбрддреЗ, рдкрд░рдВрддреБ рддреА рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ **рдХреНрд░рдо** рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рдПрдореНрдмреЗрдбрд┐рдВрдЧрдирдВрддрд░ рд╣реЛрдгрд╛рд░реА рдПрдХрддреНрд░реАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореВрд│ рдордЬрдХреВрд░рд╛рддреАрд▓ рд╣реА рдорд╛рд╣рд┐рддреА рдХрд╛рдвреВрди рдЯрд╛рдХрддреЗ. рдпрд╛ рдореЙрдбреЗрд▓реНрд╕рдирд╛ рд╢рдмреНрдж рдХреНрд░рдорд╡рд╛рд░реАрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рдпреЗрдд рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рддреЗ рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА рдХрд┐рдВрд╡рд╛ рдкреНрд░рд╢реНрдиреЛрддреНрддрд░ рдпрд╛рдВрд╕рд╛рд░рдЦреНрдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд┐рдВрд╡рд╛ рд╕рдВрджрд┐рдЧреНрдз рдХрд╛рд░реНрдпреЗ рд╕реЛрдбрд╡реВ рд╢рдХрдд рдирд╛рд╣реАрдд.\n",
|
||||
"\n",
|
||||
"рдордЬрдХреВрд░ рдЕрдиреБрдХреНрд░рдорд╛рдЪрд╛ рдЕрд░реНрде рдкрдХрдбрдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг **рдкреБрдирд░рд╛рд╡реГрддреНрддреА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ** рдХрд┐рдВрд╡рд╛ RNN рдирд╛рд╡рд╛рдЪреА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. RNN рд╡рд╛рдкрд░рддрд╛рдирд╛, рдЖрдкрдг рдЖрдкрд▓реЗ рд╡рд╛рдХреНрдп рдиреЗрдЯрд╡рд░реНрдХрдордзреВрди рдПрдХрд╛рд╡реЗрд│реА рдПрдХ рдЯреЛрдХрди рдкрд╛рд╕ рдХрд░рддреЛ, рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд╣реА **рд╕реНрдерд┐рддреА** рддрдпрд╛рд░ рдХрд░рддреЗ, рдЬреА рдЖрдкрдг рдкреБрдвреАрд▓ рдЯреЛрдХрдирд╕рд╣ рдкреБрдиреНрд╣рд╛ рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдкрд╛рд╕ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдЯреЛрдХрдирдЪреНрдпрд╛ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдо $X_0,\\dots,X_n$ рджрд┐рд▓реНрдпрд╛рд╕, RNN рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХреНрд╕рдЪреА рдПрдХ рдЕрдиреБрдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рддреЗ рдЖрдгрд┐ рдмреЕрдХрдкреНрд░реЛрдкреЛрдЧреЗрд╢рди рд╡рд╛рдкрд░реВрди рд╣реЗ рдЕрдиреБрдХреНрд░рдо рдПрдВрдб-рдЯреВ-рдПрдВрдб рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ. рдкреНрд░рддреНрдпреЗрдХ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХ $(X_i,S_i)$ рд╣реА рдЬреЛрдбреА рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддреЛ рдЖрдгрд┐ $S_{i+1}$ рдкрд░рд┐рдгрд╛рдо рдореНрд╣рдгреВрди рддрдпрд╛рд░ рдХрд░рддреЛ. рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддреА $S_n$ рдХрд┐рдВрд╡рд╛ рдЖрдЙрдЯрдкреБрдЯ $Y_n$ рд░реЗрд╖реАрдп рд╡рд░реНрдЧреАрдХрд░рдгрд╛рдордзреНрдпреЗ рдЬрд╛рддреЗ рдЬреЗрдгреЗрдХрд░реВрди рдкрд░рд┐рдгрд╛рдо рддрдпрд╛рд░ рд╣реЛрддреЛ. рд╕рд░реНрд╡ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓реЙрдХреНрд╕ рд╕рдорд╛рди рд╡рдЬрди рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рддрд╛рдд рдЖрдгрд┐ рдПрдХрд╛рдЪ рдмреЕрдХрдкреНрд░реЛрдкреЛрдЧреЗрд╢рди рдкрд╛рд╕рджреНрд╡рд╛рд░реЗ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"> рд╡рд░реАрд▓ рдЖрдХреГрддреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЕрдирд░реЛрд▓реНрдб рд╕реНрд╡рд░реВрдкрд╛рдд (рдбрд╛рд╡реАрдХрдбреЗ) рдЖрдгрд┐ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╛рдд (рдЙрдЬрд╡реАрдХрдбреЗ) рджрд░реНрд╢рд╡рддреЗ. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡ RNN рд╕реЗрд▓реНрд╕рдордзреНрдпреЗ рд╕рдорд╛рди **рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рд╡рдЬрди** рдЕрд╕рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдХрд╛рд░рдг рд╕реНрдерд┐рддреА рд╡реЗрдХреНрдЯрд░ $S_0,\\dots,S_n$ рдиреЗрдЯрд╡рд░реНрдХрдордзреВрди рдкрд╛рд╕ рд╣реЛрддрд╛рдд, RNN рд╢рдмреНрджрд╛рдВрдордзреАрд▓ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд╢рд┐рдХрдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ *not* рд╣рд╛ рд╢рдмреНрдж рдЕрдиреБрдХреНрд░рдорд╛рдд рдХреБрдареЗрддрд░реА рджрд┐рд╕рддреЛ, рддреЗрд╡реНрд╣рд╛ рддреЛ рд╕реНрдерд┐рддреА рд╡реЗрдХреНрдЯрд░рдордзреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдХ рдирд╛рдХрд╛рд░рдгреНрдпрд╛рд╕ рд╢рд┐рдХреВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"рдЖрдд, рдкреНрд░рддреНрдпреЗрдХ RNN рд╕реЗрд▓рдордзреНрдпреЗ рджреЛрди рд╡рдЬрди рдореЕрдЯреНрд░рд┐рд╕реЗрд╕ рдЕрд╕рддрд╛рдд: $W_H$ рдЖрдгрд┐ $W_I$, рдЖрдгрд┐ рдмрд╛рдпрд╕ $b$. рдкреНрд░рддреНрдпреЗрдХ RNN рдЪрд░рдгрд╛рд╡рд░, рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЗрдирдкреБрдЯ $X_i$ рдЖрдгрд┐ рдЗрдирдкреБрдЯ рд╕реНрдерд┐рддреА $S_i$, рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддреА $S_{i+1} = f(W_H\\times S_i + W_I\\times X_i+b)$ рдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдЧрдгрдирд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ, рдЬрд┐рдереЗ $f$ рд╣реА рд╕рдХреНрд░рд┐рдпрддрд╛ рдлрдВрдХреНрд╢рди рдЕрд╕рддреЗ (рд╕рд╛рдорд╛рдиреНрдпрддрдГ $\\tanh$).\n",
|
||||
"\n",
|
||||
"> рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА (рдЬреНрдпрд╛рдмрджреНрджрд▓ рдЖрдкрдг рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЪрд░реНрдЪрд╛ рдХрд░реВ) рдХрд┐рдВрд╡рд╛ рдорд╢реАрди рднрд╛рд╖рд╛рдВрддрд░ рдпрд╛рдВрд╕рд╛рд░рдЦреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ RNN рдЪрд░рдгрд╛рд╡рд░ рдХрд╛рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдореВрд▓реНрдп рджреЗрдЦреАрд▓ рд╣рд╡реЗ рдЕрд╕рддреЗ. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рдЖрдгрдЦреА рдПрдХ рдореЕрдЯреНрд░рд┐рдХреНрд╕ $W_O$ рдЕрд╕рддреЗ, рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ $Y_i=f(W_O\\times S_i+b_O)$ рдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рдЧрдгрдирд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдордЪреНрдпрд╛ рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рдд рдХрд╕реЗ рдорджрдд рдХрд░реВ рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"> рд╕реЕрдВрдбрдмреЙрдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЦрд╛рд▓реАрд▓ рд╕реЗрд▓ рдЪрд╛рд▓рд╡рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗрдгреЗрдХрд░реВрди рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдпрдмреНрд░рд░реА рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдИрд▓ рдЖрдгрд┐ рдбреЗрдЯрд╛ рдкреНрд░реАрдлреЗрдЪ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рдЬрд░ рдЖрдкрдг рд╕реНрдерд╛рдирд┐рдХрдкрдгреЗ рдЪрд╛рд▓рд╡рдд рдЕрд╕рд╛рд▓, рддрд░ рдЖрдкрдг рдЦрд╛рд▓реАрд▓ рд╕реЗрд▓ рд╡рдЧрд│реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install --quiet tensorflow_datasets==4.4.0\n",
|
||||
"!cd ~ && wget -q -O - https://mslearntensorflowlp.blob.core.windows.net/data/tfds-ag-news.tgz | tar xz"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# We are going to be training pretty large models. In order not to face errors, we need\n",
|
||||
"# to set tensorflow option to grow GPU memory allocation when required\n",
|
||||
"physical_devices = tf.config.list_physical_devices('GPU') \n",
|
||||
"if len(physical_devices)>0:\n",
|
||||
" tf.config.experimental.set_memory_growth(physical_devices[0], True)\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"рдЬреЗрд╡реНрд╣рд╛ рдореЛрдареНрдпрд╛ рдореЙрдбреЗрд▓реНрд╕рдЪреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдШреЗрддрд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ GPU рдореЗрдорд░реА рд╡рд╛рдЯрдк рд╕рдорд╕реНрдпрд╛ рд╣реЛрдК рд╢рдХрддреЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдорд┐рдиреАрдмреЕрдЪ рдЖрдХрд╛рд░рд╛рдВрд╡рд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реВ рд╢рдХрддреЗ, рдЬреЗрдгреЗрдХрд░реВрди рдбреЗрдЯрд╛ рдЖрдкрд▓реНрдпрд╛ GPU рдореЗрдорд░реАрдордзреНрдпреЗ рдмрд╕реВ рд╢рдХреЗрд▓ рдЖрдгрд┐ рддрд░реАрд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреБрд░реЗрд╕реЗ рдЬрд▓рдж рд╣реЛрдИрд▓. рдЬрд░ рддреБрдореНрд╣реА рд╣рд╛ рдХреЛрдб рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ GPU рдорд╢реАрдирд╡рд░ рдЪрд╛рд▓рд╡рдд рдЕрд╕рд╛рд▓, рддрд░ рддреБрдореНрд╣реА рдорд┐рдиреАрдмреЕрдЪ рдЖрдХрд╛рд░ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реВрди рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪрд╛ рд╡реЗрдЧ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛.\n",
|
||||
"\n",
|
||||
"> **Note**: NVidia рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕рдЪреНрдпрд╛ рдХрд╛рд╣реА рдЖрд╡реГрддреНрддреНрдпрд╛ рдореЙрдбреЗрд▓рдЪреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдореЗрдорд░реА рд░рд┐рд▓реАрдЬ рдХрд░рдд рдирд╛рд╣реАрдд рд╣реЗ рдЬреНрдЮрд╛рдд рдЖрд╣реЗ. рдЖрдореНрд╣реА рдпрд╛ рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ рдЕрдиреЗрдХ рдЙрджрд╛рд╣рд░рдгреЗ рдЪрд╛рд▓рд╡рдд рдЖрд╣реЛрдд, рдЖрдгрд┐ рддреНрдпрд╛рдореБрд│реЗ рдХрд╛рд╣реА рд╕реЗрдЯрдЕрдкрдордзреНрдпреЗ рдореЗрдорд░реА рд╕рдВрдкрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЕрд╕рддреЗ, рд╡рд┐рд╢реЗрд╖рддрдГ рдЬрд░ рддреБрдореНрд╣реА рддреНрдпрд╛рдЪ рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ рд╕реНрд╡рддрдГрдЪреЗ рдкреНрд░рдпреЛрдЧ рдХрд░рдд рдЕрд╕рд╛рд▓. рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдореЙрдбреЗрд▓рдЪреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдХрд░рддрд╛рдирд╛ рдХрд╛рд╣реА рд╡рд┐рдЪрд┐рддреНрд░ рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛, рддрд░ рддреБрдореНрд╣реА рдиреЛрдЯрдмреБрдХрдЪрд╛ рдХрд░реНрдирд▓ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"jupyter": {
|
||||
"outputs_hidden": false,
|
||||
"source_hidden": false
|
||||
},
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"batch_size = 16\n",
|
||||
"embed_size = 64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рд╛рдзрд╛ RNN рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛\n",
|
||||
"\n",
|
||||
"рд╕рд╛рдзреНрдпрд╛ RNN рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдпреБрдирд┐рдЯ рдПрдХ рд╕рд╛рдзреЗ рд░реЗрд╖реАрдп рдиреЗрдЯрд╡рд░реНрдХ рдЕрд╕рддреЗ, рдЬреЗ рдЗрдирдкреБрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░ рдЖрдгрд┐ рд╕реНрдерд┐рддреА рд╡реНрд╣реЗрдХреНрдЯрд░ рдШреЗрддреЛ рдЖрдгрд┐ рдирд╡реАрди рд╕реНрдерд┐рддреА рд╡реНрд╣реЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░рддреЛ. Keras рдордзреНрдпреЗ, рд╣реЗ `SimpleRNN` рд╕реНрддрд░рд╛рджреНрд╡рд╛рд░реЗ рджрд░реНрд╢рд╡рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдЬрд░реА рдЖрдкрдг рдПрдХ-рд╣реЙрдЯ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ рдЯреЛрдХрди рдереЗрдЯ RNN рд╕реНрддрд░рд╛рд╡рд░ рдкрд╛рдард╡реВ рд╢рдХрддреЛ, рддрд░реАрд╣реА рддреНрдпрд╛рдВрдЪреА рдЙрдЪреНрдЪ рдкрд░рд┐рдорд╛рдгрд╛рддреНрдордХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ рд╣реЗ рдЪрд╛рдВрдЧрд▓реЗ рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ, рдЖрдореНрд╣реА рд╢рдмреНрдж рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреА рдкрд░рд┐рдорд╛рдгрд╛рддреНрдордХрддрд╛ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрддрд░ рд╡рд╛рдкрд░реВ, рддреНрдпрд╛рдирдВрддрд░ RNN рд╕реНрддрд░ рдЖрдгрд┐ рд╢реЗрд╡рдЯреА `Dense` рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд╡рд╛рдкрд░реВ.\n",
|
||||
"\n",
|
||||
"> **Note**: рдЬреНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рдкрд░рд┐рдорд╛рдгрд╛рддреНрдордХрддрд╛ рдЗрддрдХреА рдЬрд╛рд╕реНрдд рдирд╛рд╣реА, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рд╡рд░реНрдг-рд╕реНрддрд░реАрдп рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рди рд╡рд╛рдкрд░рддрд╛рдирд╛, рдПрдХ-рд╣реЙрдЯ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реЗ рдЯреЛрдХрди рдереЗрдЯ RNN рд╕реЗрд▓рдордзреНрдпреЗ рдкрд╛рдард╡рдгреЗ рдпреЛрдЧреНрдп рдард░реВ рд╢рдХрддреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"text_vectorization (TextVect (None, None) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"embedding (Embedding) (None, None, 64) 1280000 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"simple_rnn (SimpleRNN) (None, 16) 1296 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, 4) 68 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 1,281,364\n",
|
||||
"Trainable params: 1,281,364\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = 20000\n",
|
||||
"\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(\n",
|
||||
" max_tokens=vocab_size,\n",
|
||||
" input_shape=(1,))\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк:** рдпреЗрдереЗ рдЖрдкрдг рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА рдПрдХ рдЕрдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рд╡рд╛рдкрд░рддреЛ, рдкрд░рдВрддреБ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкрд░рд┐рдгрд╛рдорд╛рдВрд╕рд╛рдареА рдЖрдкрдг Word2Vec рд╡рд╛рдкрд░реВрди рдкреНрд░реАрдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓рд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ, рдЬрд╕реЗ рдХреА рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рд╣рд╛ рдХреЛрдб рдкреНрд░реАрдЯреНрд░реЗрди рдПрдореНрдмреЗрдбрд┐рдВрдЧрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдгреЗ рд╣реЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдЪрд╛рдВрдЧрд▓реЗ рд╡реНрдпрд╛рдпрд╛рдо рдард░реВ рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЖрдкрд▓реЗ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдКрдпрд╛. рд╕рд╛рдорд╛рдиреНрдпрддрдГ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ рдЦреВрдк рдХрдареАрдг рдЕрд╕рддреЗ, рдХрд╛рд░рдг RNN рд╕реЗрд▓реНрд╕ рдЬреЗрд╡реНрд╣рд╛ рдЕрдиреБрдХреНрд░рдо рд▓рд╛рдВрдмреАрд╡рд░ рдЙрд▓рдЧрдбрд▓реЗ рдЬрд╛рддрд╛рдд, рддреЗрд╡реНрд╣рд╛ рдмреЕрдХрдкреНрд░реЛрдкрдЧреЗрд╢рдирдордзреНрдпреЗ рд╕рд╣рднрд╛рдЧреА рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдерд░рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЦреВрдк рдореЛрдареА рд╣реЛрддреЗ. рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХ рд▓рд╣рд╛рди рд▓рд░реНрдирд┐рдВрдЧ рд░реЗрдЯ рдирд┐рд╡рдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдореЛрдареНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреНрдпрд╛рд╡реЗ рд▓рд╛рдЧрддреЗ. рдпрд╛рд╕рд╛рдареА рдмрд░рд╛рдЪ рд╡реЗрд│ рд▓рд╛рдЧреВ рд╢рдХрддреЛ, рддреНрдпрд╛рдореБрд│реЗ GPU рд╡рд╛рдкрд░рдгреЗ рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдард░рддреЗ.\n",
|
||||
"\n",
|
||||
"рд╡реЗрдЧ рд╡рд╛рдврд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг RNN рдореЙрдбреЗрд▓ рдХреЗрд╡рд│ рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рдХрд╛рдВрд╡рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдК, рд╡рд░реНрдгрди рд╡рдЧрд│реВрди. рддреБрдореНрд╣реА рд╡рд░реНрдгрдирд╛рд╕рд╣ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдореЙрдбреЗрд▓рд▓рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреНрдпрд╛рдд рдпрд╢рд╕реНрд╡реА рд╣реЛрдК рд╢рдХрддрд╛ рдХрд╛ рддреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_title(x):\n",
|
||||
" return x['title']\n",
|
||||
"\n",
|
||||
"def tupelize_title(x):\n",
|
||||
" return (extract_title(x),x['label'])\n",
|
||||
"\n",
|
||||
"print('Training vectorizer')\n",
|
||||
"vectorizer.adapt(ds_train.take(2000).map(extract_title))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 82s 11ms/step - loss: 0.6629 - acc: 0.7623 - val_loss: 0.5559 - val_acc: 0.7995\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3e0030d350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize_title).batch(batch_size),validation_data=ds_test.map(tupelize_title).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"> **рдЯреАрдк** рдХреА рдЕрдЪреВрдХрддрд╛ рдпреЗрдереЗ рдХрдореА рдЕрд╕рдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рдЖрдореНрд╣реА рдХреЗрд╡рд│ рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рдХрд╛рдВрд╡рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдд рдЖрд╣реЛрдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдЕрдиреБрдХреНрд░рдо рдкреБрдиреНрд╣рд╛ рдкрд╛рд╣рдгреЗ\n",
|
||||
"\n",
|
||||
"рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА `TextVectorization` рд▓реЗрдпрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдорд┐рдирд┐рдмреЕрдЪрдордзреАрд▓ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдирд╛ рдкреЕрдб рдЯреЛрдХрдиреНрд╕рд╕рд╣ рдкреЕрдб рдХрд░рддреЗ. рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдЖрд╣реЗ рдХреА рд╣реЗ рдЯреЛрдХрдиреНрд╕ рджреЗрдЦреАрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдордзреНрдпреЗ рднрд╛рдЧ рдШреЗрддрд╛рдд рдЖрдгрд┐ рдореЙрдбреЗрд▓рдЪреНрдпрд╛ рдЕрднрд┐рд╕рд░рдгрд╛рдордзреНрдпреЗ рдЕрдбрдЪрдг рдирд┐рд░реНрдорд╛рдг рдХрд░реВ рд╢рдХрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдкреЕрдбрд┐рдВрдЧрдЪреА рдорд╛рддреНрд░рд╛ рдХрдореА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрдг рдХрд╛рд╣реА рдкрджреНрдзрддреА рдЕрд╡рд▓рдВрдмреВ рд╢рдХрддреЛ. рддреНрдпрд╛рдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛ рдЕрдиреБрдХреНрд░рдо рд▓рд╛рдВрдмреАрдиреЗ рдкреБрдирд░реНрд░рдЪрдирд╛ рдХрд░рдгреЗ рдЖрдгрд┐ рд╕рд░реНрд╡ рдЕрдиреБрдХреНрд░рдо рдЖрдХрд╛рд░рд╛рдиреБрд╕рд╛рд░ рдЧрдЯрдмрджреНрдз рдХрд░рдгреЗ. рд╣реЗ `tf.data.experimental.bucket_by_sequence_length` рдлрдВрдХреНрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдХрд░рддрд╛ рдпреЗрддреЗ (рдкрд╣рд╛ [рдбреЙрдХреНрдпреБрдореЗрдВрдЯреЗрд╢рди](https://www.tensorflow.org/api_docs/python/tf/data/experimental/bucket_by_sequence_length)).\n",
|
||||
"\n",
|
||||
"рджреБрд╕рд░реА рдкрджреНрдзрдд рдореНрд╣рдгрдЬреЗ **рдорд╛рд╕реНрдХрд┐рдВрдЧ** рд╡рд╛рдкрд░рдгреЗ. Keras рдордзреНрдпреЗ, рдХрд╛рд╣реА рд▓реЗрдпрд░реНрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрдирдкреБрдЯрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддрд╛рдд рдЬреЗ рджрд╛рдЦрд╡рддреЗ рдХреА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд░рддрд╛рдирд╛ рдХреЛрдгрддреЗ рдЯреЛрдХрдиреНрд╕ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреНрдпрд╛рд╡реЗрдд. рдЖрдкрд▓реНрдпрд╛ рдореЙрдбреЗрд▓рдордзреНрдпреЗ рдорд╛рд╕реНрдХрд┐рдВрдЧ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `Masking` рд▓реЗрдпрд░ ([рдбреЙрдХреНрд╕](https://keras.io/api/layers/core_layers/masking/)) рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ, рдХрд┐рдВрд╡рд╛ рдЖрдкрдг `Embedding` рд▓реЗрдпрд░рдЪреНрдпрд╛ `mask_zero=True` рдкреЕрд░рд╛рдореАрдЯрд░рд▓рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"> **Note**: рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдПрдХ epoch рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрдорд╛рд░реЗ 5 рдорд┐рдирд┐рдЯреЗ рд▓рд╛рдЧрддреАрд▓. рдЬрд░ рддреБрдордЪрд╛ рд╕рдВрдпрдо рд╕рдВрдкрд▓рд╛ рдЕрд╕реЗрд▓ рддрд░ рддреБрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡реЗрд│реА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдерд╛рдВрдмрд╡реВ рд╢рдХрддрд╛. рддреБрдореНрд╣реА рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ рдбреЗрдЯрд╛рдЪреА рдорд╛рддреНрд░рд╛ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ рд╢рдХрддрд╛, `ds_train` рдЖрдгрд┐ `ds_test` рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕рдирдВрддрд░ `.take(...)` рдХреНрд▓реЙрдЬ рдЬреЛрдбреВрди.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 371s 49ms/step - loss: 0.5401 - acc: 0.8079 - val_loss: 0.3780 - val_acc: 0.8822\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3dec118850>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size,embed_size,mask_zero=True),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдорд╛рд╕реНрдХрд┐рдВрдЧ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдкрдг рд╢реАрд░реНрд╖рдХреЗ рдЖрдгрд┐ рд╡рд░реНрдгрдирд╛рдВрдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдК рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк**: рддреБрдореНрд╣реА рд▓рдХреНрд╖рд╛рдд рдШреЗрддрд▓реЗ рдЖрд╣реЗ рдХрд╛ рдХреА рдЖрдкрдг рдмрд╛рддрдореНрдпрд╛рдВрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рдХрд╛рдВрд╡рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд, рдЖрдгрд┐ рд▓реЗрдЦрд╛рдЪреНрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдордЬрдХреБрд░рд╛рд╡рд░ рдирд╛рд╣реА? рд╕рдВрднрд╛рд╡реНрдпрддрдГ, рдпрд╛рдореБрд│реЗ рдХрд╛рд╣реА рдЯреЛрдХрдиреНрд╕ рджреБрд░реНрд▓рдХреНрд╖рд┐рдд рд╣реЛрдК рд╢рдХрддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рдкреБрдиреНрд╣рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ. рдорд╛рддреНрд░, рдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдлрд╛рд░рдЪ рдХрдореА рд╣реЛрдК рд╢рдХрддреЛ, рддреНрдпрд╛рдореБрд│реЗ рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА рдЖрдкрдг рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░рдЪ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## LSTM: рд▓рд╛рдБрдЧ рд╢реЙрд░реНрдЯ-рдЯрд░реНрдо рдореЗрдорд░реА\n",
|
||||
"\n",
|
||||
"RNNs рдЪреНрдпрд╛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдореНрд╣рдгрдЬреЗ **vanishing gradients**. RNNs рдЦреВрдк рд▓рд╛рдВрдм рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рдмреЕрдХрдкреНрд░реЛрдкреЛрдЧреЗрд╢рди рджрд░рдореНрдпрд╛рди рдиреЗрдЯрд╡рд░реНрдХрдЪреНрдпрд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рд▓реЗрдпрд░рдкрд░реНрдпрдВрдд рдЧреНрд░реЗрдбрд┐рдпрдВрдЯреНрд╕ рдкреЛрд╣реЛрдЪрд╡рдгреЗ рдХрдареАрдг рд╣реЛрдК рд╢рдХрддреЗ. рдЬреЗрд╡реНрд╣рд╛ рдЕрд╕реЗ рд╣реЛрддреЗ, рддреЗрд╡реНрд╣рд╛ рдиреЗрдЯрд╡рд░реНрдХ рджреВрд░рдЪреНрдпрд╛ рдЯреЛрдХрдирдордзреАрд▓ рд╕рдВрдмрдВрдз рд╢рд┐рдХреВ рд╢рдХрдд рдирд╛рд╣реА. рд╣реА рд╕рдорд╕реНрдпрд╛ рдЯрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА **explicit state management** рд╡рд╛рдкрд░рдгреЗ рдПрдХ рдЙрдкрд╛рдп рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ **gates** рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. **рд▓рд╛рдБрдЧ рд╢реЙрд░реНрдЯ-рдЯрд░реНрдо рдореЗрдорд░реА** (LSTM) рдЖрдгрд┐ **gated relay unit** (GRU) рдпрд╛ рджреЛрди рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрд╣реЗрдд рдЬреНрдпрд╛рдордзреНрдпреЗ gates рдЕрд╕рддрд╛рдд. рдпреЗрдереЗ рдЖрдкрдг LSTMs рдмрджреНрджрд▓ рдЪрд░реНрдЪрд╛ рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM рдиреЗрдЯрд╡рд░реНрдХ RNN рдкреНрд░рдорд╛рдгреЗрдЪ рдЖрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рдкрд░рдВрддреБ рджреЛрди states рд▓реЗрдпрд░рдкрд╛рд╕реВрди рд▓реЗрдпрд░рдкрд░реНрдпрдВрдд рдкрд╛рд╕ рд╣реЛрддрд╛рдд: actual state $c$, рдЖрдгрд┐ hidden vector $h$. рдкреНрд░рддреНрдпреЗрдХ рдпреБрдирд┐рдЯрд╡рд░, hidden vector $h_{t-1}$ input $x_t$ рд╕реЛрдмрдд рдПрдХрддреНрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдЖрдгрд┐ рдПрдХрддреНрд░рд┐рддрдкрдгреЗ рддреЗ state $c_t$ рдЖрдгрд┐ output $h_{t}$ рд╡рд░ **gates** рдЪреНрдпрд╛ рдорд╛рдзреНрдпрдорд╛рддреВрди рдирд┐рдпрдВрддреНрд░рдг рдареЗрд╡рддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ gate рд▓рд╛ sigmoid activation рдЕрд╕рддреЗ (output $[0,1]$ рдЪреНрдпрд╛ рд░реЗрдВрдЬрдордзреНрдпреЗ), рдЬреНрдпрд╛рд▓рд╛ state vector рд╕реЛрдмрдд рдЧреБрдгрд╛рдХрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╡рд░ bitwise mask рдореНрд╣рдгреВрди рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рдпреЗрддреЛ. LSTMs рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ gates рдЕрд╕рддрд╛рдд (рд╡рд░ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЪрд┐рддреНрд░рд╛рдд рдбрд╛рд╡реАрдХрдбреВрди рдЙрдЬрд╡реАрдХрдбреЗ):\n",
|
||||
"* **forget gate** рдЬреЛ рдард░рд╡рддреЛ рдХреА vector $c_{t-1}$ рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рдШрдЯрдХрд╛рдВрдирд╛ рд╡рд┐рд╕рд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рдЖрдгрд┐ рдХреЛрдгрддреЗ рдкрд╛рд╕ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗрдд.\n",
|
||||
"* **input gate** рдЬреЛ рдард░рд╡рддреЛ рдХреА input vector рдЖрдгрд┐ previous hidden vector рдордзреАрд▓ рдХрд┐рддреА рдорд╛рд╣рд┐рддреА state vector рдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ.\n",
|
||||
"* **output gate** рдЬреЛ рдирд╡реАрди state vector рдШреЗрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рдШрдЯрдХрд╛рдВрдЪрд╛ рдЙрдкрдпреЛрдЧ рдирд╡реАрди hidden vector $h_t$ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ рд╣реЗ рдард░рд╡рддреЛ.\n",
|
||||
"\n",
|
||||
"State $c$ рдЪреЗ рдШрдЯрдХ flags рдореНрд╣рдгреВрди рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рдпреЗрдК рд╢рдХрддрд╛рдд рдЬреЗ рдСрди рдЖрдгрд┐ рдСрдл рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг sequence рдордзреНрдпреЗ *Alice* рд╣реЗ рдирд╛рд╡ рдкрд╛рд╣рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рддреЛ рдХреА рддреЗ рдПрдХрд╛ рд╕реНрддреНрд░реАрд▓рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ, рдЖрдгрд┐ state рдордзреНрдпреЗ рдПрдХ flag рдЙрдЪрд▓рддреЛ рдЬреЛ рд╕рд╛рдВрдЧрддреЛ рдХреА рд╡рд╛рдХреНрдпрд╛рдд рдПрдХ рд╕реНрддреНрд░реАрд▓рд┐рдВрдЧреА рдирд╛рдо рдЖрд╣реЗ. рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдкреБрдвреЗ *and Tom* рд╢рдмреНрдж рдкрд╛рд╣рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдПрдХ flag рдЙрдЪрд▓рддреЛ рдЬреЛ рд╕рд╛рдВрдЧрддреЛ рдХреА рд╡рд╛рдХреНрдпрд╛рдд рдПрдХ рдмрд╣реБрд╡рдЪрди рдирд╛рдо рдЖрд╣реЗ. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ state manipulate рдХрд░реВрди рдЖрдкрдг рд╡рд╛рдХреНрдпрд╛рдЪреНрдпрд╛ рд╡реНрдпрд╛рдХрд░рдгрд╛рддреНрдордХ рдЧреБрдгрдзрд░реНрдорд╛рдВрдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдареЗрд╡реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"> **Note**: LSTMs рдЪреНрдпрд╛ рдЕрдВрддрд░реНрдЧрдд рд░рдЪрдирд╛ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдпреЗрдереЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрд░реЛрдд рдЖрд╣реЗ: [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдУрд▓рд╛рд╣ рдпрд╛рдВрдиреА рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ.\n",
|
||||
"\n",
|
||||
"LSTM рд╕реЗрд▓рдЪреА рдЕрдВрддрд░реНрдЧрдд рд░рдЪрдирд╛ рдЬрд░реА рдХреНрд▓рд┐рд╖реНрдЯ рджрд┐рд╕рдд рдЕрд╕рд▓реА рддрд░реА Keras рд╣реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА `LSTM` рд▓реЗрдпрд░рдордзреНрдпреЗ рд▓рдкрд╡рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рд╡рд░ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд recurrent рд▓реЗрдпрд░ рдмрджрд▓рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"15000/15000 [==============================] - 188s 13ms/step - loss: 0.5692 - acc: 0.7916 - val_loss: 0.3441 - val_acc: 0.8870\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3d6af5c350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.LSTM(8),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(8),validation_data=ds_test.map(tupelize).batch(8))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рдЖрдгрд┐ рдмрд╣реБрдкрд░рдд RNNs\n",
|
||||
"\n",
|
||||
"рдЖрддреНрддрд╛рдкрд░реНрдпрдВрддрдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдордзреНрдпреЗ, рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрди рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд. рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреИрд╕рд░реНрдЧрд┐рдХ рд╡рд╛рдЯрддреЗ рдХрд╛рд░рдг рд╣реЗ рддреНрдпрд╛рдЪ рджрд┐рд╢реЗрдиреЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдЬреНрдпрд╛ рджрд┐рд╢реЗрдиреЗ рдЖрдкрдг рд╡рд╛рдЪрддреЛ рдХрд┐рдВрд╡рд╛ рднрд╛рд╖рдг рдРрдХрддреЛ. рдкрд░рдВрддреБ, рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрд╕рд╛рдареА рдЬрд┐рдереЗ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рдЪрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рд╡реЗрд╢ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЛ, рддрд┐рдереЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЧрдгрдирд╛ рджреЛрдиреНрд╣реА рджрд┐рд╢рд╛рдВрдиреА рдЪрд╛рд▓рд╡рдгреЗ рдЕрдзрд┐рдХ рдЕрд░реНрдердкреВрд░реНрдг рдард░рддреЗ. рдЕрд╢рд╛ RNNs рдЬреНрдпрд╛рдордзреНрдпреЗ рджреЛрдиреНрд╣реА рджрд┐рд╢рд╛рдВрдиреА рдЧрдгрдирд╛ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдЕрд╕рддреЗ рддреНрдпрд╛рдВрдирд╛ **рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ** RNNs рдореНрд╣рдгрддрд╛рдд, рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ `Bidirectional` рд▓реЗрдпрд░рдиреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд▓реЗрдпрд░рд▓рд╛ рд╡реЗрдвреВрди рддрдпрд╛рд░ рдХрд░рддрд╛ рдпреЗрддреЗ.\n",
|
||||
"\n",
|
||||
"> **Note**: `Bidirectional` рд▓реЗрдпрд░ рддреНрдпрд╛рдордзреАрд▓ рд▓реЗрдпрд░рдЪреА рджреЛрди рдкреНрд░рдд рдмрдирд╡рддреЗ рдЖрдгрд┐ рддреНрдпрд╛ рдкреНрд░рддрд╛рдВрдкреИрдХреА рдПрдХрд╛ рдкреНрд░рддрд╛рдЪреЗ `go_backwards` рдЧреБрдгрдзрд░реНрдо `True` рд╕реЗрдЯ рдХрд░рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рддреА рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╡рд┐рд░реБрджреНрдз рджрд┐рд╢реЗрдиреЗ рдЬрд╛рддреЗ.\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХреНрд╕, рдПрдХрджрд┐рд╢рд╛рддреНрдордХ рдХрд┐рдВрд╡рд╛ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ, рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рдирдореБрдиреЗ рдкрдХрдбрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рд╕реНрдЯреЗрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рдордзреНрдпреЗ рд╕рд╛рдард╡рддрд╛рдд рдХрд┐рдВрд╡рд╛ рдЖрдЙрдЯрдкреБрдЯ рдореНрд╣рдгреВрди рдкрд░рдд рдХрд░рддрд╛рдд. рдЬрд╕реЗ рдХреЙрдирд╡реНрд╣реЛрд▓реНрдпреВрд╢рди рдиреЗрдЯрд╡рд░реНрдХреНрд╕рдордзреНрдпреЗ рд╣реЛрддреЗ, рддрд╕реЗрдЪ рдЖрдкрдг рдкрд╣рд┐рд▓реНрдпрд╛ рд▓реЗрдпрд░рдиреЗ рдХрд╛рдврд▓реЗрд▓реНрдпрд╛ рдХрдореА рд╕реНрддрд░рд╛рддреАрд▓ рдирдореБрдиреНрдпрд╛рдВрдордзреВрди рдЙрдЪреНрдЪ рд╕реНрддрд░рд╛рдЪреЗ рдирдореБрдиреЗ рдкрдХрдбрдгреНрдпрд╛рд╕рд╛рдареА рдкрд╣рд┐рд▓реНрдпрд╛ рд▓реЗрдпрд░рдирдВрддрд░ рдЖрдгрдЦреА рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд▓реЗрдпрд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ. рдпрд╛рдореБрд│реЗ **рдмрд╣реБрдкрд░рдд RNN** рдЪреА рд╕рдВрдХрд▓реНрдкрдирд╛ рддрдпрд╛рд░ рд╣реЛрддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдЕрд╕рддрд╛рдд, рдЬрд┐рдереЗ рдорд╛рдЧреАрд▓ рд▓реЗрдпрд░рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдкреБрдвреАрд▓ рд▓реЗрдпрд░рд▓рд╛ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рджрд┐рд▓реЗ рдЬрд╛рддреЗ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*рдлрд░реНрдирд╛рдВрдбреЛ рд▓реЛрдкреЗрдЭ рдпрд╛рдВрдиреА рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ [рдпрд╛ рдЕрдкреНрд░рддрд┐рдо рдкреЛрд╕реНрдЯрдордзреВрди](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) рдШреЗрддрд▓реЗрд▓реА рдкреНрд░рддрд┐рдорд╛.*\n",
|
||||
"\n",
|
||||
"Keras рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдмрдирд╡рддреЗ, рдХрд╛рд░рдг рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдореЙрдбреЗрд▓рдордзреНрдпреЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд▓реЗрдпрд░реНрд╕ рдЬреЛрдбрд╛рдпрдЪреНрдпрд╛ рдЕрд╕рддрд╛рдд. рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд▓реЗрдпрд░ рд╡рдЧрд│рддрд╛ рд╕рд░реНрд╡ рд▓реЗрдпрд░реНрд╕рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ `return_sequences=True` рдкреЕрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ, рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд▓реЗрдпрд░рдиреЗ рд╕рд░реНрд╡ рдордзреНрдпрдо рд╕реНрдЯреЗрдЯреНрд╕ рдкрд░рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдлрдХреНрдд рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЧрдгрдиреЗрдЪреА рдЕрдВрддрд┐рдо рд╕реНрдЯреЗрдЯ рдирд╛рд╣реА.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рдЖрдкрд▓реНрдпрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпреЗрд╕рд╛рдареА рджреЛрди-рдкрд░рдд рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ LSTM рддрдпрд╛рд░ рдХрд░реВрдпрд╛.\n",
|
||||
"\n",
|
||||
"> **Note** рд╣рд╛ рдХреЛрдб рдкреБрдиреНрд╣рд╛ рдкреВрд░реНрдг рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рдмрд░рд╛рдЪ рд╡реЗрд│ рдШреЗрддреЛ, рдкрд░рдВрддреБ рдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрддрд╛рдкрд░реНрдпрдВрдд рджрд┐рд╕рд▓реЗрд▓реА рд╕рд░реНрд╡рд╛рдзрд┐рдХ рдЕрдЪреВрдХрддрд╛ рдорд┐рд│рддреЗ. рддреНрдпрд╛рдореБрд│реЗ рдХрджрд╛рдЪрд┐рдд рдереЛрдбрд╛ рд╡реЗрд│ рдерд╛рдВрдмреВрди рдирд┐рдХрд╛рд▓ рдкрд╛рд╣рдгреЗ рдлрд╛рдпрджреЗрд╢реАрд░ рдард░реВ рд╢рдХрддреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"5044/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r5045/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, 128, mask_zero=True),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64,return_sequences=True)),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64)), \n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),\n",
|
||||
" validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЗрддрд░ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА RNNs\n",
|
||||
"\n",
|
||||
"рдЖрддреНрддрд╛рдкрд░реНрдпрдВрдд, рдЖрдкрдг RNNs рдЪрд╛ рд╡рд╛рдкрд░ рдордЬрдХреВрд░рд╛рдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдЪреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╕рд╛ рдХрд░рд╛рдпрдЪрд╛ рдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. рдкрдг рддреЗ рдпрд╛рдкреЗрдХреНрд╖рд╛ рдмрд░реЗрдЪ рдХрд╛рд░реНрдп рд╣рд╛рддрд╛рд│реВ рд╢рдХрддрд╛рдд, рдЬрд╕реЗ рдХреА рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА рдЖрдгрд┐ рднрд╛рд╖рд╛рдВрддрд░ тАФ рдЖрдкрдг рдкреБрдвреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рд╣реА рдХрд╛рд░реНрдпреЗ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдК.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"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.7.9"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "81351e61f619b432ff51010a4f993194",
|
||||
"translation_date": "2025-08-28T09:33:46+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNTF.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,414 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдЬрдирд░реЗрдЯрд┐рд╡ рдиреЗрдЯрд╡рд░реНрдХреНрд╕\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡реГрддреНрддреАрд╢реАрд▓ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ (RNNs) рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдЧреЗрдЯреЗрдб рд╕реЗрд▓ рдкреНрд░рдХрд╛рд░ рдЬрд╕реЗ рдХреА рд▓рд╛рдБрдЧ рд╢реЙрд░реНрдЯ рдЯрд░реНрдо рдореЗрдорд░реА рд╕реЗрд▓реНрд╕ (LSTMs) рдЖрдгрд┐ рдЧреЗрдЯреЗрдб рдкреБрдирд░рд╛рд╡реГрддреНрддреАрд╢реАрд▓ рдпреБрдирд┐рдЯреНрд╕ (GRUs) рдпрд╛рдВрдиреА рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓рд┐рдВрдЧрд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓реА рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗрдЪ рддреЗ рд╢рдмреНрджрд╛рдВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд╢рд┐рдХреВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рдкреБрдвреАрд▓ рд╢рдмреНрджрд╛рд╕рд╛рдареА рдЕрдВрджрд╛рдЬ рджреЗрдК рд╢рдХрддрд╛рдд. рдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ RNNs **рдЬрдирд░реЗрдЯрд┐рд╡ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА** рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдорд┐рд│рддреЗ, рдЬрд╕реЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА, рдорд╢реАрди рдЕрдиреБрд╡рд╛рдж, рдЖрдгрд┐ рдЕрдЧрджреА рдкреНрд░рддрд┐рдореЗрдЪреЗ рд╡рд░реНрдгрди рддрдпрд╛рд░ рдХрд░рдгреЗ.\n",
|
||||
"\n",
|
||||
"рдЖрдореНрд╣реА рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ RNN рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ, рдкреНрд░рддреНрдпреЗрдХ RNN рдпреБрдирд┐рдЯрдиреЗ рдкреБрдвреАрд▓ рд▓рдкрд╡рд▓реЗрд▓реЗ рд╕реНрдерд┐рддреА рдЖрдЙрдЯрдкреБрдЯ рдореНрд╣рдгреВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ. рддрдерд╛рдкрд┐, рдЖрдкрдг рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрд╢реАрд▓ рдпреБрдирд┐рдЯрд▓рд╛ рдЖрдгрдЦреА рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбреВ рд╢рдХрддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ **рдЕрдиреБрдХреНрд░рдо** рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рдпреЗрдИрд▓ (рдЬреЛ рдореВрд│ рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрдЗрддрдХрд╛рдЪ рдЕрд╕реЗрд▓). рдпрд╛рд╢рд┐рд╡рд╛рдп, рдЖрдкрдг рдЕрд╕реЗ RNN рдпреБрдирд┐рдЯреНрд╕ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ рдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЗрдирдкреБрдЯ рд╕реНрд╡реАрдХрд╛рд░рдд рдирд╛рд╣реАрдд, рдЖрдгрд┐ рдлрдХреНрдд рдХрд╛рд╣реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддреА рд╡реЗрдХреНрдЯрд░ рдШреЗрддрд╛рдд, рдЖрдгрд┐ рдирдВрддрд░ рдЖрдЙрдЯрдкреБрдЯреНрд╕рдЪрд╛ рдЕрдиреБрдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ, рдЖрдкрдг рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░рдгрд╛рд▒реНрдпрд╛ рд╕рд╛рдзреНрдпрд╛ рдЬрдирд░реЗрдЯрд┐рд╡ рдореЙрдбреЗрд▓реНрд╕рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ. рд╕реЛрдкреЗрдкрдгрд╛рд╕рд╛рдареА, рдЪрд▓рд╛ **рдХреЕрд░реЗрдХреНрдЯрд░-рд▓реЗрд╡реНрд╣рд▓ рдиреЗрдЯрд╡рд░реНрдХ** рддрдпрд╛рд░ рдХрд░реВ, рдЬреЗ рдЕрдХреНрд╖рд░рд╛рдиреБрд╕рд╛рд░ рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рддреЗ. рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╛рд╣реА рдордЬрдХреВрд░ рд╕рдВрдЧреНрд░рд╣ рдШреНрдпрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдЕрдХреНрд╖рд░рд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import numpy as np\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset,test_dataset,classes,vocab = load_dataset()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЕрдХреНрд╖рд░ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЕрдХреНрд╖рд░-рд╕реНрддрд░реАрдп рдЬрдирд░реЗрдЯрд┐рд╡реНрд╣ рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдордЬрдХреВрд░ рд╢рдмреНрджрд╛рдВрдРрд╡рдЬреА рд╕реНрд╡рддрдВрддреНрд░ рдЕрдХреНрд╖рд░рд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рд╣реЗ рд╡реЗрдЧрд│реНрдпрд╛ рдЯреЛрдХрдирд╛рдпрдЭрд░рдЪреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary size = 82\n",
|
||||
"Encoding of 'a' is 1\n",
|
||||
"Character with code 13 is c\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def char_tokenizer(words):\n",
|
||||
" return list(words) #[word for word in words]\n",
|
||||
"\n",
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" counter.update(char_tokenizer(line))\n",
|
||||
"vocab = torchtext.vocab.vocab(counter)\n",
|
||||
"\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(f\"Vocabulary size = {vocab_size}\")\n",
|
||||
"print(f\"Encoding of 'a' is {vocab.get_stoi()['a']}\")\n",
|
||||
"print(f\"Character with code 13 is {vocab.get_itos()[13]}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреАрд▓ рдордЬрдХреВрд░ рдХрд╕рд╛ рдПрдиреНрдХреЛрдб рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"tensor([ 0, 1, 2, 2, 3, 4, 5, 6, 3, 7, 8, 1, 9, 10, 3, 11, 2, 1,\n",
|
||||
" 12, 3, 7, 1, 13, 14, 3, 15, 16, 5, 17, 3, 5, 18, 8, 3, 7, 2,\n",
|
||||
" 1, 13, 14, 3, 19, 20, 8, 21, 5, 8, 9, 10, 22, 3, 20, 8, 21, 5,\n",
|
||||
" 8, 9, 10, 3, 23, 3, 4, 18, 17, 9, 5, 23, 10, 8, 2, 2, 8, 9,\n",
|
||||
" 10, 24, 3, 0, 1, 2, 2, 3, 4, 5, 9, 8, 8, 5, 25, 10, 3, 26,\n",
|
||||
" 12, 27, 16, 26, 2, 27, 16, 28, 29, 30, 1, 16, 26, 3, 17, 31, 3, 21,\n",
|
||||
" 2, 5, 9, 1, 23, 13, 32, 16, 27, 13, 10, 24, 3, 1, 9, 8, 3, 10,\n",
|
||||
" 8, 8, 27, 16, 28, 3, 28, 9, 8, 8, 16, 3, 1, 28, 1, 27, 16, 6])"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def enc(x):\n",
|
||||
" return torch.LongTensor(encode(x,voc=vocab,tokenizer=char_tokenizer))\n",
|
||||
"\n",
|
||||
"enc(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЬрдирд░реЗрдЯрд┐рд╡ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"RNNрд▓рд╛ рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреНрдпрд╛рдЪреА рдкрджреНрдзрдд рдкреБрдвреАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрд╛рд╡рд░, рдЖрдореНрд╣реА `nchars` рд▓рд╛рдВрдмреАрдЪрд╛ рдЕрдХреНрд╖рд░рд╛рдВрдЪрд╛ рдХреНрд░рдо рдШреЗрдК рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдЕрдХреНрд╖рд░рд╛рд╕рд╛рдареА рдкреБрдвреАрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЕрдХреНрд╖рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧреВ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдЦрд▒реНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдиреБрд╕рд╛рд░, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╛рд╣реА рд╡рд┐рд╢реЗрд╖ рдЕрдХреНрд╖рд░реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░рд╛рдпрдЪреА рдЕрд╕реВ рд╢рдХрддрд╛рдд, рдЬрд╕реЗ рдХреА *end-of-sequence* `<eos>`. рдЖрдкрд▓реНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдЕрдЦрдВрдб рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреНрдпрд╛рдпрдЪреЗ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рдорд╛рдЪреА рд▓рд╛рдВрдмреА `nchars` рдЯреЛрдХрди рдЗрддрдХреА рдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВ. рдкрд░рд┐рдгрд╛рдореА, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдгрд╛рдордзреНрдпреЗ `nchars` рдЗрдирдкреБрдЯреНрд╕ рдЖрдгрд┐ `nchars` рдЖрдЙрдЯрдкреБрдЯреНрд╕ (рдЬреЗ рдЗрдирдкреБрдЯ рдХреНрд░рдо рдПрдХрд╛ рдЪрд┐рдиреНрд╣рд╛рдиреЗ рдбрд╛рд╡реАрдХрдбреЗ рд╕рд░рдХрд╡рд▓реЗрд▓реЗ рдЕрд╕рддреАрд▓) рдЕрд╕рддреАрд▓. рдорд┐рдиреАрдмреЕрдЪрдордзреНрдпреЗ рдЕрд╢рд╛ рдЕрдиреЗрдХ рдХреНрд░рдорд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕реЗрд▓.\n",
|
||||
"\n",
|
||||
"рдорд┐рдиреАрдмреЕрдЪ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрджреНрдзрдд рдЕрд╢реА рдЕрд╕реЗрд▓ рдХреА рдкреНрд░рддреНрдпреЗрдХ `l` рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдмрд╛рддрдореА рдордЬрдХреБрд░рд╛рддреВрди рд╕рд░реНрд╡ рд╕рдВрднрд╛рд╡реНрдп рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдпреЛрдЬрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ (рдЕрд╢рд╛ `l-nchars` рд╕рдВрдпреЛрдЬрди рдЕрд╕рддреАрд▓). рд╣реЗ рдПрдХ рдорд┐рдиреАрдмреЕрдЪ рддрдпрд╛рд░ рдХрд░рддреАрд▓, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдгрд╛рд╡рд░ рдорд┐рдиреАрдмреЕрдЪрдЪрд╛ рдЖрдХрд╛рд░ рд╡реЗрдЧрд│рд╛ рдЕрд╕реЗрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(tensor([[ 0, 1, 2, ..., 28, 29, 30],\n",
|
||||
" [ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" ...,\n",
|
||||
" [20, 8, 21, ..., 1, 28, 1],\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16]]),\n",
|
||||
" tensor([[ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" [ 2, 3, 4, ..., 1, 16, 26],\n",
|
||||
" ...,\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16],\n",
|
||||
" [ 5, 8, 9, ..., 27, 16, 6]]))"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"nchars = 100\n",
|
||||
"\n",
|
||||
"def get_batch(s,nchars=nchars):\n",
|
||||
" ins = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" outs = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" for i in range(len(s)-nchars):\n",
|
||||
" ins[i] = enc(s[i:i+nchars])\n",
|
||||
" outs[i] = enc(s[i+1:i+nchars+1])\n",
|
||||
" return ins,outs\n",
|
||||
"\n",
|
||||
"get_batch(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЬрдирд░реЗрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХрдЪреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдпрд╛. рд╣реЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд╕реЗрд▓рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрд╕реВ рд╢рдХрддреЗ, рдЬреЗ рдЖрдкрдг рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рд╣реЛрддреА (рд╕рд╛рдзреЗ, LSTM рдХрд┐рдВрд╡рд╛ GRU). рдЖрдкрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрдг LSTM рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд.\n",
|
||||
"\n",
|
||||
"рдХрд╛рд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдЕрдХреНрд╖рд░реЗ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддрдВ, рдЖрдгрд┐ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдЦреВрдк рд▓рд╣рд╛рди рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА, рд╡рди-рд╣реЙрдЯ-рдПрдирдХреЛрдбреЗрдб рдЗрдирдкреБрдЯ рдереЗрдЯ LSTM рд╕реЗрд▓рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдорд╛рддреНрд░, рдХрд╛рд░рдг рдЖрдкрдг рдЕрдХреНрд╖рд░рд╛рдВрдЪреЗ рдХреНрд░рдорд╛рдВрдХ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рджреЗрддреЛ, рддреНрдпрд╛рдореБрд│реЗ LSTM рд▓рд╛ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреНрдпрд╛рдВрдирд╛ рд╡рди-рд╣реЙрдЯ-рдПрдирдХреЛрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ `forward` рдкрд╛рд╕ рджрд░рдореНрдпрд╛рди `one_hot` рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░реВрди рдХреЗрд▓реЗ рдЬрд╛рддреЗ. рдЖрдЙрдЯрдкреБрдЯ рдПрдирдХреЛрдбрд░ рдПрдХ рд░реЗрд╖реАрдп рд▓реЗрдпрд░ рдЕрд╕реЗрд▓, рдЬреЛ рд▓рдкрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрд▓рд╛ рд╡рди-рд╣реЙрдЯ-рдПрдирдХреЛрдбреЗрдб рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реЗрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMGenerator(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, hidden_dim):\n",
|
||||
" super().__init__()\n",
|
||||
" self.rnn = torch.nn.LSTM(vocab_size,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, vocab_size)\n",
|
||||
"\n",
|
||||
" def forward(self, x, s=None):\n",
|
||||
" x = torch.nn.functional.one_hot(x,vocab_size).to(torch.float32)\n",
|
||||
" x,s = self.rnn(x,s)\n",
|
||||
" return self.fc(x),s"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди, рдЖрдореНрд╣рд╛рд▓рд╛ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдордЬрдХреВрд░ рдирдореБрдирд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдорд┐рд│рд╡рд╛рдпрдЪрд╛ рдЖрд╣реЗ. рдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `generate` рдирд╛рд╡рд╛рдЪреА рдПрдХ рдлрдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ, рдЬреА рд╕реБрд░реБрд╡рд╛рддреАрдЪреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ `start` рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдКрди, рд▓рд╛рдВрдмреА `size` рдЕрд╕рд▓реЗрд▓рд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдпрд╛рд░ рдХрд░реЗрд▓.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдХрд╛рд░реНрдп рдкреБрдвреАрд▓рдкреНрд░рдорд╛рдгреЗ рдЪрд╛рд▓рддреЗ. рдкреНрд░рдердо, рдЖрдкрдг рд╕рдВрдкреВрд░реНрдг `start` рд╕реНрдЯреНрд░рд┐рдВрдЧ рдиреЗрдЯрд╡рд░реНрдХрдордзреВрди рдкрд╛рд╕ рдХрд░реВ, рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддреА `s` рдЖрдгрд┐ рдкреБрдвреАрд▓ рдЕрдВрджрд╛рдЬрд┐рдд рдЕрдХреНрд╖рд░ `out` рдкреНрд░рд╛рдкреНрдд рдХрд░реВ. рдХрд╛рд░рдг `out` рд╣реЗ рдПрдХ-рд╣реЙрдЯ рдПрдиреНрдХреЛрдбреЗрдб рдЕрд╕рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА `argmax` рд╡рд╛рдкрд░реВрди рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рддреАрд▓ рдЕрдХреНрд╖рд░ `nc` рдЪрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдХ рдорд┐рд│рд╡рддреЛ, рдЖрдгрд┐ `itos` рд╡рд╛рдкрд░реВрди рдкреНрд░рддреНрдпрдХреНрд╖ рдЕрдХреНрд╖рд░ рд╢реЛрдзрддреЛ рд╡ рддреЗ `chars` рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрдд рдЬреЛрдбрддреЛ. рдЖрд╡рд╢реНрдпрдХ рдЕрдХреНрд╖рд░рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рд╣реЗ рдПрдХ рдЕрдХреНрд╖рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп `size` рд╡реЗрд│рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def generate(net,size=100,start='today '):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" nc = torch.argmax(out[0][-1])\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдХрд░реВрдпрд╛! рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реВрдк рдЖрдкрд▓реНрдпрд╛ рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдкреНрд░рдорд╛рдгреЗрдЪ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЕрдЪреВрдХрддреЗрдРрд╡рдЬреА рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ 1000 epochs рдирдВрддрд░ рдирдореБрдирд╛ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓рд╛ рдордЬрдХреВрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"рдЧрдорд╛рд╡рд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдХрд╕рд╛ рдореЛрдЬрд╛рдпрдЪрд╛ рдпрд╛рдХрдбреЗ рд╡рд┐рд╢реЗрд╖ рд▓рдХреНрд╖ рджреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХ-рд╣реЙрдЯ-рдПрдирдХреЛрдбреЗрдб рдЖрдЙрдЯрдкреБрдЯ `out` рдЖрдгрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдордЬрдХреВрд░ `text_out` рджрд┐рд▓рд╛ рдЬрд╛рддреЛ, рдЬреЛ рдХреЕрд░реЗрдХреНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕рдЪреА рдпрд╛рджреА рдЖрд╣реЗ, рддреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЧрдорд╛рд╡рд▓реЗрд▓рд╛ рдбреЗрдЯрд╛ рдореЛрдЬрд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ. рд╕реБрджреИрд╡рд╛рдиреЗ, `cross_entropy` рдлрдВрдХреНрд╢рдирд▓рд╛ рдкрд╣рд┐рд▓рд╛ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдореНрд╣рдгреВрди рдЕрдирдиреЙрд░реНрдорд▓рд╛рдЗрдЬреНрдб рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ рдЖрдгрд┐ рджреБрд╕рд░рд╛ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдореНрд╣рдгреВрди рд╡рд░реНрдЧ рдХреНрд░рдорд╛рдВрдХ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЕрд╕рддреЛ, рдЬреЗ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЖрд╣реЗ. рд╣реЗ рдорд┐рдиреАрдмреЕрдЪ рдЖрдХрд╛рд░рд╛рд╡рд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╕рд░рд╛рд╕рд░реА рджреЗрдЦреАрд▓ рдХрд░рддреЗ.\n",
|
||||
"\n",
|
||||
"рдЖрдореНрд╣реА `samples_to_train` рдирдореБрдиреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдорд░реНрдпрд╛рджрд┐рдд рдХрд░рддреЛ, рдЬреЗрдгреЗрдХрд░реВрди рдЬрд╛рд╕реНрдд рд╡реЗрд│ рд▓рд╛рдЧрдгрд╛рд░ рдирд╛рд╣реА. рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЛ рдЖрдгрд┐ рджреАрд░реНрдШ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛, рдХрджрд╛рдЪрд┐рдд рдЕрдиреЗрдХ epochs рд╕рд╛рдареА (рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдХреЛрдбрднреЛрд╡рддреА рдЖрдгрдЦреА рдПрдХ рд▓реВрдк рддрдпрд╛рд░ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓).\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Current loss = 4.398899078369141\n",
|
||||
"today sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr s\n",
|
||||
"Current loss = 2.161320447921753\n",
|
||||
"today and to the tor to to the tor to to the tor to to the tor to to the tor to to the tor to to the tor t\n",
|
||||
"Current loss = 1.6722588539123535\n",
|
||||
"today and the court to the could to the could to the could to the could to the could to the could to the c\n",
|
||||
"Current loss = 2.423795223236084\n",
|
||||
"today and a second to the conternation of the conternation of the conternation of the conternation of the \n",
|
||||
"Current loss = 1.702607274055481\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.692358136177063\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.9722288846969604\n",
|
||||
"today and the control the control the control the control the control the control the control the control \n",
|
||||
"Current loss = 1.8705692291259766\n",
|
||||
"today and the second to the second to the second to the second to the second to the second to the second t\n",
|
||||
"Current loss = 1.7626899480819702\n",
|
||||
"today and a security and a security and a security and a security and a security and a security and a secu\n",
|
||||
"Current loss = 1.5574463605880737\n",
|
||||
"today and the company and the company and the company and the company and the company and the company and \n",
|
||||
"Current loss = 1.5620026588439941\n",
|
||||
"today and the be that the be the be that the be the be that the be the be that the be the be that the be t\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMGenerator(vocab_size,64).to(device)\n",
|
||||
"\n",
|
||||
"samples_to_train = 10000\n",
|
||||
"optimizer = torch.optim.Adam(net.parameters(),0.01)\n",
|
||||
"loss_fn = torch.nn.CrossEntropyLoss()\n",
|
||||
"net.train()\n",
|
||||
"for i,x in enumerate(train_dataset):\n",
|
||||
" # x[0] is class label, x[1] is text\n",
|
||||
" if len(x[1])-nchars<10:\n",
|
||||
" continue\n",
|
||||
" samples_to_train-=1\n",
|
||||
" if not samples_to_train: break\n",
|
||||
" text_in, text_out = get_batch(x[1])\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" out,s = net(text_in)\n",
|
||||
" loss = torch.nn.functional.cross_entropy(out.view(-1,vocab_size),text_out.flatten()) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" if i%1000==0:\n",
|
||||
" print(f\"Current loss = {loss.item()}\")\n",
|
||||
" print(generate(net))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣реЗ рдЙрджрд╛рд╣рд░рдг рдЖрдзреАрдЪ рдЪрд╛рдВрдЧрд▓рд╛ рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рддреЗ, рдкрд░рдВрддреБ рдпрд╛рдордзреНрдпреЗ рдХрд╛рд╣реА рдкрджреНрдзрддреАрдВрдиреА рдЖрдгрдЦреА рд╕реБрдзрд╛рд░рдгрд╛ рдХрд░рддрд╛ рдпреЗрдК рд╢рдХрддреЗ:\n",
|
||||
"\n",
|
||||
"* **рдмреЗрд╣рддрд░ рдорд┐рдиреАрдмреЕрдЪ рдЬрдирд░реЗрд╢рди**. рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рдбреЗрдЯрд╛ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдЖрдореНрд╣реА рдПрдХрд╛ рдирдореБрдиреНрдпрд╛рддреВрди рдПрдХ рдорд┐рдиреАрдмреЕрдЪ рддрдпрд╛рд░ рдХреЗрд▓рд╛. рд╣реЗ рдЖрджрд░реНрд╢ рдирд╛рд╣реА, рдХрд╛рд░рдг рдорд┐рдиреАрдмреЕрдЪреЗрд╕ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреЗ рдЕрд╕рддрд╛рдд, рдЖрдгрд┐ рдХрд╛рд╣реА рд╡реЗрд│рд╛ рддреЗ рддрдпрд╛рд░рд╣реА рд╣реЛрдК рд╢рдХрдд рдирд╛рд╣реАрдд, рдХрд╛рд░рдг рдордЬрдХреВрд░ `nchars` рдкреЗрдХреНрд╖рд╛ рд▓рд╣рд╛рди рдЕрд╕рддреЛ. рддрд╕реЗрдЪ, рд▓рд╣рд╛рди рдорд┐рдиреАрдмреЕрдЪреЗрд╕ GPU рдкреБрд░реЗрд╢рд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд▓реЛрдб рдХрд░рдд рдирд╛рд╣реАрдд. рд╕рд░реНрд╡ рдирдореБрдиреНрдпрд╛рдВрдордзреВрди рдПрдХ рдореЛрдард╛ рдордЬрдХреВрд░ рддреБрдХрдбрд╛ рдШреЗрдгреЗ, рдирдВрддрд░ рд╕рд░реНрд╡ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдб рддрдпрд╛рд░ рдХрд░рдгреЗ, рддреНрдпрд╛рдВрдирд╛ рд╢рдлрд▓ рдХрд░рдгреЗ, рдЖрдгрд┐ рд╕рдорд╛рди рдЖрдХрд╛рд░рд╛рдЪреЗ рдорд┐рдиреАрдмреЕрдЪреЗрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рд╢рд╣рд╛рдгрдкрдгрд╛рдЪреЗ рдард░реЗрд▓.\n",
|
||||
"\n",
|
||||
"* **рдорд▓реНрдЯреАрд▓рд╛рдпрд░ LSTM**. LSTM рд╕реЗрд▓реНрд╕рдЪреНрдпрд╛ 2 рдХрд┐рдВрд╡рд╛ 3 рд╕реНрддрд░рд╛рдВрдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреЗ рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ. рдЬрд╕реЗ рдЖрдкрдг рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдирдореВрдж рдХреЗрд▓реЗ, LSTM рдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдордЬрдХреВрд░рд╛рддреВрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЕрдЯрд░реНрди рдХрд╛рдврддреЛ, рдЖрдгрд┐ рдХреЕрд░реЗрдХреНрдЯрд░-рд▓реЗрд╡реНрд╣рд▓ рдЬрдирд░реЗрдЯрд░рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдЖрдкрдг рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВ рд╢рдХрддреЛ рдХреА LSTM рдЪрд╛ рдЦрд╛рд▓рдЪрд╛ рд╕реНрддрд░ рдЕрдХреНрд╖рд░рд╕рдореВрд╣ (syllables) рдХрд╛рдврдгреНрдпрд╛рд╕ рдЬрдмрд╛рдмрджрд╛рд░ рдЕрд╕реЗрд▓, рддрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рд╢рдмреНрдж рдЖрдгрд┐ рд╢рдмреНрджрд╕рдореВрд╣ рдХрд╛рдврддреАрд▓. рд╣реЗ LSTM рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ рдирдВрдмрд░-рдСрдл-рд▓реЗрдпрд░реНрд╕ рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реВрди рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрддрд╛ рдпреЗрддреЗ.\n",
|
||||
"\n",
|
||||
"* рддреБрдореНрд╣реА **GRU рдпреБрдирд┐рдЯреНрд╕** рд╡рд╛рдкрд░реВрди рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдХреЛрдгрддреЗ рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рд╣реЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛, рддрд╕реЗрдЪ **рд╡рд┐рд╡рд┐рдз рд╣рд┐рдбрди рд▓реЗрдпрд░ рд╕рд╛рдЗрдЬреЗрд╕** рд╡рд╛рдкрд░реВрди рдкреНрд░рдпреЛрдЧ рдХрд░реВ рд╢рдХрддрд╛. рдЦреВрдк рдореЛрдард╛ рд╣рд┐рдбрди рд▓реЗрдпрд░ рдУрд╡реНрд╣рд░рдлрд┐рдЯрд┐рдВрдЧ рд╣реЛрдК рд╢рдХрддреЛ (рдЙрджрд╛. рдиреЗрдЯрд╡рд░реНрдХ рдЕрдЪреВрдХ рдордЬрдХреВрд░ рд╢рд┐рдХреЗрд▓), рдЖрдгрд┐ рд▓рд╣рд╛рди рдЖрдХрд╛рд░ рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдК рд╢рдХрдд рдирд╛рд╣реА.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдордК рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА рдЖрдгрд┐ рддрд╛рдкрдорд╛рди\n",
|
||||
"\n",
|
||||
"`generate` рдЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рд╡реНрдпрд╛рдЦреНрдпреЗрдд, рдЖрдореНрд╣реА рдиреЗрд╣рдореА рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪрд╛ рд╡рд░реНрдг рдкреБрдвреАрд▓ рд╡рд░реНрдг рдореНрд╣рдгреВрди рдШреЗрдд рд╣реЛрддреЛ, рдЬреЛ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдордЬрдХреВрд░рд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рдд рд╣реЛрддрд╛. рдпрд╛рдореБрд│реЗ рдордЬрдХреВрд░ рдЕрдиреЗрдХрджрд╛ рддреНрдпрд╛рдЪ рд╡рд░реНрдг рдЕрдиреБрдХреНрд░рдорд╛рдВрдордзреНрдпреЗ \"рдлрд┐рд░рдд\" рд░рд╛рд╣рд╛рдпрдЪрд╛, рдЬрд╕реЗ рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"рддрдерд╛рдкрд┐, рдЬрд░ рдЖрдкрдг рдкреБрдвреАрд▓ рд╡рд░реНрдгрд╛рд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рдкрд╛рд╣рд┐рд▓реЗ, рддрд░ рдЕрд╕реЗ рд╣реЛрдК рд╢рдХрддреЗ рдХреА рдХрд╛рд╣реА рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡реНрдпрддрд╛рдВрдордзреАрд▓ рдлрд░рдХ рдлрд╛рд░рд╕рд╛ рдореЛрдард╛ рдирд╕рддреЛ, рдЙрджрд╛. рдПрдХрд╛ рд╡рд░реНрдгрд╛рдЪреА рд╕рдВрднрд╛рд╡реНрдпрддрд╛ 0.2 рдЕрд╕реВ рд╢рдХрддреЗ, рддрд░ рджреБрд╕рд▒реНрдпрд╛рдЪреА 0.19, рдЗрддреНрдпрд╛рджреА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рдЖрдкрдг '*play*' рдЕрдиреБрдХреНрд░рдорд╛рдд рдкреБрдвреАрд▓ рд╡рд░реНрдг рд╢реЛрдзрдд рдЕрд╕реВ, рддрд░ рдкреБрдвреАрд▓ рд╡рд░реНрдг рдЬрд╛рдЧрд╛ рдХрд┐рдВрд╡рд╛ **e** (рдЬрд╕реЗ *player* рдпрд╛ рд╢рдмреНрджрд╛рдд) рдЕрд╕реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"рдпрд╛рдореБрд│реЗ рдЕрд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврддрд╛ рдпреЗрддреЗ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪрд╛ рд╡рд░реНрдг рдирд┐рд╡рдбрдгреЗ рдиреЗрд╣рдореАрдЪ \"рдпреЛрдЧреНрдп\" рдирд╕рддреЗ, рдХрд╛рд░рдг рджреБрд╕рд▒реНрдпрд╛ рдХреНрд░рдорд╛рдВрдХрд╛рдЪреНрдпрд╛ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪрд╛ рд╡рд░реНрдг рдирд┐рд╡рдбрд▓реНрдпрд╛рдиреЗрд╣реА рдЕрд░реНрдердкреВрд░реНрдг рдордЬрдХреВрд░ рддрдпрд╛рд░ рд╣реЛрдК рд╢рдХрддреЛ. рдиреЗрдЯрд╡рд░реНрдХрдиреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдгрд╛рддреВрди рд╡рд░реНрдг **рдирдореБрдиреНрдпрд╛рдиреЗ** рдирд┐рд╡рдбрдгреЗ рдЕрдзрд┐рдХ рд╢рд╣рд╛рдгрдкрдгрд╛рдЪреЗ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдирдореБрдирд╛ рдирд┐рд╡рдбрдгреЗ `multinomial` рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдХрд░рддрд╛ рдпреЗрддреЗ, рдЬреЗ рддрдерд╛рдХрдерд┐рдд **multinomial distribution** рд▓рд╛рдЧреВ рдХрд░рддреЗ. рдЦрд╛рд▓реА рджрд┐рд▓реЗрд▓реА рдлрдВрдХреНрд╢рди рд╣реА **рдордК** рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА рд▓рд╛рдЧреВ рдХрд░рддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today and a company and complete an all the land the restrational the as a security and has provers the pay to and a report and the computer in the stand has filities and working the law the stations for a company and with the company and the final the first company and refight of the state and and workin\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today he oniis its first to Aus bomblaties the marmation a to manan boogot that pirate assaid a relaid their that goverfin the the Cappets Ecrotional Assonia Cition targets it annight the w scyments Blamity #39;s TVeer Diercheg Reserals fran envyuil that of ster said access what succers of Dour-provelith\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today holy they a 11 will meda a toket subsuaties, engins for Chanos, they's has stainger past to opening orital his thempting new Nattona was al innerforder advan-than #36;s night year his religuled talitatian what the but with Wednesday to Justment will wemen of Mark CCC Camp as Timed Nae wome a leaders\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today gpone 2.5 fech atcusion poor cocles toparsdorM.cht Line Pamage put 43 his calt lowed to the book, that has authh-the silia rruch ailing to'ory andhes beutirsimi- Aefffive heading offil an auf eacklets is charged evis, Gunymy oy) Mony has it after-sloythyor loveId out filme, the Natabl -Najuntaxiggs \n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today plary, P.slan chly\\401 mardregationly #39;t 8.1Mide) closes ,filtcon alfly playin roven!\\grea.-QFBEP: Iss onfarchQ/itilia CCf Zivesigntwasta orce.-Peul-aw.uicrin of fuglinfsut aftaningwo, MIEX awayew Aice Woiduar Corvagiugge oppo esig ThusBratourid canthly-RyI.co lagitems\\eexciaishes.conBabntusmor I\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(net,size=100,start='today ',temperature=1.0):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" #nc = torch.argmax(out[0][-1])\n",
|
||||
" out_dist = out[0][-1].div(temperature).exp()\n",
|
||||
" nc = torch.multinomial(out_dist,1)[0]\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"--- Temperature = {i}\\n{generate_soft(net,size=300,start='Today ',temperature=i)}\\n\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА **temperature** рдирд╛рд╡рд╛рдЪрд╛ рдЖрдгрдЦреА рдПрдХ рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреЛ рдЖрдкрдг рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡реНрдпрддреЗрд▓рд╛ рдХрд┐рддреА рдХрдареЛрд░рдкрдгреЗ рдЕрдиреБрд╕рд░рд╛рд╡реЗ рд╣реЗ рджрд░реНрд╢рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. рдЬрд░ temperature 1.0 рдЕрд╕реЗрд▓, рддрд░ рдЖрдореНрд╣реА рдпреЛрдЧреНрдп рдорд▓реНрдЯрд┐рдиреЙрдорд┐рдпрд▓ рд╕реЕрдореНрдкрд▓рд┐рдВрдЧ рдХрд░рддреЛ, рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ temperature рдЕрдирдВрддрд╛рдХрдбреЗ рдЬрд╛рддреЗ - рддреЗрд╡реНрд╣рд╛ рд╕рд░реНрд╡ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╕рдорд╛рди рд╣реЛрддрд╛рдд, рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреБрдвреАрд▓ рдЕрдХреНрд╖рд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдкрдгреЗ рдирд┐рд╡рдбрддреЛ. рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддреЛ рдХреА рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг temperature рдЦреВрдк рдЬрд╛рд╕реНрдд рд╡рд╛рдврд╡рддреЛ рддреЗрд╡реНрд╣рд╛ рдордЬрдХреВрд░ рдЕрд░реНрдерд╣реАрди рд╣реЛрддреЛ, рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рддреЛ 0 рдЪреНрдпрд╛ рдЬрд╡рд│ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рддреЛ \"рд╕рд╛рдпрдХрд▓реНрдб\" рдХрдареЛрд░-рдирд┐рд░реНрдорд┐рдд рдордЬрдХреВрд░рд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "7673cd150d96c74c6d6011460094efb4",
|
||||
"translation_date": "2025-08-28T09:15:24+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,492 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдЬрдирд░реЗрдЯрд┐рд╡ рдиреЗрдЯрд╡рд░реНрдХреНрд╕\n",
|
||||
"\n",
|
||||
"рд░реАрдХрд░рдВрдЯ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ (RNNs) рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рдЧреЗрдЯреЗрдб рд╕реЗрд▓ рдкреНрд░рдХрд╛рд░ рдЬрд╕реЗ рдХреА рд▓рд╛рдБрдЧ рд╢реЙрд░реНрдЯ рдЯрд░реНрдо рдореЗрдорд░реА рд╕реЗрд▓реНрд╕ (LSTMs) рдЖрдгрд┐ рдЧреЗрдЯреЗрдб рд░реАрдХрд░рдВрдЯ рдпреБрдирд┐рдЯреНрд╕ (GRUs) рдпрд╛рдВрдиреА рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓рд┐рдВрдЧрд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓реА рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗрдЪ рддреЗ рд╢рдмреНрджрд╛рдВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд╢рд┐рдХреВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рдкреБрдвреАрд▓ рд╢рдмреНрджрд╛рд╕рд╛рдареА рдЕрдВрджрд╛рдЬ рджреЗрдК рд╢рдХрддрд╛рдд. рдпрд╛рдореБрд│реЗ RNNs рдЪрд╛ рд╡рд╛рдкрд░ **рдЬрдирд░реЗрдЯрд┐рд╡ рдЯрд╛рд╕реНрдХреНрд╕** рд╕рд╛рдареА рдХрд░рддрд╛ рдпреЗрддреЛ, рдЬрд╕реЗ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА, рдорд╢реАрди рдЕрдиреБрд╡рд╛рдж, рдЖрдгрд┐ рдЕрдЧрджреА рдкреНрд░рддрд┐рдореЗрдЪреЗ рдХреЕрдкреНрд╢рдирд┐рдВрдЧ.\n",
|
||||
"\n",
|
||||
"рдЖрдореНрд╣реА рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЪрд░реНрдЪрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ RNN рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ, рдкреНрд░рддреНрдпреЗрдХ RNN рдпреБрдирд┐рдЯрдиреЗ рдкреБрдвреАрд▓ рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯ рдЖрдЙрдЯрдкреБрдЯ рдореНрд╣рдгреВрди рддрдпрд╛рд░ рдХреЗрд▓реА. рдкрд░рдВрддреБ, рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рд░реАрдХрд░рдВрдЯ рдпреБрдирд┐рдЯрд▓рд╛ рдЖрдгрдЦреА рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбреВ рд╢рдХрддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдПрдХ **рдЕрдиреБрдХреНрд░рдо** рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рдпреЗрдИрд▓ (рдЬреЛ рдореВрд│ рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд▓рд╛рдВрдмреАрдЗрддрдХрд╛рдЪ рдЕрд╕реЗрд▓). рдпрд╛рд╢рд┐рд╡рд╛рдп, рдЖрдореНрд╣реА рдЕрд╕реЗ RNN рдпреБрдирд┐рдЯреНрд╕ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ рдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЗрдирдкреБрдЯ рд╕реНрд╡реАрдХрд╛рд░рдд рдирд╛рд╣реАрдд, рдлрдХреНрдд рдХрд╛рд╣реА рд╕реБрд░реБрд╡рд╛рддреАрдЪреЗ рд╕реНрдЯреЗрдЯ рд╡реЗрдХреНрдЯрд░ рдШреЗрддрд╛рдд рдЖрдгрд┐ рдирдВрддрд░ рдЖрдЙрдЯрдкреБрдЯреНрд╕рдЪрд╛ рдЕрдиреБрдХреНрд░рдо рддрдпрд╛рд░ рдХрд░рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ, рдЖрдкрдг рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░рдгрд╛рд▒реНрдпрд╛ рд╕рд╛рдзреНрдпрд╛ рдЬрдирд░реЗрдЯрд┐рд╡ рдореЙрдбреЗрд▓реНрд╕рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ. рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрд╕рд╛рдареА, рдЖрдкрдг **рдХреЕрд░реЗрдХреНрдЯрд░-рд▓реЗрд╡реНрд╣рд▓ рдиреЗрдЯрд╡рд░реНрдХ** рддрдпрд╛рд░ рдХрд░реВрдпрд╛, рдЬреЗ рдЕрдХреНрд╖рд░рд╛рдиреБрд╕рд╛рд░ рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рддреЗ. рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХрд╛рд╣реА рдордЬрдХреВрд░ рдХреЙрд░реНрдкрд╕ рдШреНрдпрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдЕрдХреНрд╖рд░рд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЕрдХреНрд╖рд░ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЕрдХреНрд╖рд░-рд╕реНрддрд░реАрдп рдЬрдирд░реЗрдЯрд┐рд╡реНрд╣ рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдордЬрдХреВрд░ рд╢рдмреНрджрд╛рдВрдРрд╡рдЬреА рд╕реНрд╡рддрдВрддреНрд░ рдЕрдХреНрд╖рд░рд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. `TextVectorization` рд▓реЗрдпрд░ рдЬреНрдпрд╛рдЪрд╛ рдЖрдкрдг рдЖрдзреА рд╡рд╛рдкрд░ рдХрд░рдд рд╣реЛрддреЛ, рддреЛ рд╣реЗ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рджреЛрди рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд:\n",
|
||||
"\n",
|
||||
"* рдордЬрдХреВрд░ рд╕реНрд╡рддрдГ рд▓реЛрдб рдХрд░рд╛ рдЖрдгрд┐ 'рд╣рд╛рддрд╛рдиреЗ' рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рди рдХрд░рд╛, рдЬрд╕реЗ [рдпрд╛ рдЕрдзрд┐рдХреГрдд Keras рдЙрджрд╛рд╣рд░рдгрд╛рдд](https://keras.io/examples/generative/lstm_character_level_text_generation/) рджрд┐рд▓реЗ рдЖрд╣реЗ.\n",
|
||||
"* рдЕрдХреНрд╖рд░-рд╕реНрддрд░реАрдп рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рдирд╕рд╛рдареА `Tokenizer` рд╡рд░реНрдЧрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рд╛.\n",
|
||||
"\n",
|
||||
"рдЖрдореНрд╣реА рджреБрд╕рд░рд╛ рдкрд░реНрдпрд╛рдп рдирд┐рд╡рдбрдгрд╛рд░ рдЖрд╣реЛрдд. `Tokenizer` рдЪрд╛ рд╡рд╛рдкрд░ рд╢рдмреНрджрд╛рдВрдордзреНрдпреЗ рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рдирд╕рд╛рдареА рджреЗрдЦреАрд▓ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рддреНрдпрд╛рдореБрд│реЗ рдЕрдХреНрд╖рд░-рд╕реНрддрд░реАрдп рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рдирдкрд╛рд╕реВрди рд╢рдмреНрдж-рд╕реНрддрд░реАрдп рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рдирдХрдбреЗ рд╕рд╣рдЬрдкрдгреЗ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рдпреЗрдИрд▓.\n",
|
||||
"\n",
|
||||
"рдЕрдХреНрд╖рд░-рд╕реНрддрд░реАрдп рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ `char_level=True` рд╣рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"tokenizer = keras.preprocessing.text.Tokenizer(char_level=True,lower=False)\n",
|
||||
"tokenizer.fit_on_texts([x['title'].numpy().decode('utf-8') for x in ds_train])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣рд╛рд▓рд╛ **рдХреНрд░рдорд╛рдЪрд╛ рд╢реЗрд╡рдЯ** рджрд░реНрд╢рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЯреЛрдХрди рд╡рд╛рдкрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдЬреНрдпрд╛рд▓рд╛ рдЖрдореНрд╣реА `<eos>` рдореНрд╣рдгреВ. рдЪрд▓рд╛ рддреЗ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдд рд╣рд╛рддрд╛рдиреЗ рдЬреЛрдбреВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"eos_token = len(tokenizer.word_index)+1\n",
|
||||
"tokenizer.word_index['<eos>'] = eos_token\n",
|
||||
"\n",
|
||||
"vocab_size = eos_token + 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[[48, 2, 10, 10, 5, 44, 1, 25, 5, 8, 10, 13, 78]]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.texts_to_sequences(['Hello, world!'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╢реАрд░реНрд╖рдХреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдирд░реЗрдЯрд┐рд╡реНрд╣ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг RNN рдХрд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгрд╛рд░ рдЖрд╣реЛрдд рдЬреЗрдгреЗрдХрд░реВрди рддреА рдмрд╛рддрдореНрдпрд╛рдВрдЪреА рд╢реАрд░реНрд╖рдХреЗ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХреЗрд▓, рддреЗ рдкреБрдвреАрд▓рдкреНрд░рдорд╛рдгреЗ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░, рдЖрдкрдг рдПрдХ рд╢реАрд░реНрд╖рдХ рдШреЗрдК, рдЬреЗ RNN рдордзреНрдпреЗ рджрд┐рд▓реЗ рдЬрд╛рдИрд▓, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдЕрдХреНрд╖рд░рд╛рд╕рд╛рдареА рдЖрдкрдг рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ рдкреБрдвреАрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЕрдХреНрд╖рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧреВ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдЖрдордЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ `<eos>` рдЯреЛрдХрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╕рд╛рдВрдЧреВ.\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг рдпреЗрдереЗ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЬрдирд░реЗрдЯрд┐рд╡реНрд╣ RNN рдЖрдгрд┐ рдЗрддрд░ RNN рдпрд╛рдордзреАрд▓ рдореБрдЦреНрдп рдлрд░рдХ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдЖрдкрдг RNN рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рдЪрд╛ рдЖрдЙрдЯрдкреБрдЯ рдШреЗрдК, рдХреЗрд╡рд│ рдЕрдВрддрд┐рдо рд╕реЗрд▓рдЪрд╛ рдирд╛рд╣реА. рд╣реЗ RNN рд╕реЗрд▓рд╕рд╛рдареА `return_sequences` рдкреЕрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрди рд╕рд╛рдзреНрдп рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"рдореНрд╣рдгреВрди, рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди, рдиреЗрдЯрд╡рд░реНрдХрд╕рд╛рдареА рдЗрдирдкреБрдЯ рдХрд╛рд╣реА рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдХреНрд╖рд░рд╛рдВрдЪрд╛ рдЕрдиреБрдХреНрд░рдо рдЕрд╕реЗрд▓, рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦреАрд▓ рддреНрдпрд╛рдЪ рд▓рд╛рдВрдмреАрдЪрд╛ рдЕрдиреБрдХреНрд░рдо рдЕрд╕реЗрд▓, рдкрд░рдВрддреБ рдПрдХрд╛ рдШрдЯрдХрд╛рдиреЗ рд╢рд┐рдлреНрдЯ рдХреЗрд▓реЗрд▓рд╛ рдЖрдгрд┐ `<eos>` рдиреЗ рд╕рдорд╛рдкреНрдд рдХреЗрд▓реЗрд▓рд╛ рдЕрд╕реЗрд▓. рдорд┐рдиреАрдмреЕрдЪрдордзреНрдпреЗ рдЕрд╢рд╛ рдЕрдиреЗрдХ рдЕрдиреБрдХреНрд░рдорд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕реЗрд▓, рдЖрдгрд┐ рд╕рд░реНрд╡ рдЕрдиреБрдХреНрд░рдо рдПрдХрд╕рдВрдз рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ **padding** рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдЕрд╕реЗрд▓.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛, рдбреЗрдЯрд╛рд╕реЗрдЯрд╕рд╛рдареА рд░реВрдкрд╛рдВрддрд░ рдХрд░рдгрд╛рд▒реНрдпрд╛ рдлрдВрдХреНрд╢рдиреНрд╕ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдорд┐рдиреАрдмреЕрдЪ рд╕реНрддрд░рд╛рд╡рд░ рдЕрдиреБрдХреНрд░рдо padding рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ, рдЖрдкрдг рдкреНрд░рдердо `.batch()` рдХреЙрд▓ рдХрд░реВрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдмреЕрдЪ рдХрд░реВ, рдЖрдгрд┐ рдирдВрддрд░ `map` рд╡рд╛рдкрд░реВрди рддреНрдпрд╛рдЪреЗ рд░реВрдкрд╛рдВрддрд░ рдХрд░реВ. рддреНрдпрд╛рдореБрд│реЗ, рд░реВрдкрд╛рдВрддрд░рдг рдлрдВрдХреНрд╢рди рд╕рдВрдкреВрд░реНрдг рдорд┐рдиреАрдмреЕрдЪрд▓рд╛ рдкреЕрд░рд╛рдореАрдЯрд░ рдореНрд╣рдгреВрди рдШреЗрдИрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch(x):\n",
|
||||
" x = [t.numpy().decode('utf-8') for t in x]\n",
|
||||
" z = tokenizer.texts_to_sequences(x)\n",
|
||||
" z = tf.keras.preprocessing.sequence.pad_sequences(z)\n",
|
||||
" return tf.one_hot(z,vocab_size), tf.one_hot(tf.concat([z[:,1:],tf.constant(eos_token,shape=(len(z),1))],axis=1),vocab_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдпреЗрдереЗ рдХрд╛рд╣реА рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдХрд░рддреЛ:\n",
|
||||
"* рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдореНрд╣реА string tensor рдордзреВрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдордЬрдХреВрд░ рдХрд╛рдврддреЛ\n",
|
||||
"* `text_to_sequences` рдордЬрдХреВрд░рд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрд▓рд╛ рдкреВрд░реНрдгрд╛рдВрдХ tensor рдЪреНрдпрд╛ рдпрд╛рджреАрдд рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ\n",
|
||||
"* `pad_sequences` рддреНрдпрд╛ tensor рдирд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд▓рд╛рдВрдмреАрдкрд░реНрдпрдВрдд padding рдХрд░рддреЗ\n",
|
||||
"* рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдЕрдХреНрд╖рд░рд╛рдВрдЪреЗ one-hot encode рдХрд░рддреЛ, рддрд╕реЗрдЪ shifting рдЖрдгрд┐ `<eos>` рдЬреЛрдбрдгреЗрд╣реА рдХрд░рддреЛ. рдЖрдореНрд╣рд╛рд▓рд╛ рд▓рд╡рдХрд░рдЪ рдХрд│реЗрд▓ рдХреА one-hot-encoded рдЕрдХреНрд╖рд░реЗ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд\n",
|
||||
"\n",
|
||||
"рддрдерд╛рдкрд┐, рд╣реА рдлрдВрдХреНрд╢рди **Pythonic** рдЖрд╣реЗ, рдореНрд╣рдгрдЬреЗрдЪ рддреА Tensorflow computational graph рдордзреНрдпреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрдК рд╢рдХрдд рдирд╛рд╣реА. рдЬрд░ рдЖрдкрдг рд╣реА рдлрдВрдХреНрд╢рди рдереЗрдЯ `Dataset.map` рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХреЗрд▓рд╛, рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреНрд░реБрдЯреА рдпреЗрддреАрд▓. рдпрд╛ Pythonic рдХреЙрд▓рд▓рд╛ `py_function` wrapper рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди enclosed рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch_fn(x):\n",
|
||||
" x = x['title']\n",
|
||||
" a,b = tf.py_function(title_batch,inp=[x],Tout=(tf.float32,tf.float32))\n",
|
||||
" return a,b"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдЯреАрдк**: Pythonic рдЖрдгрд┐ Tensorflow рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдореЗрд╢рди рдлрдВрдХреНрд╢рдиреНрд╕рдордзреАрд▓ рдлрд░рдХ рдУрд│рдЦрдгреЗ рдереЛрдбреЗрд╕реЗ рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреЗ рд╡рд╛рдЯреВ рд╢рдХрддреЗ, рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╢реНрди рдкрдбреВ рд╢рдХрддреЛ рдХреА, рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛ `fit` рдордзреНрдпреЗ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЖрдкрдг рддреЗ рд╕реНрдЯрдБрдбрд░реНрдб Python рдлрдВрдХреНрд╢рдиреНрд╕ рд╡рд╛рдкрд░реВрди рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдо рдХрд╛ рдХрд░рдд рдирд╛рд╣реА. рд╣реЗ рдирдХреНрдХреАрдЪ рд╢рдХреНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ `Dataset.map` рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдореЛрдард╛ рдлрд╛рдпрджрд╛ рдЖрд╣реЗ, рдХрд╛рд░рдг рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдореЗрд╢рди рдкрд╛рдИрдкрд▓рд╛рдЗрди Tensorflow рдЪреНрдпрд╛ рдХрдореНрдкреНрдпреБрдЯреЗрд╢рдирд▓ рдЧреНрд░рд╛рдлрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ GPU рдЪреНрдпрд╛ рдЧрдгрдирд╛рддреНрдордХ рдХреНрд╖рдорддреЗрдЪрд╛ рдлрд╛рдпрджрд╛ рдШреЗрддрд▓рд╛ рдЬрд╛рддреЛ рдЖрдгрд┐ CPU/GPU рджрд░рдореНрдпрд╛рди рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдХрдореА рд╣реЛрддреЗ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЖрдкрд▓реЗ рдЬрдирд░реЗрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддреЛ. рд╣реЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд╕реЗрд▓рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕрд╕реВ рд╢рдХрддреЗ, рдЬреЗ рдЖрдкрдг рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ (рд╕рд╛рдзреЗ, LSTM рдХрд┐рдВрд╡рд╛ GRU) рдЪрд░реНрдЪрд╛ рдХреЗрд▓реЗ рд╣реЛрддреЗ. рдЖрдкрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрдг LSTM рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд.\n",
|
||||
"\n",
|
||||
"рдХрд╛рд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдЕрдХреНрд╖рд░реЗ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддреЛ, рдЖрдгрд┐ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдЦреВрдк рд▓рд╣рд╛рди рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд▓реЗрдпрд░рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА; рд╡рди-рд╣реЙрдЯ-рдПрдирдХреЛрдбреЗрдб рдЗрдирдкреБрдЯ рдереЗрдЯ LSTM рд╕реЗрд▓рдордзреНрдпреЗ рдЬрд╛рдК рд╢рдХрддреЛ. рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░ `Dense` рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдЕрд╕реЗрд▓, рдЬреЛ LSTM рдЖрдЙрдЯрдкреБрдЯрд▓рд╛ рд╡рди-рд╣реЙрдЯ-рдПрдирдХреЛрдбреЗрдб рдЯреЛрдХрди рдХреНрд░рдорд╛рдВрдХрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░реЗрд▓.\n",
|
||||
"\n",
|
||||
"рдпрд╛рд╢рд┐рд╡рд╛рдп, рдХрд╛рд░рдг рдЖрдкрдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓-рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕реЗрд╕рд╢реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдд рдЖрд╣реЛрдд, рдЖрдкрдг `Masking` рд▓реЗрдпрд░ рд╡рд╛рдкрд░реВрди рдПрдХ рдорд╛рд╕реНрдХ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ, рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪреНрдпрд╛ рдкреЕрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рднрд╛рдЧрд╛рдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ рдХрд░реЗрд▓. рд╣реЗ рдХрдареЛрд░рдкрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА, рдХрд╛рд░рдг `<eos>` рдЯреЛрдХрдирдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрдордзреНрдпреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрд╛рд░рд╕рд╛ рд░рд╕ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд▓реЗрдпрд░рд╕рд╣ рдХрд╛рд╣реА рдЕрдиреБрднрд╡ рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрдг рддреЗ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. `input_shape` `(None, vocab_size)` рдЕрд╕реЗрд▓, рдЬрд┐рдереЗ `None` рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕реЗрд╕ рджрд░реНрд╢рд╡рддреЗ, рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ `(None, vocab_size)` рдЕрд╕реЗрд▓, рдЬрд╕реЗ рддреБрдореНрд╣реА `summary` рдордзреВрди рдкрд╛рд╣реВ рд╢рдХрддрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"masking (Masking) (None, None, 84) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"lstm (LSTM) (None, None, 128) 109056 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, None, 84) 10836 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 119,892\n",
|
||||
"Trainable params: 119,892\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n",
|
||||
"15000/15000 [==============================] - 229s 15ms/step - loss: 1.5385\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c1245e0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Masking(input_shape=(None,vocab_size)),\n",
|
||||
" keras.layers.LSTM(128,return_sequences=True),\n",
|
||||
" keras.layers.Dense(vocab_size,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()\n",
|
||||
"model.compile(loss='categorical_crossentropy')\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЖрдЙрдЯрдкреБрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░реНрдг рдХреЗрд▓реЗ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрдг рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдХрд╛рд╣реА рдЖрдЙрдЯрдкреБрдЯ рддрдпрд╛рд░ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ. рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯреЛрдХрди рдХреНрд░рдорд╛рдВрдХрд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рджреНрд╡рд╛рд░реЗ рджрд░реНрд╢рд╡рд┐рд▓реЗрд▓реНрдпрд╛ рдордЬрдХреБрд░рд╛рдЪреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `tokenizer.sequences_to_texts` рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ; рдкрд░рдВрддреБ, рд╣реЗ рдЕрдХреНрд╖рд░-рд╕реНрддрд░реАрдп рдЯреЛрдХрдирд╛рдпрдЭреЗрд╢рдирд╕рд╛рдареА рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА. рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрдг рдЯреЛрдХрдирд╛рдпрдЭрд░рдордзреВрди (`word_index` рдирд╛рд╡рд╛рдЪреНрдпрд╛) рдЯреЛрдХрдиреНрд╕рдЪрд╛ рдбрд┐рдХреНрд╢рдирд░реА рдШреЗрдК, рдПрдХ рд░рд┐рд╡реНрд╣рд░реНрд╕ рдореЕрдк рддрдпрд╛рд░ рдХрд░реВ, рдЖрдгрд┐ рдЖрдкрд▓реЗ рд╕реНрд╡рддрдГрдЪреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдлрдВрдХреНрд╢рди рд▓рд┐рд╣реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"reverse_map = {val:key for key, val in tokenizer.word_index.items()}\n",
|
||||
"\n",
|
||||
"def decode(x):\n",
|
||||
" return ''.join([reverse_map[t] for t in x])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛, рдЖрдкрдг рдЬрдирд░реЗрд╢рди рд╕реБрд░реВ рдХрд░реВрдпрд╛. рдЖрдкрдг рдХрд╛рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧ `start` рдиреЗ рд╕реБрд░реВрд╡рд╛рдд рдХрд░реВ, рддрд┐рд▓рд╛ `inp` рдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдордзреНрдпреЗ рдПрдиреНрдХреЛрдб рдХрд░реВ, рдЖрдгрд┐ рдордЧ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЖрдкрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЙрд▓ рдХрд░реВрди рдкреБрдвреАрд▓ рдЕрдХреНрд╖рд░ рд╢реЛрдзреВ.\n",
|
||||
"\n",
|
||||
"рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ `out` рд╣реЗ `vocab_size` рдШрдЯрдХрд╛рдВрдЪреЗ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЕрд╕рддреЗ, рдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрдирдЪреНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ. рдЖрдкрдг `argmax` рд╡рд╛рдкрд░реВрди рд╕рд░реНрд╡рд╛рдд рд╕рдВрднрд╛рд╡реНрдп рдЯреЛрдХрди рдХреНрд░рдорд╛рдВрдХ рд╢реЛрдзреВ рд╢рдХрддреЛ. рддреНрдпрд╛рдирдВрддрд░ рдЖрдкрдг рд╣реЗ рдЕрдХреНрд╖рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЯреЛрдХрдиреНрд╕рдЪреНрдпрд╛ рдпрд╛рджреАрдд рдЬреЛрдбрддреЛ рдЖрдгрд┐ рдЬрдирд░реЗрд╢рди рдкреБрдвреЗ рд╕реБрд░реВ рдареЗрд╡рддреЛ. рдПрдХрд╛ рдЕрдХреНрд╖рд░рд╛рдЪреА рдирд┐рд░реНрдорд┐рддреА рдХрд░рдгреНрдпрд╛рдЪреА рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ `size` рд╡реЗрд│рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЗрд▓реА рдЬрд╛рддреЗ, рдЬреЗрдгреЗрдХрд░реВрди рдЖрд╡рд╢реНрдпрдХ рдЕрдХреНрд╖рд░рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рддрдпрд╛рд░ рд╣реЛрдИрд▓. рдЬрд░ `eos_token` рдЖрдврд│рд▓рд╛, рддрд░ рдЖрдкрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд╡рдХрд░ рдерд╛рдВрдмрд╡рддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'Today #39;s lead to strike for the strike for the strike for the strike (AFP)'"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate(model,size=100,start='Today '):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" nc = tf.argmax(out)\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc.numpy())\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
" \n",
|
||||
"generate(model)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рдирдореБрдирд╛ рдЖрдЙрдЯрдкреБрдЯ \n",
|
||||
"\n",
|
||||
"рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ *рдЕрдЪреВрдХрддрд╛* рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЙрдкрдпреБрдХреНрдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЙрдкрд▓рдмреНрдз рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдкрд▓рд╛ рдореЙрдбреЗрд▓ рд╕реБрдзрд╛рд░рдд рдЖрд╣реЗ рдХрд╛ рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рдЪрд╛ рдПрдХрдореЗрд╡ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪрд╛ **рдирдореБрдирд╛** рдШреЗрдгреЗ. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг **рдХреЙрд▓рдмреЕрдХреНрд╕** рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рдореНрд╣рдгрдЬреЗрдЪ рдЕрд╢рд╛ рдлрдВрдХреНрд╢рдиреНрд╕ рдЬреНрдпрд╛ рдЖрдкрдг `fit` рдлрдВрдХреНрд╢рдирд▓рд╛ рдкрд╛рд╕ рдХрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рддреНрдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рдард░рд╛рд╡рд┐рдХ рд╡реЗрд│рд╛рдВрдиреА рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Epoch 1/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.2703\n",
|
||||
"Today #39;s a lead in the company for the strike\n",
|
||||
"Epoch 2/3\n",
|
||||
"15000/15000 [==============================] - 227s 15ms/step - loss: 1.2057\n",
|
||||
"Today #39;s the Market Service on Security Start (AP)\n",
|
||||
"Epoch 3/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.1752\n",
|
||||
"Today #39;s a line on the strike to start for the start\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c74e3d0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"sampling_callback = keras.callbacks.LambdaCallback(\n",
|
||||
" on_epoch_end = lambda batch, logs: print(generate(model))\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn),callbacks=[sampling_callback],epochs=3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣реЗ рдЙрджрд╛рд╣рд░рдг рдЖрдзреАрдЪ рдЪрд╛рдВрдЧрд▓рд╛ рдордЬрдХреВрд░ рддрдпрд╛рд░ рдХрд░рддреЗ, рдкрдг рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рд╛рдВрдиреА рдпрд╛рдордзреНрдпреЗ рдЖрдгрдЦреА рд╕реБрдзрд╛рд░рдгрд╛ рдХрд░рддрд╛ рдпреЗрдК рд╢рдХрддреЗ:\n",
|
||||
"* **рдЕрдзрд┐рдХ рдордЬрдХреВрд░**. рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рд╢реАрд░реНрд╖рдХреЗ рд╡рд╛рдкрд░рд▓реА рдЖрд╣реЗрдд, рдкрдг рддреБрдореНрд╣реА рдкреВрд░реНрдг рдордЬрдХреВрд░рд╛рд╡рд░ рдкреНрд░рдпреЛрдЧ рдХрд░реВ рд╢рдХрддрд╛. рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА RNNs рд▓рд╛рдВрдм рдЕрдиреБрдХреНрд░рдо рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рдд рдлрд╛рд░рд╕реЗ рдЪрд╛рдВрдЧрд▓реЗ рдирд╕рддрд╛рдд, рддреНрдпрд╛рдореБрд│реЗ рддреНрдпрд╛рдВрдирд╛ рд▓рд╣рд╛рди рд╡рд╛рдХреНрдпрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрдгреЗ рдХрд┐рдВрд╡рд╛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд `num_chars` (рдЙрджрд╛. 256) рдореВрд▓реНрдпрд╛рдЪреНрдпрд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрдХреНрд░рдо рд▓рд╛рдВрдмреАрд╡рд░ рдиреЗрд╣рдореА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ рдпреЛрдЧреНрдп рдард░рддреЗ. рддреБрдореНрд╣реА рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдг рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдордзреНрдпреЗ рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛, [рдЕрдзрд┐рдХреГрдд Keras рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓](https://keras.io/examples/generative/lstm_character_level_text_generation/) рдпрд╛рдЪрд╛ рдкреНрд░реЗрд░рдгрд╛рджрд╛рдпрдХ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░ рдХрд░реВрди.\n",
|
||||
"* **рдорд▓реНрдЯреАрд▓реЗрдпрд░ LSTM**. LSTM рд╕реЗрд▓реНрд╕рдЪреНрдпрд╛ 2 рдХрд┐рдВрд╡рд╛ 3 рд╕реНрддрд░рд╛рдВрдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреЗ рдпреЛрдЧреНрдп рдард░рддреЗ. рдЬрд╕реЗ рдЖрдкрдг рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЙрд▓реНрд▓реЗрдЦ рдХреЗрд▓реЗ рд╣реЛрддреЗ, LSTM рдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдордЬрдХреБрд░рд╛рддреВрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирдореБрдиреЗ рдХрд╛рдврддреЛ, рдЖрдгрд┐ рдХреЕрд░реЗрдХреНрдЯрд░-рд▓реЗрд╡реНрд╣рд▓ рдЬрдирд░реЗрдЯрд░рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдЖрдкрдг рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВ рд╢рдХрддреЛ рдХреА рдЦрд╛рд▓рдЪрд╛ LSTM рд╕реНрддрд░ рдЕрдХреНрд╖рд░рд╛рдВрдЪреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛рдвреЗрд▓, рдЖрдгрд┐ рд╡рд░рдЪреЗ рд╕реНрддрд░ рд╢рдмреНрдж рдЖрдгрд┐ рд╢рдмреНрджрд╛рдВрдЪреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛рдврддреАрд▓. рд╣реЗ LSTM рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ рд╕реНрддрд░рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛-рдкреЕрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░реВрди рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрддрд╛ рдпреЗрддреЗ.\n",
|
||||
"* рддреБрдореНрд╣реА **GRU рдпреБрдирд┐рдЯреНрд╕** рд╡рд╛рдкрд░реВрди рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдХреЛрдгрддреЗ рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рд╣реЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛, рддрд╕реЗрдЪ **рд╡рд┐рд╡рд┐рдз рд▓рдкрд╡рд▓реЗрд▓реНрдпрд╛ рд╕реНрддрд░рд╛рдВрдЪреЗ рдЖрдХрд╛рд░** рд╡рд╛рдкрд░реВрди рдкреНрд░рдпреЛрдЧ рдХрд░реВ рд╢рдХрддрд╛. рдЦреВрдк рдореЛрдард╛ рд▓рдкрд╡рд▓реЗрд▓рд╛ рд╕реНрддрд░ рдУрд╡реНрд╣рд░рдлрд┐рдЯрд┐рдВрдЧ рд╣реЛрдК рд╢рдХрддреЛ (рдЙрджрд╛. рдиреЗрдЯрд╡рд░реНрдХ рдЕрдЪреВрдХ рдордЬрдХреВрд░ рд╢рд┐рдХреЗрд▓), рдЖрдгрд┐ рд▓рд╣рд╛рди рдЖрдХрд╛рд░ рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдК рд╢рдХрдд рдирд╛рд╣реА.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдордК рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА рдЖрдгрд┐ рддрд╛рдкрдорд╛рди\n",
|
||||
"\n",
|
||||
"`generate` рдЪреНрдпрд╛ рдорд╛рдЧреАрд▓ рд╡реНрдпрд╛рдЦреНрдпреЗрдордзреНрдпреЗ, рдЖрдореНрд╣реА рдиреЗрд╣рдореА рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪрд╛ рд╡рд░реНрдг рдкреБрдвреАрд▓ рд╡рд░реНрдг рдореНрд╣рдгреВрди рдШреЗрдд рд╣реЛрддреЛ. рдпрд╛рдореБрд│реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдордЬрдХреВрд░рд╛рдд рд╡рд╛рд░рдВрд╡рд╛рд░ рд╕рдорд╛рди рд╡рд░реНрдг рдЕрдиреБрдХреНрд░рдо рдкреБрдиреНрд╣рд╛-рдкреБрдиреНрд╣рд╛ рдпреЗрдд рд╣реЛрддреЗ, рдЬрд╕реЗ рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"рддрдерд╛рдкрд┐, рдЬрд░ рдЖрдкрдг рдкреБрдвреАрд▓ рд╡рд░реНрдгрд╛рд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рдкрд╛рд╣рд┐рд▓реЗ, рддрд░ рдЕрд╕реЗ рд╣реЛрдК рд╢рдХрддреЗ рдХреА рдХрд╛рд╣реА рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡реНрдпрддрд╛рдВрдордзреАрд▓ рдлрд░рдХ рдлрд╛рд░рд╕рд╛ рдореЛрдард╛ рдирд╕рддреЛ, рдЙрджрд╛. рдПрдХрд╛ рд╡рд░реНрдгрд╛рдЪреА рд╕рдВрднрд╛рд╡реНрдпрддрд╛ 0.2 рдЕрд╕реВ рд╢рдХрддреЗ, рддрд░ рджреБрд╕рд▒реНрдпрд╛рдЪреА 0.19, рдЗрддреНрдпрд╛рджреА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рдЖрдкрдг '*play*' рдЕрдиреБрдХреНрд░рдорд╛рд╕рд╛рдареА рдкреБрдвреАрд▓ рд╡рд░реНрдг рд╢реЛрдзрдд рдЕрд╕реВ, рддрд░ рдкреБрдвреАрд▓ рд╡рд░реНрдг рдЬрд╛рдЧрд╛ рдХрд┐рдВрд╡рд╛ **e** (рдЬрд╕реЗ *player* рдпрд╛ рд╢рдмреНрджрд╛рдд) рдЕрд╕реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"рдпрд╛рд╡рд░реВрди рдЕрд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╛рдврддрд╛ рдпреЗрддреЗ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪрд╛ рд╡рд░реНрдг рдирд┐рд╡рдбрдгреЗ рдиреЗрд╣рдореА \"рдпреЛрдЧреНрдп\" рдирд╕рддреЗ, рдХрд╛рд░рдг рджреБрд╕рд▒реНрдпрд╛ рдХреНрд░рдорд╛рдВрдХрд╛рдЪреНрдпрд╛ рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪрд╛ рд╡рд░реНрдг рдирд┐рд╡рдбрд▓реНрдпрд╛рдиреЗрд╣реА рдЕрд░реНрдердкреВрд░реНрдг рдордЬрдХреВрд░ рддрдпрд╛рд░ рд╣реЛрдК рд╢рдХрддреЛ. рдиреЗрдЯрд╡рд░реНрдХрдиреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдгрд╛рддреВрди рд╡рд░реНрдг **рдирдореБрдиреНрдпрд╛рдиреЗ** рдирд┐рд╡рдбрдгреЗ рдЕрдзрд┐рдХ рд╢рд╣рд╛рдгрдкрдгрд╛рдЪреЗ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдирдореБрдирд╛ рдирд┐рд╡рдбрдгреЗ `np.multinomial` рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдХрд░рддрд╛ рдпреЗрддреЗ, рдЬреЗ рддрдерд╛рдХрдерд┐рдд **рдорд▓реНрдЯрд┐рдиреЙрдорд┐рдпрд▓ рд╡рд┐рддрд░рдг** рдЕрдВрдорд▓рд╛рдд рдЖрдгрддреЗ. рдЦрд╛рд▓реА рджрд┐рд▓реЗрд▓реА рдлрдВрдХреНрд╢рди рд╣реА **рдордК** рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреА рдЕрдВрдорд▓рд╛рдд рдЖрдгрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today #39;s strike #39; to start at the store return\n",
|
||||
"On Sunday PO to Be Data Profit Up (Reuters)\n",
|
||||
"Moscow, SP wins straight to the Microsoft #39;s control of the space start\n",
|
||||
"President olding of the blast start for the strike to pay <b>...</b>\n",
|
||||
"Little red riding hood ficed to the spam countered in European <b>...</b>\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today countie strikes ryder missile faces food market blut\n",
|
||||
"On Sunday collores lose-toppy of sale of Bullment in <b>...</b>\n",
|
||||
"Moscow, IBM Diffeiting in Afghan Software Hotels (Reuters)\n",
|
||||
"President Ol Luster for Profit Peaced Raised (AP)\n",
|
||||
"Little red riding hood dace on depart talks #39; bank up\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today wits House buiting debate fixes #39; supervice stake again\n",
|
||||
"On Sunday arling digital poaching In for level\n",
|
||||
"Moscow, DS Up 7, Top Proble Protest Caprey Mamarian Strike\n",
|
||||
"President teps help of roubler stepted lessabul-Dhalitics (AFP)\n",
|
||||
"Little red riding hood signs on cash in Carter-youb\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today wits flawer ro, pSIA figat's co DroftwavesIs Talo up\n",
|
||||
"On Sunday hround elitwing wint EU Powerburlinetien\n",
|
||||
"Moscow, Bazz #39;s sentries olymen winnelds' next for Olympite Huc?\n",
|
||||
"President lost securitys from power Elections in Smiltrials\n",
|
||||
"Little red riding hood vides profit, exponituity, profitmainalist-at said listers\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today #39;It: He deat: N.KA Asside\n",
|
||||
"On Sunday i arry Par aldeup patient Wo stele1\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "KeyError",
|
||||
"evalue": "0",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"\\n--- Temperature = {i}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgenerate_soft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m300\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwords\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mtemperature\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36mgenerate_soft\u001b[0;34m(model, size, start, temperature)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mchars\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0minp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minp\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mchars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mwords\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Today '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'On Sunday '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Moscow, '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'President '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Little red riding hood '\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36mdecode\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m: 0"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(model,size=100,start='Today ',temperature=1.0):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" probs = tf.exp(tf.math.log(out)/temperature).numpy().astype(np.float64)\n",
|
||||
" probs = probs/np.sum(probs)\n",
|
||||
" nc = np.argmax(np.random.multinomial(1,probs,1))\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc)\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
"\n",
|
||||
"words = ['Today ','On Sunday ','Moscow, ','President ','Little red riding hood ']\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"\\n--- Temperature = {i}\")\n",
|
||||
" for j in range(5):\n",
|
||||
" print(generate_soft(model,size=300,start=words[j],temperature=i))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА **temperature** рдирд╛рд╡рд╛рдЪрд╛ рдЖрдгрдЦреА рдПрдХ рдкреЕрд░рд╛рдореАрдЯрд░ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ, рдЬреЛ рдЖрдкрдг рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡реНрдпрддреЗрд▓рд╛ рдХрд┐рддреА рдХрдареЛрд░рдкрдгреЗ рдЪрд┐рдХрдЯрд╛рд╡реЗ рд╣реЗ рджрд░реНрд╢рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ. рдЬрд░ temperature 1.0 рдЕрд╕реЗрд▓, рддрд░ рдЖрдореНрд╣реА рдпреЛрдЧреНрдп рдмрд╣реБрдкрдж рдирдореБрдирд╛ рдШреЗрддреЛ, рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ temperature рдЕрдирдВрддрд╛рдХрдбреЗ рдЬрд╛рддреЗ - рддреЗрд╡реНрд╣рд╛ рд╕рд░реНрд╡ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╕рдорд╛рди рд╣реЛрддрд╛рдд, рдЖрдгрд┐ рдЖрдореНрд╣реА рдкреБрдвреАрд▓ рдЕрдХреНрд╖рд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрдкрдгреЗ рдирд┐рд╡рдбрддреЛ. рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддреЛ рдХреА рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг temperature рдЦреВрдк рдЬрд╛рд╕реНрдд рд╡рд╛рдврд╡рддреЛ рддреЗрд╡реНрд╣рд╛ рдордЬрдХреВрд░ рдЕрд░реНрдерд╣реАрди рд╣реЛрддреЛ, рдЖрдгрд┐ рдЬреЗрд╡реНрд╣рд╛ рддреЛ 0 рдЪреНрдпрд╛ рдЬрд╡рд│ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рддреЛ \"рд╕рд╛рдпрдХрд▓ рдХреЗрд▓реЗрд▓рд╛\" рдХрдареЛрд░-рдирд┐рд░реНрдорд┐рдд рдордЬрдХреВрд░рд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "9fbb7d5fda708537649f71f5f646fcde",
|
||||
"translation_date": "2025-08-28T09:11:56+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,353 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгрд╛ рдЖрдгрд┐ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░реНрд╕\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХреНрд╕рдЪрд╛ рдПрдХ рдореЛрдард╛ рддреЛрдЯрд╛ рдореНрд╣рдгрдЬреЗ рдПрдХрд╛ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╕рд░реНрд╡ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдкрд░рд┐рдгрд╛рдорд╛рд╡рд░ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдЕрд╕рддреЛ. рдпрд╛рдореБрд│реЗ рдирд╛рдордирд┐рд░реНрджреЗрд╢рди рдУрд│рдЦ (Named Entity Recognition) рдЖрдгрд┐ рдпрдВрддреНрд░рд╛рджреНрд╡рд╛рд░реЗ рднрд╛рд╖рд╛рдВрддрд░ (Machine Translation) рдпрд╛рдВрд╕рд╛рд░рдЦреНрдпрд╛ рдЕрдиреБрдХреНрд░рдо-рддреЗ-рдЕрдиреБрдХреНрд░рдо рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рдорд╛рдирдХ LSTM рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЙрдбреЗрд▓реНрд╕рдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрдореА рд╣реЛрддреЗ. рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рдЗрддрд░рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдЕрд╕рддреЛ.\n",
|
||||
"\n",
|
||||
"рдпрдВрддреНрд░рд╛рджреНрд╡рд╛рд░реЗ рднрд╛рд╖рд╛рдВрддрд░рд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЕрдиреБрдХреНрд░рдо-рддреЗ-рдЕрдиреБрдХреНрд░рдо рдореЙрдбреЗрд▓рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛. рд╣реЗ рджреЛрди рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреЗрдЯрд╡рд░реНрдХреНрд╕рджреНрд╡рд╛рд░реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЬрд╛рддреЗ, рдЬрд┐рдереЗ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ (**рдПрдиреНрдХреЛрдбрд░**) рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рд▓рд╛ рд▓рдкрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрдд (hidden state) рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ, рдЖрдгрд┐ рджреБрд╕рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ (**рдбрд┐рдХреЛрдбрд░**) рддреНрдпрд╛ рд▓рдкрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрд▓рд╛ рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдкрд░рд┐рдгрд╛рдорд╛рдд рдмрджрд▓рддреЗ. рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреАрд▓ рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдиреЗрдЯрд╡рд░реНрдХрдЪреА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддреА рд╡рд╛рдХреНрдпрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдЪрд╛ рднрд╛рдЧ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рдд рдЕрдбрдЪрдг рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рд▓рд╛рдВрдм рд╡рд╛рдХреНрдпрд╛рдВрд╡рд░ рдореЙрдбреЗрд▓рдЪреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрдореА рд╣реЛрддреЗ.\n",
|
||||
"\n",
|
||||
"**рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгрд╛ (Attention Mechanisms)** RNN рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдЕрдВрджрд╛рдЬрд╛рд╡рд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рд╡реЗрдХреНрдЯрд░рдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡рд╛рдЪреЗ рд╡рдЬрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд. рд╣реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдЗрдирдкреБрдЯ RNN рдЪреНрдпрд╛ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдерд┐рддреА рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ RNN рдпрд╛рдВрдЪреНрдпрд╛рдд рд╢реЙрд░реНрдЯрдХрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЖрдЙрдЯрдкреБрдЯ рдЪрд┐рдиреНрд╣ $y_t$ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, рдЖрдкрдг рд╕рд░реНрд╡ рдЗрдирдкреБрдЯ рд▓рдкрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреА $h_i$ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдК, рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рдЬрди рдЧреБрдгрд╛рдВрдХ $\\alpha_{t,i}$ рд╕рд╣.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) рдордзреАрд▓ рдЕтАНреЕрдбрд┐рдЯрд┐рд╡реНрд╣ рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгреЗрд╕рд╣ рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЙрдбреЗрд▓, [рдпрд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯрдордзреВрди](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) рдЙрджреНрдзреГрдд]*\n",
|
||||
"\n",
|
||||
"рд▓рдХреНрд╖рд╡реЗрдзреА рдореЕрдЯреНрд░рд┐рдХреНрд╕ $\\{\\alpha_{i,j}\\}$ рд╣реЗ рджрд░реНрд╢рд╡реЗрд▓ рдХреА рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрдж рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдХреЛрдгрддреНрдпрд╛ рдЗрдирдкреБрдЯ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдХрд┐рддреА рдкреНрд░рднрд╛рд╡ рдЖрд╣реЗ. рдЦрд╛рд▓реА рдЕрд╢рд╛ рдореЕрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рд▓реЗ рдЖрд╣реЗ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (рдЖрдХреГрддреА 3) рдордзреВрди рдШреЗрддрд▓реЗрд▓реА рдЖрдХреГрддреА]*\n",
|
||||
"\n",
|
||||
"рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгрд╛ рдиреИрд╕рд░реНрдЧрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (Natural Language Processing) рдордзреНрдпреЗ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдХрд┐рдВрд╡рд╛ рдЬрд╡рд│рдкрд╛рд╕рдЪреНрдпрд╛ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рд╕рд╛рдареА рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗрдд. рдорд╛рддреНрд░, рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгрд╛ рдЬреЛрдбрд▓реНрдпрд╛рдиреЗ рдореЙрдбреЗрд▓рдЪреНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╡рд╛рдврддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ RNNs рд╕рд╣ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛рдд. RNNs рд╕реНрдХреЗрд▓ рдХрд░рдгреНрдпрд╛рдЪреЗ рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдмрдВрдзрди рдореНрд╣рдгрдЬреЗ рдореЙрдбреЗрд▓реНрд╕рдЪреНрдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд╕реНрд╡рд░реВрдкрд╛рдореБрд│реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдмреЕрдЪрд┐рдВрдЧ рдЖрдгрд┐ рд╕рдорд╛рдВрддрд░рд┐рдд рдХрд░рдгреЗ рдХрдареАрдг рд╣реЛрддреЗ. RNN рдордзреНрдпреЗ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреНрд░рдорд╛рдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рддреЗ рд╕рд╣рдЬрдкрдгреЗ рд╕рдорд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рдпреЗрдд рдирд╛рд╣реА.\n",
|
||||
"\n",
|
||||
"рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгрд╛рдВрдЪрд╛ рдЕрд╡рд▓рдВрдм рдЖрдгрд┐ рдпрд╛ рдмрдВрдзрдирд╛рдореБрд│реЗ рдЖрдЬ рдЖрдкрдг рдУрд│рдЦрдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓реНрд╕рдЪреА рдирд┐рд░реНрдорд┐рддреА рдЭрд╛рд▓реА, рдЬрд╕реЗ рдХреА BERT рдЖрдгрд┐ OpenGPT3.\n",
|
||||
"\n",
|
||||
"## рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓реНрд╕\n",
|
||||
"\n",
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдЧреАрд▓ рдЕрдВрджрд╛рдЬрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рдкреБрдвреАрд▓ рдореВрд▓реНрдпрд╛рдВрдХрди рдЪрд░рдгрд╛рдд рдкрд╛рдард╡рд┐рдгреНрдпрд╛рдРрд╡рдЬреА, **рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓реНрд╕** **рд╕реНрдерд┐рддреА рдХреЛрдбрд┐рдВрдЧреНрд╕ (positional encodings)** рдЖрдгрд┐ рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░реВрди рджрд┐рд▓реЗрд▓реНрдпрд╛ рдордЬрдХреВрд░рд╛рдЪреНрдпрд╛ рдЦрд┐рдбрдХреАрдд (window) рдЗрдирдкреБрдЯрдЪрд╛ рд╕рдВрджрд░реНрдн рдХреЕрдкреНрдЪрд░ рдХрд░рддрд╛рдд. рдЦрд╛рд▓реАрд▓ рдкреНрд░рддрд┐рдорд╛ рджрд░реНрд╢рд╡рддреЗ рдХреА рд╕реНрдерд┐рддреА рдХреЛрдбрд┐рдВрдЧреНрд╕рд╕рд╣ рд▓рдХреНрд╖рд╡реЗрдзреА рдпрдВрддреНрд░рдгрд╛ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЦрд┐рдбрдХреАрдд рд╕рдВрджрд░реНрдн рдХрд╕рд╛ рдХреЕрдкреНрдЪрд░ рдХрд░реВ рд╢рдХрддреЗ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рд╕реНрдерд┐рддреА рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддреАрд╢реА рдореЕрдк рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░реНрд╕ RNNs рдкреЗрдХреНрд╖рд╛ рдЪрд╛рдВрдЧрд▓реЗ рд╕рдорд╛рдВрддрд░рд┐рдд рд╣реЛрдК рд╢рдХрддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ рдЦреВрдк рдореЛрдареА рдЖрдгрд┐ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдХреНрд╖рдо рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓реНрд╕ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖рд╡реЗрдзреА рд╣реЗрдб рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдордзреАрд▓ рд╕рдВрдмрдВрдз рд╢рд┐рдХрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рдиреИрд╕рд░реНрдЧрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдпреЗ рд╕реБрдзрд╛рд░рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"**BERT** (Bidirectional Encoder Representations from Transformers) рд╣реЗ 12 рд╕реНрддрд░рд╛рдВрд╕рд╛рдареА *BERT-base* рдЖрдгрд┐ 24 рд╕реНрддрд░рд╛рдВрд╕рд╛рдареА *BERT-large* рдЕрд╕рд▓реЗрд▓реЗ рдЦреВрдк рдореЛрдареЗ рдмрд╣реБрд╕реНрддрд░реАрдп рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╣реЗ. рд╣реЗ рдореЙрдбреЗрд▓ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдордЬрдХреВрд░ рдбреЗрдЯрд╛рд╡рд░ (рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ + рдкреБрд╕реНрддрдХреЗ) рдЕрд╕рдВрд░рдЪрд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг (unsupervised training) рд╡рд╛рдкрд░реВрди рдЖрдзреА рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ (рд╡рд╛рдХреНрдпрд╛рддреАрд▓ рд▓рдкрд╡рд▓реЗрд▓реЗ рд╢рдмреНрдж рдУрд│рдЦрдгреЗ). рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рдореЙрдбреЗрд▓ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрд╛рд╖рд┐рдХ рд╕рдордЬ рдЖрддреНрдорд╕рд╛рдд рдХрд░рддреЗ, рдЬреНрдпрд╛рдЪрд╛ рдирдВрддрд░ рдЗрддрд░ рдбреЗрдЯрд╛рд╕реЗрдЯреНрд╕рд╕рд╣ рд╕реВрдХреНрд╖реНрдо-рдЯреНрдпреВрдирд┐рдВрдЧрджреНрд╡рд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд▓рд╛ **рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рд╢рд┐рдХреНрд╖рдг (transfer learning)** рдореНрд╣рдгрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"BERT, DistilBERT, BigBird, OpenGPT3 рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░реНрд╕рдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдЖрд╡реГрддреНрддреНрдпрд╛ рдЖрд╣реЗрдд, рдЬреНрдпрд╛ рд╕реВрдХреНрд╖реНрдо-рдЯреНрдпреВрдирд┐рдВрдЧрд╕рд╛рдареА рд╡рд╛рдкрд░рддрд╛ рдпреЗрддрд╛рдд. [HuggingFace рдкреЕрдХреЗрдЬ](https://github.com/huggingface/) PyTorch рд╕рд╣ рдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░реНрд╕рдкреИрдХреА рдЕрдиреЗрдХрд╛рдВрдЪреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рд░рд┐рдкреЙрдЭрд┐рдЯрд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ.\n",
|
||||
"\n",
|
||||
"## рдордЬрдХреВрд░ рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА BERT рдЪрд╛ рд╡рд╛рдкрд░\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд BERT рдореЙрдбреЗрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЖрдкрд▓реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХрд╛рд░реНрдп рдХрд╕реЗ рд╕реЛрдбрд╡реВ рд╢рдХрддреЛ рддреЗ рдкрд╛рд╣реВ: рдЕрдиреБрдХреНрд░рдо рд╡рд░реНрдЧреАрдХрд░рдг. рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдореВрд│ AG News рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, HuggingFace рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдгрд┐ рдЖрдкрд▓рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдХрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"import transformers\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_len = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдХрд╛рд░рдг рдЖрдкрдг рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд BERT рдореЙрдбреЗрд▓ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЛрдХрдирд╛рдпрдЭрд░ рд╡рд╛рдкрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓. рдкреНрд░рдердо, рдЖрдкрдг рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд BERT рдореЙрдбреЗрд▓рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЯреЛрдХрдирд╛рдпрдЭрд░ рд▓реЛрдб рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"HuggingFace рд▓рд╛рдпрдмреНрд░рд░реАрдордзреНрдпреЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбреЗрд▓реНрд╕рдЪрд╛ рд╕рдВрдЧреНрд░рд╣ рдЖрд╣реЗ, рдЬреНрдпрд╛рдЪрд╛ рдЖрдкрдг рдлрдХреНрдд рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдирд╛рд╡рд╛рдВрдЪрд╛ `from_pretrained` рдлрдВрдХреНрд╢рдиреНрд╕рдордзреНрдпреЗ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдореНрд╣рдгреВрди рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрди рд╡рд╛рдкрд░ рдХрд░реВ рд╢рдХрддрд╛. рдореЙрдбреЗрд▓рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рд╕рд░реНрд╡ рдмрд╛рдпрдирд░реА рдлрд╛рдЗрд▓реНрд╕ рдЖрдкреЛрдЖрдк рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓.\n",
|
||||
"\n",
|
||||
"рддрдерд╛рдкрд┐, рдХрд╛рд╣реА рд╡реЗрд│рд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕реНрд╡рддрдГрдЪреЗ рдореЙрдбреЗрд▓реНрд╕ рд▓реЛрдб рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓, рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЖрдкрдг рддреНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдЪрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВ рд╢рдХрддрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рд░реНрд╡ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реНрд╕ рдЕрд╕рддреАрд▓, рдЬрд╕реЗ рдХреА рдЯреЛрдХрдирд╛рдпрдЭрд░рд╕рд╛рдареАрдЪреЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕, рдореЙрдбреЗрд▓ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ `config.json` рдлрд╛рдЗрд▓, рдмрд╛рдпрдирд░реА рд╡реЗрдЯреНрд╕ рдЗрддреНрдпрд╛рджреА.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# To load the model from Internet repository using model name. \n",
|
||||
"# Use this if you are running from your own copy of the notebooks\n",
|
||||
"bert_model = 'bert-base-uncased' \n",
|
||||
"\n",
|
||||
"# To load the model from the directory on disk. Use this for Microsoft Learn module, because we have\n",
|
||||
"# prepared all required files for you.\n",
|
||||
"bert_model = './bert'\n",
|
||||
"\n",
|
||||
"tokenizer = transformers.BertTokenizer.from_pretrained(bert_model)\n",
|
||||
"\n",
|
||||
"MAX_SEQ_LEN = 128\n",
|
||||
"PAD_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.pad_token)\n",
|
||||
"UNK_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.unk_token)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`tokenizer` рдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ `encode` рдлрдВрдХреНрд╢рди рдЕрд╕рддреЗ рдЬреА рдереЗрдЯ рдордЬрдХреВрд░ рдПрдиреНрдХреЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[101, 1052, 22123, 2953, 2818, 2003, 1037, 2307, 7705, 2005, 17953, 2361, 102]"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.encode('PyTorch is a great framework for NLP')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдордЧ, рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рдбреЗрдЯрд╛ рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрдг рдЬреНрдпрд╛ рдЗрдЯрд░реЗрдЯрд░реНрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ рддреЗ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. рдХрд╛рд░рдг BERT рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдлрдВрдХреНрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдпрд╛рдкреВрд░реНрд╡реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ `padify` рд╕рд╛рд░рдЦреА рдПрдХ рдкреЕрдбрд┐рдВрдЧ рдлрдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_bert(b):\n",
|
||||
" # b is the list of tuples of length batch_size\n",
|
||||
" # - first element of a tuple = label, \n",
|
||||
" # - second = feature (text sequence)\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [tokenizer.encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch\n",
|
||||
" l = max(map(len,v))\n",
|
||||
" return ( # tuple of two tensors - labels and features\n",
|
||||
" torch.LongTensor([t[0] for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=8, collate_fn=pad_bert, shuffle=True)\n",
|
||||
"test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=8, collate_fn=pad_bert)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдореНрд╣реА `bert-base-uncased` рдирд╛рд╡рд╛рдЪрд╛ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд BERT рдореЙрдбреЗрд▓ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. рдЪрд▓рд╛ `BertForSequenceClassfication` рдкреЕрдХреЗрдЬ рд╡рд╛рдкрд░реВрди рдореЙрдбреЗрд▓ рд▓реЛрдб рдХрд░реВрдпрд╛. рдпрд╛рдореБрд│реЗ рдЖрдкрд▓реЗ рдореЙрдбреЗрд▓ рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд╕рдорд╛рд╡реЗрд╢рд╛рд╕рд╣, рдЖрдзреАрдЪ рддрдпрд╛рд░ рдЖрд╣реЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рд╣реЛрддреЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдгреА рд╕рдВрджреЗрд╢ рджрд┐рд╕реЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реЗ рдЬрд╛рдИрд▓ рдХреА рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддреНрдпрд╛рдЪреЗ рд╡рдЬрди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реА, рдЖрдгрд┐ рдореЙрдбреЗрд▓рд▓рд╛ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓ - рддреЗ рдкреВрд░реНрдгрдкрдгреЗ рдареАрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг рдЖрдкрдг рдиреЗрдордХреЗ рддреЗрдЪ рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Some weights of the model checkpoint at ./bert were not used when initializing BertForSequenceClassification: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.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 ./bert 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": [
|
||||
"model = transformers.BertForSequenceClassification.from_pretrained(bert_model,num_labels=4).to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЖрд╣реЛрдд! рдХрд╛рд░рдг BERT рдЖрдзреАрдЪ рдкреНрд░реА-рдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓рд╛ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рд▓рд╣рд╛рди learning rate рд╡рд╛рдкрд░рдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ, рдЬреЗрдгреЗрдХрд░реВрди рд╕реБрд░реБрд╡рд╛рддреАрдЪреЗ weights рдЦрд░рд╛рдм рд╣реЛрдК рдирдпреЗрдд.\n",
|
||||
"\n",
|
||||
"рд╕рдВрдкреВрд░реНрдг рдореЗрд╣рдирдд `BertForSequenceClassification` рдореЙрдбреЗрд▓рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рд╡рд░ рдореЙрдбреЗрд▓ рдХреЙрд▓ рдХрд░рддреЛ, рддреЗрд╡реНрд╣рд╛ рддреЗ рдЗрдирдкреБрдЯ minibatch рд╕рд╛рдареА loss рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ output рджреЛрдиреНрд╣реА рдкрд░рдд рдХрд░рддреЗ. рдЖрдореНрд╣реА loss рдЪрд╛ рд╡рд╛рдкрд░ parameter optimization рд╕рд╛рдареА рдХрд░рддреЛ (`loss.backward()` рдмреЕрдХрд╡рд░реНрдб рдкрд╛рд╕ рдХрд░рддреЗ), рдЖрдгрд┐ `out` рдЪрд╛ рд╡рд╛рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг accuracy рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдХрд░рддреЛ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдорд┐рд│рд╛рд▓реЗрд▓реНрдпрд╛ labels `labs` (рдЬреЗ `argmax` рд╡рд╛рдкрд░реВрди рдЧрдгрдирд╛ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд) рдЕрдкреЗрдХреНрд╖рд┐рдд `labels` рд╢реА рддреБрд▓рдирд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ.\n",
|
||||
"\n",
|
||||
"рдкреНрд░рдХреНрд░рд┐рдпреЗрд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА loss рдЖрдгрд┐ accuracy рдЕрдиреЗрдХ iterations рд╡рд░ рдЬрдорд╛ рдХрд░рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ `report_freq` рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрдХреНрд░рд╛рдВрдирдВрддрд░ рддреНрдпрд╛рдВрдирд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрджрд╛рдЪрд┐рдд рдмрд░рд╛рдЪ рд╡реЗрд│ рдШреЗрдИрд▓, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА iterations рдЪреА рд╕рдВрдЦреНрдпрд╛ рдорд░реНрдпрд╛рджрд┐рдд рдареЗрд╡рддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loss = 1.1254194641113282, Accuracy = 0.585\n",
|
||||
"Loss = 0.6194715118408203, Accuracy = 0.83\n",
|
||||
"Loss = 0.46665248870849607, Accuracy = 0.8475\n",
|
||||
"Loss = 0.4309701919555664, Accuracy = 0.8575\n",
|
||||
"Loss = 0.35427074432373046, Accuracy = 0.8825\n",
|
||||
"Loss = 0.3306886291503906, Accuracy = 0.8975\n",
|
||||
"Loss = 0.30340143203735354, Accuracy = 0.8975\n",
|
||||
"Loss = 0.26139299392700194, Accuracy = 0.915\n",
|
||||
"Loss = 0.26708646774291994, Accuracy = 0.9225\n",
|
||||
"Loss = 0.3667240524291992, Accuracy = 0.8675\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"optimizer = torch.optim.Adam(model.parameters(), lr=2e-5)\n",
|
||||
"\n",
|
||||
"report_freq = 50\n",
|
||||
"iterations = 500 # make this larger to train for longer time!\n",
|
||||
"\n",
|
||||
"model.train()\n",
|
||||
"\n",
|
||||
"i,c = 0,0\n",
|
||||
"acc_loss = 0\n",
|
||||
"acc_acc = 0\n",
|
||||
"\n",
|
||||
"for labels,texts in train_loader:\n",
|
||||
" labels = labels.to(device)-1 # get labels in the range 0-3 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" loss, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc = torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" acc_loss += loss\n",
|
||||
" acc_acc += acc\n",
|
||||
" i+=1\n",
|
||||
" c+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"Loss = {acc_loss.item()/c}, Accuracy = {acc_acc.item()/c}\")\n",
|
||||
" c = 0\n",
|
||||
" acc_loss = 0\n",
|
||||
" acc_acc = 0\n",
|
||||
" iterations-=1\n",
|
||||
" if not iterations:\n",
|
||||
" break"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛ (рд╡рд┐рд╢реЗрд╖рддрдГ рдЬрд░ рддреБрдореНрд╣реА рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡рд▓реА рдЖрдгрд┐ рдереЛрдбрд╛ рд╡реЗрд│ рдерд╛рдВрдмрд▓рд╛рдд), рдХреА BERT рд╡рд░реНрдЧреАрдХрд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЦреВрдк рдЪрд╛рдВрдЧрд▓реА рдЕрдЪреВрдХрддрд╛ рджреЗрддреЗ! рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдЕрд╕реЗ рдХреА BERT рдЖрдзреАрдЪ рднрд╛рд╖реЗрдЪреА рд░рдЪрдирд╛ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдордЬреВрди рдШреЗрддреЛ, рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд╕реБрдзрд╛рд░рд┐рдд рдХрд░рд╛рдпрдЪрд╛ рдЕрд╕рддреЛ. рдорд╛рддреНрд░, BERT рд╣рд╛ рдореЛрдард╛ рдореЙрдбреЗрд▓ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, рд╕рдВрдкреВрд░реНрдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦреВрдк рд╡реЗрд│рдЦрд╛рдК рдЕрд╕рддреЗ рдЖрдгрд┐ рддреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдЪрдВрдб рд╕рдВрдЧрдгрдХреАрдп рд╢рдХреНрддреАрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ! (GPU, рдЖрдгрд┐ рд╢рдХреНрдпрддреЛ рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд).\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк:** рдЖрдкрд▓реНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдкрдг рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд BERT рдореЙрдбреЗрд▓реНрд╕рдкреИрдХреА рдПрдХрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдореЛрдареНрдпрд╛ рдореЙрдбреЗрд▓реНрд╕ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд, рдЬреЗ рдХрджрд╛рдЪрд┐рдд рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рджреЗрддреАрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореЙрдбреЗрд▓рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреЗ рдореВрд▓реНрдпрдорд╛рдкрди\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдЪрд╛рдЪрдгреА рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рдЖрдкрд▓реНрдпрд╛ рдореЙрдбреЗрд▓рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреЗ рдореВрд▓реНрдпрдорд╛рдкрди рдХрд░реВ рд╢рдХрддреЛ. рдореВрд▓реНрдпрд╛рдВрдХрди рд▓реВрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реВрдкрд╕рд╛рд░рдЦрд╛рдЪ рдЕрд╕рддреЛ, рдкрд░рдВрддреБ `model.eval()` рдХреЙрд▓ рдХрд░реВрди рдореЙрдбреЗрд▓рд▓рд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЛрдбрдордзреНрдпреЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдгреЗ рд╡рд┐рд╕рд░реВ рдирдпреЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final accuracy: 0.9047029702970297\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.eval()\n",
|
||||
"iterations = 100\n",
|
||||
"acc = 0\n",
|
||||
"i = 0\n",
|
||||
"for labels,texts in test_loader:\n",
|
||||
" labels = labels.to(device)-1 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" _, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc += torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" i+=1\n",
|
||||
" if i>iterations: break\n",
|
||||
" \n",
|
||||
"print(f\"Final accuracy: {acc.item()/i}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдореБрджреНрджрд╛\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдЖрдкрдг рдкрд╛рд╣рд┐рд▓реЗ рдХреА **transformers** рд▓рд╛рдпрдмреНрд░рд░реАрдордзреВрди рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓ рдШреЗрдгреЗ рдЖрдгрд┐ рддреЗ рдЖрдкрд▓реНрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдЕрдиреБрдХреВрд▓ рдХрд░рдгреЗ рдХрд┐рддреА рд╕реЛрдкреЗ рдЖрд╣реЗ. рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ, BERT рдореЙрдбреЗрд▓реНрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдШрдЯрдХ рд╢реЛрдзрдгреЗ, рдкреНрд░рд╢реНрдиреЛрддреНрддрд░, рдЖрдгрд┐ рдЗрддрд░ NLP рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"Transformer рдореЙрдбреЗрд▓реНрд╕ NLP рдордзреАрд▓ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛рдд, рдЖрдгрд┐ рдмрд╣реБрддреЗрдХ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдХрд╕реНрдЯрдо NLP рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕ рдЕрдВрдорд▓рд╛рдд рдЖрдгрддрд╛рдирд╛ рдкреНрд░рдпреЛрдЧ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдкрд╣рд┐рд▓реА рдирд┐рд╡рдб рдЕрд╕рд╛рд╡реА. рддрдерд╛рдкрд┐, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рдЧрдд рдиреНрдпреВрд░рд▓ рдореЙрдбреЗрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдЕрд╕рддреАрд▓, рддрд░ рдпрд╛ рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдЪрд░реНрдЪрд┐рд▓реЗрд▓реНрдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕рдЪреНрдпрд╛ рдореВрд▓рднреВрдд рддрддреНрддреНрд╡рд╛рдВрдЪреЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЕрддреНрдпрдВрдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "py37_pytorch",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_pytorch-py"
|
||||
},
|
||||
"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.7.7"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "753865967678a92dbce7d7efbd36d980",
|
||||
"translation_date": "2025-08-28T09:22:53+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,819 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдЕрдЯреЗрдиреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдореНрд╕ рдЖрдгрд┐ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░реНрд╕\n",
|
||||
"\n",
|
||||
"рд░реАрдХрд░рдВрдЯ рдиреЗрдЯрд╡рд░реНрдХреНрд╕рдЪрд╛ рдПрдХ рдореЛрдард╛ рддреЛрдЯрд╛ рдореНрд╣рдгрдЬреЗ рдПрдХрд╛ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╕рд░реНрд╡ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдкрд░рд┐рдгрд╛рдорд╛рд╡рд░ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдЕрд╕рддреЛ. рдпрд╛рдореБрд│реЗ рдиреЗрдореНрдб рдПрдВрдЯрд┐рдЯреА рд░рд┐рдХрдЧреНрдирд┐рд╢рди рдЖрдгрд┐ рдорд╢реАрди рдЯреНрд░рд╛рдиреНрд╕рд▓реЗрд╢рдирд╕рд╛рд░рдЦреНрдпрд╛ рдЕрдиреБрдХреНрд░рдо-рддреЗ-рдЕрдиреБрдХреНрд░рдо рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рд╕реНрдЯрдБрдбрд░реНрдб LSTM рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЙрдбреЗрд▓реНрд╕рдордзреНрдпреЗ рдХрдореА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджрд┐рд╕реВрди рдпреЗрддреЗ. рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рдЗрддрд░рд╛рдВрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдЕрд╕рддреЛ.\n",
|
||||
"\n",
|
||||
"рдорд╢реАрди рдЯреНрд░рд╛рдиреНрд╕рд▓реЗрд╢рдирд╕рд╛рд░рдЦреНрдпрд╛ рдЕрдиреБрдХреНрд░рдо-рддреЗ-рдЕрдиреБрдХреНрд░рдо рдореЙрдбреЗрд▓рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛. рд╣реЗ рджреЛрди рд░реАрдХрд░рдВрдЯ рдиреЗрдЯрд╡рд░реНрдХреНрд╕рджреНрд╡рд╛рд░реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗ рдЬрд╛рддреЗ, рдЬрд┐рдереЗ рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ (**рдПрдиреНрдХреЛрдбрд░**) рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рд▓рд╛ рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ, рдЖрдгрд┐ рджреБрд╕рд░реЗ рдиреЗрдЯрд╡рд░реНрдХ (**рдбрд┐рдХреЛрдбрд░**) рддреНрдпрд╛ рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯрд▓рд╛ рдЯреНрд░рд╛рдиреНрд╕рд▓реЗрдЯреЗрдб рдЖрдЙрдЯрдкреБрдЯрдордзреНрдпреЗ рдмрджрд▓рддреЗ. рдпрд╛ рдкрджреНрдзрддреАрдЪрд╛ рдПрдХ рдореЛрдард╛ рддреЛрдЯрд╛ рдореНрд╣рдгрдЬреЗ рдиреЗрдЯрд╡рд░реНрдХрдЪрд╛ рдЕрдВрддрд┐рдо рд╕реНрдЯреЗрдЯ рд╡рд╛рдХреНрдпрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдЪрд╛ рднрд╛рдЧ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рдд рдЕрдбрдЪрдг рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рд▓рд╛рдВрдм рд╡рд╛рдХреНрдпрд╛рдВрд╡рд░ рдореЙрдбреЗрд▓рдЪреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрдореА рд╣реЛрддреЗ.\n",
|
||||
"\n",
|
||||
"**рдЕрдЯреЗрдиреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдореНрд╕** RNN рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЗрдбрд┐рдХреНрд╢рдирд╡рд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡рд╛рдЪреЗ рд╡рдЬрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдорд╛рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд. рд╣реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ рдЗрдирдкреБрдЯ RNN рдЪреНрдпрд╛ рдЗрдВрдЯрд░рдорд┐рдЬрд┐рдПрдЯ рд╕реНрдЯреЗрдЯреНрд╕ рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯ RNN рджрд░рдореНрдпрд╛рди рд╢реЙрд░реНрдЯрдХрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рдЬреЗрд╡реНрд╣рд╛ рдЖрдЙрдЯрдкреБрдЯ рдЪрд┐рдиреНрд╣ $y_t$ рддрдпрд╛рд░ рдХрд░рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рд╕рд░реНрд╡ рдЗрдирдкреБрдЯ рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯреНрд╕ $h_i$ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдК, рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рдЬрди рдЧреБрдгрд╛рдВрдХ $\\alpha_{t,i}$ рд╕рд╣.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) рдордзреАрд▓ рдЕтАНреЕрдбрд┐рдЯрд┐рд╡реНрд╣ рдЕрдЯреЗрдиреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдорд╕рд╣ рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЙрдбреЗрд▓, [рдпрд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯрдордзреВрди](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) рдШреЗрддрд▓реЗрд▓реЗ*\n",
|
||||
"\n",
|
||||
"рдЕрдЯреЗрдиреНрд╢рди рдореЕрдЯреНрд░рд┐рдХреНрд╕ $\\{\\alpha_{i,j}\\}$ рд╣реЗ рджрд░реНрд╢рд╡рддреЗ рдХреА рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрдж рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдХреЛрдгрддреНрдпрд╛ рдЗрдирдкреБрдЯ рд╢рдмреНрджрд╛рдВрдЪрд╛ рдХрд┐рддреА рдкреНрд░рднрд╛рд╡ рдЖрд╣реЗ. рдЦрд╛рд▓реА рдЕрд╢рд╛ рдореЕрдЯреНрд░рд┐рдХреНрд╕рдЪреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рд▓реЗ рдЖрд╣реЗ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) (Fig.3) рдордзреВрди рдШреЗрддрд▓реЗрд▓реА рдЖрдХреГрддреА]*\n",
|
||||
"\n",
|
||||
"рдЕрдЯреЗрдиреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдореНрд╕ рдиреИрд╕рд░реНрдЧрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ (NLP) рдордзреНрдпреЗ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдХрд┐рдВрд╡рд╛ рдЬрд╡рд│рдкрд╛рд╕рдЪреНрдпрд╛ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рд╕реНрдерд┐рддреАрд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗрдд. рдорд╛рддреНрд░, рдЕрдЯреЗрдиреНрд╢рди рдЬреЛрдбрд▓реНрдпрд╛рдиреЗ рдореЙрдбреЗрд▓ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╡рд╛рдврддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ RNNs рд╕рд╣ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛рдд. RNNs рдЪреНрдпрд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧрд╕рд╛рдареА рдПрдХ рдорд╣рддреНрддреНрд╡рд╛рдЪреА рдЕрдбрдЪрдг рдореНрд╣рдгрдЬреЗ рдореЙрдбреЗрд▓реНрд╕рдЪреНрдпрд╛ рд░реАрдХрд░рдВрдЯ рд╕реНрд╡рд░реВрдкрд╛рдореБрд│реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдмреЕрдЪ рдХрд░рдгреЗ рдЖрдгрд┐ рдкреЕрд░рд▓рд▓рд╛рдЗрдЬ рдХрд░рдгреЗ рдХрдареАрдг рд╣реЛрддреЗ. RNN рдордзреНрдпреЗ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХрд╛рд▓рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдХреНрд░рдорд╛рдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рд╛рд╡реА рд▓рд╛рдЧрддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рддреЗ рд╕рд╣рдЬрдкрдгреЗ рдкреЕрд░рд▓рд▓рд╛рдЗрдЬ рдХрд░рддрд╛ рдпреЗрдд рдирд╛рд╣реА.\n",
|
||||
"\n",
|
||||
"рдЕрдЯреЗрдиреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдореНрд╕рдЪрд╛ рдЕрд╡рд▓рдВрдм рдЖрдгрд┐ рдпрд╛ рдЕрдбрдЪрдгреАрдореБрд│реЗ рдЖрдЬ рдЖрдкрдг рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓реНрд╕рдЪрд╛ рдЬрдиреНрдо рдЭрд╛рд▓рд╛, рдЬрд╕реЗ рдХреА BERT рдЖрдгрд┐ OpenGPT3.\n",
|
||||
"\n",
|
||||
"## рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓реНрд╕\n",
|
||||
"\n",
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдЧреАрд▓ рдкреНрд░реЗрдбрд┐рдХреНрд╢рдирдЪрд╛ рд╕рдВрджрд░реНрдн рдкреБрдвреАрд▓ рдореВрд▓реНрдпрд╛рдВрдХрди рдЪрд░рдгрд╛рдд рдкрд╛рдард╡рд┐рдгреНрдпрд╛рдРрд╡рдЬреА, **рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓реНрд╕** **рдкреЛрдЬрд┐рд╢рдирд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧреНрд╕** рдЖрдгрд┐ **рдЕрдЯреЗрдиреНрд╢рди** рд╡рд╛рдкрд░реВрди рджрд┐рд▓реЗрд▓реНрдпрд╛ рдордЬрдХреВрд░рд╛рдЪреНрдпрд╛ рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рдЗрдирдкреБрдЯрдЪрд╛ рд╕рдВрджрд░реНрдн рдХреЕрдкреНрдЪрд░ рдХрд░рддрд╛рдд. рдЦрд╛рд▓реАрд▓ рдкреНрд░рддрд┐рдорд╛ рджрд░реНрд╢рд╡рддреЗ рдХреА рдкреЛрдЬрд┐рд╢рдирд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧреНрд╕рд╕рд╣ рдЕрдЯреЗрдиреНрд╢рди рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рд╕рдВрджрд░реНрдн рдХрд╕рд╛ рдХреЕрдкреНрдЪрд░ рдХрд░реВ рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдкреЛрдЭрд┐рд╢рди рд╕реНрд╡рддрдВрддреНрд░рдкрдгреЗ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рдкреЛрдЭрд┐рд╢рдирд╢реА рдореЕрдк рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░реНрд╕ RNNs рдкреЗрдХреНрд╖рд╛ рдЪрд╛рдВрдЧрд▓реЗ рдкреЕрд░рд▓рд▓рд╛рдЗрдЬ рдХрд░реВ рд╢рдХрддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ рдЦреВрдк рдореЛрдареА рдЖрдгрд┐ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдХреНрд╖рдо рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓реНрд╕ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рдЕрдЯреЗрдиреНрд╢рди рд╣реЗрдб рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдордзреАрд▓ рд╕рдВрдмрдВрдз рд╢рд┐рдХрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рдиреИрд╕рд░реНрдЧрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдпреЗ рд╕реБрдзрд╛рд░рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"## рд╕рд╛рдзреЗ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓ рддрдпрд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"Keras рдордзреНрдпреЗ рдЕрдВрдЧрднреВрдд рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рд▓реЗрдпрд░ рдирд╛рд╣реА, рдкрд░рдВрддреБ рдЖрдкрдг рд╕реНрд╡рддрдГ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ. рдпрд╛рдкреВрд░реНрд╡реАрдкреНрд░рдорд╛рдгреЗ, рдЖрдкрдг AG News рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреНрдпрд╛ рдордЬрдХреВрд░ рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ, рдкрд░рдВрддреБ рд╣реЗ рдирдореВрдж рдХрд░рдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓реНрд╕ рдЕрдзрд┐рдХ рдХрдареАрдг NLP рдХрд╛рд░реНрдпрд╛рдВрдордзреНрдпреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рджрд╛рдЦрд╡рддрд╛рдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()\n",
|
||||
"\n",
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдХреЗрд░рд╕ рдордзреАрд▓ рдирд╡реАрди рд╕реНрддрд░рд╛рдВрдирд╛ `Layer` рд╡рд░реНрдЧрд╛рдЪреЗ рдЙрдкрд╡рд░реНрдЧ рдмрдирд╡рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ `call` рдкрджреНрдзрдд рд▓рд╛рдЧреВ рдХрд░рд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рдЪрд▓рд╛ **Positional Embedding** рд╕реНрддрд░рд╛рд╕рд╣ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛. рдЖрдореНрд╣реА [рдЕрдзрд┐рдХреГрдд рдХреЗрд░рд╕ рджрд╕реНрддрдРрд╡рдЬрд╛рддреАрд▓ рдХрд╛рд╣реА рдХреЛрдб](https://keras.io/examples/nlp/text_classification_with_transformer/) рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. рдЖрдореНрд╣реА рдЧреГрд╣рд┐рдд рдзрд░рддреЛ рдХреА рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдо `maxlen` рд▓рд╛рдВрдмреАрдкрд░реНрдпрдВрдд рдкреЕрдб рдХрд░рддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class TokenAndPositionEmbedding(keras.layers.Layer):\n",
|
||||
" def __init__(self, maxlen, vocab_size, embed_dim):\n",
|
||||
" super(TokenAndPositionEmbedding, self).__init__()\n",
|
||||
" self.token_emb = keras.layers.Embedding(input_dim=vocab_size, output_dim=embed_dim)\n",
|
||||
" self.pos_emb = keras.layers.Embedding(input_dim=maxlen, output_dim=embed_dim)\n",
|
||||
" self.maxlen = maxlen\n",
|
||||
"\n",
|
||||
" def call(self, x):\n",
|
||||
" maxlen = self.maxlen\n",
|
||||
" positions = tf.range(start=0, limit=maxlen, delta=1)\n",
|
||||
" positions = self.pos_emb(positions)\n",
|
||||
" x = self.token_emb(x)\n",
|
||||
" return x+positions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпрд╛ рд╕реНрддрд░рд╛рдордзреНрдпреЗ рджреЛрди `Embedding` рд╕реНрддрд░рд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ: рдЯреЛрдХрдирд╕рд╛рдареА рдПрдореНрдмреЗрдбрд┐рдВрдЧ (рдЬрд╕рд╛ рдЖрдкрдг рдпрд╛рдкреВрд░реНрд╡реА рдЪрд░реНрдЪрд╛ рдХреЗрд▓реА рдЖрд╣реЗ) рдЖрдгрд┐ рдЯреЛрдХрдирдЪреНрдпрд╛ рд╕реНрдерд╛рдирд╛рдВрд╕рд╛рдареА. рдЯреЛрдХрдирдЪреА рд╕реНрдерд╛рдирдВ 0 рддреЗ `maxlen` рдкрд░реНрдпрдВрдд рдиреИрд╕рд░реНрдЧрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдкреНрд░рдорд╛рдгреЗ `tf.range` рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реА рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдирдВрддрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрддрд░рд╛рдордзреВрди рдкрд╛рдард╡рд▓реА рдЬрд╛рддрд╛рдд. рдкрд░рд┐рдгрд╛рдореА рджреЛрди рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡реНрд╣реЗрдХреНрдЯрд░ рдПрдХрддреНрд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреНрдпрд╛рдореБрд│реЗ `maxlen`$\\times$`embed_dim` рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ рдЗрдирдкреБрдЯрдЪреЗ рд╕реНрдерд╛рдирд┐рдХ-рдПрдореНрдмреЗрдбреЗрдб рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рддрдпрд╛рд░ рд╣реЛрддреЗ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛, рдЖрдкрдг рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдмреНрд▓реЙрдХ рд▓рд╛рдЧреВ рдХрд░реВрдпрд╛. рд╣рд╛ рдмреНрд▓реЙрдХ рдпрд╛рдкреВрд░реНрд╡реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╕реНрддрд░рд╛рдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛ рдШреЗрдИрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class TransformerBlock(keras.layers.Layer):\n",
|
||||
" def __init__(self, embed_dim, num_heads, ff_dim, rate=0.1):\n",
|
||||
" super(TransformerBlock, self).__init__()\n",
|
||||
" self.att = keras.layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim, name='attn')\n",
|
||||
" self.ffn = keras.Sequential(\n",
|
||||
" [keras.layers.Dense(ff_dim, activation=\"relu\"), keras.layers.Dense(embed_dim),]\n",
|
||||
" )\n",
|
||||
" self.layernorm1 = keras.layers.LayerNormalization(epsilon=1e-6)\n",
|
||||
" self.layernorm2 = keras.layers.LayerNormalization(epsilon=1e-6)\n",
|
||||
" self.dropout1 = keras.layers.Dropout(rate)\n",
|
||||
" self.dropout2 = keras.layers.Dropout(rate)\n",
|
||||
"\n",
|
||||
" def call(self, inputs, training):\n",
|
||||
" attn_output = self.att(inputs, inputs)\n",
|
||||
" attn_output = self.dropout1(attn_output, training=training)\n",
|
||||
" out1 = self.layernorm1(inputs + attn_output)\n",
|
||||
" ffn_output = self.ffn(out1)\n",
|
||||
" ffn_output = self.dropout2(ffn_output, training=training)\n",
|
||||
" return self.layernorm2(out1 + ffn_output)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛, рдЖрдкрдг рдкреВрд░реНрдг рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдореЙрдбреЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЖрд╣реЛрдд:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential_1\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"text_vectorization (TextVect (None, 256) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"token_and_position_embedding (None, 256, 32) 648192 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"transformer_block (Transform (None, 256, 32) 10656 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"global_average_pooling1d (Gl (None, 32) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_2 (Dropout) (None, 32) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense_2 (Dense) (None, 20) 660 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_3 (Dropout) (None, 20) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense_3 (Dense) (None, 4) 84 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 659,592\n",
|
||||
"Trainable params: 659,592\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"embed_dim = 32 # Embedding size for each token\n",
|
||||
"num_heads = 2 # Number of attention heads\n",
|
||||
"ff_dim = 32 # Hidden layer size in feed forward network inside transformer\n",
|
||||
"maxlen = 256\n",
|
||||
"vocab_size = 20000\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,output_sequence_length=maxlen, input_shape=(1,)),\n",
|
||||
" TokenAndPositionEmbedding(maxlen, vocab_size, embed_dim),\n",
|
||||
" TransformerBlock(embed_dim, num_heads, ff_dim),\n",
|
||||
" keras.layers.GlobalAveragePooling1D(),\n",
|
||||
" keras.layers.Dropout(0.1),\n",
|
||||
" keras.layers.Dense(20, activation=\"relu\"),\n",
|
||||
" keras.layers.Dropout(0.1),\n",
|
||||
" keras.layers.Dense(4, activation=\"softmax\")\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training tokenizer\n",
|
||||
"938/938 [==============================] - 45s 39ms/step - loss: 0.4978 - acc: 0.8068 - val_loss: 0.2808 - val_acc: 0.9124\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f9c2427a0d0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print('Training tokenizer')\n",
|
||||
"model.layers[0].adapt(ds_train.map(extract_text))\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BERT Transformer Models\n",
|
||||
"\n",
|
||||
"**BERT** (Bidirectional Encoder Representations from Transformers) рд╣рд╛ рдПрдХ рдореЛрдард╛ рдорд▓реНрдЯреА рд▓реЗрдпрд░ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ *BERT-base* рд╕рд╛рдареА 12 рд╕реНрддрд░ рдЖрдгрд┐ *BERT-large* рд╕рд╛рдареА 24 рд╕реНрддрд░ рдЖрд╣реЗрдд. рд╣рд╛ рдореЙрдбреЗрд▓ рдкреНрд░рдердо рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдордЬрдХреВрд░ рдбреЗрдЯрд╛рд╡рд░ (WikiPedia + рдкреБрд╕реНрддрдХреЗ) рдЕрд╕реБрдкрд░рд╡рд╛рдЗрдЬреНрдб рдЯреНрд░реЗрдирд┐рдВрдЧрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди (рд╡рд╛рдХреНрдпрд╛рддреАрд▓ рдорд╛рд╕реНрдХ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдЪреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдгреЗ) рдкреНрд░реА-рдЯреНрд░реЗрди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдкреНрд░реА-рдЯреНрд░реЗрдирд┐рдВрдЧ рджрд░рдореНрдпрд╛рди рдореЙрдбреЗрд▓ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рднрд╛рд╖рд┐рдХ рд╕рдордЬ рдЖрддреНрдорд╕рд╛рдд рдХрд░рддреЗ, рдЬреНрдпрд╛рдЪрд╛ рдирдВрддрд░ рдЗрддрд░ рдбреЗрдЯрд╛рд╕реЗрдЯрд╕рд╣ рдлрд╛рдЗрди рдЯреНрдпреВрдирд┐рдВрдЧрджреНрд╡рд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд▓рд╛ **рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рд▓рд░реНрдирд┐рдВрдЧ** рдореНрд╣рдгрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"BERT, DistilBERT, BigBird, OpenGPT3 рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪреЗ рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗрдд, рдЬреЗ рдлрд╛рдЗрди рдЯреНрдпреВрди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рдкреНрд░реА-рдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реНрдпрд╛ BERT рдореЙрдбреЗрд▓рдЪрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╕рд╛ рдХрд░рддрд╛ рдпреЗрдИрд▓. рдЖрдкрдг [рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬ](https://www.tensorflow.org/text/tutorials/classify_text_with_bert) рдордзреВрди рдХрд▓реНрдкрдирд╛ рдЖрдгрд┐ рдХрд╛рд╣реА рдХреЛрдб рдЙрдзрд╛рд░ рдШреЗрдК.\n",
|
||||
"\n",
|
||||
"рдкреНрд░реА-рдЯреНрд░реЗрди рдХреЗрд▓реЗрд▓реЗ рдореЙрдбреЗрд▓ рд▓реЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг **Tensorflow hub** рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. рдкреНрд░рдердо, BERT-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рд▓реЛрдб рдХрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "ModuleNotFoundError",
|
||||
"evalue": "No module named 'tensorflow_text'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_41180/4216669875.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mtensorflow_text\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mtensorflow_hub\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mhub\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mvectorizer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mhub\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mKerasLayer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
|
||||
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'tensorflow_text'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import tensorflow_text \n",
|
||||
"import tensorflow_hub as hub\n",
|
||||
"vectorizer = hub.KerasLayer('https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'input_type_ids': <tf.Tensor: shape=(1, 128), dtype=int32, numpy=\n",
|
||||
" array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int32)>,\n",
|
||||
" 'input_word_ids': <tf.Tensor: shape=(1, 128), dtype=int32, numpy=\n",
|
||||
" array([[ 101, 1045, 2293, 19081, 102, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0]], dtype=int32)>,\n",
|
||||
" 'input_mask': <tf.Tensor: shape=(1, 128), dtype=int32, numpy=\n",
|
||||
" array([[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int32)>}"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vectorizer(['I love transformers'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдореВрд│ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗрд▓рд╛ рддреЛрдЪ рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рд╡рд╛рдкрд░рдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ. рддрд╕реЗрдЪ, BERT рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рддреАрди рдШрдЯрдХ рдкрд░рдд рдХрд░рддреЛ:\n",
|
||||
"* `input_word_ids`, рдЬреЛ рдЗрдирдкреБрдЯ рд╡рд╛рдХреНрдпрд╛рдВрд╕рд╛рдареА рдЯреЛрдХрди рдХреНрд░рдорд╛рдВрдХрд╛рдВрдЪреА рдорд╛рд▓рд┐рдХрд╛ рдЕрд╕рддреЛ\n",
|
||||
"* `input_mask`, рдЬреЛ рджрд░реНрд╢рд╡рддреЛ рдХреА рдорд╛рд▓рд┐рдХреЗрдЪрд╛ рдХреЛрдгрддрд╛ рднрд╛рдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрдирдкреБрдЯ рдЖрд╣реЗ рдЖрдгрд┐ рдХреЛрдгрддрд╛ рднрд╛рдЧ рдкреЕрдбрд┐рдВрдЧ рдЖрд╣реЗ. рд╣реЗ `Masking` рд╕реНрддрд░рд╛рджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдорд╛рд╕реНрдХрд╕рд╛рд░рдЦреЗрдЪ рдЕрд╕рддреЗ\n",
|
||||
"* `input_type_ids` рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓рд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдПрдХрд╛ рдорд╛рд▓рд┐рдХреЗрдд рджреЛрди рдЗрдирдкреБрдЯ рд╡рд╛рдХреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.\n",
|
||||
"\n",
|
||||
"рдпрд╛рдирдВрддрд░, рдЖрдкрдг BERT рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдПрдХреНрд╕реНрдЯреНрд░реЕрдХреНрдЯрд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"bert = hub.KerasLayer('https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-128_A-2/1')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"pooled_output -> (1, 128)\n",
|
||||
"encoder_outputs -> 4\n",
|
||||
"sequence_output -> (1, 128, 128)\n",
|
||||
"default -> (1, 128)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"z = bert(vectorizer(['I love transformers']))\n",
|
||||
"for i,x in z.items():\n",
|
||||
" print(f\"{i} -> { len(x) if isinstance(x, list) else x.shape }\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рддрд░, BERT рд▓реЗрдпрд░ рдХрд╛рд╣реА рдЙрдкрдпреБрдХреНрдд рдкрд░рд┐рдгрд╛рдо рдкрд░рдд рдХрд░рддреЗ:\n",
|
||||
"* `pooled_output` рд╣рд╛ рдЕрдиреБрдХреНрд░рдорд╛рддреАрд▓ рд╕рд░реНрд╡ рдЯреЛрдХрдирдЪрд╛ рд╕рд░рд╛рд╕рд░реА рдХрд╛рдврдгреНрдпрд╛рдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрд╣реЗ. рддреБрдореНрд╣реА рдпрд╛рд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рдПрдХ рдмреБрджреНрдзрд┐рдорд╛рди рд╕рд┐рдореЕрдВрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореНрд╣рдгреВрди рдкрд╛рд╣реВ рд╢рдХрддрд╛. рд╣реЗ рдЖрдкрд▓реНрдпрд╛ рдЖрдзреАрдЪреНрдпрд╛ рдореЙрдбреЗрд▓рдордзреАрд▓ `GlobalAveragePooling1D` рд▓реЗрдпрд░рдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯрд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ.\n",
|
||||
"* `sequence_output` рд╣рд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рд▓реЗрдпрд░рдЪрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЖрд╣реЗ (рдЖрдкрд▓реНрдпрд╛ рд╡рд░реАрд▓ рдореЙрдбреЗрд▓рдордзреАрд▓ `TransformerBlock` рдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ).\n",
|
||||
"* `encoder_outputs` рд╣реЗ рд╕рд░реНрд╡ рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдорд░ рд▓реЗрдпрд░реНрд╕рдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдЖрд╣реЗрдд. рдЖрдкрдг 4-рд▓реЗрдпрд░ BERT рдореЙрдбреЗрд▓ рд▓реЛрдб рдХреЗрд▓реЗ рдЖрд╣реЗ (рдЬрд╕реЗ рддреБрдореНрд╣реА рдирд╛рд╡рд╛рд╡рд░реВрди рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡реВ рд╢рдХрддрд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ `4_H` рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ), рддреНрдпрд╛рдореБрд│реЗ рдпрд╛рдордзреНрдпреЗ 4 рдЯреЗрдиреНрд╕рд░реНрд╕ рдЖрд╣реЗрдд. рдпрд╛рддреАрд▓ рд╢реЗрд╡рдЯрдЪрд╛ `sequence_output` рд╕рд╛рд░рдЦрд╛рдЪ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдПрдВрдб-рдЯреВ-рдПрдВрдб рд╡рд░реНрдЧреАрдХрд░рдг рдореЙрдбреЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ. рдЖрдкрдг *рдлрдВрдХреНрд╢рдирд▓ рдореЙрдбреЗрд▓ рдбрд┐рдлрд┐рдирд┐рд╢рди* рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рдЬрд┐рдереЗ рдЖрдкрдг рдореЙрдбреЗрд▓ рдЗрдирдкреБрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ, рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛рдЪреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯрдЪреА рдЧрдгрдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдорд╛рд▓рд┐рдХрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдкреНрд░рджрд╛рди рдХрд░реВ. рдЖрдкрдг BERT рдореЙрдбреЗрд▓рдЪреЗ рд╡реЗрдЯреНрд╕ рдЯреНрд░реЗрди рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдареЗрд╡рдгрд╛рд░ рдирд╛рд╣реА, рдЖрдгрд┐ рдлрдХреНрдд рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдЯреНрд░реЗрди рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"model\"\n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # Connected to \n",
|
||||
"==================================================================================================\n",
|
||||
"input_1 (InputLayer) [(None,)] 0 \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer (KerasLayer) {'input_type_ids': ( 0 input_1[0][0] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer_1 (KerasLayer) {'pooled_output': (N 4782465 keras_layer[0][0] \n",
|
||||
" keras_layer[0][1] \n",
|
||||
" keras_layer[0][2] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dropout_4 (Dropout) (None, 128) 0 keras_layer_1[0][5] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dense_4 (Dense) (None, 4) 516 dropout_4[0][0] \n",
|
||||
"==================================================================================================\n",
|
||||
"Total params: 4,782,981\n",
|
||||
"Trainable params: 516\n",
|
||||
"Non-trainable params: 4,782,465\n",
|
||||
"__________________________________________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"inp = keras.Input(shape=(),dtype=tf.string)\n",
|
||||
"x = vectorizer(inp)\n",
|
||||
"x = bert(x)\n",
|
||||
"x = keras.layers.Dropout(0.1)(x['pooled_output'])\n",
|
||||
"out = keras.layers.Dense(4,activation='softmax')(x)\n",
|
||||
"model = keras.models.Model(inp,out)\n",
|
||||
"bert.trainable = False\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"938/938 [==============================] - 528s 559ms/step - loss: 0.8056 - acc: 0.6983 - val_loss: 0.5953 - val_acc: 0.7888\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f9bb1e36d00>"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд░реА рдЯреНрд░реЗрди рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдкреЕрд░рд╛рдорд┐рдЯрд░реНрд╕ рдХрдореА рдЕрд╕рд▓реЗ рддрд░реА, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦреВрдкрдЪ рдзреАрдореА рдЖрд╣реЗ, рдХрд╛рд░рдг BERT рдлреАрдЪрд░ рдПрдХреНрд╕реНрдЯреНрд░реЕрдХреНрдЯрд░ рд╕рдВрдЧрдгрдХреАрдпрджреГрд╖реНрдЯреНрдпрд╛ рдЬрдб рдЖрд╣реЗ. рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдЖрдореНрд╣реА рдпреЛрдЧреНрдп рдЕрдЪреВрдХрддрд╛ рд╕рд╛рдзреНрдп рдХрд░рдгреНрдпрд╛рдд рдЕрдпрд╢рд╕реНрд╡реА рдард░рд▓реЛ, рдХрджрд╛рдЪрд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдореБрд│реЗ рдХрд┐рдВрд╡рд╛ рдореЙрдбреЗрд▓ рдкреЕрд░рд╛рдорд┐рдЯрд░реНрд╕рдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдореБрд│реЗ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ BERT рдЪреЗ рд╡реЗрдЯреНрд╕ рдЕрдирдлреНрд░реАрдЬ рдХрд░реВрди рддреНрдпрд╛рд▓рд╛ рджреЗрдЦреАрд▓ рдЯреНрд░реЗрди рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдпрд╛рд╕рд╛рдареА рдЦреВрдкрдЪ рдХрдореА рд▓рд░реНрдирд┐рдВрдЧ рд░реЗрдЯ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рддрд╕реЗрдЪ **рд╡реЙрд░реНрдордЕрдк** рдЖрдгрд┐ **AdamW** рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░ рд╡рд╛рдкрд░реВрди рдЕрдзрд┐рдХ рдХрд╛рд│рдЬреАрдкреВрд░реНрд╡рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдзреЛрд░рдг рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдСрдкреНрдЯрд┐рдорд╛рдпрдЭрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА `tf-models-official` рдкреЕрдХреЗрдЬ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"model\"\n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # Connected to \n",
|
||||
"==================================================================================================\n",
|
||||
"input_1 (InputLayer) [(None,)] 0 \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer (KerasLayer) {'input_type_ids': ( 0 input_1[0][0] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer_1 (KerasLayer) {'pooled_output': (N 4782465 keras_layer[0][0] \n",
|
||||
" keras_layer[0][1] \n",
|
||||
" keras_layer[0][2] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dropout_4 (Dropout) (None, 128) 0 keras_layer_1[0][5] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dense_4 (Dense) (None, 4) 516 dropout_4[0][0] \n",
|
||||
"==================================================================================================\n",
|
||||
"Total params: 4,782,981\n",
|
||||
"Trainable params: 4,782,980\n",
|
||||
"Non-trainable params: 1\n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"938/938 [==============================] - 629s 664ms/step - loss: 0.6344 - acc: 0.7658 - val_loss: 0.4876 - val_acc: 0.8247\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f9bb0bd0070>"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from official.nlp import optimization \n",
|
||||
"bert.trainable=True\n",
|
||||
"model.summary()\n",
|
||||
"epochs = 3\n",
|
||||
"opt = optimization.create_optimizer(\n",
|
||||
" init_lr=3e-5,\n",
|
||||
" num_train_steps=epochs*len(ds_train),\n",
|
||||
" num_warmup_steps=0.1*epochs*len(ds_train),\n",
|
||||
" optimizer_type='adamw')\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer=opt)\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд╕реЗ рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦреВрдкрдЪ рд╣рд│реВрд╣рд│реВ рдЪрд╛рд▓рддреЗ - рдкрдг рддреБрдореНрд╣рд╛рд▓рд╛ рдХрджрд╛рдЪрд┐рдд рдХрд╛рд╣реА epochs (5-10) рд╕рд╛рдареА рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдКрди рдкрд╛рд╣рд╛рд╡реЗрд╕реЗ рд╡рд╛рдЯреЗрд▓ рдЖрдгрд┐ рдЖрдкрдг рдпрд╛рдкреВрд░реНрд╡реА рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд рд╕рд░реНрд╡реЛрддреНрддрдо рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡реВ рд╢рдХрддрд╛ рдХрд╛ рддреЗ рддрдкрд╛рд╕рд╛рд╡реЗ.\n",
|
||||
"\n",
|
||||
"## Huggingface Transformers рд▓рд╛рдпрдмреНрд░рд░реА\n",
|
||||
"\n",
|
||||
"Transformer рдореЙрдбреЗрд▓реНрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдгрдЦреА рдПрдХ рдЦреВрдк рд╕рд╛рдорд╛рдиреНрдп (рдЖрдгрд┐ рдереЛрдбрд╛рд╕рд╛ рд╕реЛрдкрд╛) рдорд╛рд░реНрдЧ рдореНрд╣рдгрдЬреЗ [HuggingFace рдкреЕрдХреЗрдЬ](https://github.com/huggingface/), рдЬреЗ рд╡рд┐рд╡рд┐рдз NLP рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рд╕реЛрдкреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ. рд╣реЗ Tensorflow рдЖрдгрд┐ PyTorch рдпрд╛ рдЖрдгрдЦреА рдПрдХрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдлреНрд░реЗрдорд╡рд░реНрдХрд╕рд╛рдареА рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк**: рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ Transformers рд▓рд╛рдпрдмреНрд░рд░реА рдХрд╢реА рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рдд рд░рд╕ рдирд╕реЗрд▓ - рддрд░ рддреБрдореНрд╣реА рдпрд╛ рдиреЛрдЯрдмреБрдХрдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдЬрд╛рдК рд╢рдХрддрд╛, рдХрд╛рд░рдг рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрдкреЗрдХреНрд╖рд╛ рдХрд╛рд╣реА рд╡реЗрдЧрд│реЗ рджрд┐рд╕рдгрд╛рд░ рдирд╛рд╣реА. рдЖрдореНрд╣реА рд╡реЗрдЧрд│реА рд▓рд╛рдпрдмреНрд░рд░реА рдЖрдгрд┐ рддреБрд▓рдиреЗрдиреЗ рдореЛрдареНрдпрд╛ рдореЙрдбреЗрд▓рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди BERT рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪреА рддреАрдЪ рдкрд╛рд╡рд▓реЗ рдкреБрдиреНрд╣рд╛ рдШреЗрдгрд╛рд░ рдЖрд╣реЛрдд. рддреНрдпрд╛рдореБрд│реЗ, рдкреНрд░рдХреНрд░рд┐рдпреЗрдордзреНрдпреЗ рдХрд╛рд╣реАрд╕реЗ рджреАрд░реНрдШ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ, рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдХреЛрдб рдкрд╛рд╣рдгреЗ рдЕрдзрд┐рдХ рд╕реЛрдпреАрдЪреЗ рд╡рд╛рдЯреЗрд▓.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рдЖрдкрд▓реА рд╕рдорд╕реНрдпрд╛ [Huggingface Transformers](http://huggingface.co) рд╡рд╛рдкрд░реВрди рдХрд╢реА рд╕реЛрдбрд╡рддрд╛ рдпреЗрдИрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╕рд░реНрд╡рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдгрддрд╛ рдореЙрдбреЗрд▓ рдирд┐рд╡рдбрд╛рдпрдЪрд╛ рдЖрд╣реЗ рддреЗ рдард░рд╡рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдХрд╛рд╣реА рдЕрдВрдЧрднреВрдд рдореЙрдбреЗрд▓реНрд╕ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, Huggingface рдордзреНрдпреЗ [рдСрдирд▓рд╛рдЗрди рдореЙрдбреЗрд▓ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реА](https://huggingface.co/models) рдЖрд╣реЗ, рдЬрд┐рдереЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдореБрджрд╛рдпрд╛рдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдмрд░реАрдЪ рдкреНрд░реА-рдЯреНрд░реЗрди рдореЙрдбреЗрд▓реНрд╕ рд╕рд╛рдкрдбрддреАрд▓. рдпрд╛ рд╕рд░реНрд╡ рдореЙрдбреЗрд▓реНрд╕ рдХреЗрд╡рд│ рдореЙрдбреЗрд▓рдЪреЗ рдирд╛рд╡ рджрд┐рд▓реНрдпрд╛рдиреЗ рд▓реЛрдб рдЖрдгрд┐ рд╡рд╛рдкрд░рддрд╛ рдпреЗрддрд╛рдд. рдореЙрдбреЗрд▓рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рд╕рд░реНрд╡ рдмрд╛рдпрдирд░реА рдлрд╛рдЗрд▓реНрд╕ рдЖрдкреЛрдЖрдк рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓.\n",
|
||||
"\n",
|
||||
"рдХрд╛рд╣реА рд╡реЗрд│рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рддрдГрдЪреЗ рдореЙрдбреЗрд▓реНрд╕ рд▓реЛрдб рдХрд░рд╛рдпрдЪреА рдЧрд░рдЬ рднрд╛рд╕реЗрд▓, рдЕрд╢рд╛ рд╡реЗрд│реА рддреБрдореНрд╣реА рддреНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдЪрд╛ рдкрддреНрддрд╛ рджреЗрдК рд╢рдХрддрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рд░реНрд╡ рдлрд╛рдЗрд▓реНрд╕ рдЕрд╕рддреАрд▓, рдЬрд╕реЗ рдХреА рдЯреЛрдХрдирд╛рдпрдЭрд░рд╕рд╛рдареАрдЪреЗ рдкреЕрд░рд╛рдорд┐рдЯрд░реНрд╕, рдореЙрдбреЗрд▓ рдкреЕрд░рд╛рдорд┐рдЯрд░реНрд╕рд╕рд╣ `config.json` рдлрд╛рдЗрд▓, рдмрд╛рдпрдирд░реА рд╡реЗрдЯреНрд╕ рдЗрддреНрдпрд╛рджреА.\n",
|
||||
"\n",
|
||||
"рдореЙрдбреЗрд▓рдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░реВрди, рдЖрдкрдг рдореЙрдбреЗрд▓ рдЖрдгрд┐ рдЯреЛрдХрдирд╛рдпрдЭрд░ рджреЛрдиреНрд╣реА рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ. рдЪрд▓рд╛ рдЯреЛрдХрдирд╛рдпрдЭрд░рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import transformers\n",
|
||||
"\n",
|
||||
"# To load the model from Internet repository using model name. \n",
|
||||
"# Use this if you are running from your own copy of the notebooks\n",
|
||||
"bert_model = 'bert-base-uncased' \n",
|
||||
"\n",
|
||||
"# To load the model from the directory on disk. Use this for Microsoft Learn module, because we have\n",
|
||||
"# prepared all required files for you.\n",
|
||||
"#bert_model = './bert'\n",
|
||||
"\n",
|
||||
"tokenizer = transformers.BertTokenizer.from_pretrained(bert_model)\n",
|
||||
"\n",
|
||||
"MAX_SEQ_LEN = 128\n",
|
||||
"PAD_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.pad_token)\n",
|
||||
"UNK_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.unk_token)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`tokenizer` рдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ `encode` рдлрдВрдХреНрд╢рди рдЕрд╕рддреЗ рдЬреА рдереЗрдЯ рдордЬрдХреВрд░ рдПрдиреНрдХреЛрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[101, 23435, 12314, 2003, 1037, 2307, 7705, 2005, 17953, 2361, 102]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.encode('Tensorflow is a great framework for NLP')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдЯреЛрдХрдирд╛рдпрдЭрд░рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЕрдиреБрдХреНрд░рдо рдПрдХрд╛ рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдПрдиреНрдХреЛрдб рдХрд░реВ рд╢рдХрддреЛ рдЬреЛ рдореЙрдбреЗрд▓рд▓рд╛ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рдЕрд╕реЗрд▓, рдЙрджрд╛. `token_ids`, `input_mask` рдлреАрд▓реНрдбреНрд╕ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░реВрди. рддрд╕реЗрдЪ, рдЖрдореНрд╣реА `return_tensors='tf'` рдпреБрдХреНрддрд┐рд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░реВрди Tensorflow рдЯреЗрдиреНрд╕рд░реНрд╕ рд╣рд╡реЗ рдЖрд╣реЗрдд рд╣реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'input_ids': <tf.Tensor: shape=(1, 5), dtype=int32, numpy=array([[ 101, 7592, 1010, 2045, 102]], dtype=int32)>, 'token_type_ids': <tf.Tensor: shape=(1, 5), dtype=int32, numpy=array([[0, 0, 0, 0, 0]], dtype=int32)>, 'attention_mask': <tf.Tensor: shape=(1, 5), dtype=int32, numpy=array([[1, 1, 1, 1, 1]], dtype=int32)>}"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer(['Hello, there'],return_tensors='tf')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдкрд▓реНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдкрдг `bert-base-uncased` рдирд╛рд╡рд╛рдЪрд╛ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд BERT рдореЙрдбреЗрд▓ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. *Uncased* рдореНрд╣рдгрдЬреЗ рдореЙрдбреЗрд▓ рдХреЗрд╕-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд╛рд╣реА.\n",
|
||||
"\n",
|
||||
"рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪреНрдпрд╛ рд╡реЗрд│реА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЯреЛрдХрдирд╛рдЗрдЭ рдХреЗрд▓реЗрд▓реА рдЕрдиреБрдХреНрд░рдореЗ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдкреНрд░рджрд╛рди рдХрд░рд╛рд╡реА рд▓рд╛рдЧрддреЗ, рдЖрдгрд┐ рдореНрд╣рдгреВрдирдЪ рдЖрдкрдг рдбреЗрдЯрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдбрд┐рдЭрд╛рдЗрди рдХрд░реВ. рдХрд╛рд░рдг `tokenizer.encode` рд╣реА рдПрдХ Python рдлрдВрдХреНрд╢рди рдЖрд╣реЗ, рдЖрдкрдг рдорд╛рдЧреАрд▓ рдпреБрдирд┐рдЯрдордзреНрдпреЗ рдЬрд╕реЗ рдХреЗрд▓реЗ рд╣реЛрддреЗ рддреНрдпрд╛рдЪ рдкрджреНрдзрддреАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди `py_function` рд╡рд╛рдкрд░реВрди рддреА рдХреЙрд▓ рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 31,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def process(x):\n",
|
||||
" return tokenizer.encode(x.numpy().decode('utf-8'),return_tensors='tf',padding='max_length',max_length=MAX_SEQ_LEN,truncation=True)[0]\n",
|
||||
"\n",
|
||||
"def process_fn(x):\n",
|
||||
" s = x['title']+' '+x['description']\n",
|
||||
" e = tf.py_function(process,inp=[s],Tout=(tf.int32))\n",
|
||||
" e.set_shape(MAX_SEQ_LEN)\n",
|
||||
" return e,x['label']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг `BertForSequenceClassification` рдкреЕрдХреЗрдЬ рд╡рд╛рдкрд░реВрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбреЗрд▓ рд▓реЛрдб рдХрд░реВ рд╢рдХрддреЛ. рдпрд╛рдореБрд│реЗ рдЖрдкрд▓реЗ рдореЙрдбреЗрд▓ рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрдзреАрдЪ рддрдпрд╛рд░ рдЕрд╕рддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ. рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЪреЗрддрд╛рд╡рдгреА рд╕рдВрджреЗрд╢ рджрд┐рд╕реЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдореНрд╣рдЯрд▓реЗ рдЬрд╛рдИрд▓ рдХреА рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддреНрдпрд╛рдЪреЗ рд╡реЗрдЯреНрд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд рдЖрдгрд┐ рдореЙрдбреЗрд▓рд▓рд╛ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓ - рддреЗ рдкреВрд░реНрдгрдкрдгреЗ рдареАрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг рдЖрдкрдг рдиреЗрдордХреЗ рддреЗрдЪ рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 32,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"model = transformers.TFBertForSequenceClassification.from_pretrained(bert_model,num_labels=4,output_attentions=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"tf_bert_for_sequence_classification_1\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"bert (TFBertMainLayer) multiple 109482240 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_75 (Dropout) multiple 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"classifier (Dense) multiple 3076 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 109,485,316\n",
|
||||
"Trainable params: 109,485,316\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`summary()` рд╡рд░реВрди рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА, рдореЙрдбреЗрд▓рдордзреНрдпреЗ рдЬрд╡рд│рдЬрд╡рд│ 110 рджрд╢рд▓рдХреНрд╖ рдкреЕрд░рд╛рдорд┐рдЯрд░реНрд╕ рдЖрд╣реЗрдд! рдЧреГрд╣рд┐рдд рдзрд░рд▓реЗ рддрд░, рдЬрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреБрд▓рдиреЗрдиреЗ рд▓рд╣рд╛рди рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ рд╕рд╛рдзреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓, рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ BERT рдмреЗрд╕ рд▓реЗрдпрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреНрдпрд╛рдпрдЪреА рдЧрд░рдЬ рдирд╛рд╣реА:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 34,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"tf_bert_for_sequence_classification_1\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"bert (TFBertMainLayer) multiple 109482240 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_75 (Dropout) multiple 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"classifier (Dense) multiple 3076 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 109,485,316\n",
|
||||
"Trainable params: 3,076\n",
|
||||
"Non-trainable params: 109,482,240\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.layers[0].trainable = False\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдЖрд╣реЛрдд!\n",
|
||||
"\n",
|
||||
"> **рдЯреАрдк**: рдкреВрд░реНрдг-рд╕реНрдХреЗрд▓ BERT рдореЙрдбреЗрд▓рдЪреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдШреЗрдгреЗ рдЦреВрдк рд╡реЗрд│рдЦрд╛рдК рдЕрд╕реВ рд╢рдХрддреЗ! рддреНрдпрд╛рдореБрд│реЗ рдЖрдкрдг рдлрдХреНрдд рдкрд╣рд┐рд▓реНрдпрд╛ 32 рдмреЕрдЪреЗрд╕рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдШреЗрдгрд╛рд░ рдЖрд╣реЛрдд. рд╣реЗ рдлрдХреНрдд рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╕реЗ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рд╣реЗ рджрд╛рдЦрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ. рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреВрд░реНрдг-рд╕реНрдХреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд░реВрди рдкрд╛рд╣рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ - рддрд░ `steps_per_epoch` рдЖрдгрд┐ `validation_steps` рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд╛рдврд╛, рдЖрдгрд┐ рдереЛрдбрд╛ рд╡реЗрд│ рдерд╛рдВрдмрдгреНрдпрд╛рдЪреА рддрдпрд╛рд░реА рдХрд░рд╛!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 30,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"32/32 [==============================] - 142s 4s/step - loss: 1.3896 - acc: 0.2500 - val_loss: 1.3863 - val_acc: 0.2480\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f1d40a4b6a0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 30,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile('adam','sparse_categorical_crossentropy',['acc'])\n",
|
||||
"tf.get_logger().setLevel('ERROR')\n",
|
||||
"model.fit(ds_train.map(process_fn).batch(32),validation_data=ds_test.map(process_fn).batch(32),steps_per_epoch=32,validation_steps=2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд░ рддреБрдореНрд╣реА рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡рд▓реА рдЖрдгрд┐ рдкреБрд░реЗрд╕рд╛ рд╡реЗрд│ рджрд┐рд▓рд╛, рддрд╕реЗрдЪ рдЕрдиреЗрдХ epochs рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рд▓реЗ, рддрд░ рддреБрдореНрд╣реА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реВ рд╢рдХрддрд╛ рдХреА BERT рд╡рд░реНрдЧреАрдХрд░рдг рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрдЪреВрдХрддрд╛ рджреЗрдИрд▓! рдХрд╛рд░рдг BERT рдЖрдзреАрдЪ рднрд╛рд╖реЗрдЪреА рд░рдЪрдирд╛ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдордЬреВрди рдШреЗрддреЛ, рдЖрдгрд┐ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдЕрдВрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ fine-tune рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ. рдорд╛рддреНрд░, BERT рд╣рд╛ рдореЛрдард╛ рдореЙрдбреЗрд▓ рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ рд╕рдВрдкреВрд░реНрдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЦреВрдк рд╡реЗрд│ рдШреЗрддреЗ рдЖрдгрд┐ рддреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдЪрдВрдб рд╕рдВрдЧрдгрдХреАрдп рд╢рдХреНрддреАрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рддреЗ! (GPU, рдЖрдгрд┐ рд╢рдХреНрдпрддреЛ рдПрдХрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд).\n",
|
||||
"\n",
|
||||
"> **Note:** рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдореНрд╣реА рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди pre-trained BERT рдореЙрдбреЗрд▓рдкреИрдХреА рдПрдХ рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд. рдореЛрдареЗ рдореЙрдбреЗрд▓реНрд╕ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд рдЬреЗ рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рджреЗрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдореБрджреНрджрд╛\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдпреБрдирд┐рдЯрдордзреНрдпреЗ, рдЖрдкрдг **transformers** рдЖрдзрд╛рд░рд┐рдд рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдореЙрдбреЗрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд╛рд╣рд┐рд▓реЗ. рдЖрдкрдг рддреНрдпрд╛рдВрдЪрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрд▓реНрдпрд╛ рдЯреЗрдХреНрд╕реНрдЯ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛, рдкрд░рдВрддреБ рддреНрдпрд╛рдЪрдкреНрд░рдорд╛рдгреЗ BERT рдореЙрдбреЗрд▓реНрд╕рдЪрд╛ рдЙрдкрдпреЛрдЧ рдШрдЯрдХ рд╢реЛрдзрдгреЗ, рдкреНрд░рд╢реНрдиреЛрддреНрддрд░, рдЖрдгрд┐ рдЗрддрд░ NLP рдХрд╛рд░реНрдпрд╛рдВрд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.\n",
|
||||
"\n",
|
||||
"Transformer рдореЙрдбреЗрд▓реНрд╕ NLP рдордзреНрдпреЗ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛рдд, рдЖрдгрд┐ рдмрд╣реБрддреЗрдХ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдХрд╕реНрдЯрдо NLP рд╕реЛрд▓реНрдпреВрд╢рдиреНрд╕ рдЕрдВрдорд▓рд╛рдд рдЖрдгрддрд╛рдирд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдкрд╣рд┐рд▓реА рдирд┐рд╡рдб рдЕрд╕рд╛рд╡реА. рддрдерд╛рдкрд┐, рдкреНрд░рдЧрдд рдиреНрдпреВрд░рд▓ рдореЙрдбреЗрд▓реНрд╕ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдпрд╛ рдореЙрдбреНрдпреВрд▓рдордзреНрдпреЗ рдЪрд░реНрдЪрд┐рд▓реЗрд▓реНрдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХреНрд╕рдЪреНрдпрд╛ рдореВрд▓рднреВрдд рддрддреНрддреНрд╡рд╛рдВрдЪреЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдЕрддреНрдпрдВрдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py38_tensorflow",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "ab59c532409774988ab875f2260e8e53",
|
||||
"translation_date": "2025-08-28T09:26:33+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/TransformersTF.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,490 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдирд╛рдорд┐рдд рдШрдЯрдХ рдУрд│рдЦ (NER)\n",
|
||||
"\n",
|
||||
"рд╣рд╛ рдиреЛрдЯрдмреБрдХ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдордзреВрди рдШреЗрддрд▓реЗрд▓рд╛ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдкрдг [Annotated Corpus for Named Entity Recognition](https://www.kaggle.com/datasets/abhinavwalia95/entity-annotated-corpus) рдпрд╛ Kaggle рд╡рд░реАрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди NER рдореЙрдбреЗрд▓ рдХрд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреНрдпрд╛рдпрдЪреЗ рддреЗ рд╢рд┐рдХрдгрд╛рд░ рдЖрд╣реЛрдд. рдкреБрдвреЗ рдЬрд╛рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдХреГрдкрдпрд╛ [ner_dataset.csv](https://www.kaggle.com/datasets/abhinavwalia95/entity-annotated-corpus?resource=download&select=ner_dataset.csv) рдлрд╛рдЗрд▓ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдбрд┐рд░реЗрдХреНрдЯрд░реАрдордзреНрдпреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 62,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import numpy as np"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдбреЗрдЯрд╛рд╕реЗрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЖрдореНрд╣реА рдбреЗрдЯрд╛рд╕реЗрдЯ рд╡рд╛рдЪреВрди рддреЗ рдПрдХрд╛ рдбреЗрдЯрд╛ рдлреНрд░реЗрдордордзреНрдпреЗ рдЖрдгрдгреНрдпрд╛рдкрд╛рд╕реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВ. рддреБрдореНрд╣рд╛рд▓рд╛ Pandas рд╡рд╛рдкрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдЬрд╛рдгреВрди рдШреНрдпрд╛рдпрдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдордЪреНрдпрд╛ [Data Science for Beginners](http://aka.ms/datascience-beginners) рдордзреАрд▓ [рдбреЗрдЯрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢рд┐рдХрд╡рдгреА](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python) рд▓рд╛ рднреЗрдЯ рджреНрдпрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>Sentence #</th>\n",
|
||||
" <th>Word</th>\n",
|
||||
" <th>POS</th>\n",
|
||||
" <th>Tag</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>Sentence: 1</td>\n",
|
||||
" <td>Thousands</td>\n",
|
||||
" <td>NNS</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>of</td>\n",
|
||||
" <td>IN</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>demonstrators</td>\n",
|
||||
" <td>NNS</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>have</td>\n",
|
||||
" <td>VBP</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>marched</td>\n",
|
||||
" <td>VBN</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" Sentence # Word POS Tag\n",
|
||||
"0 Sentence: 1 Thousands NNS O\n",
|
||||
"1 NaN of IN O\n",
|
||||
"2 NaN demonstrators NNS O\n",
|
||||
"3 NaN have VBP O\n",
|
||||
"4 NaN marched VBN O"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df = pd.read_csv('ner_dataset.csv',encoding='unicode-escape')\n",
|
||||
"df.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array(['O', 'B-geo', 'B-gpe', 'B-per', 'I-geo', 'B-org', 'I-org', 'B-tim',\n",
|
||||
" 'B-art', 'I-art', 'I-per', 'I-gpe', 'I-tim', 'B-nat', 'B-eve',\n",
|
||||
" 'I-eve', 'I-nat'], dtype=object)"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tags = df.Tag.unique()\n",
|
||||
"tags"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'O'"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"id2tag = dict(enumerate(tags))\n",
|
||||
"tag2id = { v : k for k,v in id2tag.items() }\n",
|
||||
"\n",
|
||||
"id2tag[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣рд╛рд╕рд╣ рддреЗрдЪ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрд╕рд╛рдареА, рдЖрдкрдг рд╢рдмреНрджрд╛рдВрдЪреА рд╡рд╛рд░рдВрд╡рд╛рд░рддрд╛ рд╡рд┐рдЪрд╛рд░рд╛рдд рди рдШреЗрддрд╛ рд╢рдмреНрджрд╕рдВрдЧреНрд░рд╣ рддрдпрд╛рд░ рдХрд░реВ; рдкреНрд░рддреНрдпрдХреНрд╖ рдЬреАрд╡рдирд╛рдд, рдЖрдкрдг Keras рд╡реНрд╣реЗрдХреНрдЯрд░рд╛рдпрдЭрд░ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рд╢рдмреНрджрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдорд░реНрдпрд╛рджрд┐рдд рдХрд░реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vocab = set(df['Word'].apply(lambda x: x.lower()))\n",
|
||||
"id2word = { i+1 : v for i,v in enumerate(vocab) }\n",
|
||||
"id2word[0] = '<UNK>'\n",
|
||||
"vocab.add('<UNK>')\n",
|
||||
"word2id = { v : k for k,v in id2word.items() }"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╕рд╛рдареА рд╡рд╛рдХреНрдпрд╛рдВрдЪрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪрд╛ рдЖрд╣реЗ. рдЪрд▓рд╛ рдореВрд│ рдбреЗрдЯрд╛рд╕реЗрдЯрдордзреВрди рдлреЗрд░рдлрдЯрдХрд╛ рдорд╛рд░реВ рдЖрдгрд┐ рд╕рд░реНрд╡ рд╕реНрд╡рддрдВрддреНрд░ рд╡рд╛рдХреНрдпреЗ `X` (рд╢рдмреНрджрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреА) рдЖрдгрд┐ `Y` (рдЯреЛрдХрдирдЪреА рдпрд╛рджреА) рдордзреНрдпреЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 41,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X,Y = [],[]\n",
|
||||
"s,t = [],[]\n",
|
||||
"for i,row in df[['Sentence #','Word','Tag']].iterrows():\n",
|
||||
" if pd.isna(row['Sentence #']):\n",
|
||||
" s.append(row['Word'])\n",
|
||||
" t.append(row['Tag'])\n",
|
||||
" else:\n",
|
||||
" if len(s)>0:\n",
|
||||
" X.append(s)\n",
|
||||
" Y.append(t)\n",
|
||||
" s,t = [row['Word']],[row['Tag']]\n",
|
||||
"X.append(s)\n",
|
||||
"Y.append(t)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 93,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"([10386,\n",
|
||||
" 23515,\n",
|
||||
" 4134,\n",
|
||||
" 29620,\n",
|
||||
" 7954,\n",
|
||||
" 13583,\n",
|
||||
" 21193,\n",
|
||||
" 12222,\n",
|
||||
" 27322,\n",
|
||||
" 18258,\n",
|
||||
" 5815,\n",
|
||||
" 15880,\n",
|
||||
" 5355,\n",
|
||||
" 25242,\n",
|
||||
" 31327,\n",
|
||||
" 18258,\n",
|
||||
" 27067,\n",
|
||||
" 23515,\n",
|
||||
" 26444,\n",
|
||||
" 14412,\n",
|
||||
" 358,\n",
|
||||
" 26551,\n",
|
||||
" 5011,\n",
|
||||
" 30558],\n",
|
||||
" [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0])"
|
||||
]
|
||||
},
|
||||
"execution_count": 93,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def vectorize(seq):\n",
|
||||
" return [word2id[x.lower()] for x in seq]\n",
|
||||
"\n",
|
||||
"def tagify(seq):\n",
|
||||
" return [tag2id[x] for x in seq]\n",
|
||||
"\n",
|
||||
"Xv = list(map(vectorize,X))\n",
|
||||
"Yv = list(map(tagify,Y))\n",
|
||||
"\n",
|
||||
"Xv[0], Yv[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдЖрдкрдг рд╕рд░реНрд╡ рд╡рд╛рдХреНрдпреЗ рдХрдорд╛рд▓ рд▓рд╛рдВрдмреАрдкрд░реНрдпрдВрдд 0 рдЯреЛрдХрдирд╕рд╣ рднрд░реВрди рдХрд╛рдвреВ. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирд╛рдд, рдЖрдкрдг рдЕрдзрд┐рдХ рд╣реБрд╢рд╛рд░ рд░рдгрдиреАрддреА рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ рдЖрдгрд┐ рдлрдХреНрдд рдПрдХрд╛ рдорд┐рдиреАрдмреЕрдЪрдордзреНрдпреЗ рдЕрдиреБрдХреНрд░рдо рднрд░реВрди рдХрд╛рдвреВ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 51,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X_data = keras.preprocessing.sequence.pad_sequences(Xv,padding='post')\n",
|
||||
"Y_data = keras.preprocessing.sequence.pad_sequences(Yv,padding='post')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯреЛрдХрди рд╡рд░реНрдЧреАрдХрд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЯреЛрдХрди рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА рдЖрдкрдг рджреЛрди-рд╕реНрддрд░реАрдп рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ LSTM рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. рд╢реЗрд╡рдЯрдЪреНрдпрд╛ LSTM рд╕реНрддрд░рд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рдШрди рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг `TimeDistributed` рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд, рдЬреА LSTM рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рд╕рдорд╛рди рдШрди рд╕реНрддрд░рд╛рдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 94,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential_3\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
" Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
" embedding_4 (Embedding) (None, 104, 300) 9545400 \n",
|
||||
" \n",
|
||||
" bidirectional_6 (Bidirectio (None, 104, 200) 320800 \n",
|
||||
" nal) \n",
|
||||
" \n",
|
||||
" bidirectional_7 (Bidirectio (None, 104, 200) 240800 \n",
|
||||
" nal) \n",
|
||||
" \n",
|
||||
" time_distributed_3 (TimeDis (None, 104, 17) 3417 \n",
|
||||
" tributed) \n",
|
||||
" \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 10,110,417\n",
|
||||
"Trainable params: 10,110,417\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"maxlen = X_data.shape[1]\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"num_tags = len(tags)\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Embedding(vocab_size, 300, input_length=maxlen),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(units=100, activation='tanh', return_sequences=True)),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(units=100, activation='tanh', return_sequences=True)),\n",
|
||||
" keras.layers.TimeDistributed(keras.layers.Dense(num_tags, activation='softmax'))\n",
|
||||
"])\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЗрдереЗ рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрд╕рд╛рдареА `maxlen` рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдд рдЖрд╣реЛрдд - рдЬрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ рдмрджрд▓рддреНрдпрд╛ рд▓рд╛рдВрдмреАрдЪреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓, рддрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛рдирд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдереЛрдбреЗ рдЕрдзрд┐рдХ рд╣реБрд╢рд╛рд░ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдКрдпрд╛. рдЧрддреАрд╕рд╛рдареА, рдЖрдкрдг рдлрдХреНрдд рдПрдХрдЪ epoch рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгрд╛рд░ рдЖрд╣реЛрдд, рдкрд░рдВрддреБ рдЖрдкрдг рдЕрдзрд┐рдХ рд╡реЗрд│рд╛рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛. рддрд╕реЗрдЪ, рдЖрдкрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдЪрд╛ рдХрд╛рд╣реА рднрд╛рдЧ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдореНрд╣рдгреВрди рд╡реЗрдЧрд│рд╛ рдареЗрд╡реВ рд╢рдХрддрд╛, рдЬреЗрдгреЗрдХрд░реВрди рд╕рддреНрдпрд╛рдкрди рдЕрдЪреВрдХрддрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рдпреЗрдИрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 57,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"1499/1499 [==============================] - 740s 488ms/step - loss: 0.0667 - acc: 0.9841\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x16f0bb2a310>"
|
||||
]
|
||||
},
|
||||
"execution_count": 57,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.fit(X_data,Y_data)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдирд┐рдХрд╛рд▓рд╛рдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рдЖрддрд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рдЖрдкрд▓рд╛ рдПрдВрдЯрд┐рдЯреА рдУрд│рдЦрдгреНрдпрд╛рдЪрд╛ рдореЙрдбреЗрд▓ рдПрдХрд╛ рдирдореБрдирд╛ рд╡рд╛рдХреНрдпрд╛рд╡рд░ рдХрд╕рд╛ рдХрд╛рд░реНрдп рдХрд░рддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 91,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"sent = 'John Smith went to Paris to attend a conference in cancer development institute'\n",
|
||||
"words = sent.lower().split()\n",
|
||||
"v = keras.preprocessing.sequence.pad_sequences([[word2id[x] for x in words]],padding='post',maxlen=maxlen)\n",
|
||||
"res = model(v)[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 92,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"john -> B-per\n",
|
||||
"smith -> I-per\n",
|
||||
"went -> O\n",
|
||||
"to -> O\n",
|
||||
"paris -> B-geo\n",
|
||||
"to -> O\n",
|
||||
"attend -> O\n",
|
||||
"a -> O\n",
|
||||
"conference -> O\n",
|
||||
"in -> O\n",
|
||||
"cancer -> B-org\n",
|
||||
"development -> I-org\n",
|
||||
"institute -> I-org\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"r = np.argmax(res.numpy(),axis=1)\n",
|
||||
"for i,w in zip(r,words):\n",
|
||||
" print(f\"{w} -> {id2tag[i]}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдореБрджреНрджрд╛\n",
|
||||
"\n",
|
||||
"рд╕рд╛рдзрд╛ LSTM рдореЙрдбреЗрд▓ рджреЗрдЦреАрд▓ NER рдордзреНрдпреЗ рд╕рдорд╛рдзрд╛рдирдХрд╛рд░рдХ рдкрд░рд┐рдгрд╛рдо рджрд╛рдЦрд╡рддреЛ. рдорд╛рддреНрд░, рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓реЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд│рд╡рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА BERT рд╕рд╛рд░рдЦреЗ рдореЛрдареЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓реНрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. Huggingface Transformers рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди NER рд╕рд╛рдареА BERT рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╕реЗ рджреНрдпрд╛рд╡реЗ, рдпрд╛рдЪреЗ рд╡рд░реНрдгрди [рдпреЗрдереЗ](https://huggingface.co/course/chapter7/2?fw=pt) рдХреЗрд▓реЗ рдЖрд╣реЗ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "254d25052dcca4ef84f59a05f2935bdc",
|
||||
"translation_date": "2025-08-28T09:31:32+00:00",
|
||||
"source_file": "lessons/5-NLP/19-NER/NER-TF.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,325 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## OpenAI GPT рд╕реЛрдмрдд рдкреНрд░рдпреЛрдЧ рдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"рд╣рд╛ рдиреЛрдЯрдмреБрдХ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдЪрд╛ рдПрдХ рднрд╛рдЧ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдиреЛрдЯрдмреБрдХрдордзреНрдпреЗ, рдЖрдкрдг Hugging Face рдЪреНрдпрд╛ `transformers` рд▓рд╛рдпрдмреНрд░рд░реАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди OpenAI-GPT рдореЙрдбреЗрд▓рд╕реЛрдмрдд рдХрд╕реЗ рдкреНрд░рдпреЛрдЧ рдХрд░реВ рд╢рдХрддреЛ рд╣реЗ рдкрд╛рд╣рдгрд╛рд░ рдЖрд╣реЛрдд.\n",
|
||||
"\n",
|
||||
"рддрд░ рдордЧ рд╡реЗрд│ рди рджрд╡рдбрддрд╛, рдЯреЗрдХреНрд╕реНрдЯ рдЬрдирд░реЗрдЯрд┐рдВрдЧ рдкрд╛рдИрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХрд░реВрдпрд╛ рдЖрдгрд┐ рдЬрдирд░реЗрдЯ рдХрд░рд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"c:\\Users\\bethanycheum\\Desktop\\AI-For-Beginners\\.venv\\lib\\site-packages\\tqdm\\auto.py:21: 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",
|
||||
"Downloading model.safetensors: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 479M/479M [04:28<00:00, 1.78MB/s] \n",
|
||||
"c:\\Users\\bethanycheum\\Desktop\\AI-For-Beginners\\.venv\\lib\\site-packages\\huggingface_hub\\file_download.py:133: UserWarning: `huggingface_hub` cache-system uses symlinks by default to efficiently store duplicated files but your machine does not support them in C:\\Users\\bethanycheum\\.cache\\huggingface\\hub. Caching files will still work but in a degraded version that might require more space on your disk. This warning can be disabled by setting the `HF_HUB_DISABLE_SYMLINKS_WARNING` environment variable. For more details, see https://huggingface.co/docs/huggingface_hub/how-to-cache#limitations.\n",
|
||||
"To support symlinks on Windows, you either need to activate Developer Mode or to run Python as an administrator. In order to see activate developer mode, see this article: https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development\n",
|
||||
" warnings.warn(message)\n",
|
||||
"Some weights of OpenAIGPTLMHeadModel were not initialized from the model checkpoint at openai-gpt and are newly initialized: ['position_ids']\n",
|
||||
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n",
|
||||
"Downloading (тАж)neration_config.json: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 74.0/74.0 [00:00<00:00, 48.8kB/s]\n",
|
||||
"Downloading (тАж)olve/main/vocab.json: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 816k/816k [00:00<00:00, 1.76MB/s]\n",
|
||||
"Downloading (тАж)olve/main/merges.txt: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 458k/458k [00:00<00:00, 1.11MB/s]\n",
|
||||
"Downloading (тАж)/main/tokenizer.json: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 1.27M/1.27M [00:00<00:00, 2.12MB/s]\n",
|
||||
"Xformers is not installed correctly. If you want to use memory_efficient_attention to accelerate training use the following command to install Xformers\n",
|
||||
"pip install xformers.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': \"Hello! I am a neural network, and I want to say that i apologize for not coming to you yourself, for not helping you, and that i was too busy getting dressed and studying for a midterm. you know, the kind where the teachers are like that and they come in pairs with their boyfriends, but not with theirs. it's true, that i have had a girlfriend, and i'm only going on wednesdays and thursdays because i was too busy with college, but maybe\"},\n",
|
||||
" {'generated_text': 'Hello! I am a neural network, and I want to say that we have been blessed with a wonderful gift ; no one of us has died at all. and our spirits are strong, very strong. in one very lucky moment of luck for you, all has been given direction and destiny, and for us there are no more mysteries. the earth has been chosen for you, and that earth is now ours, and you must be forever in our hearts. \" \\n the words, as one,'},\n",
|
||||
" {'generated_text': 'Hello! I am a neural network, and I want to say that if you would just turn and face the general, you would have a nice day. \" \\n \" sure thing, \" said one of the soldiers, and started to run. the rest of the soldiers followed, shouting. the general turned to general zulu, raising his arm. the general said something in his native language, and the general immediately started to run. zulu started to move toward the wall, with the'},\n",
|
||||
" {'generated_text': 'Hello! I am a neural network, and I want to say that i am not a doctor but an anthropologist to you, a specialist, a specialist in the field of astrobiological biology, and that i am very much involved in this investigation. i am not sure, i am not certain, but i can confirm your conclusions and therefore i will go to the top. i have a colleague who has just returned from this expedition and his findings confirm that you are a specialist. that is, he'},\n",
|
||||
" {'generated_text': \"Hello! I am a neural network, and I want to say that everyone here is in agreement that no matter how many times i say to myself,'he was never a man of action on the battlefield,'or'he 'll never take a chance at killing any civilians,'or'he 'll never let his men go undefended against enemy forces of this caliber,'or'that's just what i need in a day like today. \\n you see, there are only three groups that\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from transformers import pipeline\n",
|
||||
"\n",
|
||||
"model_name = 'openai-gpt' \n",
|
||||
"\n",
|
||||
"generator = pipeline('text-generation', model=model_name)\n",
|
||||
"\n",
|
||||
"generator(\"Hello! I am a neural network, and I want to say that\", max_length=100, num_return_sequences=5)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкреНрд░реЙрдореНрдкреНрдЯ рдЗрдВрдЬрд┐рдирд┐рдЕрд░рд┐рдВрдЧ\n",
|
||||
"\n",
|
||||
"рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛рдВрдордзреНрдпреЗ, рдпреЛрдЧреНрдп рдкреНрд░реЙрдореНрдкреНрдЯ рддрдпрд╛рд░ рдХрд░реВрди рддреБрдореНрд╣реА рдереЗрдЯ openai-gpt рдЬрдирд░реЗрд╢рдирдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВ рд╢рдХрддрд╛. рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдгреЗ рдкрд╛рд╣рд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'Synonyms of a word cat: the same cat i used to stare at, and you in'},\n",
|
||||
" {'generated_text': 'Synonyms of a word cat: cat of the woods, cat of the hills, cat of'},\n",
|
||||
" {'generated_text': 'Synonyms of a word cat: you! \\n \" it\\'s a girl. \" i said'},\n",
|
||||
" {'generated_text': \"Synonyms of a word cat: big cat. but how come, we didn't hear it\"},\n",
|
||||
" {'generated_text': 'Synonyms of a word cat: \" mea - o - c \" which makes them sound'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"Synonyms of a word cat:\", max_length=20, num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> positive this is so horrible - > positive that your brother is gay - >'},\n",
|
||||
" {'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> negative i will bring this on you -, < positive am i, i'},\n",
|
||||
" {'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> negative i have self - esteem i must take it - : \\n - -'},\n",
|
||||
" {'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> negative this is - : \\n if it were true that the devil would have'},\n",
|
||||
" {'generated_text': \"I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> positive i have you - > positive it's a bad thing, > positive\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this ->\", max_length=40, num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'Translate English to French: cat => chat, dog => chien, student => new and unusual. there were no more words to be'},\n",
|
||||
" {'generated_text': 'Translate English to French: cat => chat, dog => chien, student => student \\n his eyes were huge in his lean face as'},\n",
|
||||
" {'generated_text': \"Translate English to French: cat => chat, dog => chien, student => the teacher's words, their words, their words.\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"Translate English to French: cat => chat, dog => chien, student => \", top_k=50, max_length=30, num_return_sequences=3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'People who liked the movie The Matrix also liked it, and there was the movie of the first man after us. \\n i wanted to laugh at how stupid these stupid actors were. no, they were'},\n",
|
||||
" {'generated_text': \"People who liked the movie The Matrix also liked the movie, and the film was the result. and that's when the man in the story was brought into reality, after a few decades. \\n a\"},\n",
|
||||
" {'generated_text': 'People who liked the movie The Matrix also liked the movie the matrix, because there was a very old movie movie called the matrix, where there was a great super hero, and the super hero came out'},\n",
|
||||
" {'generated_text': \"People who liked the movie The Matrix also liked the movie that didn't have a chance to pay cash, if they could afford it. most often they got a good deal and a lot of money,\"},\n",
|
||||
" {'generated_text': \"People who liked the movie The Matrix also liked the movie, and i didn't seem to have the same problem. \\n i 'd met the other half of my family. i spent most of my time\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"People who liked the movie The Matrix also liked \", max_length=40, num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯреЗрдХреНрд╕реНрдЯ рдирдореБрдирд╛ рд░рдгрдиреАрддреА\n",
|
||||
"\n",
|
||||
"рдЖрддреНрддрд╛рдкрд░реНрдпрдВрдд рдЖрдкрдг рд╕рд╛рдзреА **рд▓реЛрднрд╛рдЪреА** рдирдореБрдирд╛ рд░рдгрдиреАрддреА рд╡рд╛рдкрд░рдд рд╣реЛрддреЛ, рдЬрд┐рдереЗ рдкреБрдвреАрд▓ рд╢рдмреНрдж рдЙрдЪреНрдЪрддрдо рд╕рдВрднрд╛рд╡реНрдпрддреЗрдЪреНрдпрд╛ рдЖрдзрд╛рд░рд╛рд╡рд░ рдирд┐рд╡рдбрд▓рд╛ рдЬрд╛рдд рд╣реЛрддрд╛. рд╣реЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw my friend, a young man, sprawled across the bed in his bed. \\n \" hi, i\\'m mike eptirard. \" \\n there was silence on the other side of the door. i listened for any trace of life but there was nothing. my heart began to pound, i was starting to sweat, i took out my wallet'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw my mother on the bed, hugging her legs to her chest and sobbing. i saw my dad and mother from the corner of my eye. \\n elfin face was covered in tears as i entered the room. my dad and mother also wept ; just as they did every other time i came to work. but this time, they had different faces'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw the room had changed because it was dark. it still smelled like a hospital. a new light shined through from a vent in the ceiling. i found myself in a bathroom and a small room with a sink and a wall of glass. the bathroom billion years ago. not so different from all of the rest of the apartment. \\n now...'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a large woman with dark hair and pale skin. she was asleep, but i noticed a faint movement of her face. i could sense she was awake. i got up and walked over to her. \\n \" hello miss. i am inspector michael o\\'dell ; we are investigating the case against you. i wanted to ask if you were the'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw i had an empty table and three empty chairs. that was all i needed. i had left a note on a table in the center of the room and had a pen in hand. \" \\n \" i think what you were doing was something he was doing to her. \" \\n \" yeah, \" i nodded with a grin. \" i'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"prompt = \"It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw\"\n",
|
||||
"generator(prompt,max_length=100,num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**рдмреАрдо рд╕рд░реНрдЪ** рдЬрдирд░реЗрдЯрд░рд▓рд╛ рдордЬрдХреВрд░ рдирд┐рд░реНрдорд┐рддреАрдЪреНрдпрд╛ рдЕрдиреЗрдХ рджрд┐рд╢рд╛рдВрдЪрд╛ (*рдмреАрдореНрд╕*) рд╢реЛрдз рдШреЗрдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдЙрдЪреНрдЪ рдПрдХреВрдг рд╕реНрдХреЛрдЕрд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рдирд┐рд╡рдб рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рддреБрдореНрд╣реА `num_beams` рдкреЕрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░реВрди рдмреАрдо рд╕рд░реНрдЪ рдХрд░реВ рд╢рдХрддрд╛. рддреБрдореНрд╣реА `no_repeat_ngram_size` рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВрди рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЖрдХрд╛рд░рд╛рдЪреНрдпрд╛ n-grams рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдмрджреНрджрд▓ рдореЙрдбреЗрд▓рд▓рд╛ рджрдВрдб рджреЗрдЦреАрд▓ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a man sitting in a chair with his head in his hands. he didn\\'t look up as i approached. \\n \" excuse me, sir, \" i said. \" can i help you? \" \\n the man looked up at me. his eyes were red - rimmed and his face was pale, as if he hadn\\'t slept in days'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a man sitting at a desk in the middle of the room. he had his back to me, so i couldn\\'t see what he was doing. \" \\n \" what did he look like? \" i asked as i sat down on the bed next to her. \\n she took a deep breath and looked at me with tears in her eyes'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a woman sitting on the bed, reading a book. she looked up at me and smiled. \\n \" hi, \" she said. \" can i help you? \" \\n i sat down next to her and looked around the room. the walls were white, and there was a large window in the middle of the wall that looked out on'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a man sitting at a table in the middle of the room. he looked up as i walked in, and when he saw me, he got up and walked over to me. \\n \" can i help you? \" he asked as he put his hand on the small of my back and led me to a chair at the other end of'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a woman sitting on the edge of her bed, reading a book. she looked up at me and smiled. \\n \" hello, \" she said. \" can i help you? \" \\n i didn\\'t know what to say, so i just sat down in the chair next to the bed and looked at her. her hair was dark brown'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"prompt = \"It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw\"\n",
|
||||
"generator(prompt,max_length=100,num_return_sequences=5,num_beams=10,no_repeat_ngram_size=2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**рдирдореБрдирд╛** рдкреБрдвреАрд▓ рд╢рдмреНрдж рдЕрдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рдирд┐рд╡рдбрддреЛ, рдореЙрдбреЗрд▓рдиреЗ рдкрд░рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдгрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди. рддреБрдореНрд╣реА `do_sample=True` рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рд╛рдкрд░реВрди рдирдореБрдирд╛ рдЪрд╛рд▓реВ рдХрд░реВ рд╢рдХрддрд╛. рддреБрдореНрд╣реА `temperature` рджреЗрдЦреАрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛, рдЬреНрдпрд╛рдореБрд│реЗ рдореЙрдбреЗрд▓ рдЕрдзрд┐рдХ рдХрд┐рдВрд╡рд╛ рдХрдореА рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реЛрдИрд▓.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw her. she was on the bed, but she looked very different. \\n \" honey, what\\'s the matter? \" i asked. \\n she sat up. \" i can\\'t believe it\\'s real. i\\'ve been dreaming about you for the last two days. \" \\n \" i can\\'t believe it either. i guess that\\'s how'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"prompt = \"It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw\"\n",
|
||||
"generator(prompt,max_length=100,do_sample=True,temperature=0.8)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдирдореБрдирд╛ рдШреЗрдгреНрдпрд╛рдордзреНрдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рджреЗрдЦреАрд▓ рдкреНрд░рджрд╛рди рдХрд░реВ рд╢рдХрддреЛ:\n",
|
||||
"* `top_k` рдирдореБрдирд╛ рдШреЗрддрд╛рдирд╛ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рд╢рдмреНрдж рдкрд░реНрдпрд╛рдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ. рдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛ рдордЬрдХреБрд░рд╛рдд рд╡рд┐рдЪрд┐рддреНрд░ (рдХрдореА-рдкреНрд░рдорд╛рдгрд┐рдХрддрд╛ рдЕрд╕рд▓реЗрд▓реЗ) рд╢рдмреНрдж рдпреЗрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдХрдореА рд╣реЛрддреЗ.\n",
|
||||
"* `top_p` рдпрд╛рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рд╕рд░реНрд╡рд╛рдд рд╕рдВрднрд╛рд╡реНрдп рд╢рдмреНрджрд╛рдВрдЪрд╛ рд▓рд╣рд╛рди рдЙрдкрд╕рдВрдЪ рдирд┐рд╡рдбрддреЛ, рдЬреНрдпрд╛рдВрдЪреА рдПрдХреВрдг рд╕рдВрднрд╛рд╡реНрдпрддрд╛ p рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЕрд╕рддреЗ.\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЬреЛрдбреВрди рдкреНрд░рдпреЛрдЧ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЛрдХрд│реНрдпрд╛ рдордирд╛рдиреЗ рдкреБрдвреЗ рдЬрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЖрдкрд▓реНрдпрд╛ рдореЙрдбреЗрд▓реНрд╕рдЪреЗ рдлрд╛рдЗрди-рдЯреНрдпреВрдирд┐рдВрдЧ\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрд╡рд░ [рдЖрдкрд▓реЗ рдореЙрдбреЗрд▓ рдлрд╛рдЗрди-рдЯреНрдпреВрди](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/fine-tuning?pivots=programming-language-studio?WT.mc_id=academic-77998-bethanycheum) рдХрд░реВ рд╢рдХрддрд╛. рдпрд╛рдореБрд│реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдордЬрдХреБрд░рд╛рдЪрд╛ рд╢реИрд▓реА рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдорд┐рд│реЗрд▓, рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдореЙрдбреЗрд▓ рдХрд╛рдпрдо рдареЗрд╡рдд.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рдореВрд│ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ рдЙрджреНрднрд╡рдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬреБрддреАрдВрд╕рд╛рдареА рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.10.11"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "d4ff89615d38924a55594f16d6d20678",
|
||||
"translation_date": "2025-08-28T09:30:12+00:00",
|
||||
"source_file": "lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ: рдбрд╛рдпреЛрдлрдВрдЯрд╛рдЗрди рд╕рдореАрдХрд░рдгреЗ\n",
|
||||
"\n",
|
||||
"> рд╣реЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ [AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ рдЖрдгрд┐ [рдпрд╛ рдкреЛрд╕реНрдЯ](https://habr.com/post/128704/) рд╡рд░реВрди рдкреНрд░реЗрд░рд┐рдд рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рддреБрдордЪреЗ рдЙрджреНрджрд┐рд╖реНрдЯ рдореНрд╣рдгрдЬреЗ **рдбрд╛рдпреЛрдлрдВрдЯрд╛рдЗрди рд╕рдореАрдХрд░рдг** рд╕реЛрдбрд╡рдгреЗ - рдПрдХ рдЕрд╕реЗ рд╕рдореАрдХрд░рдг рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдореБрд│реЗ рдЖрдгрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрд╛рдВрдХ рдЕрд╕рддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЦрд╛рд▓реАрд▓ рд╕рдореАрдХрд░рдг рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛:\n",
|
||||
"\n",
|
||||
"$$a+2b+3c+4d=30$$\n",
|
||||
"\n",
|
||||
"рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдореБрд│реЗ $a$,$b$,$c$,$d\\in\\mathbb{N}$ рд╢реЛрдзрд╛рдпрдЪреЗ рдЖрд╣реЗрдд рдЬреЗ рд╣реЗ рд╕рдореАрдХрд░рдг рдкреВрд░реНрдг рдХрд░рддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рд╕реВрдЪрдирд╛:\n",
|
||||
"1. рдореБрд│реЗ [0;30] рдпрд╛ рд╢реНрд░реЗрдгреАрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рд╛.\n",
|
||||
"1. рдЬреАрди рдореНрд╣рдгреВрди, рдореВрд│ рдореВрд▓реНрдпрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░реЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪреНрдпрд╛ рдЕрднрд╛рд╡рд╛рдиреЗ рдпреБрдХреНрдд рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "a967e1fa1e11ab2b6467b19349a4a9aa",
|
||||
"translation_date": "2025-08-28T07:26:32+00:00",
|
||||
"source_file": "lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,501 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдХрд╛рд░реНрдЯрдкреЛрд▓ рд╕рдВрддреБрд▓рдирд╛рд╕рд╛рдареА RL рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рд╣реЗ рдиреЛрдЯрдмреБрдХ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ. рд╣реЗ [рдЕрдзрд┐рдХреГрдд PyTorch рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓](https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html) рдЖрдгрд┐ [Cartpole PyTorch рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА](https://github.com/yc930401/Actor-Critic-pytorch) рдпрд╛рдкрд╛рд╕реВрди рдкреНрд░реЗрд░рд┐рдд рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рдЖрдкрдг RL рд╡рд╛рдкрд░реВрди рдПрдХ рдореЙрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реВ рдЬреЗ рдПрдХрд╛ рдЧрд╛рдбреНрдпрд╛рд╡рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЦрд╛рдВрдмрд╛рд▓рд╛ рд╕рдВрддреБрд▓рд┐рдд рдареЗрд╡реЗрд▓, рдЬреЛ рдЖрдбрд╡реНрдпрд╛ рдкрдЯреНрдЯреАрд╡рд░ рдбрд╛рд╡реАрдХрдбреЗ рдЖрдгрд┐ рдЙрдЬрд╡реАрдХрдбреЗ рд╣рд▓реВ рд╢рдХрддреЛ. рдЖрдореНрд╣реА [OpenAI Gym](https://www.gymlibrary.ml/) рдкрд░реНрдпрд╛рд╡рд░рдгрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЦрд╛рдВрдмрд╛рдЪреЗ рдЕрдиреБрдХрд░рдг рдХрд░реВ.\n",
|
||||
"\n",
|
||||
"> **Note**: рддреБрдореНрд╣реА рдпрд╛ рдзрдбреНрдпрд╛рдЪрд╛ рдХреЛрдб рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ (рдЙрджрд╛. Visual Studio Code рдордзреВрди) рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛, рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЕрдиреБрдХрд░рдг рдПрдХрд╛ рдирд╡реАрди рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рдЙрдШрдбреЗрд▓. рдСрдирд▓рд╛рдЗрди рдХреЛрдб рдЪрд╛рд▓рд╡рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдбрдордзреНрдпреЗ рдХрд╛рд╣реА рдмрджрд▓ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓, рдЬрд╕реЗ [рдпреЗрдереЗ](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ.\n",
|
||||
"\n",
|
||||
"рдЖрдкрдг рд╕реБрд░реБрд╡рд╛рдд рдЬрд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░реВрди рдХрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install gym"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ CartPole рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░реВрдпрд╛ рдЖрдгрд┐ рддреНрдпрд╛рд╡рд░ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рд╛рдпрдЪреЗ рддреЗ рдкрд╛рд╣реВрдпрд╛. рдПрдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдЧреБрдгрдзрд░реНрдо рдЕрд╕рддрд╛рдд:\n",
|
||||
"\n",
|
||||
"* **Action space** рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдореНрдпреБрд▓реЗрд╢рдирдЪреНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЖрдкрдг рдХрд░реВ рд╢рдХрдгрд╛рд▒реНрдпрд╛ рд╕рдВрднрд╛рд╡реНрдп рдХреНрд░рд┐рдпрд╛рдВрдЪреА рд╢реНрд░реЗрдгреА \n",
|
||||
"* **Observation space** рдореНрд╣рдгрдЬреЗ рдЖрдкрдг рдХрд░реВ рд╢рдХрдгрд╛рд▒реНрдпрд╛ рдирд┐рд░реАрдХреНрд╖рдгрд╛рдВрдЪреА рд╢реНрд░реЗрдгреА \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import gym\n",
|
||||
"\n",
|
||||
"env = gym.make(\"CartPole-v1\")\n",
|
||||
"\n",
|
||||
"print(f\"Action space: {env.action_space}\")\n",
|
||||
"print(f\"Observation space: {env.observation_space}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдЦрд╛рд▓реАрд▓ рд▓реВрдк рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдЪрд╛рд▓рд╡рддреЛ, рдЬреЛрдкрд░реНрдпрдВрдд `env.step` рдЯрд░реНрдорд┐рдиреЗрд╢рди рдлреНрд▓реЕрдЧ `done` рдкрд░рдд рдХрд░рдд рдирд╛рд╣реА. рдЖрдореНрд╣реА `env.action_space.sample()` рд╡рд╛рдкрд░реВрди рдХреГрддреА рдирд┐рд╡рдбреВ, рдЬреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдкреНрд░рдпреЛрдЧ рдлрд╛рд░ рд▓рд╡рдХрд░ рдЕрдкрдпрд╢реА рд╣реЛрдгреНрдпрд╛рдЪреА рд╢рдХреНрдпрддрд╛ рдЖрд╣реЗ (CartPole рд╡рд╛рддрд╛рд╡рд░рдг рд╕рдВрдкрддреЗ рдЬреЗрд╡реНрд╣рд╛ CartPole рдЪрд╛ рд╡реЗрдЧ, рддреНрдпрд╛рдЪреЗ рд╕реНрдерд╛рди рдХрд┐рдВрд╡рд╛ рдХреЛрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд░реНрдпрд╛рджрд╛рдВрдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рдЬрд╛рддреЛ).\n",
|
||||
"\n",
|
||||
"> рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдирд╡реАрди рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ рдЙрдШрдбреЗрд▓. рддреБрдореНрд╣реА рдХреЛрдб рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рд╡рд░реНрддрди рдХрд╕реЗ рдЖрд╣реЗ рддреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"env.reset()\n",
|
||||
"\n",
|
||||
"done = False\n",
|
||||
"total_reward = 0\n",
|
||||
"while not done:\n",
|
||||
" env.render()\n",
|
||||
" obs, rew, done, info = env.step(env.action_space.sample())\n",
|
||||
" total_reward += rew\n",
|
||||
" print(f\"{obs} -> {rew}\")\n",
|
||||
"print(f\"Total reward: {total_reward}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рдирд┐рд░реАрдХреНрд╖рдгрд╛рдВрдордзреНрдпреЗ 4 рд╕рдВрдЦреНрдпрд╛ рдЕрд╕рддрд╛рдд. рддреНрдпрд╛ рдЖрд╣реЗрдд:\n",
|
||||
"- рдЧрд╛рдбреАрдЪреА рд╕реНрдерд┐рддреА\n",
|
||||
"- рдЧрд╛рдбреАрдЪрд╛ рд╡реЗрдЧ\n",
|
||||
"- рдЦрд╛рдВрдмрд╛рдЪрд╛ рдХреЛрди\n",
|
||||
"- рдЦрд╛рдВрдмрд╛рдЪреНрдпрд╛ рдлрд┐рд░рдгреНрдпрд╛рдЪрд╛ рджрд░\n",
|
||||
"\n",
|
||||
"`rew` рд╣рд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдорд┐рд│рдгрд╛рд░рд╛ рдмрдХреНрд╖реАрд╕ рдЖрд╣реЗ. CartPole рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд, рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдЯрдкреНрдкреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ 1 рдЧреБрдг рджрд┐рд▓рд╛ рдЬрд╛рддреЛ, рдЖрдгрд┐ рдЙрджреНрджрд┐рд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдПрдХреВрдг рдмрдХреНрд╖реАрд╕ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдХрд░рдгреЗ, рдореНрд╣рдгрдЬреЗ CartPole рдкрдбрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рддреЛрд▓ рд╕рд╛рдВрднрд╛рд│рдгреНрдпрд╛рдЪрд╛ рдХрд╛рд▓рд╛рд╡рдзреА рд╡рд╛рдврд╡рдгреЗ.\n",
|
||||
"\n",
|
||||
"рд░рд┐рдЗрдирдлреЛрд░реНрд╕рдореЗрдВрдЯ рд▓рд░реНрдирд┐рдВрдЧ рджрд░рдореНрдпрд╛рди, рдЖрдкрд▓реЗ рдЙрджреНрджрд┐рд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдПрдХ **рдкреЙрд▓рд┐рд╕реА** $\\pi$ рддрдпрд╛рд░ рдХрд░рдгреЗ, рдЬреА рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддреА $s$ рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЛрдгрддреА рдХреНрд░рд┐рдпрд╛ $a$ рдШреНрдпрд╛рдпрдЪреА рддреЗ рд╕рд╛рдВрдЧреЗрд▓, рдореНрд╣рдгрдЬреЗрдЪ рдореВрд▓рддрдГ $a = \\pi(s)$.\n",
|
||||
"\n",
|
||||
"рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрднрд╛рд╡реНрдпрддрд╛рдзрд╛рд░рд┐рдд рдЙрдкрд╛рдп рд╣рд╡рд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рдкреЙрд▓рд┐рд╕реАрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд░рд┐рдпреЗрд╕рд╛рдареА рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдкрд░рдд рдХрд░рдгрд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рдореНрд╣рдгреВрди рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛, рдореНрд╣рдгрдЬреЗ $\\pi(a|s)$ рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рд╣реЛрдИрд▓ рдХреА рд╕реНрдерд┐рддреА $s$ рд╡рд░ рдЖрдкрдг рдХреНрд░рд┐рдпрд╛ $a$ рдШреНрдпрд╛рд╡реА рдпрд╛рдЪреА рд╕рдВрднрд╛рд╡реНрдпрддрд╛.\n",
|
||||
"\n",
|
||||
"## рдкреЙрд▓рд┐рд╕реА рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рдкрджреНрдзрдд\n",
|
||||
"\n",
|
||||
"рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреНрдпрд╛ RL рдЕрд▓реНрдЧреЛрд░рд┐рджрдордордзреНрдпреЗ, рдЬреНрдпрд╛рд▓рд╛ **рдкреЙрд▓рд┐рд╕реА рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ** рдореНрд╣рдгрддрд╛рдд, рдЖрдкрдг рдкреБрдвреАрд▓ рдХреНрд░рд┐рдпрд╛ рднрд╛рдХреАрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реВ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import numpy as np\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import torch\n",
|
||||
"\n",
|
||||
"num_inputs = 4\n",
|
||||
"num_actions = 2\n",
|
||||
"\n",
|
||||
"model = torch.nn.Sequential(\n",
|
||||
" torch.nn.Linear(num_inputs, 128, bias=False, dtype=torch.float32),\n",
|
||||
" torch.nn.ReLU(),\n",
|
||||
" torch.nn.Linear(128, num_actions, bias = False, dtype=torch.float32),\n",
|
||||
" torch.nn.Softmax(dim=1)\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣реА рдЕрдиреЗрдХ рдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡реВрди рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдпреЛрдЧрд╛рдирдВрддрд░ рдЖрдордЪреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рдЕрджреНрдпрддрди рдХрд░реВрди рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдК. рдЪрд▓рд╛ рдПрдХ рдлрдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛ рдЬреЗ рдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡реЗрд▓ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рдкрд░рдд рдХрд░реЗрд▓ (рддрдерд╛рдХрдерд┐рдд **рдЯреНрд░реЗрд╕**) - рд╕рд░реНрд╡ рд╕реНрдерд┐рддреА, рдХреНрд░рд┐рдпрд╛ (рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реЗ рд╕рдВрднрд╛рд╡реНрдпрддрд╛), рдЖрдгрд┐ рдмрдХреНрд╖рд┐рд╕реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def run_episode(max_steps_per_episode = 10000,render=False): \n",
|
||||
" states, actions, probs, rewards = [],[],[],[]\n",
|
||||
" state = env.reset()\n",
|
||||
" for _ in range(max_steps_per_episode):\n",
|
||||
" if render:\n",
|
||||
" env.render()\n",
|
||||
" action_probs = model(torch.from_numpy(np.expand_dims(state,0)))[0]\n",
|
||||
" action = np.random.choice(num_actions, p=np.squeeze(action_probs.detach().numpy()))\n",
|
||||
" nstate, reward, done, info = env.step(action)\n",
|
||||
" if done:\n",
|
||||
" break\n",
|
||||
" states.append(state)\n",
|
||||
" actions.append(action)\n",
|
||||
" probs.append(action_probs.detach().numpy())\n",
|
||||
" rewards.append(reward)\n",
|
||||
" state = nstate\n",
|
||||
" return np.vstack(states), np.vstack(actions), np.vstack(probs), np.vstack(rewards)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдкрдг рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрд╕рд╣ рдПрдХ рдПрдкрд┐рд╕реЛрдб рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рд▓рдХреНрд╖рд╛рдд рдШреЗрдК рд╢рдХрддрд╛ рдХреА рдПрдХреВрдг рдмрдХреНрд╖реАрд╕ (рдПрдкрд┐рд╕реЛрдбрдЪреА рд▓рд╛рдВрдмреА рдореНрд╣рдгреВрди рдУрд│рдЦрд▓реЗ рдЬрд╛рддреЗ) рдЦреВрдк рдХрдореА рдЖрд╣реЗ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"s, a, p, r = run_episode()\n",
|
||||
"print(f\"Total reward: {np.sum(r)}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдзреЛрд░рдг рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреНрдпрд╛ рдХреНрд▓рд┐рд╖реНрдЯ рдкреИрд▓реВрдВрдордзреНрдпреЗ **рд╕рд╡рд▓рддреАрдЪреНрдпрд╛ рдмрдХреНрд╖рд┐рд╕рд╛рдВрдЪрд╛** рд╡рд╛рдкрд░ рдХрд░рдгреЗ рдЖрд╣реЗ. рдХрд▓реНрдкрдирд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА рдЖрдкрдг рдЦреЗрд│рд╛рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдПрдХреВрдг рдмрдХреНрд╖рд┐рд╕рд╛рдВрдЪрд╛ рд╡реЗрдХреНрдЯрд░ рдЧрдгрдирд╛ рдХрд░рддреЛ, рдЖрдгрд┐ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрджрд░рдореНрдпрд╛рди рдХрд╛рд╣реА рдЧреБрдгрд╛рдВрдХ $gamma$ рд╡рд╛рдкрд░реВрди рд╕реБрд░реБрд╡рд╛рддреАрдЪреА рдмрдХреНрд╖рд┐рд╕реЗ рд╕рд╡рд▓рдд рджреЗрддреЛ. рдЖрдореНрд╣реА рдкрд░рд┐рдгрд╛рдореА рд╡реЗрдХреНрдЯрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рджреЗрдЦреАрд▓ рдХрд░рддреЛ, рдХрд╛рд░рдг рдЖрдореНрд╣реА рддреЗ рдЖрдордЪреНрдпрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╛рд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рдЬрди рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"eps = 0.0001\n",
|
||||
"\n",
|
||||
"def discounted_rewards(rewards,gamma=0.99,normalize=True):\n",
|
||||
" ret = []\n",
|
||||
" s = 0\n",
|
||||
" for r in rewards[::-1]:\n",
|
||||
" s = r + gamma * s\n",
|
||||
" ret.insert(0, s)\n",
|
||||
" if normalize:\n",
|
||||
" ret = (ret-np.mean(ret))/(np.std(ret)+eps)\n",
|
||||
" return ret"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реВ рдХрд░реВрдпрд╛! рдЖрдкрдг 300 рдПрдкрд┐рд╕реЛрдб рдЪрд╛рд▓рд╡рдгрд╛рд░ рдЖрд╣реЛрдд, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдкрд┐рд╕реЛрдбрдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреА рдХрд░реВрдпрд╛:\n",
|
||||
"\n",
|
||||
"1. рдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ рдЯреНрд░реЗрд╕ рдЧреЛрд│рд╛ рдХрд░рд╛\n",
|
||||
"1. рдШреЗрддрд▓реЗрд▓реНрдпрд╛ рдХреГрддреА рдЖрдгрд┐ рдЕрдВрджрд╛рдЬрд┐рдд рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдлрд░рдХ (`gradients`) рдореЛрдЬрд╛. рдлрд░рдХ рдЬрд┐рддрдХрд╛ рдХрдореА рдЕрд╕реЗрд▓, рддрд┐рддрдХреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рддреНрд░реА рдЖрд╣реЗ рдХреА рдпреЛрдЧреНрдп рдХреГрддреА рдШреЗрддрд▓реА рдЖрд╣реЗ.\n",
|
||||
"1. рд╕рд╡рд▓рддреАрдЪреНрдпрд╛ рдмрдХреНрд╖рд┐рд╕реЗ рдореЛрдЬрд╛ рдЖрдгрд┐ рд╕рд╡рд▓рддреАрдЪреНрдпрд╛ рдмрдХреНрд╖рд┐рд╕рд╛рдВрджреНрд╡рд╛рд░реЗ `gradients` рдЧреБрдгрд╛рдХрд╛рд░ рдХрд░рд╛ - рдпрд╛рдореБрд│реЗ рдЙрдЪреНрдЪ рдмрдХреНрд╖рд┐рд╕ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рдВрдЪрд╛ рдЕрдВрддрд┐рдо рдирд┐рдХрд╛рд▓рд╛рд╡рд░ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡ рдкрдбреЗрд▓, рддреБрд▓рдиреЗрдиреЗ рдХрдореА рдмрдХреНрд╖рд┐рд╕ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЯрдкреНрдкреНрдпрд╛рдВрдкреЗрдХреНрд╖рд╛.\n",
|
||||
"1. рдЖрдордЪреНрдпрд╛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╕рд╛рдареА рдЕрдкреЗрдХреНрд╖рд┐рдд рд▓рдХреНрд╖реНрдп рдХреГрддреА рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рдЪрд╛рд▓рд╡рддрд╛рдирд╛ рдЕрдВрджрд╛рдЬрд┐рдд рд╕рдВрднрд╛рд╡реНрдпрддреЗрдордзреВрди рдШреЗрддрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓, рдЖрдгрд┐ рдХрд╛рд╣реА рдкреНрд░рдорд╛рдгрд╛рдд рдЧрдгрд┐рддреАрдп `gradients` рдордзреВрди. рдЖрдореНрд╣реА `alpha` рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рд╛рдкрд░реВрди рдард░рд╡реВ рдХреА `gradients` рдЖрдгрд┐ рдмрдХреНрд╖рд┐рд╕реЗ рдХрд┐рддреА рдкреНрд░рдорд╛рдгрд╛рдд рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реА рдЬрд╛рддреАрд▓ - рдпрд╛рд▓рд╛ reinforcement algorithm рдЪрд╛ *learning rate* рдореНрд╣рдгрддрд╛рдд.\n",
|
||||
"1. рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ states рдЖрдгрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреГрддреАрдВрд╡рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрддреЛ, рдЖрдгрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рддреЛ.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n",
|
||||
"\n",
|
||||
"def train_on_batch(x, y):\n",
|
||||
" x = torch.from_numpy(x)\n",
|
||||
" y = torch.from_numpy(y)\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" predictions = model(x)\n",
|
||||
" loss = -torch.mean(torch.log(predictions) * y)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" return loss"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"alpha = 1e-4\n",
|
||||
"\n",
|
||||
"history = []\n",
|
||||
"for epoch in range(300):\n",
|
||||
" states, actions, probs, rewards = run_episode()\n",
|
||||
" one_hot_actions = np.eye(2)[actions.T][0]\n",
|
||||
" gradients = one_hot_actions-probs\n",
|
||||
" dr = discounted_rewards(rewards)\n",
|
||||
" gradients *= dr\n",
|
||||
" target = alpha*np.vstack([gradients])+probs\n",
|
||||
" train_on_batch(states,target)\n",
|
||||
" history.append(np.sum(rewards))\n",
|
||||
" if epoch%100==0:\n",
|
||||
" print(f\"{epoch} -> {np.sum(rewards)}\")\n",
|
||||
"\n",
|
||||
"plt.plot(history)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рд░реЗрдВрдбрд░рд┐рдВрдЧрд╕рд╣ рдПрдкрд┐рд╕реЛрдб рдЪрд╛рд▓рд╡реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"_ = run_episode(render=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рдд рдЕрд╕реЗрд▓ рдХреА рдЦрд╛рдВрдм рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдВрддреБрд▓рд┐рдд рд░рд╛рд╣реВ рд╢рдХрддреЛ!\n",
|
||||
"\n",
|
||||
"## рдЕрднрд┐рдиреЗрддрд╛-рд╕рдорд╛рд▓реЛрдЪрдХ рдореЙрдбреЗрд▓\n",
|
||||
"\n",
|
||||
"рдЕрднрд┐рдиреЗрддрд╛-рд╕рдорд╛рд▓реЛрдЪрдХ рдореЙрдбреЗрд▓ рд╣реЗ рдкреЙрд▓рд┐рд╕реА рдЧреНрд░реЗрдбрд┐рдпрдВрдЯреНрд╕рдЪреЗ рдкреБрдвреАрд▓ рд╡рд┐рдХрд╕рд┐рдд рд░реВрдк рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рдзреЛрд░рдг рдЖрдгрд┐ рдЕрдВрджрд╛рдЬрд┐рдд рдмрдХреНрд╖рд┐рд╕реЗ рд╢рд┐рдХрдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рддрдпрд╛рд░ рдХрд░рддреЛ. рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛ рджреЛрди рдЖрдЙрдЯрдкреБрдЯреНрд╕ рдЕрд╕рддреАрд▓ (рдХрд┐рдВрд╡рд╛ рддреБрдореНрд╣реА рдпрд╛рд▓рд╛ рджреЛрди рд╕реНрд╡рддрдВрддреНрд░ рдиреЗрдЯрд╡рд░реНрдХреНрд╕ рдореНрд╣рдгреВрди рдкрд╛рд╣реВ рд╢рдХрддрд╛):\n",
|
||||
"* **рдЕрднрд┐рдиреЗрддрд╛ (Actor)** рдкреЙрд▓рд┐рд╕реА рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рдореЙрдбреЗрд▓рдкреНрд░рдорд╛рдгреЗрдЪ, рд╕реНрдерд┐рддреАрдЪреА рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рджреЗрдКрди рдХреЛрдгрддреА рдХреГрддреА рдХрд░рд╛рдпрдЪреА рдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ.\n",
|
||||
"* **рд╕рдорд╛рд▓реЛрдЪрдХ (Critic)** рддреНрдпрд╛ рдХреГрддреАрдВрдордзреВрди рдорд┐рд│рдгрд╛рд▒реНрдпрд╛ рдмрдХреНрд╖рд┐рд╕рд╛рдВрдЪрд╛ рдЕрдВрджрд╛рдЬ рд▓рд╛рд╡рддреЛ. рджрд┐рд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрдд рднрд╡рд┐рд╖реНрдпрд╛рддреАрд▓ рдПрдХреВрдг рдЕрдВрджрд╛рдЬрд┐рдд рдмрдХреНрд╖рд┐рд╕реЗ рдкрд░рдд рдХрд░рддреЛ.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рдЕрд╕реЗ рдореЙрдбреЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from itertools import count\n",
|
||||
"import torch.nn.functional as F"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
|
||||
"env = gym.make(\"CartPole-v1\")\n",
|
||||
"\n",
|
||||
"state_size = env.observation_space.shape[0]\n",
|
||||
"action_size = env.action_space.n\n",
|
||||
"lr = 0.0001\n",
|
||||
"\n",
|
||||
"class Actor(torch.nn.Module):\n",
|
||||
" def __init__(self, state_size, action_size):\n",
|
||||
" super(Actor, self).__init__()\n",
|
||||
" self.state_size = state_size\n",
|
||||
" self.action_size = action_size\n",
|
||||
" self.linear1 = torch.nn.Linear(self.state_size, 128)\n",
|
||||
" self.linear2 = torch.nn.Linear(128, 256)\n",
|
||||
" self.linear3 = torch.nn.Linear(256, self.action_size)\n",
|
||||
"\n",
|
||||
" def forward(self, state):\n",
|
||||
" output = F.relu(self.linear1(state))\n",
|
||||
" output = F.relu(self.linear2(output))\n",
|
||||
" output = self.linear3(output)\n",
|
||||
" distribution = torch.distributions.Categorical(F.softmax(output, dim=-1))\n",
|
||||
" return distribution\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"class Critic(torch.nn.Module):\n",
|
||||
" def __init__(self, state_size, action_size):\n",
|
||||
" super(Critic, self).__init__()\n",
|
||||
" self.state_size = state_size\n",
|
||||
" self.action_size = action_size\n",
|
||||
" self.linear1 = torch.nn.Linear(self.state_size, 128)\n",
|
||||
" self.linear2 = torch.nn.Linear(128, 256)\n",
|
||||
" self.linear3 = torch.nn.Linear(256, 1)\n",
|
||||
"\n",
|
||||
" def forward(self, state):\n",
|
||||
" output = F.relu(self.linear1(state))\n",
|
||||
" output = F.relu(self.linear2(output))\n",
|
||||
" value = self.linear3(output)\n",
|
||||
" return value"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ `discounted_rewards` рдЖрдгрд┐ `run_episode` рдлрдВрдХреНрд╢рдиреНрд╕рдордзреНрдпреЗ рдереЛрдбрд╛ рдмрджрд▓ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def discounted_rewards(next_value, rewards, masks, gamma=0.99):\n",
|
||||
" R = next_value\n",
|
||||
" returns = []\n",
|
||||
" for step in reversed(range(len(rewards))):\n",
|
||||
" R = rewards[step] + gamma * R * masks[step]\n",
|
||||
" returns.insert(0, R)\n",
|
||||
" return returns\n",
|
||||
"\n",
|
||||
"def run_episode(actor, critic, n_iters):\n",
|
||||
" optimizerA = torch.optim.Adam(actor.parameters())\n",
|
||||
" optimizerC = torch.optim.Adam(critic.parameters())\n",
|
||||
" for iter in range(n_iters):\n",
|
||||
" state = env.reset()\n",
|
||||
" log_probs = []\n",
|
||||
" values = []\n",
|
||||
" rewards = []\n",
|
||||
" masks = []\n",
|
||||
" entropy = 0\n",
|
||||
" env.reset()\n",
|
||||
"\n",
|
||||
" for i in count():\n",
|
||||
" env.render()\n",
|
||||
" state = torch.FloatTensor(state).to(device)\n",
|
||||
" dist, value = actor(state), critic(state)\n",
|
||||
"\n",
|
||||
" action = dist.sample()\n",
|
||||
" next_state, reward, done, _ = env.step(action.cpu().numpy())\n",
|
||||
"\n",
|
||||
" log_prob = dist.log_prob(action).unsqueeze(0)\n",
|
||||
" entropy += dist.entropy().mean()\n",
|
||||
"\n",
|
||||
" log_probs.append(log_prob)\n",
|
||||
" values.append(value)\n",
|
||||
" rewards.append(torch.tensor([reward], dtype=torch.float, device=device))\n",
|
||||
" masks.append(torch.tensor([1-done], dtype=torch.float, device=device))\n",
|
||||
"\n",
|
||||
" state = next_state\n",
|
||||
"\n",
|
||||
" if done:\n",
|
||||
" print('Iteration: {}, Score: {}'.format(iter, i))\n",
|
||||
" break\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" next_state = torch.FloatTensor(next_state).to(device)\n",
|
||||
" next_value = critic(next_state)\n",
|
||||
" returns = discounted_rewards(next_value, rewards, masks)\n",
|
||||
"\n",
|
||||
" log_probs = torch.cat(log_probs)\n",
|
||||
" returns = torch.cat(returns).detach()\n",
|
||||
" values = torch.cat(values)\n",
|
||||
"\n",
|
||||
" advantage = returns - values\n",
|
||||
"\n",
|
||||
" actor_loss = -(log_probs * advantage.detach()).mean()\n",
|
||||
" critic_loss = advantage.pow(2).mean()\n",
|
||||
"\n",
|
||||
" optimizerA.zero_grad()\n",
|
||||
" optimizerC.zero_grad()\n",
|
||||
" actor_loss.backward()\n",
|
||||
" critic_loss.backward()\n",
|
||||
" optimizerA.step()\n",
|
||||
" optimizerC.step()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЖрддрд╛ рдЖрдкрдг рдореБрдЦреНрдп рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реВрдк рдЪрд╛рд▓рд╡реВ. рдпреЛрдЧреНрдп рддреЛрдЯрд╛ рдлрдВрдХреНрд╢рдиреНрд╕ рдореЛрдЬреВрди рдЖрдгрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЕрджреНрдпрддрдирд┐рдд рдХрд░реВрди рдЖрдкрдг рдореЕрдиреНрдпреБрдЕрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд░реВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"\n",
|
||||
"actor = Actor(state_size, action_size).to(device)\n",
|
||||
"critic = Critic(state_size, action_size).to(device)\n",
|
||||
"run_episode(actor, critic, n_iters=100)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"env.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдореБрджреНрджрд╛\n",
|
||||
"\n",
|
||||
"рдпрд╛ рдбреЗрдореЛрдордзреНрдпреЗ рдЖрдкрдг рджреЛрди RL рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд╛рд╣рд┐рд▓реЗ: рд╕рд╛рдзрд╛ рдкреЙрд▓рд┐рд╕реА рдЧреНрд░реЗрдбрд┐рдпрдВрдЯ рдЖрдгрд┐ рдЕрдзрд┐рдХ рдкреНрд░рдЧрдд рдЕтАНреЕрдХреНрдЯрд░-рдХреНрд░рд┐рдЯрд┐рдХ. рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА рд╣реЗ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реНрдЯреЗрдЯ, рдЕтАНреЕрдХреНрд╢рди рдЖрдгрд┐ рд░рд┐рд╡реЙрд░реНрдб рдпрд╛рдВрд╕рд╛рд░рдЦреНрдпрд╛ рдЕрдореВрд░реНрдд рд╕рдВрдХрд▓реНрдкрдирд╛рдВрд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд - рддреНрдпрд╛рдореБрд│реЗ рддреЗ рдЦреВрдк рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдВрдордзреНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.\n",
|
||||
"\n",
|
||||
"рд░рд┐рдЗрдирдлреЛрд░реНрд╕рдореЗрдВрдЯ рд▓рд░реНрдирд┐рдВрдЧ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЗрд╡рд│ рдЕрдВрддрд┐рдо рд░рд┐рд╡реЙрд░реНрдб рдкрд╛рд╣реВрди рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реЛрддреНрддрдо рд░рдгрдиреАрддреА рд╢рд┐рдХрдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рд▓реЗрдмрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдЪреА рдЧрд░рдЬ рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрдкрд▓реНрдпрд╛ рдореЙрдбреЗрд▓реНрд╕рдЪрд╛ рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд┐рдореНрдпреБрд▓реЗрд╢рдиреНрд╕ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдкреБрдиреНрд╣рд╛ рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рддрд╛ рдпреЗрддрд╛рдд. рддрдерд╛рдкрд┐, RL рдордзреНрдпреЗ рдЕрдЬреВрдирд╣реА рдЕрдиреЗрдХ рдЖрд╡реНрд╣рд╛рдиреЗ рдЖрд╣реЗрдд, рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рд╢рд┐рдХрддрд╛ рдпреЗрддреАрд▓ рдЬрд░ рддреБрдореНрд╣реА рдпрд╛ AI рдЪреНрдпрд╛ рд░рдВрдЬрдХ рдХреНрд╖реЗрддреНрд░рд╛рд╡рд░ рдЕрдзрд┐рдХ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдирд┐рд░реНрдорд╛рдг рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.10.4 64-bit",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.10.4"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1"
|
||||
}
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "04f8d9978cd11281d81dd037cbf6ce20",
|
||||
"translation_date": "2025-08-28T07:32:18+00:00",
|
||||
"source_file": "lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,109 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# # рдорд╛рдЙрдВрдЯрди рдХрд╛рд░рд▓рд╛ рдкрд│реВрди рдЬрд╛рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ\n",
|
||||
"\n",
|
||||
"[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) рдордзреАрд▓ рдкреНрд░рдпреЛрдЧрд╢рд╛рд│рд╛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ.\n",
|
||||
"\n",
|
||||
"рддреБрдордЪреЗ рдЙрджреНрджрд┐рд╖реНрдЯ рдЖрд╣реЗ RL рдПрдЬрдВрдЯрд▓рд╛ OpenAI Environment рдордзреНрдпреЗ [рдорд╛рдЙрдВрдЯрди рдХрд╛рд░](https://www.gymlibrary.ml/environments/classic_control/mountain_car/) рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджреЗрдгреЗ.\n",
|
||||
"\n",
|
||||
"рдЪрд▓рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import gym\n",
|
||||
"env = gym.make('MountainCar-v0')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪрд▓рд╛ рдкрд╛рд╣реВрдпрд╛ рдХреА рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреНрд░рдпреЛрдЧ рдХрд╕рд╛ рджрд┐рд╕рддреЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"state = env.reset()\n",
|
||||
"while True:\n",
|
||||
" env.render()\n",
|
||||
" action = env.action_space.sample()\n",
|
||||
" state, reward, done, info = env.step(action)\n",
|
||||
" if done:\n",
|
||||
" break"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"## Lost of code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"env.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬ AI рднрд╛рд╖рд╛рдВрддрд░ рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рд╡рд╛рдкрд░реВрди рднрд╛рд╖рд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдд рдЖрд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрдЪреВрдХрддреЗрд╕рд╛рдареА рдкреНрд░рдпрддреНрдирд╢реАрд▓ рдЕрд╕рд▓реЛ рддрд░реА, рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рднрд╛рд╖рд╛рдВрддрд░рд╛рдВрдордзреНрдпреЗ рддреНрд░реБрдЯреА рдХрд┐рдВрд╡рд╛ рдЕрдЪреВрдХрддреЗрдЪрд╛ рдЕрднрд╛рд╡ рдЕрд╕реВ рд╢рдХрддреЛ. рдореВрд│ рднрд╛рд╖реЗрддреАрд▓ рджрд╕реНрддрдРрд╡рдЬ рд╣рд╛ рдЕрдзрд┐рдХреГрдд рд╕реНрд░реЛрдд рдорд╛рдирд▓рд╛ рдЬрд╛рд╡рд╛. рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╛рдареА, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡реА рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реА рдЬрд╛рддреЗ. рдпрд╛ рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди рдЙрджреНрднрд╡рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдЧреИрд░рд╕рдордЬ рдХрд┐рдВрд╡рд╛ рдЪреБрдХреАрдЪреНрдпрд╛ рдЕрд░реНрдерд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдЬрдмрд╛рдмрджрд╛рд░ рд░рд╛рд╣рдгрд╛рд░ рдирд╛рд╣реА.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "f062b3b18449593ef8e0fcc029868781",
|
||||
"translation_date": "2025-08-28T07:37:01+00:00",
|
||||
"source_file": "lessons/6-Other/22-DeepRL/lab/MountainCar.ipynb",
|
||||
"language_code": "mr"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,478 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"# рдЬрдирд╛рд╡рд░ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкреНрд░рдгрд╛рд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди\n",
|
||||
"\n",
|
||||
"[AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) рдмрд╛рдЯ рд▓рд┐рдПрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдирдореВрдирд╛рдорд╛, рд╣рд╛рдореА рдХреЗрд╣реА рднреМрддрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рдорд╛ рдЬрдирд╛рд╡рд░ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреНрдЮрд╛рди-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗрдЫреМрдВред рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рдирд┐рдореНрди AND-OR рд░реВрдЦрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рдпреЛ рд╕рдореНрдкреВрд░реНрдг рд░реВрдЦрдХреЛ рдПрдХ рднрд╛рдЧ рд╣реЛ, рд╣рд╛рдореА рд╕рдЬрд┐рд▓реИ рдердк рдирд┐рдпрдорд╣рд░реВ рдердкреНрди рд╕рдХреНрдЫреМрдВ):\n",
|
||||
"\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдкреНрд░рдгрд╛рд▓реА рд╢реЗрд▓ рдмреНрдпрд╛рдХрд╡рд░реНрдб рдЗрдиреНрдлрд░реЗрдиреНрд╕рдХреЛ рд╕рд╛рде\n",
|
||||
"\n",
|
||||
"рдЙрддреНрдкрд╛рджрди рдирд┐рдпрдорд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЬреНрдЮрд╛рди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рднрд╛рд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред рд╣рд╛рдореА рдирд┐рдпрдорд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди Python рдХрдХреНрд╖рд╛рд╣рд░реВрд▓рд╛рдИ рдХреБрдЮреНрдЬреАрд╢рдмреНрджрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рдореБрдЦреНрдпрддрдпрд╛ рей рдкреНрд░рдХрд╛рд░рдХрд╛ рдХрдХреНрд╖рд╛рд╣рд░реВ рд╣реБрдиреЗрдЫрдиреН:\n",
|
||||
"* `Ask` рдПрдЙрдЯрд╛ рдкреНрд░рд╢реНрдирд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫ рдЬреБрди рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓рд╛рдИ рд╕реЛрдзреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╕рдорд╛ рд╕рдореНрднрд╛рд╡рд┐рдд рдЙрддреНрддрд░рд╣рд░реВрдХреЛ рд╕реЗрдЯ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫред\n",
|
||||
"* `If` рдПрдЙрдЯрд╛ рдирд┐рдпрдорд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫ, рд░ рдпреЛ рдирд┐рдпрдордХреЛ рд╕рд╛рдордЧреНрд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдПрдХ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕рд┐рдВрдЯреНрдпрд╛рдХреНрдЯрд┐рдХ рд╕реБрдЧрд░ рд╣реЛред\n",
|
||||
"* `AND`/`OR` рдХрдХреНрд╖рд╛рд╣рд░реВ рд░реВрдЦрдХреЛ AND/OR рд╢рд╛рдЦрд╛рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╣реБрдиреНред рдпреАрд▓реЗ рднрд┐рддреНрд░рдХрд╛ рддрд░реНрдХрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдорд╛рддреНрд░ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдЫрдиреНред рдХреЛрдбрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрди, рд╕рдмреИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрднрд┐рднрд╛рд╡рдХ рдХрдХреНрд╖рд╛ `Content` рдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Ask():\n",
|
||||
" def __init__(self,choices=['y','n']):\n",
|
||||
" self.choices = choices\n",
|
||||
" def ask(self):\n",
|
||||
" if max([len(x) for x in self.choices])>1:\n",
|
||||
" for i,x in enumerate(self.choices):\n",
|
||||
" print(\"{0}. {1}\".format(i,x),flush=True)\n",
|
||||
" x = int(input())\n",
|
||||
" return self.choices[x]\n",
|
||||
" else:\n",
|
||||
" print(\"/\".join(self.choices),flush=True)\n",
|
||||
" return input()\n",
|
||||
"\n",
|
||||
"class Content():\n",
|
||||
" def __init__(self,x):\n",
|
||||
" self.x=x\n",
|
||||
" \n",
|
||||
"class If(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class AND(Content):\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
"class OR(Content):\n",
|
||||
" pass"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореНрд░реЛ рдкреНрд░рдгрд╛рд▓реАрдорд╛, рдХрд╛рд░реНрдп рд╕реНрдореГрддрд┐рдорд╛ **рддрдереНрдпрд╣рд░реВ** рдХреЛ рд╕реВрдЪреА **рдЧреБрдг-рдорд╛рди рдЬреЛрдбреАрд╣рд░реВ** рдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫред рдЬреНрдЮрд╛рди рдЖрдзрд╛рд░рд▓рд╛рдИ рдПрдЙрдЯрд╛ рдареВрд▓реЛ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓реЗ рдХреНрд░рд┐рдпрд╛рд╣рд░реВ (рдирдпрд╛рдБ рддрдереНрдпрд╣рд░реВ рдЬреБрди рдХрд╛рд░реНрдп рд╕реНрдореГрддрд┐рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрдкрд░реНрдЫ) рд▓рд╛рдИ рд╕рд░реНрддрд╣рд░реВрд╕рдБрдЧ рдирдХреНрд╕рд╛ рдЧрд░реНрджрдЫ, рдЬреБрди AND-OR рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд╡реНрдпрдХреНрдд рдЧрд░рд┐рдиреНрдЫред рд╕рд╛рдереИ, рдХреЗрд╣реА рддрдереНрдпрд╣рд░реВрд▓рд╛рдИ `рд╕реЛрдзреНрди` рд╕рдХрд┐рдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"rules = {\n",
|
||||
" 'default': Ask(['y','n']),\n",
|
||||
" 'color' : Ask(['red-brown','black and white','other']),\n",
|
||||
" 'pattern' : Ask(['dark stripes','dark spots']),\n",
|
||||
" 'mammal': If(OR(['hair','gives milk'])),\n",
|
||||
" 'carnivor': If(OR([AND(['sharp teeth','claws','forward-looking eyes']),'eats meat'])),\n",
|
||||
" 'ungulate': If(['mammal',OR(['has hooves','chews cud'])]),\n",
|
||||
" 'bird': If(OR(['feathers',AND(['flies','lies eggs'])])),\n",
|
||||
" 'animal:monkey' : If(['mammal','carnivor','color:red-brown','pattern:dark spots']),\n",
|
||||
" 'animal:tiger' : If(['mammal','carnivor','color:red-brown','pattern:dark stripes']),\n",
|
||||
" 'animal:giraffe' : If(['ungulate','long neck','long legs','pattern:dark spots']),\n",
|
||||
" 'animal:zebra' : If(['ungulate','pattern:dark stripes']),\n",
|
||||
" 'animal:ostrich' : If(['bird','long nech','color:black and white','cannot fly']),\n",
|
||||
" 'animal:pinguin' : If(['bird','swims','color:black and white','cannot fly']),\n",
|
||||
" 'animal:albatross' : If(['bird','flies well'])\n",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдкрдЫрд╛рдбрд┐ рддрд░реНрдлрдХреЛ рдЕрдиреБрдорд╛рди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА `Knowledgebase` рдирд╛рдордХ рдХрдХреНрд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред рдпрд╕рд▓реЗ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗрдЫ:\n",
|
||||
"* рдХрд╛рд░реНрдпрд░рдд `memory` - рдПрдЙрдЯрд╛ рд╢рдмреНрджрдХреЛрд╢ рдЬрд╕рд▓реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрд▓рд╛рдИ рдорд╛рдирд╣рд░реВрд╕рдБрдЧ рдирдХреНрд╕рд╛ рдмрдирд╛рдЙрдБрдЫ\n",
|
||||
"* Knowledgebase `rules` - рдорд╛рдерд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдврд╛рдБрдЪрд╛рдорд╛\n",
|
||||
"\n",
|
||||
"рджреБрдИ рдореБрдЦреНрдп рд╡рд┐рдзрд┐рд╣рд░реВ рдЫрдиреН:\n",
|
||||
"* `get` - рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖рддрд╛рдХреЛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЖрд╡рд╢реНрдпрдХ рдкрд░реЗ рдЕрдиреБрдорд╛рди рдЧрд░реНрджреИред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, `get('color')` рд▓реЗ рд░рдВрдЧ рд╕реНрд▓рдЯрдХреЛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫ (рдЖрд╡рд╢реНрдпрдХ рдкрд░реЗ рд╕реЛрдзреНрдиреЗрдЫ, рд░ рдкрдЫрд┐ рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рд░реНрдпрд░рдд рдореЗрдореЛрд░реАрдорд╛ рдорд╛рди рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдиреЗрдЫ)ред рдпрджрд┐ рд╣рд╛рдореА `get('color:blue')` рд╕реЛрдзреНрдЫреМрдВ рднрдиреЗ, рдпреЛ рд░рдВрдЧрдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзреНрдиреЗрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд░рдВрдЧрдХреЛ рдЖрдзрд╛рд░рдорд╛ `y`/`n` рдорд╛рди рдлрд░реНрдХрд╛рдЙрдиреЗрдЫред\n",
|
||||
"* `eval` - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдорд╛рди рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐ рд╣реЛ, рдЕрд░реНрдерд╛рддреН AND/OR рдЯреНрд░реАрдХреЛ рдпрд╛рддреНрд░рд╛ рдЧрд░реНрдиреЗ, рдЙрдк-рд▓рдХреНрд╖реНрдпрд╣рд░реВрдХреЛ рдореВрд▓реНрдпрд╛рдВрдХрди рдЧрд░реНрдиреЗ, рдЖрджрд┐ред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class KnowledgeBase():\n",
|
||||
" def __init__(self,rules):\n",
|
||||
" self.rules = rules\n",
|
||||
" self.memory = {}\n",
|
||||
" \n",
|
||||
" def get(self,name):\n",
|
||||
" if ':' in name:\n",
|
||||
" k,v = name.split(':')\n",
|
||||
" vv = self.get(k)\n",
|
||||
" return 'y' if v==vv else 'n'\n",
|
||||
" if name in self.memory.keys():\n",
|
||||
" return self.memory[name]\n",
|
||||
" for fld in self.rules.keys():\n",
|
||||
" if fld==name or fld.startswith(name+\":\"):\n",
|
||||
" # print(\" + proving {}\".format(fld))\n",
|
||||
" value = 'y' if fld==name else fld.split(':')[1]\n",
|
||||
" res = self.eval(self.rules[fld],field=name)\n",
|
||||
" if res!='y' and res!='n' and value=='y':\n",
|
||||
" self.memory[name] = res\n",
|
||||
" return res\n",
|
||||
" if res=='y':\n",
|
||||
" self.memory[name] = value\n",
|
||||
" return value\n",
|
||||
" # field is not found, using default\n",
|
||||
" res = self.eval(self.rules['default'],field=name)\n",
|
||||
" self.memory[name]=res\n",
|
||||
" return res\n",
|
||||
" \n",
|
||||
" def eval(self,expr,field=None):\n",
|
||||
" # print(\" + eval {}\".format(expr))\n",
|
||||
" if isinstance(expr,Ask):\n",
|
||||
" print(field)\n",
|
||||
" return expr.ask()\n",
|
||||
" elif isinstance(expr,If):\n",
|
||||
" return self.eval(expr.x)\n",
|
||||
" elif isinstance(expr,AND) or isinstance(expr,list):\n",
|
||||
" expr = expr.x if isinstance(expr,AND) else expr\n",
|
||||
" for x in expr:\n",
|
||||
" if self.eval(x)=='n':\n",
|
||||
" return 'n'\n",
|
||||
" return 'y'\n",
|
||||
" elif isinstance(expr,OR):\n",
|
||||
" for x in expr.x:\n",
|
||||
" if self.eval(x)=='y':\n",
|
||||
" return 'y'\n",
|
||||
" return 'n'\n",
|
||||
" elif isinstance(expr,str):\n",
|
||||
" return self.get(expr)\n",
|
||||
" else:\n",
|
||||
" print(\"Unknown expr: {}\".format(expr))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдЬрдирд╛рд╡рд░ рдЬреНрдЮрд╛рдирдХреЛ рдЖрдзрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реМрдВ рд░ рдкрд░рд╛рдорд░реНрд╢ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реМрдВред рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпреЛ рдХрд▓рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рд╢реНрдирд╣рд░реВ рд╕реЛрдзреНрдиреЗрдЫред рддрдкрд╛рдИрдВ `y`/`n` рдЯрд╛рдЗрдк рдЧрд░реЗрд░ рд╣реЛ-рд╣реЛрдЗрди рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдЙрддреНрддрд░ рджрд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд╡рд╛ рд▓рд╛рдореЛ рдмрд╣реБрд╡рд┐рдХрд▓реНрдкреАрдп рдЙрддреНрддрд░рд╣рд░реВ рднрдПрдХрд╛ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдВрдЦреНрдпрд╛ (0..N) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрд░ рдЙрддреНрддрд░ рджрд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"hair\n",
|
||||
"y/n\n",
|
||||
"sharp teeth\n",
|
||||
"y/n\n",
|
||||
"claws\n",
|
||||
"y/n\n",
|
||||
"forward-looking eyes\n",
|
||||
"y/n\n",
|
||||
"color\n",
|
||||
"0. red-brown\n",
|
||||
"1. black and white\n",
|
||||
"2. other\n",
|
||||
"has hooves\n",
|
||||
"y/n\n",
|
||||
"long neck\n",
|
||||
"y/n\n",
|
||||
"long legs\n",
|
||||
"y/n\n",
|
||||
"pattern\n",
|
||||
"0. dark stripes\n",
|
||||
"1. dark spots\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'giraffe'"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"kb = KnowledgeBase(rules)\n",
|
||||
"kb.get('animal')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## PyKnow рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдлрд░реНрд╡рд╛рд░реНрдб рдЗрдиреНрдлрд░реЗрдиреНрд╕\n",
|
||||
"\n",
|
||||
"рдЕрд░реНрдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА рдЬреНрдЮрд╛рди рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрдордзреНрдпреЗ рдПрдХ, [PyKnow](https://github.com/buguroo/pyknow/) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдлрд░реНрд╡рд╛рд░реНрдб рдЗрдиреНрдлрд░реЗрдиреНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред **PyKnow** рдПрдЙрдЯрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛ рдЬрд╕рд▓реЗ Python рдорд╛ рдлрд░реНрд╡рд╛рд░реНрдб рдЗрдиреНрдлрд░реЗрдиреНрд╕ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рдмрдирд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рдкреБрд░рд╛рдиреЛ рдХреНрд▓рд╛рд╕рд┐рдХрд▓ рдкреНрд░рдгрд╛рд▓реА [CLIPS](http://www.clipsrules.net/index.html) рдЬрд╕реНрддреИ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореАрд▓реЗ рдлрд░реНрд╡рд╛рд░реНрдб рдЪреЗрдЗрдирд┐рдЩ рдЖрдлреИрдВ рдкрдирд┐ рдзреЗрд░реИ рд╕рдорд╕реНрдпрд╛рдмрд┐рдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХреНрдереНрдпреМрдВ, рддрд░ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд╣рд░реВ рдкреНрд░рд╛рдпрдГ рдзреЗрд░реИ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд╣реБрдБрджреИрдирдиреНред рдирд┐рдпрдо рдорд┐рд▓рд╛рдирд▓рд╛рдИ рдЕрдЭ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рдмрдирд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рд╡рд┐рд╢реЗрд╖ рдПрд▓реНрдЧреЛрд░рд┐рджрдо [Rete](https://en.wikipedia.org/wiki/Rete_algorithm) рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Collecting git+https://github.com/buguroo/pyknow/\n",
|
||||
" Cloning https://github.com/buguroo/pyknow/ to /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Running command git clone --filter=blob:none --quiet https://github.com/buguroo/pyknow/ /tmp/pip-req-build-3cqeulyl\n",
|
||||
" Resolved https://github.com/buguroo/pyknow/ to commit 48818336f2e9a126f1964f2d8dc22d37ff800fe8\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting frozendict==1.2\n",
|
||||
" Using cached frozendict-1.2.tar.gz (2.6 kB)\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hCollecting schema==0.6.7\n",
|
||||
" Using cached schema-0.6.7-py2.py3-none-any.whl (14 kB)\n",
|
||||
"Building wheels for collected packages: pyknow, frozendict\n",
|
||||
" Building wheel for pyknow (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for pyknow: filename=pyknow-1.7.0-py3-none-any.whl size=34228 sha256=b7de5b09292c4007667c72f69b98d5a1b5f7324ff15f9dd8e077c3d5f7aade42\n",
|
||||
" Stored in directory: /tmp/pip-ephem-wheel-cache-k7jpave7/wheels/81/1a/d3/f6c15dbe1955598a37755215f2a10449e7418500d7bd4b9508\n",
|
||||
" Building wheel for frozendict (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25h Created wheel for frozendict: filename=frozendict-1.2-py3-none-any.whl size=3148 sha256=2863d55c240d2409cddf05ccfe600591f8478681549fc97555c47c90dc6bb160\n",
|
||||
" Stored in directory: /home/rg/.cache/pip/wheels/49/ac/f8/cb8120244e710bdb479c86198b03c7b08c3c2d3d2bf448fd6e\n",
|
||||
"Successfully built pyknow frozendict\n",
|
||||
"Installing collected packages: schema, frozendict, pyknow\n",
|
||||
"Successfully installed frozendict-1.2 pyknow-1.7.0 schema-0.6.7\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install git+https://github.com/buguroo/pyknow/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from pyknow import *\n",
|
||||
"#import pyknow"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ `KnowledgeEngine` рдХреЛ рдЙрдкрд╡рд░реНрдЧрдХреЛ рд░реВрдкрдорд╛ рдХрдХреНрд╖рд╛ рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо `@Rule` рдПрдиреЛрдЯреЗрд╢рдирд╕рд╣рд┐рддрдХреЛ рдЫреБрдЯреНрдЯреИ рдХрд╛рд░реНрдпрджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдирд┐рдпрдо рдХрд╣рд┐рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреБрдкрд░реНрдЫ рднрдиреЗрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫред рдирд┐рдпрдорднрд┐рддреНрд░, рд╣рд╛рдореА `declare` рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирдпрд╛рдБ рддрдереНрдпрд╣рд░реВ рдердкреНрди рд╕рдХреНрдЫреМрдВ, рд░ рддреА рддрдереНрдпрд╣рд░реВ рдердкреНрджрд╛ рдЕрдЧрд╛рдбрд┐ рдирд┐рд╖реНрдХрд░реНрд╖ рдЗрдиреНрдЬрд┐рдирджреНрд╡рд╛рд░рд╛ рдХреЗрд╣реА рдердк рдирд┐рдпрдорд╣рд░реВ рдмреЛрд▓рд╛рдЗрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class Animals(KnowledgeEngine):\n",
|
||||
" @Rule(OR(\n",
|
||||
" AND(Fact('sharp teeth'),Fact('claws'),Fact('forward looking eyes')),\n",
|
||||
" Fact('eats meat')))\n",
|
||||
" def cornivor(self):\n",
|
||||
" self.declare(Fact('carnivor'))\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('hair'),Fact('gives milk')))\n",
|
||||
" def mammal(self):\n",
|
||||
" self.declare(Fact('mammal'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),\n",
|
||||
" OR(Fact('has hooves'),Fact('chews cud')))\n",
|
||||
" def hooves(self):\n",
|
||||
" self.declare('ungulate')\n",
|
||||
" \n",
|
||||
" @Rule(OR(Fact('feathers'),AND(Fact('flies'),Fact('lays eggs'))))\n",
|
||||
" def bird(self):\n",
|
||||
" self.declare('bird')\n",
|
||||
" \n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def monkey(self):\n",
|
||||
" self.declare(Fact(animal='monkey'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('mammal'),Fact('carnivor'),\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def tiger(self):\n",
|
||||
" self.declare(Fact(animal='tiger'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('long legs'),\n",
|
||||
" Fact(pattern='dark spots'))\n",
|
||||
" def giraffe(self):\n",
|
||||
" self.declare(Fact(animal='giraffe'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('ungulate'),\n",
|
||||
" Fact(pattern='dark stripes'))\n",
|
||||
" def zebra(self):\n",
|
||||
" self.declare(Fact(animal='zebra'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('long neck'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def straus(self):\n",
|
||||
" self.declare(Fact(animal='ostrich'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('swims'),\n",
|
||||
" Fact('cannot fly'),\n",
|
||||
" Fact(color='black and white'))\n",
|
||||
" def pinguin(self):\n",
|
||||
" self.declare(Fact(animal='pinguin'))\n",
|
||||
"\n",
|
||||
" @Rule(Fact('bird'),\n",
|
||||
" Fact('flies well'))\n",
|
||||
" def albatros(self):\n",
|
||||
" self.declare(Fact(animal='albatross'))\n",
|
||||
" \n",
|
||||
" @Rule(Fact(animal=MATCH.a))\n",
|
||||
" def print_result(self,a):\n",
|
||||
" print('Animal is {}'.format(a))\n",
|
||||
" \n",
|
||||
" def factz(self,l):\n",
|
||||
" for x in l:\n",
|
||||
" self.declare(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдПрдХ рдкрдЯрдХ рд╣рд╛рдореАрд▓реЗ рдЬреНрдЮрд╛рди рдЖрдзрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдХрд╛рд░реНрдпрд░рдд рд╕реНрдореГрддрд┐рд▓рд╛рдИ рдХреЗрд╣реА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рддрдереНрдпрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рднрд░рд┐рдиреНрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ `run()` рд╡рд┐рдзрд┐рд▓рд╛рдИ рдХрд▓ рдЧрд░реЗрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реНрдиреЗ рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫреМрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рддрдкрд╛рдИрдВрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдирдпрд╛рдБ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рд┐рдПрдХрд╛ рддрдереНрдпрд╣рд░реВ рдХрд╛рд░реНрдпрд░рдд рд╕реНрдореГрддрд┐рдорд╛ рдердкрд┐рдПрдХрд╛ рдЫрдиреН, рдЬрд╕рдорд╛ рдЬрдирд╛рд╡рд░рдХреЛ рдЕрдиреНрддрд┐рдо рддрдереНрдп рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЫ (рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рд╕рдмреИ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рддрдереНрдпрд╣рд░реВ рд╕рд╣реА рд░реВрдкрдорд╛ рд╕реЗрдЯрдЕрдк рдЧрд░реЗрдХрд╛ рдЫреМрдВ рднрдиреЗ)ред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Animal is tiger\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"FactList([(0, InitialFact()),\n",
|
||||
" (1, Fact(color='red-brown')),\n",
|
||||
" (2, Fact(pattern='dark stripes')),\n",
|
||||
" (3, Fact('sharp teeth')),\n",
|
||||
" (4, Fact('claws')),\n",
|
||||
" (5, Fact('forward looking eyes')),\n",
|
||||
" (6, Fact('gives milk')),\n",
|
||||
" (7, Fact('mammal')),\n",
|
||||
" (8, Fact('carnivor')),\n",
|
||||
" (9, Fact(animal='tiger'))])"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"ex1 = Animals()\n",
|
||||
"ex1.reset()\n",
|
||||
"ex1.factz([\n",
|
||||
" Fact(color='red-brown'),\n",
|
||||
" Fact(pattern='dark stripes'),\n",
|
||||
" Fact('sharp teeth'),\n",
|
||||
" Fact('claws'),\n",
|
||||
" Fact('forward looking eyes'),\n",
|
||||
" Fact('gives milk')])\n",
|
||||
"ex1.run()\n",
|
||||
"ex1.facts"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"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.11.2"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "ab2bd97b0453415b89a469284609a8ce",
|
||||
"translation_date": "2025-08-28T08:35:22+00:00",
|
||||
"source_file": "lessons/2-Symbolic/Animals.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,593 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"# рдкрд░рд┐рд╡рд╛рд░ рд╕рдореНрдмрдиреНрдзрд╣рд░реВрдХреЛ рдУрдиреНрдЯреЛрд▓реЛрдЬреА\n",
|
||||
"\n",
|
||||
"рдпреЛ рдЙрджрд╛рд╣рд░рдг [AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) рдХреЛ рдПрдХ рднрд╛рдЧ рд╣реЛ, рд░ рдпреЛ [рдпреЛ рдмреНрд▓рдЧ рдкреЛрд╕реНрдЯ](https://habr.com/post/270857/) рдмрд╛рдЯ рдкреНрд░реЗрд░рд┐рдд рдЫред\n",
|
||||
"\n",
|
||||
"рдорд▓рд╛рдИ рд╕рдзреИрдВ рдкрд░рд┐рд╡рд╛рд░рднрд┐рддреНрд░рдХрд╛ рдорд╛рдирд┐рд╕рд╣рд░реВ рдмреАрдЪрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╕рдореНрдЭрди рдЧрд╛рд╣реНрд░реЛ рд▓рд╛рдЧреНрдЫред рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА рдПрдЙрдЯрд╛ рдУрдиреНрдЯреЛрд▓реЛрдЬреА рд▓рд┐рдиреЗрдЫреМрдВ рдЬрд╕рд▓реЗ рдкрд░рд┐рд╡рд╛рд░ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдЫ, рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рдВрд╢рд╛рд╡рд▓реА рд╡реГрдХреНрд╖ рд▓рд┐рдиреЗрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╕рдмреИ рдирд╛рддреЗрджрд╛рд░рд╣рд░реВ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд╖реНрдХрд░реНрд╖ рдХрд╕рд░реА рдирд┐рдХрд╛рд▓реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"### рд╡рдВрд╢рд╛рд╡рд▓реА рд╡реГрдХреНрд╖ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореА [Romanov Tsar Family](https://en.wikipedia.org/wiki/House_of_Romanov) рдХреЛ рд╡рдВрд╢рд╛рд╡рд▓реА рд╡реГрдХреНрд╖ рд▓рд┐рдиреЗрдЫреМрдВред рдкрд░рд┐рд╡рд╛рд░ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╡рд░реНрдгрди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рдврд╛рдБрдЪрд╛ [GEDCOM](https://en.wikipedia.org/wiki/GEDCOM) рд╣реЛред рд╣рд╛рдореА Romanov рдкрд░рд┐рд╡рд╛рд░рдХреЛ рд╡рдВрд╢рд╛рд╡рд▓реА рд╡реГрдХреНрд╖ GEDCOM рдврд╛рдБрдЪрд╛рдорд╛ рд▓рд┐рдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"0 HEAD\n",
|
||||
"1 CHAR UTF8\n",
|
||||
"1 GEDC\n",
|
||||
"2 VERS 5.5\n",
|
||||
"0 @0@ INDI\n",
|
||||
"1 NAME Mihail Fedorovich /Romanov/\n",
|
||||
"1 SEX M\n",
|
||||
"1 BIRT\n",
|
||||
"2 DATE 1613\n",
|
||||
"1 DEAT \n",
|
||||
"2 DATE 1645\n",
|
||||
"1 FAMS @41@\n",
|
||||
"0 @1@ INDI\n",
|
||||
"1 NAME Evdokija Lukjanovna /Streshneva/\n",
|
||||
"1 SEX F\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!head -15 data/tsars.ged"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"GEDCOM рдлрд╛рдЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╣рд╛рдореА `python-gedcom` рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Collecting python-gedcom\n",
|
||||
" Downloading python_gedcom-1.0.0-py2.py3-none-any.whl (35 kB)\n",
|
||||
"Installing collected packages: python-gedcom\n",
|
||||
"Successfully installed python-gedcom-1.0.0\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install python-gedcom"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рдлрд╛рдЗрд▓ рдкрд╛рд░реНрд╕рд┐рдЩрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреЗрд╣реА рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╣рдЯрд╛рдЙрдБрдЫ, рддрд░ рдпрд╕рд▓реЗ рдЕрдЭреИ рдкрдирд┐ рд░реБрдЦрдорд╛ рд░рд╣реЗрдХрд╛ рд╕рдмреИ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рд░ рдкрд░рд┐рд╡рд╛рд░рд╣рд░реВрдорд╛ рдХрдо-рд╕реНрддрд░рдХреЛ рдкрд╣реБрдБрдЪ рджрд┐рдиреНрдЫред рдпрд╣рд╛рдБ рдлрд╛рдЗрд▓рд▓рд╛рдИ рдХрд╕рд░реА рдкрд╛рд░реНрд╕ рдЧрд░реНрдиреЗ рд░ рд╕рдмреИ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рд╕реВрдЪреА рджреЗрдЦрд╛рдЙрдиреЗ рднрдиреНрдиреЗ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from gedcom.parser import Parser\n",
|
||||
"from gedcom.element.individual import IndividualElement\n",
|
||||
"from gedcom.element.family import FamilyElement\n",
|
||||
"g = Parser()\n",
|
||||
"g.parse_file('data/tsars.ged')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"scrolled": true,
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[('@0@', ('Mihail Fedorovich', 'Romanov')),\n",
|
||||
" ('@1@', ('Evdokija Lukjanovna', 'Streshneva')),\n",
|
||||
" ('@2@', ('Aleksej Mihajlovich', 'Romanov')),\n",
|
||||
" ('@3@', ('Marija Ilinichna', 'Miloslavskaja')),\n",
|
||||
" ('@4@', ('Natalja Kirillovna', 'Naryshkina')),\n",
|
||||
" ('@5@', ('Marfa Matveevna', 'Apraksina')),\n",
|
||||
" ('@6@', ('Fedor Alekseevich', 'Romanov')),\n",
|
||||
" ('@7@', ('Sofja Aleksevna', 'Romanova')),\n",
|
||||
" ('@8@', ('Ivan V Alekseevich', 'Romanov')),\n",
|
||||
" ('@9@', ('Praskovja Fedorovna', 'Saltykova')),\n",
|
||||
" ('@10@', ('Ekaterina Ivanovna', 'Romanova')),\n",
|
||||
" ('@11@', ('Anna Ivanovna', 'Romanova')),\n",
|
||||
" ('@12@', ('Fridrih Vilgelm', 'Kurlandskij')),\n",
|
||||
" ('@13@', ('Karl Leopold', 'Meklenburg-Shverinskij')),\n",
|
||||
" ('@14@', ('Anna Leopoldovna', 'Meklenburg-Shverinskaja')),\n",
|
||||
" ('@15@', ('Anton Ulrih', 'Braunshvejg-Volfenbjuttelskij')),\n",
|
||||
" ('@16@', ('Ivan VI Antonovich', 'Braunshvejg-Volfenbjuttelskij')),\n",
|
||||
" ('@17@', ('Petr I Alekseevich', 'Romanov')),\n",
|
||||
" ('@18@', ('Evdokija Fedorovna', 'Lopuhina')),\n",
|
||||
" ('@19@', ('Ekaterina I Alekseevna', 'Mihajlova')),\n",
|
||||
" ('@20@', ('Aleksej Petrovich', 'Romanov')),\n",
|
||||
" ('@21@', ('Sharlotta Kristina', 'Braunshvejg-Volfenbjuttelskaja')),\n",
|
||||
" ('@22@', ('Petr II Alekseevich', 'Romanov')),\n",
|
||||
" ('@23@', ('Anna Petrovna', 'Romanova')),\n",
|
||||
" ('@24@', ('Elizaveta Petrovna', 'Romanova')),\n",
|
||||
" ('@25@', ('Karl Fridrih', 'Golshtejn-Gottorpskij')),\n",
|
||||
" ('@26@', ('Petr III Fedorovich', 'Romanov')),\n",
|
||||
" ('@27@', ('Ekaterina II', 'Alekseevna')),\n",
|
||||
" ('@28@', ('Pavel I Petrovich', 'Romanov')),\n",
|
||||
" ('@29@', ('Natalja Alekseevna', 'Gessen-Darmshtadskaja')),\n",
|
||||
" ('@30@', ('Marija Fedorovna', 'Vjurtembergskaja')),\n",
|
||||
" ('@31@', ('Aleksandr I Pavlovich', 'Romanov')),\n",
|
||||
" ('@32@', ('Elizaveta Alekseevna', 'Baden-Durlahskaja')),\n",
|
||||
" ('@33@', ('Nikolaj I Pavlovich', 'Romanov')),\n",
|
||||
" ('@34@', ('Aleksandra Fedorovna', 'Prusskaja')),\n",
|
||||
" ('@35@', ('Aleksandr II Nikolaevich', 'Romanov')),\n",
|
||||
" ('@36@', ('Marija Aleksandrovna', 'Gessenskaja')),\n",
|
||||
" ('@37@', ('Aleksandr III Aleksandrovich', 'Romanov')),\n",
|
||||
" ('@38@', ('Marija Fedorovna', 'Datskaja')),\n",
|
||||
" ('@39@', ('Nikolaj II Aleksandrovich', 'Romanov')),\n",
|
||||
" ('@40@', ('Aleksandra Fedorovna', 'Gessenskaja'))]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"d = g.get_element_dictionary()\n",
|
||||
"[ (k,v.get_name()) for k,v in d.items() if isinstance(v,IndividualElement)]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпрд╣рд╛рдБ рдХрд╕рд░реА рд╣рд╛рдореА рдкрд░рд┐рд╡рд╛рд░рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ **рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛**рд╣рд░реВрдХреЛ рд╕реВрдЪреА рджрд┐рдиреНрдЫ, рд░ рдпрджрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдердк рд╕реНрдкрд╖реНрдЯрддрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдирд╛рдордорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[('@41@', ['@0@', '@1@', '@2@']),\n",
|
||||
" ('@42@', ['@2@', '@3@', '@6@', '@7@', '@8@']),\n",
|
||||
" ('@43@', ['@8@', '@9@', '@10@', '@11@']),\n",
|
||||
" ('@44@', ['@13@', '@10@', '@14@']),\n",
|
||||
" ('@45@', ['@15@', '@14@', '@16@']),\n",
|
||||
" ('@46@', ['@2@', '@4@', '@17@']),\n",
|
||||
" ('@47@', ['@17@', '@18@', '@20@']),\n",
|
||||
" ('@48@', ['@20@', '@21@', '@22@']),\n",
|
||||
" ('@49@', ['@17@', '@19@', '@23@', '@24@']),\n",
|
||||
" ('@50@', ['@25@', '@23@', '@26@']),\n",
|
||||
" ('@51@', ['@26@', '@27@', '@28@']),\n",
|
||||
" ('@52@', ['@28@', '@30@', '@31@', '@33@']),\n",
|
||||
" ('@53@', ['@33@', '@34@', '@35@']),\n",
|
||||
" ('@54@', ['@35@', '@36@', '@37@']),\n",
|
||||
" ('@55@', ['@37@', '@38@', '@39@'])]"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"d = g.get_element_dictionary()\n",
|
||||
"[ (k,[x.get_value() for x in v.get_child_elements()]) for k,v in d.items() if isinstance(v,FamilyElement)]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдкрд░рд┐рд╡рд╛рд░ рдУрдиреНрдЯреЛрд▓реЛрдЬреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдм, [рдкрд░рд┐рд╡рд╛рд░ рдУрдиреНрдЯреЛрд▓реЛрдЬреА](https://raw.githubusercontent.com/blokhin/genealogical-trees/master/data/header.ttl) рд▓рд╛рдИ рд╣реЗрд░реМрдВ, рдЬреБрди рд╕реЗрдореНрдпрд╛рдиреНрдЯрд┐рдХ рд╡реЗрдм рдЯреНрд░рд┐рдкреНрд▓реЗрдЯрд╣рд░реВрдХреЛ рд╕реЗрдЯрдХреЛ рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫред рдпреЛ рдУрдиреНрдЯреЛрд▓реЛрдЬреАрд▓реЗ `isUncleOf`, `isCousinOf` рдЬрд╕реНрддрд╛ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд░ рдЕрдиреНрдп рдзреЗрд░реИ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫред рдпреА рд╕рдмреИ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рдЖрдзрд╛рд░рднреВрдд рдкреНрд░реЗрдбрд┐рдХреЗрдЯрд╣рд░реВ `isMotherOf`, `isFatherOf`, `isBrotherOf` рд░ `isSisterOf` рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рд╣рд╛рдореА рдУрдиреНрдЯреЛрд▓реЛрдЬреА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддрд░реНрдХрдХреЛ рдорд╛рдзреНрдпрдордмрд╛рдЯ рдЕрдиреНрдп рд╕рдмреИ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рдирд┐рд╕реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдпрд╣рд╛рдБ `isAuntOf` рдкреНрд░реЛрдкрд░реНрдЯреАрдХреЛ рдПрдЙрдЯрд╛ рдирдореВрдирд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдЫ, рдЬреБрди `isSisterOf` рд░ `isParentOf` рдХреЛ рд╕рдВрдпреЛрдЬрдирдХреЛ рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ (*рдЖрдорд╛ рд╡рд╛ рдмреБрд╡рд╛рдХреЛ рдмрд╣рд┐рдиреАрд▓рд╛рдИ рдХрд╛рдХреА рднрдирд┐рдиреНрдЫ*)ред \n",
|
||||
"\n",
|
||||
"```\n",
|
||||
"fhkb:isAuntOf a owl:ObjectProperty ;\n",
|
||||
" rdfs:domain fhkb:Woman ;\n",
|
||||
" rdfs:range fhkb:Person ;\n",
|
||||
" owl:propertyChainAxiom ( fhkb:isSisterOf fhkb:isParentOf ) .\n",
|
||||
"```\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"@prefix fhkb: <http://www.example.com/genealogy.owl#> .\n",
|
||||
"@prefix owl: <http://www.w3.org/2002/07/owl#> .\n",
|
||||
"@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n",
|
||||
"@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\n",
|
||||
"@prefix xml: <http://www.w3.org/XML/1998/namespace> .\n",
|
||||
"@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .\n",
|
||||
"\n",
|
||||
"<http://www.example.com/genealogy.owl#> a owl:Ontology .\n",
|
||||
"\n",
|
||||
"fhkb:DomainEntity a owl:Class .\n",
|
||||
"\n",
|
||||
"fhkb:Man a owl:Class ;\n",
|
||||
" owl:equivalentClass [ a owl:Class ;\n",
|
||||
" owl:intersectionOf ( fhkb:Person [ a owl:Restriction ;\n",
|
||||
" owl:onProperty fhkb:hasSex ;\n",
|
||||
" owl:someValuesFrom fhkb:Male ] ) ] .\n",
|
||||
"\n",
|
||||
"fhkb:Woman a owl:Class ;\n",
|
||||
" owl:equivalentClass [ a owl:Class ;\n",
|
||||
" owl:intersectionOf ( fhkb:Person [ a owl:Restriction ;\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!head -20 data/onto.ttl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдЕрдиреБрдорд╛рдирдХрд╛ рд▓рд╛рдЧрд┐ рдУрдиреНрдЯреЛрд▓реЛрдЬреА рдирд┐рд░реНрдорд╛рдг\n",
|
||||
"\n",
|
||||
"рд╕рдЬрд┐рд▓реЛрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдПрдЙрдЯрд╛ рдУрдиреНрдЯреЛрд▓реЛрдЬреА рдлрд╛рдЗрд▓ рдмрдирд╛рдЙрдиреЗрдЫреМрдВ рдЬрд╕рдорд╛ рдкрд░рд┐рд╡рд╛рд░ рдУрдиреНрдЯреЛрд▓реЛрдЬреАрдХрд╛ рдореВрд▓ рдирд┐рдпрдорд╣рд░реВ рд░ рд╣рд╛рдореНрд░реЛ GEDCOM рдлрд╛рдЗрд▓рдмрд╛рдЯ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХрд╛ рддрдереНрдпрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫрдиреНред рд╣рд╛рдореА GEDCOM рдлрд╛рдЗрд▓рд▓рд╛рдИ рдЕрдзреНрдпрдпрди рдЧрд░реНрдиреЗрдЫреМрдВ, рдкрд░рд┐рд╡рд╛рд░рд╣рд░реВ рд░ рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓реНрдиреЗрдЫреМрдВ, рд░ рддрд┐рдирд▓рд╛рдИ рддреНрд░рд┐рдкрд▓реЗрдЯрд╣рд░реВрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!cp data/onto.ttl .\n",
|
||||
"\n",
|
||||
"gedcom_dict = g.get_element_dictionary()\n",
|
||||
"individuals, marriages = {}, {}\n",
|
||||
"\n",
|
||||
"def term2id(el):\n",
|
||||
" return \"i\" + el.get_pointer().replace('@', '').lower()\n",
|
||||
"\n",
|
||||
"out = open(\"onto.ttl\",\"a\")\n",
|
||||
"\n",
|
||||
"for k, v in gedcom_dict.items():\n",
|
||||
" if isinstance(v,IndividualElement):\n",
|
||||
" children, siblings = set(), set()\n",
|
||||
" idx = term2id(v)\n",
|
||||
"\n",
|
||||
" title = v.get_name()[0] + \" \" + v.get_name()[1]\n",
|
||||
" title = title.replace('\"', '').replace('[', '').replace(']', '').replace('(', '').replace(')', '').strip()\n",
|
||||
"\n",
|
||||
" own_families = g.get_families(v, 'FAMS')\n",
|
||||
" for fam in own_families:\n",
|
||||
" children |= set(term2id(i) for i in g.get_family_members(fam, \"CHIL\"))\n",
|
||||
"\n",
|
||||
" parent_families = g.get_families(v, 'FAMC')\n",
|
||||
" if len(parent_families):\n",
|
||||
" for member in g.get_family_members(parent_families[0], \"CHIL\"): # NB adoptive families i.e len(parent_families)>1 are not considered (TODO?)\n",
|
||||
" if member.get_pointer() == v.get_pointer():\n",
|
||||
" continue\n",
|
||||
" siblings.add(term2id(member))\n",
|
||||
"\n",
|
||||
" if idx in individuals:\n",
|
||||
" children |= individuals[idx].get('children', set())\n",
|
||||
" siblings |= individuals[idx].get('siblings', set())\n",
|
||||
" individuals[idx] = {'sex': v.get_gender().lower(), 'children': children, 'siblings': siblings, 'title': title}\n",
|
||||
"\n",
|
||||
" elif isinstance(v,FamilyElement):\n",
|
||||
" wife, husb, children = None, None, set()\n",
|
||||
" children = set(term2id(i) for i in g.get_family_members(v, \"CHIL\"))\n",
|
||||
"\n",
|
||||
" try:\n",
|
||||
" wife = g.get_family_members(v, \"WIFE\")[0]\n",
|
||||
" wife = term2id(wife)\n",
|
||||
" if wife in individuals: individuals[wife]['children'] |= children\n",
|
||||
" else: individuals[wife] = {'children': children}\n",
|
||||
" except IndexError: pass\n",
|
||||
" try:\n",
|
||||
" husb = g.get_family_members(v, \"HUSB\")[0]\n",
|
||||
" husb = term2id(husb)\n",
|
||||
" if husb in individuals: individuals[husb]['children'] |= children\n",
|
||||
" else: individuals[husb] = {'children': children}\n",
|
||||
" except IndexError: pass\n",
|
||||
"\n",
|
||||
" if wife and husb: marriages[wife + husb] = (term2id(v), wife, husb)\n",
|
||||
"\n",
|
||||
"for idx, val in individuals.items():\n",
|
||||
" added_terms = ''\n",
|
||||
" if val['sex'] == 'f':\n",
|
||||
" parent_predicate, sibl_predicate = \"isMotherOf\", \"isSisterOf\"\n",
|
||||
" else:\n",
|
||||
" parent_predicate, sibl_predicate = \"isFatherOf\", \"isBrotherOf\"\n",
|
||||
" if len(val['children']):\n",
|
||||
" added_terms += \" ;\\n fhkb:\" + parent_predicate + \" \" + \", \".join([\"fhkb:\" + i for i in val['children']])\n",
|
||||
" if len(val['siblings']):\n",
|
||||
" added_terms += \" ;\\n fhkb:\" + sibl_predicate + \" \" + \", \".join([\"fhkb:\" + i for i in val['siblings']])\n",
|
||||
" out.write(\"fhkb:%s a owl:NamedIndividual, owl:Thing%s ;\\n rdfs:label \\\"%s\\\" .\\n\" % (idx, added_terms, val['title']))\n",
|
||||
"\n",
|
||||
"for k, v in marriages.items():\n",
|
||||
" out.write(\"fhkb:%s a owl:NamedIndividual, owl:Thing ;\\n fhkb:hasFemalePartner fhkb:%s ;\\n fhkb:hasMalePartner fhkb:%s .\\n\" % v)\n",
|
||||
"\n",
|
||||
"out.write(\"[] a owl:AllDifferent ;\\n owl:distinctMembers (\")\n",
|
||||
"for idx in individuals.keys():\n",
|
||||
" out.write(\" fhkb:\" + idx)\n",
|
||||
"for k, v in marriages.items():\n",
|
||||
" out.write(\" fhkb:\" + v[0])\n",
|
||||
"out.write(\" ) .\")\n",
|
||||
"out.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" fhkb:hasFemalePartner fhkb:i34 ;\n",
|
||||
" fhkb:hasMalePartner fhkb:i33 .\n",
|
||||
"fhkb:i54 a owl:NamedIndividual, owl:Thing ;\n",
|
||||
" fhkb:hasFemalePartner fhkb:i36 ;\n",
|
||||
" fhkb:hasMalePartner fhkb:i35 .\n",
|
||||
"fhkb:i55 a owl:NamedIndividual, owl:Thing ;\n",
|
||||
" fhkb:hasFemalePartner fhkb:i38 ;\n",
|
||||
" fhkb:hasMalePartner fhkb:i37 .\n",
|
||||
"[] a owl:AllDifferent ;\n",
|
||||
" owl:distinctMembers ( fhkb:i0 fhkb:i1 fhkb:i2 fhkb:i3 fhkb:i4 fhkb:i5 fhkb:i6 fhkb:i7 fhkb:i8 fhkb:i9 fhkb:i10 fhkb:i11 fhkb:i12 fhkb:i13 fhkb:i14 fhkb:i15 fhkb:i16 fhkb:i17 fhkb:i18 fhkb:i19 fhkb:i20 fhkb:i21 fhkb:i22 fhkb:i23 fhkb:i24 fhkb:i25 fhkb:i26 fhkb:i27 fhkb:i28 fhkb:i29 fhkb:i30 fhkb:i31 fhkb:i32 fhkb:i33 fhkb:i34 fhkb:i35 fhkb:i36 fhkb:i37 fhkb:i38 fhkb:i39 fhkb:i40 fhkb:i41 fhkb:i42 fhkb:i43 fhkb:i44 fhkb:i45 fhkb:i46 fhkb:i47 fhkb:i48 fhkb:i49 fhkb:i50 fhkb:i51 fhkb:i52 fhkb:i53 fhkb:i54 fhkb:i55 ) ."
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!tail onto.ttl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдЙрдиреЗ рдХрд╛рд░реНрдп \n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рдпреЛ рдУрдиреНрдЯреЛрд▓реЛрдЬреАрд▓рд╛рдИ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдЙрди рд░ рдкреНрд░рд╢реНрди рд╕реЛрдзреНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рд╣рд╛рдореА [RDFLib](https://github.com/RDFLib) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬреБрди RDF рдЧреНрд░рд╛рдлрд▓рд╛рдИ рд╡рд┐рднрд┐рдиреНрди рдврд╛рдБрдЪрд╛рдорд╛ рдкрдвреНрди, рдкреНрд░рд╢реНрди рд╕реЛрдзреНрди рдЖрджрд┐ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛред \n",
|
||||
"\n",
|
||||
"рддрд╛рд░реНрдХрд┐рдХ рдЕрдиреБрдорд╛рдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА [OWL-RL](https://github.com/RDFLib/OWL-RL) рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ RDF рдЧреНрд░рд╛рдлрдХреЛ **Closure** рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдЕрд░реНрдерд╛рддреН рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреЗ рд╕рдмреИ рд╕рдореНрднрд╛рд╡рд┐рдд рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рд░ рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рдердкреНрдиред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Requirement already satisfied: rdflib in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (6.3.2)\n",
|
||||
"Requirement already satisfied: isodate<0.7.0,>=0.6.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib) (0.6.1)\n",
|
||||
"Requirement already satisfied: pyparsing<4,>=2.1.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib) (3.0.9)\n",
|
||||
"Requirement already satisfied: six in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from isodate<0.7.0,>=0.6.0->rdflib) (1.16.0)\n",
|
||||
"Collecting git+https://github.com/RDFLib/OWL-RL.git\n",
|
||||
" Cloning https://github.com/RDFLib/OWL-RL.git to /tmp/pip-req-build-lbfzwi3m\n",
|
||||
" Running command git clone --filter=blob:none --quiet https://github.com/RDFLib/OWL-RL.git /tmp/pip-req-build-lbfzwi3m\n",
|
||||
" Resolved https://github.com/RDFLib/OWL-RL.git to commit a77e1791b88b54aace609bc6000aac14c7add4ff\n",
|
||||
" Preparing metadata (setup.py) ... \u001b[?25ldone\n",
|
||||
"\u001b[?25hRequirement already satisfied: rdflib>=6.0.2 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from owlrl==6.0.2) (6.3.2)\n",
|
||||
"Requirement already satisfied: isodate<0.7.0,>=0.6.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib>=6.0.2->owlrl==6.0.2) (0.6.1)\n",
|
||||
"Requirement already satisfied: pyparsing<4,>=2.1.0 in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from rdflib>=6.0.2->owlrl==6.0.2) (3.0.9)\n",
|
||||
"Requirement already satisfied: six in /home/rg/anaconda3/envs/ai4beg/lib/python3.11/site-packages (from isodate<0.7.0,>=0.6.0->rdflib>=6.0.2->owlrl==6.0.2) (1.16.0)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!{sys.executable} -m pip install rdflib\n",
|
||||
"!{sys.executable} -m pip install git+https://github.com/RDFLib/OWL-RL.git"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдУрдиреНрдЯреЛрд▓реЛрдЬреА рдлрд╛рдЗрд▓ рдЦреЛрд▓реМрдВ рд░ рдпрд╕рдорд╛ рдХрддрд┐ рдЯреНрд░рд┐рдкреНрд▓реЗрдЯреНрд╕ рдЫрдиреН рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Triplets found:669\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import rdflib\n",
|
||||
"from owlrl import DeductiveClosure, OWLRL_Extension\n",
|
||||
"\n",
|
||||
"g = rdflib.Graph()\n",
|
||||
"g.parse(\"onto.ttl\", format=\"turtle\")\n",
|
||||
"\n",
|
||||
"print(\"Triplets found:%d\" % len(g))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Triplets after inference:4246\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"DeductiveClosure(OWLRL_Extension).expand(g)\n",
|
||||
"print(\"Triplets after inference:%d\" % len(g))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдирд╛рддреЗрджрд╛рд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реЛрдзрдкреБрдЫ рдЧрд░реНрдиреБ \n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рдЧреНрд░рд╛рдлрд▓рд╛рдИ рд╕реЛрдзрдкреБрдЫ рдЧрд░реЗрд░ рдорд╛рдирд┐рд╕рд╣рд░реВ рдмреАрдЪрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╣реЗрд░реНрди рд╕рдХреНрдЫреМрдВред рд╣рд╛рдореА **SPARQL** рднрд╛рд╖рд╛ рд░ `query` рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореНрд░реЛ рдкрд░рд┐рд╡рд╛рд░рдХреЛ рд░реБрдЦрдорд╛ рд╕рдмреИ **рдХрд╛рдХрд╛рд╣рд░реВ** рд╣реЗрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Fedor Alekseevich Romanov is uncle of Ekaterina Ivanovna Romanova\n",
|
||||
"Aleksandr I Pavlovich Romanov is uncle of Aleksandr II Nikolaevich Romanov\n",
|
||||
"Fedor Alekseevich Romanov is uncle of Anna Ivanovna Romanova\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"qres = g.query(\n",
|
||||
" \"\"\"SELECT DISTINCT ?aname ?bname\n",
|
||||
" WHERE {\n",
|
||||
" ?a fhkb:isUncleOf ?b .\n",
|
||||
" ?a rdfs:label ?aname .\n",
|
||||
" ?b rdfs:label ?bname .\n",
|
||||
" }\"\"\")\n",
|
||||
"\n",
|
||||
"for row in qres:\n",
|
||||
" print(\"%s is uncle of %s\" % row)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╡рд┐рднрд┐рдиреНрди рдЕрдиреНрдп рдкрд╛рд░рд┐рд╡рд╛рд░рд┐рдХ рд╕рдореНрдмрдиреНрдзрд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВ `isAncestorOf` рд╕рдореНрдмрдиреНрдзрд▓рд╛рдИ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдХреБрдиреИ рд╡реНрдпрдХреНрддрд┐рдХрд╛ рд╕рдмреИ рдкреБрд░реНрдЦрд╛рд╣рд░реВрд▓рд╛рдИ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдиреНрддрдорд╛, рд╕рдлрд╛ рдЧрд░реМрдВ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"!rm onto.ttl"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.6",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.11.2"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "6537d5597320e27b6052b4377b8ff8bb",
|
||||
"translation_date": "2025-08-28T08:32:22+00:00",
|
||||
"source_file": "lessons/2-Symbolic/FamilyOntology.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,548 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"## рдорд╛рдЗрдХреНрд░реЛрд╕рдлреНрдЯ рдХрдиреНрд╕реЗрдкреНрдЯ рдЧреНрд░рд╛рдл\n",
|
||||
"\n",
|
||||
"[Microsoft Concept Graph](https://concept.research.microsoft.com/) рдЗрдиреНрдЯрд░рдиреЗрдЯрдмрд╛рдЯ рд╕рдВрдХрд▓рд┐рдд рд╢рдмреНрджрд╣рд░реВрдХреЛ рдареВрд▓реЛ рд╡рд░реНрдЧреАрдХрд░рдг рд╣реЛ, рдЬрд╕рдорд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рдмреАрдЪрдХреЛ `is-a` рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдХрдиреНрд╕реЗрдкреНрдЯ рдЧреНрд░рд╛рдл рджреБрдИ рдкреНрд░рдХрд╛рд░рдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ:\n",
|
||||
" * рдбрд╛рдЙрдирд▓реЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдареВрд▓реЛ рдкрд╛рда рдлрд╛рдЗрд▓\n",
|
||||
" * REST API\n",
|
||||
"\n",
|
||||
"рддрдереНрдпрд╛рдВрдХ:\n",
|
||||
" * 5401933 рдЕрджреНрд╡рд┐рддреАрдп рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ,\n",
|
||||
" * 12551613 рдЕрджреНрд╡рд┐рддреАрдп рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ\n",
|
||||
" * 87603947 `is-a` рд╕рдореНрдмрдиреНрдзрд╣рд░реВ\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╡реЗрдм рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рд╡реЗрдм рд╕реЗрд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣рд╣рд░реВрдорд╛ рдХреБрдиреИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдЕрдиреБрдорд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рднрд┐рдиреНрди рдХрд▓рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдердк рдЬрд╛рдирдХрд╛рд░реА [рдпрд╣рд╛рдБ](https://concept.research.microsoft.com/Home/Api) рдЙрдкрд▓рдмреНрдз рдЫред \n",
|
||||
"рдХрд▓ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдирдореВрдирд╛ URL рд╣реЛ: `https://concept.research.microsoft.com/api/Concept/ScoreByProb?instance=microsoft&topK=10`\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'company': 0.6105356614382954,\n",
|
||||
" 'vendor': 0.08858636677518003,\n",
|
||||
" 'client': 0.048239124001183784,\n",
|
||||
" 'firm': 0.045476965571668145,\n",
|
||||
" 'large company': 0.043109401203511886,\n",
|
||||
" 'organization': 0.043010752688172046,\n",
|
||||
" 'corporation': 0.035908059583703265,\n",
|
||||
" 'brand': 0.03383644076156654,\n",
|
||||
" 'software company': 0.027522935779816515,\n",
|
||||
" 'technology company': 0.023774292196902438}"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import urllib\n",
|
||||
"import json\n",
|
||||
"import ssl\n",
|
||||
"\n",
|
||||
"def http(x):\n",
|
||||
" ssl._create_default_https_context = ssl._create_unverified_context\n",
|
||||
" response = urllib.request.urlopen(x)\n",
|
||||
" data = response.read()\n",
|
||||
" return data.decode('utf-8')\n",
|
||||
"\n",
|
||||
"def query(x):\n",
|
||||
" return json.loads(http(\"https://concept.research.microsoft.com/api/Concept/ScoreByProb?instance={}&topK=10\".format(urllib.parse.quote(x))))\n",
|
||||
"\n",
|
||||
"query('microsoft')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВрд▓рд╛рдИ рдЕрднрд┐рднрд╛рд╡рдХ рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА [NewsApi.org](http://newsapi.org) рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рдпреЛ рд╕реЗрд╡рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ API рдХреБрдЮреНрдЬреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ - рд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рд░ рдирд┐рдГрд╢реБрд▓реНрдХ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдпреЛрдЬрдирд╛ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"newsapi_key = '<your API key here>'\n",
|
||||
"def get_news(country='us'):\n",
|
||||
" res = json.loads(http(\"https://newsapi.org/v2/top-headlines?country={0}&apiKey={1}\".format(country,newsapi_key)))\n",
|
||||
" return res['articles']\n",
|
||||
"\n",
|
||||
"all_titles = [x['title'] for x in get_news('us')+get_news('gb')]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['Covid-19 Live Updates: Vaccines and Boosters News - The New York Times',\n",
|
||||
" 'Ukrainians Flee Mariupol as Russian Forces Push to Take Port City - The Wall Street Journal',\n",
|
||||
" 'Bond Yields Jump, Stock Futures Rise After Powell Says Fed Is Ready to Be More Aggressive - The Wall Street Journal',\n",
|
||||
" 'Putin critic Alexei Navalny found guilty by Russian court - New York Post ',\n",
|
||||
" \"Supreme Court nominee Ketanji Brown Jackson will face questions at confirmation hearing's second day - CNN\",\n",
|
||||
" '2 teachers killed at Swedish high school, student arrested - ABC News',\n",
|
||||
" 'Clues to Covid-19тАЩs Next Moves Come From Sewers - The Wall Street Journal',\n",
|
||||
" 'Republicans to roll dice by grilling Jackson over child-pornography sentencing decisions | TheHill - The Hill',\n",
|
||||
" 'тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent',\n",
|
||||
" 'NASA confirms there are 5,000 planets outside our solar system - Daily Mail',\n",
|
||||
" \"US stocks whipsawed overnight after Fed Chair Powell's remarks - Fox Business\",\n",
|
||||
" \"'We've learned absolutely nothing': Tests could again be in short supply if Covid surges - POLITICO\",\n",
|
||||
" \"Duchess of Cambridge swaps khaki jungle gear for Vampire's Wife dress on Belize trip - Daily Mail\",\n",
|
||||
" 'China searches for victims, flight recorders after first plane crash in 12 years - Reuters',\n",
|
||||
" 'Second superyacht linked to Russian oligarch Abramovich docks in Turkey - Reuters',\n",
|
||||
" 'Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol',\n",
|
||||
" 'Powers Remain and Threats Lurk as WomenтАЩs Sweet 16 Is Set - The New York Times',\n",
|
||||
" 'Webb Space Telescope Begins Multi-Instrument Alignment - SciTechDaily',\n",
|
||||
" \"UConn vs UCF - NCAA women's tournament second-round highlights - March Madness\",\n",
|
||||
" 'Bucking Republican Trend, Indiana Governor Vetoes Transgender Sports Bill - The New York Times',\n",
|
||||
" \"Maggie Fox dead: Coronation Street and Shameless actress dies after 'sudden accident' - Mirror Online - The Mirror\",\n",
|
||||
" 'China plane crash тАУ live: Search for survivors continues as witness describes moment flight fell from sky - The Independent',\n",
|
||||
" 'Daniel Morgan murder: damning report condemns Met police - The Guardian',\n",
|
||||
" 'What to expect from Rishi SunakтАЩs Spring Statement - BBC.com',\n",
|
||||
" 'UK and Republic of Ireland in line to host Euro 2028 after no one else bids - The Guardian',\n",
|
||||
" \"Friends beg Vladimir Putin's 'lover' to persuade him to end Ukraine invasion - The Mirror\",\n",
|
||||
" 'Brass EyeтАЩs outtakes show the brutal TV comedy was the tip of an iceberg - The Guardian',\n",
|
||||
" \"Vladimir Putin threatens civilians to break Mariupol's spirit - The Times\",\n",
|
||||
" 'Shell U-turn on Cambo oilfield would threaten green targets, say campaigners - The Guardian',\n",
|
||||
" 'St Helens dog attack: Girl aged 17 months killed at home - BBC',\n",
|
||||
" \"PlayStation to buy 'Assassin's Creed' veteran Jade Raymond's Haven Studios - NME\",\n",
|
||||
" 'тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent',\n",
|
||||
" 'NASA confirms there are 5,000 planets outside our solar system - Daily Mail',\n",
|
||||
" 'Nintendo Switch finally has folders тАв Eurogamer.net - Eurogamer.net',\n",
|
||||
" 'FA to тАЬfind a solutionтАЭ as Liverpool fan group blasts тАЬshambolicтАЭ Wembley travel - This Is Anfield',\n",
|
||||
" 'Manchester United transfer news LIVE Erik ten Hag latest and Man Utd manager updates - Manchester Evening News',\n",
|
||||
" 'Inflation raises cost of UK government borrowing in February; crude oil up again тАУ business live - The Guardian',\n",
|
||||
" 'Alexei Navalny: Kremlin critic found guilty of large-scale fraud and contempt of court by Russian court - Sky News',\n",
|
||||
" \"UK prepares to nationalize Russia natural gas giant Gazprom's retail unit - Business Insider\",\n",
|
||||
" 'Zaghari-Ratcliffe: Hunt calls for inquiry into delay over Iran debt payment - The Guardian']"
|
||||
]
|
||||
},
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"all_titles"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореА рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВрдмрд╛рдЯ рд╕рдВрдЬреНрдЮрд╛ рдирд┐рдХрд╛рд▓реНрди рд╕рдХреНрд╖рдо рд╣реБрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рд╣рд╛рдореА рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ `TextBlob` рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬрд╕рд▓реЗ рдпрд╕ рдкреНрд░рдХрд╛рд░рдХрд╛ рдзреЗрд░реИ рд╕рд╛рдорд╛рдиреНрдп NLP рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Requirement already satisfied: textblob in c:\\winapp\\miniconda3\\lib\\site-packages (0.17.1)\n",
|
||||
"Requirement already satisfied: nltk>=3.1 in c:\\winapp\\miniconda3\\lib\\site-packages (from textblob) (3.5)\n",
|
||||
"Requirement already satisfied: joblib in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (1.0.1)\n",
|
||||
"Requirement already satisfied: regex in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (2021.11.10)\n",
|
||||
"Requirement already satisfied: tqdm in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (4.61.2)\n",
|
||||
"Requirement already satisfied: click in c:\\winapp\\miniconda3\\lib\\site-packages (from nltk>=3.1->textblob) (8.0.3)\n",
|
||||
"Requirement already satisfied: colorama in c:\\winapp\\miniconda3\\lib\\site-packages (from click->nltk>=3.1->textblob) (0.4.4)\n",
|
||||
"Finished.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[nltk_data] Downloading package brown to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package brown is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package punkt to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package punkt is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package wordnet to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package wordnet is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package averaged_perceptron_tagger to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package averaged_perceptron_tagger is already up-to-\n",
|
||||
"[nltk_data] date!\n",
|
||||
"[nltk_data] Downloading package conll2000 to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package conll2000 is already up-to-date!\n",
|
||||
"[nltk_data] Downloading package movie_reviews to\n",
|
||||
"[nltk_data] C:\\Users\\dmitryso\\AppData\\Roaming\\nltk_data...\n",
|
||||
"[nltk_data] Package movie_reviews is already up-to-date!\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install textblob\n",
|
||||
"!{sys.executable} -m textblob.download_corpora\n",
|
||||
"from textblob import TextBlob"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'covid-19 live updates': 1,\n",
|
||||
" 'vaccines': 1,\n",
|
||||
" 'boosters': 1,\n",
|
||||
" 'york': 4,\n",
|
||||
" 'ukrainians flee mariupol': 1,\n",
|
||||
" 'forces push': 1,\n",
|
||||
" 'port city': 1,\n",
|
||||
" 'wall street journal': 3,\n",
|
||||
" 'bond yields': 1,\n",
|
||||
" 'futures rise': 1,\n",
|
||||
" 'powell says fed': 1,\n",
|
||||
" 'ready': 1,\n",
|
||||
" 'be': 1,\n",
|
||||
" 'aggressive': 1,\n",
|
||||
" 'putin': 3,\n",
|
||||
" 'alexei navalny': 2,\n",
|
||||
" 'russian': 2,\n",
|
||||
" 'supreme court nominee': 1,\n",
|
||||
" 'ketanji brown jackson': 1,\n",
|
||||
" \"confirmation hearing 's\": 1,\n",
|
||||
" 'cnn': 1,\n",
|
||||
" 'swedish': 1,\n",
|
||||
" 'high school': 1,\n",
|
||||
" 'abc': 1,\n",
|
||||
" 'clues': 1,\n",
|
||||
" 'covid-19': 1,\n",
|
||||
" 'тАЩ s': 2,\n",
|
||||
" 'moves': 1,\n",
|
||||
" 'sewers': 1,\n",
|
||||
" 'roll dice': 1,\n",
|
||||
" 'jackson': 1,\n",
|
||||
" 'decisions |': 1,\n",
|
||||
" 'thehill': 1,\n",
|
||||
" 'clear': 2,\n",
|
||||
" 'chemical weapons': 2,\n",
|
||||
" 'ukraine': 3,\n",
|
||||
" 'claims president': 2,\n",
|
||||
" 'biden': 2,\n",
|
||||
" 'nasa': 2,\n",
|
||||
" 'solar system': 2,\n",
|
||||
" 'daily mail': 3,\n",
|
||||
" 'us stocks': 1,\n",
|
||||
" 'fed chair powell': 1,\n",
|
||||
" \"'s remarks\": 1,\n",
|
||||
" 'fox': 1,\n",
|
||||
" \"'we 've\": 1,\n",
|
||||
" 'tests': 1,\n",
|
||||
" 'covid': 1,\n",
|
||||
" 'politico': 1,\n",
|
||||
" 'duchess': 1,\n",
|
||||
" 'cambridge': 1,\n",
|
||||
" 'swaps khaki jungle gear': 1,\n",
|
||||
" 'vampire': 1,\n",
|
||||
" 'wife': 1,\n",
|
||||
" 'belize': 1,\n",
|
||||
" 'china': 2,\n",
|
||||
" 'flight recorders': 1,\n",
|
||||
" 'plane crash': 1,\n",
|
||||
" 'reuters': 2,\n",
|
||||
" 'russian oligarch': 1,\n",
|
||||
" 'abramovich': 1,\n",
|
||||
" 'live': 1,\n",
|
||||
" 'russia': 2,\n",
|
||||
" 'stops talks': 1,\n",
|
||||
" 'japan': 1,\n",
|
||||
" 'espa├▒ol': 1,\n",
|
||||
" 'powers remain': 1,\n",
|
||||
" 'threats lurk': 1,\n",
|
||||
" 'set': 1,\n",
|
||||
" 'webb': 1,\n",
|
||||
" 'telescope begins multi-instrument alignment': 1,\n",
|
||||
" 'scitechdaily': 1,\n",
|
||||
" 'uconn': 1,\n",
|
||||
" 'ucf': 1,\n",
|
||||
" 'ncaa': 1,\n",
|
||||
" \"women 's tournament second-round highlights\": 1,\n",
|
||||
" 'march madness': 1,\n",
|
||||
" 'bucking republican trend': 1,\n",
|
||||
" 'indiana': 1,\n",
|
||||
" 'vetoes transgender': 1,\n",
|
||||
" 'bill': 1,\n",
|
||||
" 'maggie fox': 1,\n",
|
||||
" 'coronation': 1,\n",
|
||||
" 'shameless': 1,\n",
|
||||
" \"'sudden accident\": 1,\n",
|
||||
" 'mirror online': 1,\n",
|
||||
" 'mirror': 2,\n",
|
||||
" 'plane crash тАУ': 1,\n",
|
||||
" 'search': 1,\n",
|
||||
" 'moment flight': 1,\n",
|
||||
" 'daniel morgan': 1,\n",
|
||||
" 'report condemns': 1,\n",
|
||||
" 'met': 1,\n",
|
||||
" 'guardian': 6,\n",
|
||||
" 'rishi sunak': 1,\n",
|
||||
" 'тАЩ s spring': 1,\n",
|
||||
" 'statement': 1,\n",
|
||||
" 'bbc.com': 1,\n",
|
||||
" 'uk': 3,\n",
|
||||
" 'ireland': 1,\n",
|
||||
" 'euro': 1,\n",
|
||||
" 'vladimir putin': 2,\n",
|
||||
" \"'s 'lover\": 1,\n",
|
||||
" 'brass eye': 1,\n",
|
||||
" 'тАЩ s outtakes': 1,\n",
|
||||
" 'brutal tv comedy': 1,\n",
|
||||
" 'threatens civilians': 1,\n",
|
||||
" 'mariupol': 1,\n",
|
||||
" \"'s spirit\": 1,\n",
|
||||
" 'shell u-turn': 1,\n",
|
||||
" 'cambo': 1,\n",
|
||||
" 'green targets': 1,\n",
|
||||
" 'st helens': 1,\n",
|
||||
" 'dog attack': 1,\n",
|
||||
" 'girl': 1,\n",
|
||||
" 'bbc': 1,\n",
|
||||
" 'playstation': 1,\n",
|
||||
" \"'assassin 's\": 1,\n",
|
||||
" 'creed': 1,\n",
|
||||
" 'jade raymond': 1,\n",
|
||||
" 'haven studios': 1,\n",
|
||||
" 'nme': 1,\n",
|
||||
" 'nintendo switch': 1,\n",
|
||||
" 'folders тАв': 1,\n",
|
||||
" 'eurogamer.net': 2,\n",
|
||||
" 'fa': 1,\n",
|
||||
" 'solution тАЭ': 1,\n",
|
||||
" 'liverpool': 1,\n",
|
||||
" 'fan group blasts тАЬ shambolic тАЭ': 1,\n",
|
||||
" 'wembley': 1,\n",
|
||||
" 'anfield': 1,\n",
|
||||
" 'manchester': 1,\n",
|
||||
" 'live erik': 1,\n",
|
||||
" 'hag': 1,\n",
|
||||
" 'utd': 1,\n",
|
||||
" 'manager updates': 1,\n",
|
||||
" 'manchester evening': 1,\n",
|
||||
" 'inflation': 1,\n",
|
||||
" 'government borrowing': 1,\n",
|
||||
" 'february': 1,\n",
|
||||
" 'crude oil': 1,\n",
|
||||
" 'тАУ business': 1,\n",
|
||||
" 'kremlin': 1,\n",
|
||||
" 'large-scale fraud': 1,\n",
|
||||
" 'sky': 1,\n",
|
||||
" 'natural gas': 1,\n",
|
||||
" 'gazprom': 1,\n",
|
||||
" 'retail unit': 1,\n",
|
||||
" 'insider': 1,\n",
|
||||
" 'zaghari-ratcliffe': 1,\n",
|
||||
" 'hunt': 1,\n",
|
||||
" 'iran': 1,\n",
|
||||
" 'debt payment': 1}"
|
||||
]
|
||||
},
|
||||
"execution_count": 22,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w = {}\n",
|
||||
"for x in all_titles:\n",
|
||||
" for n in TextBlob(x).noun_phrases:\n",
|
||||
" if n in w:\n",
|
||||
" w[n].append(x)\n",
|
||||
" else:\n",
|
||||
" w[n]=[x]\n",
|
||||
"{ x:len(w[x]) for x in w.keys()}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рд╕рдВрдЬреНрдЮрд╛рд╣рд░реВрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдареВрд▓рд╛ рдерд┐рдореЗрдЯрд┐рдХ рд╕рдореВрд╣рд╣рд░реВ рджрд┐рдБрджреИрдирдиреНред рдЖрдЙрдиреБрд╣реЛрд╕реН, рд╕рдВрдЬреНрдЮрд╛рд╣рд░реВрд▓рд╛рдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЧреНрд░рд╛рдлрдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрджрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реМрдВред рдпрд╕рд▓реЗ рдХреЗрд╣реА рд╕рдордп рд▓рд┐рдиреЗрдЫ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдЬреНрдЮрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢рдХреЛ рд▓рд╛рдЧрд┐ REST рдХрд▓ рдЧрд░реНрджреИрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 23,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"w = {}\n",
|
||||
"for x in all_titles:\n",
|
||||
" for noun in TextBlob(x).noun_phrases:\n",
|
||||
" terms = query(noun.replace(' ','%20'))\n",
|
||||
" for term in [u for u in terms.keys() if terms[u]>0.1]:\n",
|
||||
" if term in w:\n",
|
||||
" w[term].append(x)\n",
|
||||
" else:\n",
|
||||
" w[term]=[x]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 24,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'city': 9,\n",
|
||||
" 'brand': 4,\n",
|
||||
" 'place': 9,\n",
|
||||
" 'town': 4,\n",
|
||||
" 'factor': 4,\n",
|
||||
" 'film': 4,\n",
|
||||
" 'nation': 11,\n",
|
||||
" 'state': 5,\n",
|
||||
" 'person': 4,\n",
|
||||
" 'organization': 5,\n",
|
||||
" 'publication': 10,\n",
|
||||
" 'market': 5,\n",
|
||||
" 'economy': 4,\n",
|
||||
" 'company': 6,\n",
|
||||
" 'newspaper': 6,\n",
|
||||
" 'relationship': 6}"
|
||||
]
|
||||
},
|
||||
"execution_count": 24,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"{ x:len(w[x]) for x in w.keys() if len(w[x])>3}"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 27,
|
||||
"metadata": {
|
||||
"trusted": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"ECONOMY:\n",
|
||||
"China searches for victims, flight recorders after first plane crash in 12 years - Reuters\n",
|
||||
"Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol\n",
|
||||
"China plane crash тАУ live: Search for survivors continues as witness describes moment flight fell from sky - The Independent\n",
|
||||
"UK prepares to nationalize Russia natural gas giant Gazprom's retail unit - Business Insider\n",
|
||||
"\n",
|
||||
"NATION:\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n",
|
||||
"Duchess of Cambridge swaps khaki jungle gear for Vampire's Wife dress on Belize trip - Daily Mail\n",
|
||||
"China searches for victims, flight recorders after first plane crash in 12 years - Reuters\n",
|
||||
"Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol\n",
|
||||
"Live updates: Russia stops talks with Japan over sanctions - The Associated Press - en Espa├▒ol\n",
|
||||
"China plane crash тАУ live: Search for survivors continues as witness describes moment flight fell from sky - The Independent\n",
|
||||
"UK and Republic of Ireland in line to host Euro 2028 after no one else bids - The Guardian\n",
|
||||
"Friends beg Vladimir Putin's 'lover' to persuade him to end Ukraine invasion - The Mirror\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n",
|
||||
"UK prepares to nationalize Russia natural gas giant Gazprom's retail unit - Business Insider\n",
|
||||
"Zaghari-Ratcliffe: Hunt calls for inquiry into delay over Iran debt payment - The Guardian\n",
|
||||
"\n",
|
||||
"PERSON:\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n",
|
||||
"Duchess of Cambridge swaps khaki jungle gear for Vampire's Wife dress on Belize trip - Daily Mail\n",
|
||||
"Second superyacht linked to Russian oligarch Abramovich docks in Turkey - Reuters\n",
|
||||
"тАШClear signтАЩ Putin considering using chemical weapons in Ukraine, claims President Biden - The Independent\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print('\\nECONOMY:\\n'+'\\n'.join(w['economy']))\n",
|
||||
"print('\\nNATION:\\n'+'\\n'.join(w['nation']))\n",
|
||||
"print('\\nPERSON:\\n'+'\\n'.join(w['person']))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╢реБрджреНрдзрддрд╛рдХреЛ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"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.9.5"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "4087f998407d06ceb2947016ba4605d0",
|
||||
"translation_date": "2025-08-28T08:33:49+00:00",
|
||||
"source_file": "lessons/2-Symbolic/MSConceptGraph.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,183 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ MNIST рдЕрдВрдХ рд╡рд░реНрдЧреАрдХрд░рдг\n",
|
||||
"\n",
|
||||
"[AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) рдмрд╛рдЯ рд▓реНрдпрд╛рдм рдЕрд╕рд╛рдЗрдирдореЗрдиреНрдЯред\n",
|
||||
"\n",
|
||||
"### рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрдвреНрдиреЗ\n",
|
||||
"\n",
|
||||
"рдпреЛ рдХреЛрдбрд▓реЗ рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рд░рд╣реЗрдХреЛ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реАрдмрд╛рдЯ рдбреЗрдЯрд╛рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдЫред рддрдкрд╛рдИрдВрд▓реЗ AI Curriculum рд░рд┐рдкреЛрдХреЛ `/data` рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдмрд╛рдЯ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рдореНрдпрд╛рдиреБрдЕрд▓реА рдкрдирд┐ рдХрдкреА рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
" % Total % Received % Xferd Average Speed Time Time Time Current\n",
|
||||
" Dload Upload Total Spent Left Speed\n",
|
||||
"\n",
|
||||
" 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\n",
|
||||
"100 9.9M 100 9.9M 0 0 9.9M 0 0:00:01 --:--:-- 0:00:01 15.8M\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"!rm *.pkl\n",
|
||||
"!wget https://raw.githubusercontent.com/microsoft/AI-For-Beginners/main/data/mnist.pkl.gz\n",
|
||||
"!gzip -d mnist.pkl.gz"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pickle\n",
|
||||
"with open('mnist.pkl','rb') as f:\n",
|
||||
" MNIST = pickle.load(f)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"labels = MNIST['Train']['Labels']\n",
|
||||
"data = MNIST['Train']['Features']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣реЗрд░реМрдВ, рд╣рд╛рдореНрд░реЛрд╕рдБрдЧ рд░рд╣реЗрдХреЛ рдбрд╛рдЯрд╛рдХреЛ рдЖрдХрд╛рд░ рдХрд╕реНрддреЛ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(42000, 784)"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"data.shape"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдбреЗрдЯрд╛ рд╡рд┐рднрд╛рдЬрди\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА Scikit Learn рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Train samples: 33600, test samples: 8400\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.model_selection import train_test_split\n",
|
||||
"\n",
|
||||
"features_train, features_test, labels_train, labels_test = train_test_split(data,labels,test_size=0.2)\n",
|
||||
"\n",
|
||||
"print(f\"Train samples: {len(features_train)}, test samples: {len(features_test)}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ\n",
|
||||
"\n",
|
||||
"1. рдкрд╛рдардмрд╛рдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЛрдб рд▓рд┐рдиреБрд╣реЛрд╕реН рд░ рдпрд╕рд▓рд╛рдИ рдпреЛ рдиреЛрдЯрдмреБрдХрдорд╛ рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реН, рд╡рд╛ (рдЕрдЭ рд░рд╛рдореНрд░реЛ) рдЫреБрдЯреНрдЯреИ Python рдореЛрдбреНрдпреБрд▓рдорд╛ рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"1. рдПрдХ-рд╕реНрддрд░реАрдп рдкрд░рд╕реЗрдкреНрдЯреНрд░реЛрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд░ рдорд╛рдиреНрдпрддрд╛рдХреЛ рд╢реБрджреНрдзрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рдЕрд╡рд▓реЛрдХрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"1. рдмреБрдЭреНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдУрднрд░рдлрд┐рдЯрд┐рдВрдЧ рднрдпреЛ рдХрд┐ рднрдПрди, рд░ рд▓реЗрдпрд░рдХрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реЗрд░ рд╢реБрджреНрдзрддрд╛ рд╕реБрдзрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"1. 2-рд╕реНрддрд░реАрдп рд░ 3-рд╕реНрддрд░реАрдп рдкрд░рд╕реЗрдкреНрдЯреНрд░реЛрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдШрд┐рд▓реНрд▓реЛ рдЪрд░рдгрд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреБрд╣реЛрд╕реНред рд▓реЗрдпрд░рд╣рд░реВ рдмреАрдЪ рд╡рд┐рднрд┐рдиреНрди рд╕рдХреНрд░рд┐рдпрддрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"1. рдирд┐рдореНрди рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдЙрддреНрддрд░ рджрд┐рдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН:\n",
|
||||
" - рдХреЗ рдЗрдиреНрдЯрд░-рд▓реЗрдпрд░ рд╕рдХреНрд░рд┐рдпрддрд╛ рдХрд╛рд░реНрдпрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдкреНрд░рджрд░реНрд╢рдирд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрдЫ?\n",
|
||||
" - рдХреЗ рдпреЛ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ 2-рд╕реНрддрд░реАрдп рд╡рд╛ 3-рд╕реНрддрд░реАрдп рдиреЗрдЯрд╡рд░реНрдХ рдЖрд╡рд╢реНрдпрдХ рдЫ?\n",
|
||||
" - рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджрд╛ рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рдЕрдиреБрднрд╡ рдЧрд░реНрдиреБрднрдпреЛ? рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдЬрдм рд▓реЗрдпрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдвреНрдпреЛред\n",
|
||||
" - рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рдиреЗрдЯрд╡рд░реНрдХрдХрд╛ рд╡рдЬрдирд╣рд░реВ рдХрд╕рд░реА рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдЫрдиреН? рд╡рдЬрдирд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рдкрд░рд┐рдорд╛рдгрд╛рддреНрдордХ рдорд╛рди рдмрдирд╛рдо рдЗрдкреЛрдХрдХреЛ рд╕рдореНрдмрдиреНрдз рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕рд▓рд╛рдИ рдкреНрд▓рдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╢реБрджреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.7.4 64-bit (conda)",
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "86193a1ab0ba47eac1c69c1756090baa3b420b3eea7d4aafab8b85f8b312f0c5"
|
||||
}
|
||||
},
|
||||
"name": "python3"
|
||||
},
|
||||
"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.9.5"
|
||||
},
|
||||
"orig_nbformat": 2,
|
||||
"coopTranslator": {
|
||||
"original_hash": "6fa055f484eb5d6bdf41166a356d3abf",
|
||||
"translation_date": "2025-08-28T08:43:55+00:00",
|
||||
"source_file": "lessons/3-NeuralNetworks/04-OwnFramework/lab/MyFW_MNIST.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЕрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣рд╛рддрдХреЛ рдЪрд╛рд▓ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗ\n",
|
||||
"\n",
|
||||
"рдпреЛ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдХреЛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛред\n",
|
||||
"\n",
|
||||
"[рдпреЛ рднрд┐рдбрд┐рдпреЛ](../../../../../../lessons/4-ComputerVision/06-IntroCV/lab/palm-movement.mp4) рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН, рдЬрд╕рдорд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдХреЛ рд╣рд╛рдд рд╕реНрдерд┐рд░ рдкреГрд╖реНрдарднреВрдорд┐рдорд╛ рдмрд╛рдпрд╛рдБ/рджрд╛рдпрд╛рдБ/рдорд╛рдерд┐/рддрд▓ рд╕рд░реНрдЫред \n",
|
||||
"\n",
|
||||
"**рддрдкрд╛рдИрдВрдХреЛ рд▓рдХреНрд╖реНрдп** рдЕрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рднрд┐рдбрд┐рдпреЛрдХрд╛ рдХреБрди рднрд╛рдЧрдорд╛ рдорд╛рдерд┐/рддрд▓/рдмрд╛рдпрд╛рдБ/рджрд╛рдпрд╛рдБ рдЪрд╛рд▓ рднрдПрдХреЛ рдЫ рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБ рд╣реБрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рднрд┐рдбрд┐рдпреЛ рдлреНрд░реЗрдорд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рд╡реНрдпрд╛рдЦреНрдпрд╛рдирдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдЭреИрдВ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм, рд╡реНрдпрд╛рдЦреНрдпрд╛рдирдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдЭреИрдВ рдШрдирд╛ рдЕрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рдлреНрд░реЗрдорд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдШрдирд╛ рдЕрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛрд▓рд╛рдИ рдзреНрд░реБрд╡реАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдЩреНрдХрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдЕрдкреНрдЯрд┐рдХрд▓ рдлреНрд▓реЛ рдлреНрд░реЗрдордХреЛ рд▓рд╛рдЧрд┐ рджрд┐рд╢рд╛рд╣рд░реВрдХреЛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реНред рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдорд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ рдХрд┐ рдХрддрд┐ рднреЗрдХреНрдЯрд░рд╣рд░реВ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдирдорд╛ рдкрд░реНрдЫрдиреН, рд░ рдпрд╕рд▓реЗ рдлреНрд░реЗрдордорд╛ рд╡рд┐рднрд┐рдиреНрди рджрд┐рд╢рд╛рд╣рд░реВрдХреЛ рдЖрдиреНрджреЛрд▓рдирд▓рд╛рдИ рдЕрд▓рдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"> рддрдкрд╛рдИрдВрд▓реЗ рддреА рд╕рдмреИ рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдкрдирд┐ рд╢реВрдиреНрдп рдмрдирд╛рдЙрди рдЪрд╛рд╣рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕рдХреЛ рдкрд░рд┐рдорд╛рдг рдирд┐рд╢реНрдЪрд┐рдд рдереНрд░реЗрд╕рд╣реЛрд▓реНрдбрднрдиреНрджрд╛ рдХрдо рдЫред рдпрд╕рд▓реЗ рднрд┐рдбрд┐рдпреЛрдорд╛ рд╕рд╛рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдиреНрджреЛрд▓рдирд╣рд░реВ, рдЬрд╕реНрддреИ рдЖрдБрдЦрд╛ рд░ рдЯрд╛рдЙрдХреЛрдХреЛ рд╣рд▓рдЪрд▓, рд╣рдЯрд╛рдЙрди рдорджреНрджрдд рдЧрд░реНрджрдЫред\n",
|
||||
"\n",
|
||||
"рдХреЗрд╣реА рдлреНрд░реЗрдорд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдорд╣рд░реВ рдкреНрд▓рдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдорд╣рд░реВ рд╣реЗрд░реНрджрд╛, рдЧрддрд┐ рджрд┐рд╢рд╛рдХреЛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╕рд░реА рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдХреБрд░рд╛ рдзреЗрд░реИ рд╕рд░рд▓ рд╣реБрдиреБрдкрд░реНрдЫред рддрдкрд╛рдИрдВрд▓реЗ рддреА рдмрд┐рдирд╣рд░реВ рдЪрдпрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬреБрди рдорд╛рдерд┐/рддрд▓/рдмрд╛рдпрд╛рдБ/рджрд╛рдпрд╛рдБ рджрд┐рд╢рд╛рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫрдиреН, рд░ рдЬреБрди рдирд┐рд╢реНрдЪрд┐рдд рдереНрд░реЗрд╕рд╣реЛрд▓реНрдбрднрдиреНрджрд╛ рдорд╛рдерд┐ рдЫрдиреНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Code here"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдмрдзрд╛рдИ рдЫ! рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рдерд┐рдХрд╛ рд╕рдмреИ рдЪрд░рдгрд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдкреВрд░рд╛ рдЧрд░реНрдиреБрднрдПрдХреЛ рдЫ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "153d9e417e079bf62f8f693002d0deaf",
|
||||
"translation_date": "2025-08-28T08:09:45+00:00",
|
||||
"source_file": "lessons/4-ComputerVision/06-IntroCV/lab/MovementDetection.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,577 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп\n",
|
||||
"\n",
|
||||
"рдЬрд╕рд░реА рд╣рд╛рдореАрд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗрдХрд╛ рдЫреМрдВ, рд╣рд╛рдореА **AG_NEWS** рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпрдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рд╣реБрдиреЗрдЫреМрдВ, рдЬрд╕рд▓реЗ рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВрд▓рд╛рдИ рдЪрд╛рд░ рд╢реНрд░реЗрдгреАрд╣рд░реВрдорд╛ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реНрдиреБрдкрд░реНрдЫ: рд╡рд┐рд╢реНрд╡, рдЦреЗрд▓рдХреБрдж, рд╡реНрдпрд╛рдкрд╛рд░, рд░ рд╡рд┐рдЬреНрдЮрд╛рди/рдкреНрд░рд╡рд┐рдзрд┐ред\n",
|
||||
"\n",
|
||||
"## рдбреЗрдЯрд╛рд╕реЗрдЯ\n",
|
||||
"\n",
|
||||
"рдпреЛ рдбреЗрдЯрд╛рд╕реЗрдЯ [`torchtext`](https://github.com/pytorch/text) рдореЛрдбреНрдпреБрд▓рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░рд┐рдПрдХреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕рдЬрд┐рд▓реИ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import os\n",
|
||||
"import collections\n",
|
||||
"os.makedirs('./data',exist_ok=True)\n",
|
||||
"train_dataset, test_dataset = torchtext.datasets.AG_NEWS(root='./data')\n",
|
||||
"classes = ['World', 'Sports', 'Business', 'Sci/Tech']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпрд╣рд╛рдБ, `train_dataset` рд░ `test_dataset` рд▓реЗ рдХреНрд░рдорд╢рдГ рд╡рд░реНрдЧрдХреЛ рд╕рдВрдЦреНрдпрд╛ (рд▓реЗрдмрд▓) рд░ рдкрд╛рдардХреЛ рдЬреЛрдбреАрд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдиреЗ рд╕рдВрдЧреНрд░рд╣рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(3,\n",
|
||||
" \"Wall St. Bears Claw Back Into the Black (Reuters) Reuters - Short-sellers, Wall Street's dwindling\\\\band of ultra-cynics, are seeing green again.\")"
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"list(train_dataset)[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рддреНрдпрд╕реИрд▓реЗ, рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдмрд╛рдЯ рдкрд╣рд┐рд▓реЛ резреж рдирдпрд╛рдБ рд╢реАрд░реНрд╖рдХрд╣рд░реВ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"**Sci/Tech** -> Wall St. Bears Claw Back Into the Black (Reuters) Reuters - Short-sellers, Wall Street's dwindling\\band of ultra-cynics, are seeing green again.\n",
|
||||
"**Sci/Tech** -> Carlyle Looks Toward Commercial Aerospace (Reuters) Reuters - Private investment firm Carlyle Group,\\which has a reputation for making well-timed and occasionally\\controversial plays in the defense industry, has quietly placed\\its bets on another part of the market.\n",
|
||||
"**Sci/Tech** -> Oil and Economy Cloud Stocks' Outlook (Reuters) Reuters - Soaring crude prices plus worries\\about the economy and the outlook for earnings are expected to\\hang over the stock market next week during the depth of the\\summer doldrums.\n",
|
||||
"**Sci/Tech** -> Iraq Halts Oil Exports from Main Southern Pipeline (Reuters) Reuters - Authorities have halted oil export\\flows from the main pipeline in southern Iraq after\\intelligence showed a rebel militia could strike\\infrastructure, an oil official said on Saturday.\n",
|
||||
"**Sci/Tech** -> Oil prices soar to all-time record, posing new menace to US economy (AFP) AFP - Tearaway world oil prices, toppling records and straining wallets, present a new economic menace barely three months before the US presidential elections.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for i,x in zip(range(5),train_dataset):\n",
|
||||
" print(f\"**{classes[x[0]]}** -> {x[1]}\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдХрд┐рдирднрдиреЗ рдбреЗрдЯрд╛рд╕реЗрдЯрд╣рд░реВ рдЗрдЯрд░реЗрдЯрд░рд╣рд░реВ рд╣реБрдиреН, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдбрд╛рдЯрд╛ рдзреЗрд░реИ рдкрдЯрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреЗ рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рд╕реВрдЪреАрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"train_dataset, test_dataset = torchtext.datasets.AG_NEWS(root='./data')\n",
|
||||
"train_dataset = list(train_dataset)\n",
|
||||
"test_dataset = list(test_dataset)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯреЛрдХрдирд╛рдЗрдЬреЗрд╢рди\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рдкрд╛рдард▓рд╛рдИ **рд╕рдВрдЦреНрдпрд╛** рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рд▓рд╛рдИ рдЯреЗрдиреНрд╕рд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрджрд┐ рд╣рд╛рдореА рд╢рдмреНрдж-рд╕реНрддрд░рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рджреБрдИ рдХреБрд░рд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫ:\n",
|
||||
"* рдкрд╛рдард▓рд╛рдИ **рдЯреЛрдХрди** рдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди **рдЯреЛрдХрдирд╛рдЗрдЬрд░** рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН\n",
|
||||
"* рддреА рдЯреЛрдХрдирд╣рд░реВрдХреЛ **рд╢рдмреНрджрдХреЛрд╢** рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['he', 'said', 'hello']"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer = torchtext.data.utils.get_tokenizer('basic_english')\n",
|
||||
"tokenizer('He said: hello')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" counter.update(tokenizer(line))\n",
|
||||
"vocab = torchtext.vocab.vocab(counter, min_freq=1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╢рдмреНрджрд╛рд╡рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдЯреЛрдХрди рдЧрд░рд┐рдПрдХреЛ рд╕реНрдЯреНрд░рд┐рдЩрд▓рд╛рдИ рд╕рдВрдЦреНрдпрд╛рдХреЛ рд╕реЗрдЯрдорд╛ рдПрдиреНрдХреЛрдб рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocab size if 95810\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[599, 3279, 97, 1220, 329, 225, 7368]"
|
||||
]
|
||||
},
|
||||
"execution_count": 19,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(f\"Vocab size if {vocab_size}\")\n",
|
||||
"\n",
|
||||
"stoi = vocab.get_stoi() # dict to convert tokens to indices\n",
|
||||
"\n",
|
||||
"def encode(x):\n",
|
||||
" return [stoi[s] for s in tokenizer(x)]\n",
|
||||
"\n",
|
||||
"encode('I love to play with my words')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЭреЛрд▓рд╛ (Bag of Words) рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдЕрд░реНрде рд╡реНрдпрдХреНрдд рдЧрд░реНрдЫрдиреН, рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рд╣рд╛рдореА рд╡рд╛рдХреНрдпрдХреЛ рдХреНрд░рдордХреЛ рдкрд░реНрд╡рд╛рд╣ рдирдЧрд░реА, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╢рдмреНрджрд╣рд░реВ рд╣реЗрд░реЗрд░реИ рдкрд╛рдардХреЛ рдЕрд░реНрде рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдЫреМрдВред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕рдорд╛рдЪрд╛рд░ рд╡рд░реНрдЧреАрдХрд░рдг рдЧрд░реНрджрд╛, *рдореМрд╕рдо*, *рд╣рд┐рдЙрдБ* рдЬрд╕реНрддрд╛ рд╢рдмреНрджрд╣рд░реВрд▓реЗ *рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди* рдЬрдирд╛рдЙрди рд╕рдХреНрдЫрдиреН, рдЬрдмрдХрд┐ *рд╕реНрдЯрдХ*, *рдбрд▓рд░* рдЬрд╕реНрддрд╛ рд╢рдмреНрджрд╣рд░реВрд▓реЗ *рдЖрд░реНрдерд┐рдХ рд╕рдорд╛рдЪрд╛рд░* рддрд░реНрдл рд╕рдЩреНрдХреЗрдд рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"**рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЭреЛрд▓рд╛** (BoW) рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкрд░рдореНрдкрд░рд╛рдЧрдд рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдзреЗрд░реИ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рд╡рд┐рдзрд┐ рд╣реЛред рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд▓рд╛рдИ рднреЗрдХреНрдЯрд░рдХреЛ рд╕реВрдЪрдХрд╕рдБрдЧ рдЬреЛрдбрд┐рдиреНрдЫ, рд░ рднреЗрдХреНрдЯрд░рдХреЛ рддрддреНрддреНрд╡рд▓реЗ рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖ рджрд╕реНрддрд╛рд╡реЗрдЬрдорд╛ рд╢рдмреНрджрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рдЩреНрдЦреНрдпрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> **Note**: рддрдкрд╛рдИрдВ BoW рд▓рд╛рдИ рдкрд╛рдардХрд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╢рдмреНрджрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдПрдХ-рддрд░реНрдл-рдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рднреЗрдХреНрдЯрд░рд╣рд░реВрдХреЛ рдпреЛрдЧрдХреЛ рд░реВрдкрдорд╛ рдкрдирд┐ рд╕реЛрдЪреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рддрд▓ Scikit Learn рдкрд╛рдпрдерди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЭреЛрд▓рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕рд░реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЗрдПрдХреЛ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 1, 0, 2, 0, 0, 0, 0, 0]], dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import CountVectorizer\n",
|
||||
"vectorizer = CountVectorizer()\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"vectorizer.fit_transform(corpus)\n",
|
||||
"vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"AG_NEWS рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдмрд╛рдЯ bag-of-words рднреЗрдХреНрдЯрд░ рдЧрдгрдирд╛ рдЧрд░реНрди, рд╣рд╛рдореА рдирд┐рдореНрди рдлрдЩреНрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"tensor([2., 1., 2., ..., 0., 0., 0.])\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = len(vocab)\n",
|
||||
"\n",
|
||||
"def to_bow(text,bow_vocab_size=vocab_size):\n",
|
||||
" res = torch.zeros(bow_vocab_size,dtype=torch.float32)\n",
|
||||
" for i in encode(text):\n",
|
||||
" if i<bow_vocab_size:\n",
|
||||
" res[i] += 1\n",
|
||||
" return res\n",
|
||||
"\n",
|
||||
"print(to_bow(train_dataset[0][1]))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ:** рдпрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдбрд┐рдлрд▓реНрдЯ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЧреНрд▓реЛрдмрд▓ `vocab_size` рднреЗрд░рд┐рдПрдмрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдХрд┐рдирднрдиреЗ рдкреНрд░рд╛рдпрдГ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рдзреЗрд░реИ рдареВрд▓реЛ рд╣реБрдиреНрдЫ, рд╣рд╛рдореА рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░рд▓рд╛рдИ рд╕рдмреИрднрдиреНрджрд╛ рдмрд╛рд░рдореНрдмрд╛рд░ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рд╢рдмреНрджрд╣рд░реВрдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред `vocab_size` рдХреЛ рдорд╛рди рдШрдЯрд╛рдПрд░ рддрд▓рдХреЛ рдХреЛрдб рдЪрд▓рд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рдпрд╕рд▓реЗ рд╢реБрджреНрдзрддрд╛рдорд╛ рдХрд╕рд░реА рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред рддрдкрд╛рдИрдВрд▓реЗ рдХреЗрд╣реА рд╢реБрджреНрдзрддрд╛ рдШрдЯреНрдиреЗ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рддрд░ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдХреЛ рд╕рдЯреНрдЯрд╛рдорд╛ рдирд╛рдЯрдХреАрдп рд░реВрдкрдорд╛ рд╣реЛрдЗрдиред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BoW рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдкрд╛рдардХреЛ Bag-of-Words рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕рд░реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╕рд┐рдХрд┐рд╕рдХреЗрдкрдЫрд┐, рдпрд╕рдорд╛ рдЖрдзрд╛рд░рд┐рдд рднрдПрд░ рдПрдХ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реМрдВред рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рдпрд╕реНрддреЛ рддрд░рд┐рдХрд╛рд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХрд╛ рд▓рд╛рдЧрд┐ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рд╕рдмреИ рд╕реНрдерд╛рдирдЧрдд рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВрд▓рд╛рдИ Bag-of-Words рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдиреНрдЫред рдпреЛ `bowify` рдлрдВрдХреНрд╢рдирд▓рд╛рдИ рдорд╛рдирдХ torch `DataLoader` рдорд╛ `collate_fn` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд░реВрдкрдорд╛ рдкрд╛рд╕ рдЧрд░реЗрд░ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 21,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from torch.utils.data import DataLoader\n",
|
||||
"import numpy as np \n",
|
||||
"\n",
|
||||
"# this collate function gets list of batch_size tuples, and needs to \n",
|
||||
"# return a pair of label-feature tensors for the whole minibatch\n",
|
||||
"def bowify(b):\n",
|
||||
" return (\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([to_bow(t[1]) for t in b])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = DataLoader(train_dataset, batch_size=16, collate_fn=bowify, shuffle=True)\n",
|
||||
"test_loader = DataLoader(test_dataset, batch_size=16, collate_fn=bowify, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧреАрдХрд░рдг рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реМрдВ рдЬрд╕рдорд╛ рдПрдЙрдЯрд╛ рдорд╛рддреНрд░ рд░реЗрдЦреАрдп рддрд╣ рд╣реБрдиреНрдЫред рдЗрдирдкреБрдЯ рднреЗрдХреНрдЯрд░рдХреЛ рдЖрдХрд╛рд░ `vocab_size` рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдЫ, рд░ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рдХрдХреНрд╖рд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ (4) рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫред рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджреИрдЫреМрдВ, рдЕрдиреНрддрд┐рдо рд╕рдХреНрд░рд┐рдпрддрд╛ рдкреНрд░рдХрд╛рд░реНрдп `LogSoftmax()` рд╣реЛред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"net = torch.nn.Sequential(torch.nn.Linear(vocab_size,4),torch.nn.LogSoftmax(dim=1))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рдорд╛рдирдХ PyTorch рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реВрдк рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред рдХрд┐рдирднрдиреЗ рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдзреЗрд░реИ рдареВрд▓реЛ рдЫ, рд╣рд╛рдореНрд░реЛ рд╢рд┐рдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдХреЗрд╡рд▓ рдПрдХ рдЗрдкреЛрдХрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рдЗрдкреЛрдХрднрдиреНрджрд╛ рдкрдирд┐ рдХрдо (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реАрдорд┐рдд рдЧрд░реНрди `epoch_size` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ)ред рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рд╕рдВрдЪрд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрджреНрдзрддрд╛ рдкрдирд┐ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрдиреЗрдЫреМрдВ; рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрдиреЗ рдЖрд╡реГрддреНрддрд┐ `report_freq` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 24,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def train_epoch(net,dataloader,lr=0.01,optimizer=None,loss_fn = torch.nn.NLLLoss(),epoch_size=None, report_freq=200):\n",
|
||||
" optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr)\n",
|
||||
" net.train()\n",
|
||||
" total_loss,acc,count,i = 0,0,0,0\n",
|
||||
" for labels,features in dataloader:\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" out = net(features)\n",
|
||||
" loss = loss_fn(out,labels) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" total_loss+=loss\n",
|
||||
" _,predicted = torch.max(out,1)\n",
|
||||
" acc+=(predicted==labels).sum()\n",
|
||||
" count+=len(labels)\n",
|
||||
" i+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"{count}: acc={acc.item()/count}\")\n",
|
||||
" if epoch_size and count>epoch_size:\n",
|
||||
" break\n",
|
||||
" return total_loss.item()/count, acc.item()/count"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 25,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.8028125\n",
|
||||
"6400: acc=0.8371875\n",
|
||||
"9600: acc=0.8534375\n",
|
||||
"12800: acc=0.85765625\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.026090790722161722, 0.8620069296375267)"
|
||||
]
|
||||
},
|
||||
"execution_count": 25,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_epoch(net,train_loader,epoch_size=15000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BiGrams, TriGrams рд░ N-Grams\n",
|
||||
"\n",
|
||||
"Bag of words рд╡рд┐рдзрд┐рдХреЛ рдПрдЙрдЯрд╛ рд╕реАрдорд┐рддрддрд╛ рднрдиреЗрдХреЛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рдмрд╣реБ-рд╢рдмреНрдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реБрдиреНрдЫрдиреНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, 'hot dog' рд╢рдмреНрджрдХреЛ рдЕрд░реНрде 'hot' рд░ 'dog' рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЕрдиреНрдп рд╕рдиреНрджрд░реНрднрдорд╛ рднрдиреНрджрд╛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдлрд░рдХ рд╣реБрдиреНрдЫред рдпрджрд┐ рд╣рд╛рдореА 'hot' рд░ 'dog' рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рд╕рдзреИрдВ рдПрдЙрдЯреИ рднреЗрдХреНрдЯрд░рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫреМрдВ рднрдиреЗ, рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓рд▓рд╛рдИ рднреНрд░рдорд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, **N-gram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ** рдкреНрд░рд╛рдпрдГ рдХрд╛рдЧрдЬрд╛рдд рд╡рд░реНрдЧреАрдХрд░рдгрдХрд╛ рд╡рд┐рдзрд┐рд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж, рджреБрдИ-рд╢рдмреНрдж (bi-word) рд╡рд╛ рддреАрди-рд╢рдмреНрдж (tri-word) рдХреЛ рдЖрд╡реГрддреНрддрд┐ classifiers рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, bigram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛, рд╣рд╛рдореА рдореВрд▓ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдмреИ рд╢рдмреНрдж рдЬреЛрдбреАрд╣рд░реВрд▓рд╛рдИ рдкрдирд┐ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдердкреНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рддрд▓ Scikit Learn рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ bigram bag of word рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕рд░реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary:\n",
|
||||
" {'i': 7, 'like': 11, 'hot': 4, 'dogs': 2, 'i like': 8, 'like hot': 12, 'hot dogs': 5, 'the': 16, 'dog': 0, 'ran': 14, 'fast': 3, 'the dog': 17, 'dog ran': 1, 'ran fast': 15, 'its': 9, 'outside': 13, 'its hot': 10, 'hot outside': 6}\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 26,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"bigram_vectorizer = CountVectorizer(ngram_range=(1, 2), token_pattern=r'\\b\\w+\\b', min_df=1)\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"bigram_vectorizer.fit_transform(corpus)\n",
|
||||
"print(\"Vocabulary:\\n\",bigram_vectorizer.vocabulary_)\n",
|
||||
"bigram_vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"N-gram рд╡рд┐рдзрд┐рдХреЛ рдореБрдЦреНрдп рдХрдордЬреЛрд░реА рднрдиреЗрдХреЛ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рдЕрддреНрдпрдиреНрдд рдЫрд┐рдЯреЛ рдмрдвреНрди рдерд╛рд▓реНрдЫред рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛, рд╣рд╛рдореАрд▓рд╛рдИ N-gram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд▓рд╛рдИ рдХреЗрд╣реА рдЖрдпрд╛рдо рдШрдЯрд╛рдЙрдиреЗ рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВрд╕рдБрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдЫ, рдЬрд╕реНрддреИ *embeddings*, рдЬрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЗрдХрд╛рдИрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ **AG News** рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ N-gram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ рд╡рд┐рд╢реЗрд╖ ngram рд╢рдмреНрджрдХреЛрд╢ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 27,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Bigram vocabulary length = 1308842\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" l = tokenizer(line)\n",
|
||||
" counter.update(torchtext.data.utils.ngrams_iterator(l,ngrams=2))\n",
|
||||
" \n",
|
||||
"bi_vocab = torchtext.vocab.vocab(counter, min_freq=1)\n",
|
||||
"\n",
|
||||
"print(\"Bigram vocabulary length = \",len(bi_vocab))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рдорд╛рдерд┐рдХреЛ рдЬрд╕реНрддреИ рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ classifier рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдереНрдпреМрдВ, рддрд░ рдпреЛ рдзреЗрд░реИ рдореЗрдореЛрд░реА-рдЕрдХреНрд╖рдо рд╣реБрдиреЗ рдерд┐рдпреЛред рдЕрд░реНрдХреЛ рдЗрдХрд╛рдИрдорд╛, рд╣рд╛рдореА embeddings рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ bigram classifier рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note:** рддрдкрд╛рдИрдВрд▓реЗ рдХреЗрд╡рд▓ рддреА ngrams рдЫреЛрдбреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдкрд╛рдардорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рд╕рдВрдЦреНрдпрд╛рднрдиреНрджрд╛ рдмрдвреА рдкрдЯрдХ рджреЗрдЦрд╛ рдкрд░реНрдЫред рдпрд╕рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреЗрдЫ рдХрд┐ рдХрдо рдмрд╛рд░рдореНрдмрд╛рд░ рджреЗрдЦрд╛ рдкрд░реНрдиреЗ bigrams рд╣рдЯрд╛рдЗрдиреЗрдЫ, рд░ dimensionality рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдШрдЯреНрдиреЗрдЫред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐, `min_freq` parameter рд▓рд╛рдИ рдЙрдЪреНрдЪ рдорд╛рдирдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ vocabulary рдХреЛ рд▓рдореНрдмрд╛рдЗ рдкрд░рд┐рд╡рд░реНрддрдирд▓рд╛рдИ рдЕрд╡рд▓реЛрдХрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА рдЗрдирднрд░реНрд╕ рдбрдХреБрдореЗрдиреНрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА TF-IDF\n",
|
||||
"\n",
|
||||
"BoW рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛, рд╢рдмреНрджрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рд▓рд╛рдИ рд╕рдорд╛рди рддреМрд▓ рджрд┐рдЗрдиреНрдЫ, рдЪрд╛рд╣реЗ рд╢рдмреНрдж рдХрд╕реНрддреЛ рднрдП рдкрдирд┐ред рддрд░, рдпреЛ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐ рдмрд╛рд░рдореНрдмрд╛рд░ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рд╢рдмреНрджрд╣рд░реВ, рдЬрд╕реНрддреИ *a*, *in*, рдЖрджрд┐ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрджрд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдзреЗрд░реИ рдХрдо рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╣реБрдиреНрдЫрдиреНред рд╡рд╛рд╕реНрддрд╡рдорд╛, рдЕрдзрд┐рдХрд╛рдВрд╢ NLP рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рдЕрд░реВрднрдиреНрджрд╛ рдмрдвреА рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рд╣реБрдиреНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"**TF-IDF** рдХреЛ рдЕрд░реНрде **рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАтАУрдЗрдирднрд░реНрд╕ рдбрдХреБрдореЗрдиреНрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА** рд╣реЛред рдпреЛ рдмрд╛рдЧ рдЕрдл рд╡рд░реНрдбреНрд╕рдХреЛ рдПрдХ рднрд┐рдиреНрдирддрд╛ рд╣реЛ, рдЬрд╣рд╛рдБ рдХреБрдиреИ рд╢рдмреНрджрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреЗ 0/1 рдмрд╛рдЗрдирд░реА рдорд╛рдирдХреЛ рд╕рдЯреНрдЯрд╛, рдлреНрд▓реЛрдЯрд┐рдЩ-рдкреЛрдЗрдиреНрдЯ рдорд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рд╢рдмреНрджрдХреЛ рдХрд░реНрдкрд╕рдорд╛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдкрдорд╛, рд╢рдмреНрдж $i$ рдХреЛ рдбрдХреБрдореЗрдиреНрдЯ $j$ рдорд╛ рддреМрд▓ $w_{ij}$ рдпрд╕рд░реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдиреНрдЫ:\n",
|
||||
"$$\n",
|
||||
"w_{ij} = tf_{ij}\\times\\log({N\\over df_i})\n",
|
||||
"$$\n",
|
||||
"рдЬрд╣рд╛рдБ\n",
|
||||
"* $tf_{ij}$ рднрдиреЗрдХреЛ $j$ рдорд╛ $i$ рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛ, рдЕрд░реНрдерд╛рддреН рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рджреЗрдЦреЗрдХреЛ BoW рдорд╛рди\n",
|
||||
"* $N$ рднрдиреЗрдХреЛ рд╕рдВрдЧреНрд░рд╣рдорд╛ рд░рд╣реЗрдХрд╛ рдбрдХреБрдореЗрдиреНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛ\n",
|
||||
"* $df_i$ рднрдиреЗрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣рдорд╛ рд╢рдмреНрдж $i$ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХрд╛ рдбрдХреБрдореЗрдиреНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛ\n",
|
||||
"\n",
|
||||
"TF-IDF рдорд╛рди $w_{ij}$ рд╢рдмреНрджрдХреЛ рдбрдХреБрдореЗрдиреНрдЯрдорд╛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдЕрдиреБрдкрд╛рддрдорд╛ рдмрдвреНрдЫ рд░ рдХрд░реНрдкрд╕рдорд╛ рд╢рдмреНрдж рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХрд╛ рдбрдХреБрдореЗрдиреНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рд▓реЗ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдХреЗрд╣реА рд╢рдмреНрдж рдмрд╛рд░рдореНрдмрд╛рд░ рджреЗрдЦрд╛ рдкрд░реНрдиреЗ рддрдереНрдпрд▓рд╛рдИ рд╕рдореНрд╣рд╛рд▓реНрди рдорджреНрджрдд рдЧрд░реНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрджрд┐ рд╢рдмреНрдж *рдкреНрд░рддреНрдпреЗрдХ* рдбрдХреБрдореЗрдиреНрдЯрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдЫ рднрдиреЗ, $df_i=N$, рд░ $w_{ij}=0$, рд░ рддреА рд╢рдмреНрджрд╣рд░реВ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рддрдкрд╛рдИрдВ Scikit Learn рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдЬрд┐рд▓реИ TF-IDF рдЯреЗрдХреНрд╕реНрдЯрдХреЛ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╕рди рдмрдирд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 28,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[0.43381609, 0. , 0.43381609, 0. , 0.65985664,\n",
|
||||
" 0.43381609, 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. , 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. ]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 28,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
|
||||
"vectorizer = TfidfVectorizer(ngram_range=(1,2))\n",
|
||||
"vectorizer.fit_transform(corpus)\n",
|
||||
"vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдирд┐рд╖реНрдХрд░реНрд╖\n",
|
||||
"\n",
|
||||
"рдпрджреНрдпрдкрд┐ TF-IDF рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рдЖрд╡реГрддреНрддрд┐рдХреЛ рддреМрд▓ рдкреНрд░рджрд╛рди рдЧрд░реНрдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЕрд░реНрде рд╡рд╛ рдХреНрд░рдорд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рдЕрд╕рдорд░реНрде рдЫрдиреНред рдкреНрд░рд╕рд┐рджреНрдз рднрд╛рд╖рд╛рд╡рд┐рджреН рдЬреЗ. рдЖрд░. рдлрд░реНрдерд▓реЗ резрепрейрел рдорд╛ рднрдиреЗрдХрд╛ рдерд┐рдП, \"рд╢рдмреНрджрдХреЛ рдкреВрд░реНрдг рдЕрд░реНрде рд╕рдзреИрдВ рд╕рдиреНрджрд░реНрднрдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╣реБрдиреНрдЫ, рд░ рд╕рдиреНрджрд░реНрднрдмрд╛рд╣реЗрдХрдХреЛ рдЕрд░реНрдердХреЛ рдХреБрдиреИ рдкрдирд┐ рдЕрдзреНрдпрдпрдирд▓рд╛рдИ рдЧрдореНрднреАрд░рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд┐рди рд╕рдХрд┐рдБрджреИрдиред\"ред рд╣рд╛рдореА рдпрд╕ рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рдкрдЫрд┐ рдкрд╛рдардмрд╛рдЯ рднрд╛рд╖рд╛рдЧрдд рдореЛрдбреЗрд▓рд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдХрд╕рд░реА рдкрд╛рдардмрд╛рдЯ рд╕рдиреНрджрд░реНрднрдЧрдд рдЬрд╛рдирдХрд╛рд░реА рдХрдмреНрдЬрд╛ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдХреБрд░рд╛ рд╕рд┐рдХреНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рдЫред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╢реБрджреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "7b9040985e748e4e2d4c689892456ad7",
|
||||
"translation_date": "2025-08-28T09:51:29+00:00",
|
||||
"source_file": "lessons/5-NLP/13-TextRep/TextRepresentationPyTorch.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,647 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдореЛрдбреНрдпреБрд▓рдорд╛, рд╣рд╛рдореА **[AG_NEWS](http://www.di.unipi.it/~gulli/AG_corpus_of_news_articles.html)** рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВ: рд╣рд╛рдореА рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд▓рд╛рдИ рдЪрд╛рд░ рд╢реНрд░реЗрдгреАрдордзреНрдпреЗ рдПрдХрдорд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВ: рд╡рд┐рд╢реНрд╡, рдЦреЗрд▓рдХреБрдж, рд╡реНрдпрд╛рдкрд╛рд░, рд░ рд╡рд┐рдЬреНрдЮрд╛рди/рдкреНрд░рд╡рд┐рдзрд┐ред\n",
|
||||
"\n",
|
||||
"## рдбреЗрдЯрд╛рд╕реЗрдЯ\n",
|
||||
"\n",
|
||||
"рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА **[TensorFlow Datasets](https://www.tensorflow.org/datasets)** API рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"\n",
|
||||
"# In this tutorial, we will be training a lot of models. In order to use GPU memory cautiously,\n",
|
||||
"# we will set tensorflow option to grow GPU memory allocation when required.\n",
|
||||
"physical_devices = tf.config.list_physical_devices('GPU') \n",
|
||||
"if len(physical_devices)>0:\n",
|
||||
" tf.config.experimental.set_memory_growth(physical_devices[0], True)\n",
|
||||
"\n",
|
||||
"dataset = tfds.load('ag_news_subset')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рдЕрдм `dataset['train']` рд░ `dataset['test']` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд░ рдкрд░реАрдХреНрд╖рдг рднрд╛рдЧрд╣рд░реВ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Length of train dataset = 120000\n",
|
||||
"Length of test dataset = 7600\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"ds_train = dataset['train']\n",
|
||||
"ds_test = dataset['test']\n",
|
||||
"\n",
|
||||
"print(f\"Length of train dataset = {len(ds_train)}\")\n",
|
||||
"print(f\"Length of test dataset = {len(ds_test)}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдмрд╛рдЯ рдкрд╣рд┐рд▓реЛ резреж рдирдпрд╛рдБ рд╢реАрд░реНрд╖рдХрд╣рд░реВ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3 (Sci/Tech) -> b'AMD Debuts Dual-Core Opteron Processor' b'AMD #39;s new dual-core Opteron chip is designed mainly for corporate computing applications, including databases, Web services, and financial transactions.'\n",
|
||||
"1 (Sports) -> b\"Wood's Suspension Upheld (Reuters)\" b'Reuters - Major League Baseball\\\\Monday announced a decision on the appeal filed by Chicago Cubs\\\\pitcher Kerry Wood regarding a suspension stemming from an\\\\incident earlier this season.'\n",
|
||||
"2 (Business) -> b'Bush reform may have blue states seeing red' b'President Bush #39;s quot;revenue-neutral quot; tax reform needs losers to balance its winners, and people claiming the federal deduction for state and local taxes may be in administration planners #39; sights, news reports say.'\n",
|
||||
"3 (Sci/Tech) -> b\"'Halt science decline in schools'\" b'Britain will run out of leading scientists unless science education is improved, says Professor Colin Pillinger.'\n",
|
||||
"1 (Sports) -> b'Gerrard leaves practice' b'London, England (Sports Network) - England midfielder Steven Gerrard injured his groin late in Thursday #39;s training session, but is hopeful he will be ready for Saturday #39;s World Cup qualifier against Austria.'\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"classes = ['World', 'Sports', 'Business', 'Sci/Tech']\n",
|
||||
"\n",
|
||||
"for i,x in zip(range(5),ds_train):\n",
|
||||
" print(f\"{x['label']} ({classes[x['label']]}) -> {x['title']} {x['description']}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкрд╛рдардХреЛ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╕рди\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рдкрд╛рдард▓рд╛рдИ **рд╕рдВрдЦреНрдпрд╛** рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬрд╕рд▓рд╛рдИ рдЯреЗрдиреНрд╕рд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрджрд┐ рд╣рд╛рдореА рд╢рдмреНрдж-рд╕реНрддрд░рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рджреБрдИ рдХреБрд░рд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫ:\n",
|
||||
"\n",
|
||||
"* рдкрд╛рдард▓рд╛рдИ **рдЯреЛрдХрди** рдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди **рдЯреЛрдХрдирд╛рдЗрдЬрд░** рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"* рддреА рдЯреЛрдХрдирд╣рд░реВрдХреЛ **рд╢рдмреНрджрдХреЛрд╢** рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"\n",
|
||||
"### рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рд╕реАрдорд┐рдд рдЧрд░реНрдиреБ\n",
|
||||
"\n",
|
||||
"AG News рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рдзреЗрд░реИ рдареВрд▓реЛ рдЫ, резрежрежk рднрдиреНрджрд╛ рдмрдвреА рд╢рдмреНрджрд╣рд░реВред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╛рдардорд╛ рдХрдо рдЙрдкрд╕реНрдерд┐рдд рд╣реБрдиреЗ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реБрдБрджреИрди тАФ рдХреЗрд╡рд▓ рдХреЗрд╣реА рд╡рд╛рдХреНрдпрд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рддреА рд╢рдмреНрджрд╣рд░реВ рд╣реБрдиреЗрдЫрдиреН, рд░ рдореЛрдбреЗрд▓рд▓реЗ рддреАрдмрд╛рдЯ рд╕рд┐рдХреНрдиреЗ рдЫреИрдиред рддреНрдпрд╕реИрд▓реЗ, рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░рд▓рд╛рдИ рд╕рд╛рдиреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫ, рдЬрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ рдПрдЙрдЯрд╛ рдЖрд░реНрдЧреБрдореЗрдиреНрдЯ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n",
|
||||
"\n",
|
||||
"рдпреА рджреБрдИ рдЪрд░рдгрд╣рд░реВ **TextVectorization** рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЕрдм рд╣рд╛рдореА рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рд╡рд╕реНрддреБрд▓рд╛рдИ рдЗрдиреНрд╕реНрдЯреНрдпрд╛рдиреНрд╕рд┐рдпреЗрдЯ рдЧрд░реМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ `adapt` рдореЗрдердбрд▓рд╛рдИ рдХрд▓ рдЧрд░реЗрд░ рд╕рдмреИ рдкрд╛рдардорд╛ рдЬрд╛рдФрдВ рд░ рд╢рдмреНрджрдХреЛрд╢ рдирд┐рд░реНрдорд╛рдг рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vocab_size = 50000\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size)\n",
|
||||
"vectorizer.adapt(ds_train.take(500).map(lambda x: x['title']+' '+x['description']))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ** рд╣рд╛рдореА рд╢рдмреНрджрдХреЛрд╢ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдореНрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдЫреМрдВред рдпрд╕рд▓реЗ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рд╕рдордпрд▓рд╛рдИ рддреАрд╡реНрд░ рдмрдирд╛рдЙрдиреЗ рд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкрд░реНрдЦрди рдирдкрд░реНрдиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫред рддрд░, рдпрд╕рд▓реЗ рдЬреЛрдЦрд┐рдо рдирд┐рдореНрддреНрдпрд╛рдЙрдБрдЫ рдХрд┐ рд╕рдореНрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдХрд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдирд╣реБрдиреЗрдЫрдиреН рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреЗрдЫрдиреНред рддреНрдпрд╕реИрд▓реЗ, рд╕рдореНрдкреВрд░реНрдг рд╢рдмреНрджрдХреЛрд╢ рдЖрдХрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░ `adapt` рдХреЛ рдХреНрд░рдордорд╛ рд╕рдореНрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдЪрд▓рд╛рдЙрдБрджрд╛ рдЕрдиреНрддрд┐рдо рд╢реБрджреНрдзрддрд╛ рдмрдвреНрди рд╕рдХреНрдЫ, рддрд░ рдзреЗрд░реИ рдареВрд▓реЛ рдорд╛рддреНрд░рд╛рдорд╛ рд╣реЛрдЗрдиред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"['', '[UNK]', 'the', 'to', 'a', 'in', 'of', 'and', 'on', 'for']\n",
|
||||
"Length of vocabulary: 5335\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab = vectorizer.get_vocabulary()\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(vocab[:10])\n",
|
||||
"print(f\"Length of vocabulary: {vocab_size}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рд╕рдЬрд┐рд▓реИ рдХреБрдиреИ рдкрдирд┐ рдкрд╛рдард▓рд╛рдИ рд╕рдВрдЦреНрдпрд╛рдХреЛ рд╕реЗрдЯрдорд╛ рдПрдиреНрдХреЛрдб рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tf.Tensor: shape=(7,), dtype=int64, numpy=array([ 112, 3695, 3, 304, 11, 1041, 1], dtype=int64)>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vectorizer('I love to play with my words')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЭреЛрд▓рд╛ (Bag-of-words) рдкрд╛рда рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдЕрд░реНрде рд╡реНрдпрдХреНрдд рдЧрд░реНрдЫрдиреН, рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдВ рд╣рд╛рдореА рд╡рд╛рдХреНрдпрдХреЛ рдХреНрд░рдордХреЛ рдкрд░реНрд╡рд╛рд╣ рдирдЧрд░реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╢рдмреНрджрд╣рд░реВ рд╣реЗрд░реЗрд░ рдкрд╛рдардХреЛ рдЕрд░реНрде рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдЫреМрдВред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕рдорд╛рдЪрд╛рд░ рд╡рд░реНрдЧреАрдХрд░рдг рдЧрд░реНрджрд╛, *рдореМрд╕рдо* рд░ *рд╣рд┐рдЙрдБ* рдЬрд╕реНрддрд╛ рд╢рдмреНрджрд╣рд░реВрд▓реЗ *рдореМрд╕рдо рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди* рд╕рдВрдХреЗрдд рдЧрд░реНрди рд╕рдХреНрдЫрдиреН, рдЬрдмрдХрд┐ *рд╕реНрдЯрдХ* рд░ *рдбрд▓рд░* рдЬрд╕реНрддрд╛ рд╢рдмреНрджрд╣рд░реВрд▓реЗ *рдЖрд░реНрдерд┐рдХ рд╕рдорд╛рдЪрд╛рд░* рддрд░реНрдл рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"**рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЭреЛрд▓рд╛** (BoW) рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкрд░рдореНрдкрд░рд╛рдЧрдд рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ рдордзреНрдпреЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд░рд▓ рд░ рдмреБрдЭреНрди рд╕рдЬрд┐рд▓реЛ рд╣реЛред рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд▓рд╛рдИ рднреЗрдХреНрдЯрд░рдХреЛ рд╕реВрдЪрдХрд╕рдБрдЧ рдЬреЛрдбрд┐рдиреНрдЫ, рд░ рднреЗрдХреНрдЯрд░рдХреЛ рддрддреНрд╡рд▓реЗ рдХреБрдиреИ рдкрдирд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> **Note**: рддрдкрд╛рдИрдВ BoW рд▓рд╛рдИ рдкрд╛рдардорд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╢рдмреНрджрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ-рд╣рдЯ-рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рднреЗрдХреНрдЯрд░рд╣рд░реВрдХреЛ рдпреЛрдЧрдХреЛ рд░реВрдкрдорд╛ рдкрдирд┐ рд╕реЛрдЪреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рддрд▓ Scikit Learn рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЭреЛрд▓рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕рд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 1, 0, 2, 0, 0, 0, 0, 0]], dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import CountVectorizer\n",
|
||||
"sc_vectorizer = CountVectorizer()\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"sc_vectorizer.fit_transform(corpus)\n",
|
||||
"sc_vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реЗрдХреЛ Keras vectorizer рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рд╕рдВрдЦреНрдпрд╛ рдПрдХ-рд╣рдЯ рдПрдиреНрдХреЛрдбрд┐рдЩрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрд░ рддреА рд╕рдмреИ рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдЬреЛрдбреНрди:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([0., 5., 0., ..., 0., 0., 0.], dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def to_bow(text):\n",
|
||||
" return tf.reduce_sum(tf.one_hot(vectorizer(text),vocab_size),axis=0)\n",
|
||||
"\n",
|
||||
"to_bow('My dog likes hot dogs on a hot day.').numpy()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **Note**: рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЕрдЪрдореНрдо рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ рдХрд┐ рдирддрд┐рдЬрд╛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрднрдиреНрджрд╛ рдлрд░рдХ рдЫред рдпрд╕рдХреЛ рдХрд╛рд░рдг рдХреЗ рд╣реЛ рднрдиреЗ Keras рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рднреЗрдХреНрдЯрд░рдХреЛ рд▓рдореНрдмрд╛рдЗ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ, рдЬреБрди рд╕рдореНрдкреВрд░реНрдг AG News рдбреЗрдЯрд╛рд╕реЗрдЯрдмрд╛рдЯ рдирд┐рд░реНрдорд╛рдг рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрдмрдХрд┐ Scikit Learn рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореАрд▓реЗ рдирдореВрдирд╛ рдкрд╛рдардмрд╛рдЯ рддреБрд░реБрдиреНрддреИ рд╢рдмреНрджрдХреЛрд╢ рдирд┐рд░реНрдорд╛рдг рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BoW рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдкрд╛рдардХреЛ рдмреНрдпрд╛рдЧ-рдЕрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕рд░реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╕рд┐рдХрд┐рд╕рдХреЗрдкрдЫрд┐, рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реМрдВред рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рдмреНрдпрд╛рдЧ-рдЕрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпреЛ рдирд┐рдореНрди рддрд░рд┐рдХрд╛рд▓реЗ `map` рдлрдВрдХреНрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"batch_size = 128\n",
|
||||
"\n",
|
||||
"ds_train_bow = ds_train.map(lambda x: (to_bow(x['title']+x['description']),x['label'])).batch(batch_size)\n",
|
||||
"ds_test_bow = ds_test.map(lambda x: (to_bow(x['title']+x['description']),x['label'])).batch(batch_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧреАрдХрд░рдг рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реМрдВ рдЬрд╕рдорд╛ рдПрдХ рд▓рд┐рдиреЗрдпрд░ рд▓реЗрдпрд░ рд╕рдорд╛рд╡реЗрд╢ рдЫред рдЗрдирдкреБрдЯ рд╕рд╛рдЗрдЬ `vocab_size` рд╣реЛ, рд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рд╛рдЗрдЬ рд╡рд░реНрдЧрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ (4) рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫред рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдЧрд░реНрджреИрдЫреМрдВ, рдЕрдиреНрддрд┐рдо рд╕рдХреНрд░рд┐рдпрддрд╛ рдлрд▓рди **softmax** рд╣реЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"938/938 [==============================] - 66s 70ms/step - loss: 0.6144 - acc: 0.8427 - val_loss: 0.4416 - val_acc: 0.8697\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c70a947f0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Dense(4,activation='softmax',input_shape=(vocab_size,))\n",
|
||||
"])\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train_bow,validation_data=ds_test_bow)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЪреВрдБрдХрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рек рд╡рдЯрд╛ рд╡рд░реНрдЧрд╣рд░реВ рдЫрдиреН, реореж% рднрдиреНрджрд╛ рдорд╛рдерд┐рдХреЛ рд╢реБрджреНрдзрддрд╛ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рд╣реЛред\n",
|
||||
"\n",
|
||||
"## рдПрдХ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдкрдирд┐ Keras рд▓реЗрдпрд░ рд╣реЛ, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рдЕрдиреНрдд-рджреЗрдЦрд┐-рдЕрдиреНрддрд╕рдореНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпрд╕рд░реА рд╣рд╛рдореАрд▓реЗ `map` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрди, рд╣рд╛рдореА рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЗрдирдкреБрдЯрдорд╛ рдореВрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯ рдорд╛рддреНрд░ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note**: рд╣рд╛рдореАрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ `title`, `description` рд░ `label` рдЬрд╕реНрддрд╛ рдбрд┐рдХреНрд╕рдирд░реАрдмрд╛рдЯ рдлрд┐рд▓реНрдбрд╣рд░реВрд▓рд╛рдИ рдЯрдкрд▓реНрд╕рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди `map` рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред рддрд░, рдЬрдм рдбрд┐рд╕реНрдХрдмрд╛рдЯ рдбреЗрдЯрд╛ рд▓реЛрдб рдЧрд░реНрджреИрдЫреМрдВ, рд╣рд╛рдореА рд╕реБрд░реБрдорд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд░рдЪрдирд╛рд╕рд╣рд┐рддрдХреЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"model\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
" Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
" input_1 (InputLayer) [(None, 1)] 0 \n",
|
||||
" \n",
|
||||
" text_vectorization (TextVec (None, None) 0 \n",
|
||||
" torization) \n",
|
||||
" \n",
|
||||
" tf.one_hot (TFOpLambda) (None, None, 5335) 0 \n",
|
||||
" \n",
|
||||
" tf.math.reduce_sum (TFOpLam (None, 5335) 0 \n",
|
||||
" bda) \n",
|
||||
" \n",
|
||||
" dense_2 (Dense) (None, 4) 21344 \n",
|
||||
" \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 21,344\n",
|
||||
"Trainable params: 21,344\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n",
|
||||
"938/938 [==============================] - 73s 77ms/step - loss: 0.6057 - acc: 0.8414 - val_loss: 0.4202 - val_acc: 0.8736\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c721521f0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"inp = keras.Input(shape=(1,),dtype=tf.string)\n",
|
||||
"x = vectorizer(inp)\n",
|
||||
"x = tf.reduce_sum(tf.one_hot(x,vocab_size),axis=1)\n",
|
||||
"out = keras.layers.Dense(4,activation='softmax')(x)\n",
|
||||
"model = keras.models.Model(inp,out)\n",
|
||||
"model.summary()\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдмрд╛рдЗрдЧреНрд░рд╛рдо, рдЯреНрд░рд╛рдЗрдЧреНрд░рд╛рдо рд░ рдПрди-рдЧреНрд░рд╛рдо\n",
|
||||
"\n",
|
||||
"рдмреНрдпрд╛рдЧ-рдЕрдл-рд╡рд░реНрдбреНрд╕ рд╡рд┐рдзрд┐рдХреЛ рдПрдЙрдЯрд╛ рд╕реАрдорд┐рддрддрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рдмрд╣реБ-рд╢рдмреНрдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реБрдиреНрдЫрдиреНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, 'рд╣рдЯ рдбрдЧ' рд╢рдмреНрджрдХреЛ рдЕрд░реНрде 'рд╣рдЯ' рд░ 'рдбрдЧ' рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЕрдиреНрдп рд╕рдиреНрджрд░реНрднрдорд╛ рдЕрд░реНрдерднрдиреНрджрд╛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдлрд░рдХ рд╣реБрдиреНрдЫред рдпрджрд┐ рд╣рд╛рдореА 'рд╣рдЯ' рд░ 'рдбрдЧ' рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рд╕рдзреИрдВ рдПрдЙрдЯреИ рднреЗрдХреНрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫреМрдВ рднрдиреЗ, рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдореЛрдбрд▓рд▓рд╛рдИ рднреНрд░рдорд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, **рдПрди-рдЧреНрд░рд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ** рдкреНрд░рд╛рдпрдГ рдХрд╛рдЧрдЬрд╛рдд рд╡рд░реНрдЧреАрдХрд░рдг рд╡рд┐рдзрд┐рд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж, рджреБрдИ-рд╢рдмреНрдж рд╡рд╛ рддреАрди-рд╢рдмреНрджрдХреЛ рдЖрд╡реГрддреНрддрд┐ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рди рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдмрд╛рдЗрдЧреНрд░рд╛рдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛, рд╣рд╛рдореА рдореВрд▓ рд╢рдмреНрджрд╣рд░реВрдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдмреИ рд╢рдмреНрдж рдЬреЛрдбреАрд╣рд░реВрд▓рд╛рдИ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдердкреНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рддрд▓ рд╕реНрдХрд╛рдЗ-рдХрд┐рдЯ рд▓рд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрд╛рдЗрдЧреНрд░рд╛рдо рдмреНрдпрд╛рдЧ-рдЕрдл-рд╡рд░реНрдбреНрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╕рд░реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary:\n",
|
||||
" {'i': 7, 'like': 11, 'hot': 4, 'dogs': 2, 'i like': 8, 'like hot': 12, 'hot dogs': 5, 'the': 16, 'dog': 0, 'ran': 14, 'fast': 3, 'the dog': 17, 'dog ran': 1, 'ran fast': 15, 'its': 9, 'outside': 13, 'its hot': 10, 'hot outside': 6}\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int64)"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"bigram_vectorizer = CountVectorizer(ngram_range=(1, 2), token_pattern=r'\\b\\w+\\b', min_df=1)\n",
|
||||
"corpus = [\n",
|
||||
" 'I like hot dogs.',\n",
|
||||
" 'The dog ran fast.',\n",
|
||||
" 'Its hot outside.',\n",
|
||||
" ]\n",
|
||||
"bigram_vectorizer.fit_transform(corpus)\n",
|
||||
"print(\"Vocabulary:\\n\",bigram_vectorizer.vocabulary_)\n",
|
||||
"bigram_vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"n-gram рд╡рд┐рдзрд┐рдХреЛ рдореБрдЦреНрдп рдХрдордЬреЛрд░реА рднрдиреЗрдХреЛ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рдЕрддреНрдпрдиреНрдд рдЫрд┐рдЯреЛ рдмрдвреНрди рдерд╛рд▓реНрдЫред рд╡реНрдпрд╡рд╣рд╛рд░рдорд╛, рд╣рд╛рдореАрд▓рд╛рдИ n-gram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд▓рд╛рдИ *embeddings* рдЬрд╕реНрддрд╛ рдЖрдпрд╛рдо рдШрдЯрд╛рдЙрдиреЗ рдкреНрд░рд╡рд┐рдзрд┐рд╕рдБрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫ, рдЬреБрди рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЗрдХрд╛рдИрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ **AG News** рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ n-gram рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ `TextVectorization` рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ `ngrams` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдмрд┐рдЧреНрд░рд╛рдо рд╢рдмреНрджрдХреЛрд╢рдХреЛ рд▓рдореНрдмрд╛рдЗ **рдзреЗрд░реИ рдареВрд▓реЛ** рд╣реБрдиреНрдЫ, рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛ рдпреЛ рез.рей рдорд┐рд▓рд┐рдпрдирднрдиреНрджрд╛ рдмрдвреА рдЯреЛрдХрдирд╣рд░реВ рд╣реБрдиреНрдЫ! рддреНрдпрд╕реИрд▓реЗ, рдмрд┐рдЧреНрд░рд╛рдо рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ рдкрдирд┐ рдХреБрдиреИ рдЙрдкрдпреБрдХреНрдд рд╕реАрдорд╛рдорд╛ рд╕реАрдорд┐рдд рдЧрд░реНрдиреБ рдЙрдЪрд┐рдд рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐рдХреЛ рдЬрд╕реНрддреИ рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рди рд╕рдХреНрдереНрдпреМрдВ, рддрд░ рдпреЛ рдзреЗрд░реИ рдореЗрдореЛрд░реА-рдЕрдХреНрд╖рдо рд╣реБрдиреЗ рдерд┐рдпреЛред рдЕрд░реНрдХреЛ рдЗрдХрд╛рдИрдорд╛, рд╣рд╛рдореА embeddings рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдмрд┐рдЧреНрд░рд╛рдо рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдиреЗрдЫреМрдВред рдпрд╕реИрдмреАрдЪ, рддрдкрд╛рдИрдВ рдпрд╕ рдиреЛрдЯрдмреБрдХрдорд╛ рдмрд┐рдЧреНрд░рд╛рдо рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдХрд┐ рднрдиреЗрд░ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BoW рднреЗрдХреНрдЯрд░рд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╡рди-рд╣рдЯ рдЗрдирдХреЛрдбрд┐рдЩрд╣рд░реВрд▓рд╛рдИ рдЬреЛрдбреЗрд░ BoW рднреЗрдХреНрдЯрд░рд╣рд░реВ рд╣рд╛рддрд▓реЗ рдЧрдгрдирд╛ рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВред рддрд░, TensorFlow рдХреЛ рдкрдЫрд┐рд▓реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдгрд▓реЗ `output_mode='count` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд▓рд╛рдИ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ рдкрд╛рд╕ рдЧрд░реЗрд░ BoW рднреЗрдХреНрдЯрд░рд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рдирд┐рдХреИ рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n",
|
||||
"938/938 [==============================] - 7s 7ms/step - loss: 0.5929 - acc: 0.8486 - val_loss: 0.4168 - val_acc: 0.8772\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c725217c0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,output_mode='count'),\n",
|
||||
" keras.layers.Dense(4,input_shape=(vocab_size,), activation='softmax')\n",
|
||||
"])\n",
|
||||
"print(\"Training vectorizer\")\n",
|
||||
"model.layers[0].adapt(ds_train.take(500).map(extract_text))\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА - рдЗрдирднрд░реНрд╕ рдбрдХреБрдореЗрдиреНрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА (TF-IDF)\n",
|
||||
"\n",
|
||||
"BoW рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛, рд╢рдмреНрджрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рд▓рд╛рдИ рдПрдЙрдЯреИ рдкреНрд░рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддреМрд▓ рджрд┐рдЗрдиреНрдЫ, рдЪрд╛рд╣реЗ рд╢рдмреНрдж рдЬреЗ рднрдП рдкрдирд┐ред рддрд░, рдпреЛ рд╕реНрдкрд╖реНрдЯ рдЫ рдХрд┐ *a* рд░ *in* рдЬрд╕реНрддрд╛ рдмрд╛рд░рдореНрдмрд╛рд░ рдкреНрд░рдпреЛрдЧ рд╣реБрдиреЗ рд╢рдмреНрджрд╣рд░реВ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрджрд╣рд░реВ рднрдиреНрджрд╛ рдХрдо рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╣реБрдиреНрдЫрдиреНред рдзреЗрд░реИрдЬрд╕реЛ NLP рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рдЕрд░реВрднрдиреНрджрд╛ рдмрдвреА рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рд╣реБрдиреНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"**TF-IDF** рдХреЛ рдЕрд░реНрде **рдЯрд░реНрдо рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА - рдЗрдирднрд░реНрд╕ рдбрдХреБрдореЗрдиреНрдЯ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реА** рд╣реЛред рдпреЛ bag-of-words рдХреЛ рдПрдХ рднрд┐рдиреНрдирддрд╛ рд╣реЛ, рдЬрд╣рд╛рдБ рдХреБрдиреИ рд╢рдмреНрджрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреЗ 0/1 рдмрд╛рдЗрдирд░реА рдорд╛рдирдХреЛ рд╕рдЯреНрдЯрд╛, рдлреНрд▓реЛрдЯрд┐рдЩ-рдкреНрд╡рд╛рдЗрдиреНрдЯ рдорд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рд╢рдмреНрджрдХреЛ рдХрд░реНрдкрд╕рдорд╛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдкрдорд╛, рд╢рдмреНрдж $i$ рдХреЛ рдбрдХреБрдореЗрдиреНрдЯ $j$ рдорд╛ рддреМрд▓ $w_{ij}$ рдпрд╕рд░реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдиреНрдЫ:\n",
|
||||
"$$\n",
|
||||
"w_{ij} = tf_{ij}\\times\\log({N\\over df_i})\n",
|
||||
"$$\n",
|
||||
"рдЬрд╣рд╛рдБ\n",
|
||||
"* $tf_{ij}$ рднрдиреЗрдХреЛ $i$ рдХреЛ $j$ рдорд╛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛ, рдЕрд░реНрдерд╛рддреН рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рджреЗрдЦреЗрдХреЛ BoW рдорд╛рди\n",
|
||||
"* $N$ рднрдиреЗрдХреЛ рд╕рдВрдЧреНрд░рд╣рдорд╛ рд░рд╣реЗрдХрд╛ рдбрдХреБрдореЗрдиреНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛ\n",
|
||||
"* $df_i$ рднрдиреЗрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд╕рдВрдЧреНрд░рд╣рдорд╛ рд╢рдмреНрдж $i$ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХрд╛ рдбрдХреБрдореЗрдиреНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛ\n",
|
||||
"\n",
|
||||
"TF-IDF рдорд╛рди $w_{ij}$ рдХреБрдиреИ рдбрдХреБрдореЗрдиреНрдЯрдорд╛ рд╢рдмреНрджрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдЕрдиреБрдкрд╛рддрдорд╛ рдмрдвреНрдЫ рд░ рдХрд░реНрдкрд╕рдорд╛ рд╢рдмреНрдж рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХрд╛ рдбрдХреБрдореЗрдиреНрдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рд▓реЗ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░рд┐рдиреНрдЫред рдпрд╕рд▓реЗ рдХреЗрд╣реА рд╢рдмреНрдж рдмрд╛рд░рдореНрдмрд╛рд░ рджреЗрдЦрд╛ рдкрд░реНрдиреЗ рддрдереНрдпрд▓рд╛рдИ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрджрд┐ рдХреБрдиреИ рд╢рдмреНрдж *рдкреНрд░рддреНрдпреЗрдХ* рдбрдХреБрдореЗрдиреНрдЯрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрдЫ рднрдиреЗ, $df_i=N$, рд░ $w_{ij}=0$, рд░ рддреА рд╢рдмреНрджрд╣рд░реВ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рддрдкрд╛рдИрдВ Scikit Learn рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдЬрд┐рд▓реИ TF-IDF рдЯреЗрдХреНрд╕реНрдЯрдХреЛ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╕рди рдмрдирд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[0.43381609, 0. , 0.43381609, 0. , 0.65985664,\n",
|
||||
" 0.43381609, 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. , 0. , 0. , 0. , 0. ,\n",
|
||||
" 0. ]])"
|
||||
]
|
||||
},
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
|
||||
"vectorizer = TfidfVectorizer(ngram_range=(1,2))\n",
|
||||
"vectorizer.fit_transform(corpus)\n",
|
||||
"vectorizer.transform(['My dog likes hot dogs on a hot day.']).toarray()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Keras рдорд╛, `TextVectorization` рд▓реЗрдпрд░рд▓реЗ `output_mode='tf-idf'` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрд╛рд╕ рдЧрд░реЗрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ TF-IDF рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫред TF-IDF рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рд╢реБрджреНрдзрддрд╛ рдмрдвреНрдЫ рдХрд┐ рдмрдвреНрджреИрди рд╣реЗрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рдерд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдХреЛрдбрд▓рд╛рдИ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n",
|
||||
"938/938 [==============================] - 12s 12ms/step - loss: 0.4197 - acc: 0.8662 - val_loss: 0.3432 - val_acc: 0.8849\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x20c729dfd30>"
|
||||
]
|
||||
},
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,output_mode='tf-idf'),\n",
|
||||
" keras.layers.Dense(4,input_shape=(vocab_size,), activation='softmax')\n",
|
||||
"])\n",
|
||||
"print(\"Training vectorizer\")\n",
|
||||
"model.layers[0].adapt(ds_train.take(500).map(extract_text))\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдирд┐рд╖реНрдХрд░реНрд╖\n",
|
||||
"\n",
|
||||
"рдпрджреНрдпрдкрд┐ TF-IDF рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рдЖрд╡реГрддреНрддрд┐ рддреМрд▓ рдкреНрд░рджрд╛рди рдЧрд░реНрдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдЕрд░реНрде рд╡рд╛ рдХреНрд░рдорд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд╕рдХреНрджреИрдирдиреНред рдкреНрд░рд╕рд┐рджреНрдз рднрд╛рд╖рд╛рд╡рд┐рджреН рдЬреЗ. рдЖрд░. рдлрд░реНрдерд▓реЗ резрепрейрел рдорд╛ рднрдиреЗрдХрд╛ рдерд┐рдП, \"рд╢рдмреНрджрдХреЛ рдкреВрд░реНрдг рдЕрд░реНрде рд╕рдзреИрдВ рд╕рдиреНрджрд░реНрднрд╛рддреНрдордХ рд╣реБрдиреНрдЫ, рд░ рд╕рдиреНрджрд░реНрднрдмрд╛рд╣реЗрдХрдХреЛ рдЕрд░реНрдердХреЛ рдХреБрдиреИ рдкрдирд┐ рдЕрдзреНрдпрдпрдирд▓рд╛рдИ рдЧрдореНрднреАрд░рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд┐рди рд╕рдХрд┐рдБрджреИрдиред\" рд╣рд╛рдореА рдкрд╛рдардмрд╛рдЯ рд╕рдиреНрджрд░реНрднрд╛рддреНрдордХ рдЬрд╛рдирдХрд╛рд░реА рдХрд╕рд░реА рд╕рдорд╛рддреНрдиреЗ рднрдиреНрдиреЗ рдХреБрд░рд╛ рдпрд╕ рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рдкрдЫрд┐ рднрд╛рд╖рд╛ рдореЛрдбрд▓рд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рд┐рдХреНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рдЫред рд╣рд╛рдореА рдпрдерд╛рд░реНрдерддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "19b43951d55b377a76209c24c1f017e4",
|
||||
"translation_date": "2025-08-28T09:55:06+00:00",
|
||||
"source_file": "lessons/5-NLP/13-TextRep/TextRepresentationTF.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,720 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ `vocab_size` рд▓рдореНрдмрд╛рдЗ рднрдПрдХрд╛ рдЙрдЪреНрдЪ-рдЖрдпрд╛рдореАрдп рдмрд╛рдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рднреЗрдХреНрдЯрд░рд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВ, рд░ рд╣рд╛рдореАрд▓реЗ рдХрдо-рдЖрдпрд╛рдореАрдп рд╕реНрдерд╛рдирдЧрдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ sparse one-hot рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВред рдпреЛ one-hot рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдореЛрд░реА-рдХреБрд╢рд▓ рдЫреИрди, рд╕рд╛рдереИ, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд▓рд╛рдИ рдПрдХ-рдЕрд░реНрдХрд╛рдмрд╛рдЯ рд╕реНрд╡рддрдиреНрддреНрд░ рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░рд┐рдиреНрдЫ, рдЕрд░реНрдерд╛рддреН one-hot рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓реЗ рд╢рдмреНрджрд╣рд░реВ рдмреАрдЪрдХреЛ рдХреБрдиреИ рдкрдирд┐ рдЕрд░реНрдердкреВрд░реНрдг рд╕рдорд╛рдирддрд╛ рд╡реНрдпрдХреНрдд рдЧрд░реНрджреИрдирдиреНред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдЗрдХрд╛рдИрдорд╛, рд╣рд╛рдореА **News AG** рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рдЕрдиреНрд╡реЗрд╖рдг рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗрдЫреМрдВред рд╕реБрд░реБ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рдбреЗрдЯрд╛ рд▓реЛрдб рдЧрд░реМрдВ рд░ рдЕрдШрд┐рд▓реНрд▓реЛ рдиреЛрдЯрдмреБрдХрдмрд╛рдЯ рдХреЗрд╣реА рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"d:\\WORK\\ai-for-beginners\\5-NLP\\14-Embeddings\\data\\train.csv: 29.5MB [00:01, 18.8MB/s] \n",
|
||||
"d:\\WORK\\ai-for-beginners\\5-NLP\\14-Embeddings\\data\\test.csv: 1.86MB [00:00, 11.2MB/s] \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Building vocab...\n",
|
||||
"Vocab size = 95812\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import numpy as np\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(\"Vocab size = \",vocab_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдПрдореНрдмреЗрдбрд┐рдЩ рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ?\n",
|
||||
"\n",
|
||||
"**рдПрдореНрдмреЗрдбрд┐рдЩ** рдХреЛ рд╡рд┐рдЪрд╛рд░ рднрдиреЗрдХреЛ рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рдХрдо-рдЖрдпрд╛рдореАрдп рдШрдирд╛ рднреЗрдХреНрдЯрд░рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреБ рд╣реЛ, рдЬрд╕рд▓реЗ рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рд▓реЗ рд╢рдмреНрджрдХреЛ рдЕрд░реНрдерд▓рд╛рдИ рдЭрд▓реНрдХрд╛рдЙрдБрдЫред рд╣рд╛рдореА рдкрдЫрд┐ рдХрд╕рд░реА рдЕрд░реНрдердкреВрд░реНрдг рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВ, рддрд░ рдЕрд╣рд┐рд▓реЗрдХрд╛ рд▓рд╛рдЧрд┐ рдПрдореНрдмреЗрдбрд┐рдЩрд▓рд╛рдИ рд╢рдмреНрдж рднреЗрдХреНрдЯрд░рдХреЛ рдЖрдпрд╛рдо рдШрдЯрд╛рдЙрдиреЗ рддрд░рд┐рдХрд╛рдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреМрдВред \n",
|
||||
"\n",
|
||||
"рддреНрдпрд╕реИрд▓реЗ, рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░рд▓реЗ рд╢рдмреНрджрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ `embedding_size` рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рднреЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рдпреЛ рдЕрд░реНрдердорд╛, рдпреЛ `Linear` рд▓реЗрдпрд░рд╕рдБрдЧ рдзреЗрд░реИ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдЫ, рддрд░ рдпреЛ рдПрдХ-рд╣рдЯ рдЗрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рднреЗрдХреНрдЯрд░ рд▓рд┐рдиреЗ рд╕рдЯреНрдЯрд╛, рд╢рдмреНрджрдХреЛ рдирдореНрдмрд░рд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкрд╣рд┐рд▓реЛ рд▓реЗрдпрд░рдХреЛ рд░реВрдкрдорд╛ рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдмреНрдпрд╛рдЧ-рдЕрдл-рд╡рд░реНрдбреНрд╕ рдореЛрдбреЗрд▓рдмрд╛рдЯ **рдПрдореНрдмреЗрдбрд┐рдЩ рдмреНрдпрд╛рдЧ** рдореЛрдбреЗрд▓рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╣рд╛рдБ рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╣рд╛рдореНрд░реЛ рдкрд╛рдардХрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд▓рд╛рдИ рд╕рдореНрдмрдиреНрдзрд┐рдд рдПрдореНрдмреЗрдбрд┐рдЩрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рддреА рд╕рдмреИ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрдорд╛ `sum`, `average` рд╡рд╛ `max` рдЬрд╕реНрддрд╛ рдХреБрдиреИ рдПрдЧреНрд░рд┐рдЧреЗрдЯ рдлрдЩреНрд╕рди рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВред \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреЗрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдПрдЧреНрд░рд┐рдЧреЗрд╕рди рд▓реЗрдпрд░, рд░ рдпрд╕рдХреЛ рдорд╛рдерд┐ рд▓реАрдирд┐рдпрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рд╣реБрдиреЗрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class EmbedClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.fc = torch.nn.Linear(embed_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x = torch.mean(x,dim=1)\n",
|
||||
" return self.fc(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рднрд┐рдиреНрди-рднрд┐рдиреНрди рдЖрдХрд╛рд░рдХрд╛ рднреЗрд░рд┐рдПрдмрд▓ рдЕрдиреБрдХреНрд░рдорд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"рдпреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдХреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рд╛рдореНрд░реЛ рдиреЗрдЯрд╡рд░реНрдХрдХрд╛ рд▓рд╛рдЧрд┐ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВ рд╡рд┐рд╢реЗрд╖ рддрд░рд┐рдХрд╛рд▓реЗ рддрдпрд╛рд░ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рд╣реБрдиреНрдЫред рдЕрдШрд┐рд▓реНрд▓реЛ рдпреБрдирд┐рдЯрдорд╛, рдЬрдм bag-of-words рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдБрджреИ рдерд┐рдпреЛ, рд╕рдмреИ BoW рдЯреЗрдиреНрд╕рд░рд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ `vocab_size` рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдереНрдпреЛ, рдЪрд╛рд╣реЗ рд╣рд╛рдореНрд░реЛ рдкрд╛рда рдЕрдиреБрдХреНрд░рдордХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рдореНрдмрд╛рдЗ рдЬреЗрд╕реБрдХреИ рдХрд┐рди рдирд╣реЛрд╕реНред рдЬрдм рд╣рд╛рдореА word embeddings рддрд░реНрдл рд╕рд░реНрдЫреМрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рда рдирдореВрдирд╛рдорд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдлрд░рдХ-рдлрд░рдХ рд╣реБрди рд╕рдХреНрдЫ, рд░ рддреА рдирдореВрдирд╛рд╣рд░реВрд▓рд╛рдИ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣реА padding рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдпреЛ рдХрд╛рдо datasource рдорд╛ `collate_fn` function рдкреНрд░рджрд╛рди рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def padify(b):\n",
|
||||
" # b is the list of tuples of length batch_size\n",
|
||||
" # - first element of a tuple = label, \n",
|
||||
" # - second = feature (text sequence)\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [encode(x[1]) for x in b]\n",
|
||||
" # first, compute max length of a sequence in this minibatch\n",
|
||||
" l = max(map(len,v))\n",
|
||||
" return ( # tuple of two tensors - labels and features\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=padify, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдПрдореНрдмреЗрдбрд┐рдЩ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рдЙрдкрдпреБрдХреНрдд рдбрд╛рдЯрд╛рд▓реЛрдбрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдЗрдХрд╛рдИрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реЗрдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6415625\n",
|
||||
"6400: acc=0.6865625\n",
|
||||
"9600: acc=0.7103125\n",
|
||||
"12800: acc=0.726953125\n",
|
||||
"16000: acc=0.739375\n",
|
||||
"19200: acc=0.75046875\n",
|
||||
"22400: acc=0.7572321428571429\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.889799795315499, 0.7623160588611644)"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = EmbedClassifier(vocab_size,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=1, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ**: рд╣рд╛рдореА рдпрд╣рд╛рдБ рд╕рдордп рдмрдЪрддрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ реирел рд╣рдЬрд╛рд░ рд░реЗрдХрд░реНрдбрд╣рд░реВ (рдПрдХ рдкреВрд░реНрдг рдпреБрдЧрднрдиреНрджрд╛ рдХрдо) рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджреИрдЫреМрдВ, рддрд░ рддрдкрд╛рдИрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЬрд╛рд░реА рд░рд╛рдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдзреЗрд░реИ рдпреБрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдХрд╛рд░реНрдп рд▓реЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ рдЙрдЪреНрдЪ рд╢реБрджреНрдзрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рдХреНрдиреЗ рджрд░ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрдкрд╛рдИрдВ рд▓рдЧрднрдЧ репреж% рд╢реБрджреНрдзрддрд╛рдорд╛ рдЬрд╛рди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### EmbeddingBag рд▓реЗрдпрд░ рд░ рднрд┐рдиреНрди-рд▓рдореНрдмрд╛рдЗ рдЕрдиреБрдХреНрд░рдордХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡\n",
|
||||
"\n",
|
||||
"рдЕрдШрд┐рд▓реНрд▓реЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдорд╛, рд╣рд╛рдореАрд▓реЗ рд╕рдмреИ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд▓рд╛рдИ рдПрдЙрдЯреИ рд▓рдореНрдмрд╛рдЗрдорд╛ рд▓реНрдпрд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐ padding рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рд╣реБрдиреНрдереНрдпреЛ рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ рдлрд┐рдЯ рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реНред рдпреЛ рднрд┐рдиреНрди-рд▓рдореНрдмрд╛рдЗ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреЗ рд╕рдмреИрднрдиреНрджрд╛ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рддрд░рд┐рдХрд╛ рд╣реЛрдЗрди - рдЕрд░реНрдХреЛ рддрд░рд┐рдХрд╛ рднрдиреЗрдХреЛ **offset** рднреЗрдХреНрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛ, рдЬрд╕рд▓реЗ рдПрдЙрдЯреИ рдареВрд▓реЛ рднреЗрдХреНрдЯрд░рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рд╕рдмреИ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдХреЛ offsets рд░рд╛рдЦреНрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"> **Note**: рдорд╛рдерд┐рдХреЛ рдЪрд┐рддреНрд░рдорд╛, рд╣рд╛рдореАрд▓реЗ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рджреЗрдЦрд╛рдПрдХрд╛ рдЫреМрдВ, рддрд░ рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореА рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдорд╕рдБрдЧ рдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВред рдпрджреНрдпрдкрд┐, offset рднреЗрдХреНрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдиреНрдд рдЙрд╕реНрддреИ рд░рд╣рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"Offset рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА [`EmbeddingBag`](https://pytorch.org/docs/stable/generated/torch.nn.EmbeddingBag.html) рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рдпреЛ `Embedding` рдЬрд╕реНрддреИ рдЫ, рддрд░ рдпрд╕рд▓реЗ рд╕рд╛рдордЧреНрд░реА рднреЗрдХреНрдЯрд░ рд░ offset рднреЗрдХреНрдЯрд░рд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рдпрд╕рдорд╛ рдФрд╕рдд рдЧрд░реНрдиреЗ рд▓реЗрдпрд░ рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЫ, рдЬреБрди `mean`, `sum` рд╡рд╛ `max` рд╣реБрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╣рд╛рдБ `EmbeddingBag` рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class EmbedClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.embedding = torch.nn.EmbeddingBag(vocab_size, embed_dim)\n",
|
||||
" self.fc = torch.nn.Linear(embed_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, text, off):\n",
|
||||
" x = self.embedding(text, off)\n",
|
||||
" return self.fc(x)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдбреЗрдЯрд╛рд╕реЗрдЯ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ рдЕрдлрд╕реЗрдЯ рднреЗрдХреНрдЯрд░ рддрдпрд╛рд░ рдЧрд░реНрдиреЗ рд░реВрдкрд╛рдиреНрддрд░рдг рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def offsetify(b):\n",
|
||||
" # first, compute data tensor from all sequences\n",
|
||||
" x = [torch.tensor(encode(t[1])) for t in b]\n",
|
||||
" # now, compute the offsets by accumulating the tensor of sequence lengths\n",
|
||||
" o = [0] + [len(t) for t in x]\n",
|
||||
" o = torch.tensor(o[:-1]).cumsum(dim=0)\n",
|
||||
" return ( \n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]), # labels\n",
|
||||
" torch.cat(x), # text \n",
|
||||
" o\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=offsetify, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН, рдХрд┐ рд╕рдмреИ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рднрдиреНрджрд╛ рдлрд░рдХ, рд╣рд╛рдореНрд░реЛ рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдЕрдм рджреБрдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрджрдЫ: рдбреЗрдЯрд╛ рднреЗрдХреНрдЯрд░ рд░ рдЕрдлрд╕реЗрдЯ рднреЗрдХреНрдЯрд░, рдЬрд╕рдХреЛ рдЖрдХрд╛рд░ рдлрд░рдХ рдЫред рддреНрдпрд╕реНрддреИ рдЧрд░реА, рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛ рд▓реЛрдбрд░рд▓реЗ рдкрдирд┐ рд╣рд╛рдореАрд▓рд╛рдИ реи рдХреЛ рд╕рдЯреНрдЯрд╛ рей рдорд╛рдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ: рдкрд╛рда рд░ рдЕрдлрд╕реЗрдЯ рднреЗрдХреНрдЯрд░рд╣рд░реВ рджреБрд╡реИрд▓рд╛рдИ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдиреНрдЫред рддреНрдпрд╕реИрд▓реЗ, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдпрд▓рд╛рдИ рддреНрдпрд╕рдХреЛ рд╣реЗрд░рдЪрд╛рд╣ рдЧрд░реНрди рдЕрд▓рд┐рдХрддрд┐ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6153125\n",
|
||||
"6400: acc=0.6615625\n",
|
||||
"9600: acc=0.6932291666666667\n",
|
||||
"12800: acc=0.715078125\n",
|
||||
"16000: acc=0.7270625\n",
|
||||
"19200: acc=0.7382291666666667\n",
|
||||
"22400: acc=0.7486160714285715\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(22.771553103007037, 0.7551983365323096)"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = EmbedClassifier(vocab_size,32,len(classes)).to(device)\n",
|
||||
"\n",
|
||||
"def train_epoch_emb(net,dataloader,lr=0.01,optimizer=None,loss_fn = torch.nn.CrossEntropyLoss(),epoch_size=None, report_freq=200):\n",
|
||||
" optimizer = optimizer or torch.optim.Adam(net.parameters(),lr=lr)\n",
|
||||
" loss_fn = loss_fn.to(device)\n",
|
||||
" net.train()\n",
|
||||
" total_loss,acc,count,i = 0,0,0,0\n",
|
||||
" for labels,text,off in dataloader:\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" labels,text,off = labels.to(device), text.to(device), off.to(device)\n",
|
||||
" out = net(text, off)\n",
|
||||
" loss = loss_fn(out,labels) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" total_loss+=loss\n",
|
||||
" _,predicted = torch.max(out,1)\n",
|
||||
" acc+=(predicted==labels).sum()\n",
|
||||
" count+=len(labels)\n",
|
||||
" i+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"{count}: acc={acc.item()/count}\")\n",
|
||||
" if epoch_size and count>epoch_size:\n",
|
||||
" break\n",
|
||||
" return total_loss.item()/count, acc.item()/count\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"train_epoch_emb(net,train_loader, lr=4, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕реЗрдореНрдпрд╛рдиреНрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдЩ: рд╡рд░реНрдбреирднреЗрдХ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рдореЛрдбреЗрд▓рдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рддрд╣рд▓реЗ рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рдореНрдпрд╛рдк рдЧрд░реНрди рд╕рд┐рдХреНрдпреЛ, рддрд░ рдпреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рдзреЗрд░реИ рд╕реЗрдореНрдпрд╛рдиреНрдЯрд┐рдХ рдЕрд░реНрде рдерд┐рдПрдиред рдпрд╕реНрддреЛ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕рд┐рдХреНрди рд░рд╛рдореНрд░реЛ рд╣реБрдиреЗ рдерд┐рдпреЛ, рдЬрд╣рд╛рдБ рд╕рдорд╛рди рд╢рдмреНрджрд╣рд░реВ рд╡рд╛ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╢рдмреНрджрд╣рд░реВ рдХреЗрд╣реА рднреЗрдХреНрдЯрд░ рджреВрд░реА (рдЬрд╕реНрддреИ, рдпреБрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА) рдХреЛ рд╣рд┐рд╕рд╛рдмрд▓реЗ рдПрдХ-рдЕрд░реНрдХрд╛рд╕рдБрдЧ рдирдЬрд┐рдХ рд╣реБрдиреЗрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдПрдореНрдмреЗрдбрд┐рдЩ рдореЛрдбреЗрд▓рд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ рддрд░рд┐рдХрд╛рд▓реЗ рдареВрд▓реЛ рдкрд╛рда рд╕рдВрдЧреНрд░рд╣рдорд╛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╕реЗрдореНрдпрд╛рдиреНрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдЯреНрд░реЗрди рдЧрд░реНрдиреЗ рдкрд╣рд┐рд▓реЛ рддрд░рд┐рдХрд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХрд▓рд╛рдИ [Word2Vec](https://en.wikipedia.org/wiki/Word2vec) рднрдирд┐рдиреНрдЫред рдпреЛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рджреБрдИ рдореБрдЦреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ:\n",
|
||||
"\n",
|
||||
" - **рдХрдиреНрдЯрд┐рдиреНрдпреБрдЕрд╕ рдмреНрдпрд╛рдЧ-рдЕрдл-рд╡рд░реНрдбреНрд╕** (CBoW) тАФ рдпрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдорд╛, рд╣рд╛рдореА рдореЛрдбреЗрд▓рд▓рд╛рдИ рд╡рд░рдкрд░рдХреЛ рд╕рдиреНрджрд░реНрднрдмрд╛рдЯ рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрди рдЯреНрд░реЗрди рдЧрд░реНрдЫреМрдВред рджрд┐рдЗрдПрдХреЛ ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$ рдорд╛, рдореЛрдбреЗрд▓рдХреЛ рд▓рдХреНрд╖реНрдп $(W_{-2},W_{-1},W_1,W_2)$ рдмрд╛рдЯ $W_0$ рдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрдиреБ рд╣реЛред\n",
|
||||
" - **рдХрдиреНрдЯрд┐рдиреНрдпреБрдЕрд╕ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо** CBoW рдХреЛ рд╡рд┐рдкрд░реАрдд рд╣реЛред рдореЛрдбреЗрд▓рд▓реЗ рд╕рдиреНрджрд░реНрдн рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╡рд░рдкрд░рдХреЛ рд╡рд┐рдиреНрдбреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд░реНрддрдорд╛рди рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"CBoW рдЫрд┐рдЯреЛ рд╣реБрдиреНрдЫ, рдЬрдмрдХрд┐ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо рдврд┐рд▓реЛ рд╣реБрдиреНрдЫ, рддрд░ рджреБрд░реНрд▓рдн рд╢рдмреНрджрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд░рд╛рдореНрд░реЛ рдХрд╛рдо рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Google News рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ word2vec рдПрдореНрдмреЗрдбрд┐рдЩрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╣рд╛рдореА **gensim** рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рддрд▓ рд╣рд╛рдореА 'neural' рд╢рдмреНрджрд╕рдБрдЧ рд╕рдмреИрднрдиреНрджрд╛ рдорд┐рд▓реНрджреЛ рд╢рдмреНрджрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note:** рдЬрдм рддрдкрд╛рдИрдВ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╢рдмреНрдж рднреЗрдХреНрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рддрд┐рдиреАрд╣рд░реВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдХреЗрд╣реА рд╕рдордп рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import gensim.downloader as api\n",
|
||||
"w2v = api.load('word2vec-google-news-300')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"neuronal -> 0.7804799675941467\n",
|
||||
"neurons -> 0.7326500415802002\n",
|
||||
"neural_circuits -> 0.7252851724624634\n",
|
||||
"neuron -> 0.7174385190010071\n",
|
||||
"cortical -> 0.6941086649894714\n",
|
||||
"brain_circuitry -> 0.6923246383666992\n",
|
||||
"synaptic -> 0.6699118614196777\n",
|
||||
"neural_circuitry -> 0.6638563275337219\n",
|
||||
"neurochemical -> 0.6555314064025879\n",
|
||||
"neuronal_activity -> 0.6531826257705688\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for w,p in w2v.most_similar('neural'):\n",
|
||||
" print(f\"{w} -> {p}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рд╢рдмреНрджрдмрд╛рдЯ рднреЗрдХреНрдЯрд░ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдкрдирд┐ рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕рд▓рд╛рдИ рд╡рд░реНрдЧреАрдХрд░рдг рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рднреЗрдХреНрдЯрд░рдХрд╛ рдкрд╣рд┐рд▓реЛ реиреж рдШрдЯрдХрд╣рд░реВ рдорд╛рддреНрд░ рджреЗрдЦрд╛рдЙрдБрдЫреМрдВ):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([ 0.01226807, 0.06225586, 0.10693359, 0.05810547, 0.23828125,\n",
|
||||
" 0.03686523, 0.05151367, -0.20703125, 0.01989746, 0.10058594,\n",
|
||||
" -0.03759766, -0.1015625 , -0.15820312, -0.08105469, -0.0390625 ,\n",
|
||||
" -0.05053711, 0.16015625, 0.2578125 , 0.10058594, -0.25976562],\n",
|
||||
" dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v.word_vec('play')[:20]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"('queen', 0.7118192911148071)"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v.most_similar(positive=['king','woman'],negative=['man'])[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"CBoW рд░ Skip-Grams рджреБрдмреИ \"predictive\" embeddings рд╣реБрдиреН, рдХрд┐рдирдХрд┐ рдпреА рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд╕рдиреНрджрд░реНрднрд╣рд░реВрд▓рд╛рдИ рдорд╛рддреНрд░ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрдЫрдиреНред Word2Vec рд▓реЗ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рд╕рдиреНрджрд░реНрднрдХреЛ рдлрд╛рдЗрджрд╛ рдЙрдард╛рдЙрдБрджреИрдиред\n",
|
||||
"\n",
|
||||
"**FastText** рд▓реЗ Word2Vec рдорд╛ рдЖрдзрд╛рд░рд┐рдд рднрдПрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рд░ рд╢рдмреНрджрднрд┐рддреНрд░ рдкрд╛рдЗрдиреЗ рдЕрдХреНрд╖рд░ n-grams рдХреЛ рд▓рд╛рдЧрд┐ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ рд╕рд┐рдХреНрдЫред рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдгрдорд╛ рдПрдХ рднреЗрдХреНрдЯрд░рдорд╛ рдФрд╕рдд рдЧрд░рд┐рдиреНрдЫред рдпрд╕рд▓реЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдорд╛ рдзреЗрд░реИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдгрдирд╛ рдердкреЗ рдкрдирд┐, рдпрд╕рд▓реЗ рд╢рдмреНрдж embeddings рд▓рд╛рдИ рдЙрдк-рд╢рдмреНрдж рдЬрд╛рдирдХрд╛рд░реА рд╕рдореЗрдЯреНрди рд╕рдХреНрд╖рдо рдмрдирд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрд░реНрдХреЛ рд╡рд┐рдзрд┐, **GloVe**, рд╕рд╣-рдЕрд╡рд╕реНрдерд┐рдд рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХреЛ рд╡рд┐рдЪрд╛рд░рд▓рд╛рдИ рдЙрдкрдпреЛрдЧ рдЧрд░реНрджрдЫ, рд╕рд╣-рдЕрд╡рд╕реНрдерд┐рдд рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рд▓рд╛рдИ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдкреВрд░реНрдг рд░ рдЧреИрд░-рд░реЗрдЦреАрдп рд╢рдмреНрдж рднреЗрдХреНрдЯрд░рд╣рд░реВрдорд╛ рд╡рд┐рдШрдЯрди рдЧрд░реНрди рдиреНрдпреБрд░рд▓ рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред\n",
|
||||
"\n",
|
||||
"рддрдкрд╛рдИрдВ embeddings рд▓рд╛рдИ FastText рд░ GloVe рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрд░ рдЙрджрд╛рд╣рд░рдгрд╕рдБрдЧ рдЦреЗрд▓реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдХрд┐рдирдХрд┐ gensim рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрдж embedding рдореЛрдбреЗрд▓рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## PyTorch рдорд╛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрд▓рд╛рдИ рд╕рдВрд╢реЛрдзрди рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░рдХреЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рд▓рд╛рдИ Word2Vec рдЬрд╕реНрддрд╛ рдЕрд░реНрдердкреВрд░реНрдг рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкрд╣рд┐рд▓реЗ рдиреИ рднрд░рд┐рдПрдХреЛ рдмрдирд╛рдЙрди рд╕рдХреНрдЫреМрдВред рд╣рд╛рдореАрд▓реЗ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдЫ рдХрд┐ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩрдХреЛ рд╢рдмреНрджрд╛рд╡рд▓реА рд░ рд╣рд╛рдореНрд░реЛ рдкрд╛рда рдХрд░реНрдкрд╕рдХреЛ рд╢рдмреНрджрд╛рд╡рд▓реА рд╕рдореНрднрд╡рддрдГ рдореЗрд▓ рдЦрд╛рдиреЗ рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рд╣рд░рд╛рдПрдХрд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддреМрд▓рд╣рд░реВрд▓рд╛рдИ рд░реНрдпрд╛рдиреНрдбрдо рдорд╛рдирд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдЖрд░рдореНрдн рдЧрд░реНрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Embedding size: 300\n",
|
||||
"Populating matrix, this will take some time...Done, found 41080 words, 54732 words missing\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"embed_size = len(w2v.get_vector('hello'))\n",
|
||||
"print(f'Embedding size: {embed_size}')\n",
|
||||
"\n",
|
||||
"net = EmbedClassifier(vocab_size,embed_size,len(classes))\n",
|
||||
"\n",
|
||||
"print('Populating matrix, this will take some time...',end='')\n",
|
||||
"found, not_found = 0,0\n",
|
||||
"for i,w in enumerate(vocab.get_itos()):\n",
|
||||
" try:\n",
|
||||
" net.embedding.weight[i].data = torch.tensor(w2v.get_vector(w))\n",
|
||||
" found+=1\n",
|
||||
" except:\n",
|
||||
" net.embedding.weight[i].data = torch.normal(0.0,1.0,(embed_size,))\n",
|
||||
" not_found+=1\n",
|
||||
"\n",
|
||||
"print(f\"Done, found {found} words, {not_found} words missing\")\n",
|
||||
"net = net.to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6359375\n",
|
||||
"6400: acc=0.68109375\n",
|
||||
"9600: acc=0.7067708333333333\n",
|
||||
"12800: acc=0.723671875\n",
|
||||
"16000: acc=0.73625\n",
|
||||
"19200: acc=0.7463541666666667\n",
|
||||
"22400: acc=0.7560714285714286\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(214.1013875559821, 0.7626759436980166)"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_epoch_emb(net,train_loader, lr=4, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ рд╢реБрджреНрдзрддрд╛рдорд╛ рдареВрд▓реЛ рд╡реГрджреНрдзрд┐ рджреЗрдЦреНрджреИрдиреМрдВ, рдЬреБрди рд╕рдореНрднрд╡рддрдГ рдзреЗрд░реИ рдлрд░рдХ рд╢рдмреНрджрд╛рд╡рд▓реАрдХрд╛ рдХрд╛рд░рдг рд╣реЛред \n",
|
||||
"рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджрд╛рд╡рд▓реАрдХреЛ рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рд╣рд╛рдореА рдирд┐рдореНрди рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ: \n",
|
||||
"* рд╣рд╛рдореНрд░реЛ рд╢рдмреНрджрд╛рд╡рд▓реАрдорд╛ рдЖрдзрд╛рд░рд┐рдд word2vec рдореЛрдбреЗрд▓ рдкреБрдирдГ-рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН \n",
|
||||
"* рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ word2vec рдореЛрдбреЗрд▓рдХреЛ рд╢рдмреНрджрд╛рд╡рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рд╢рдмреНрджрд╛рд╡рд▓реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред \n",
|
||||
"\n",
|
||||
"рджреЛрд╕реНрд░реЛ рд╡рд┐рдзрд┐ рд╕рдЬрд┐рд▓реЛ рджреЗрдЦрд┐рдиреНрдЫ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдХрд┐рдирднрдиреЗ PyTorch `torchtext` рдлреНрд░реЗрдорд╡рд░реНрдХрдорд╛ embeddings рдХреЛ рд▓рд╛рдЧрд┐ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рдорд░реНрдерди рдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА GloVe-рдЖрдзрд╛рд░рд┐рдд рд╢рдмреНрджрд╛рд╡рд▓реА рдирд┐рдореНрди рддрд░рд┐рдХрд╛рд▓реЗ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ: \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦЙ| 399999/400000 [00:15<00:00, 25411.14it/s]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab = torchtext.vocab.GloVe(name='6B', dim=50)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдирд┐рдореНрди рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдпрд╣рд░реВ рдЫрдиреН:\n",
|
||||
"* `vocab.stoi` рд╢рдмреНрджрдХреЛрд╢рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╢рдмреНрджрд▓рд╛рдИ рдпрд╕рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рд╕реВрдЪрдХрд╛рдВрдХрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ\n",
|
||||
"* `vocab.itos` рдпрд╕рдХреЛ рдЙрд▓реНрдЯреЛ рдЧрд░реНрдЫ - рдирдореНрдмрд░рд▓рд╛рдИ рд╢рдмреНрджрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдЫ\n",
|
||||
"* `vocab.vectors` рдПрдореНрдмреЗрдбрд┐рдЩ рднреЗрдХреНрдЯрд░рд╣рд░реВрдХреЛ рдПрд░реЗ рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ рдХреБрдиреИ рд╢рдмреНрдж `s` рдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╣рд╛рдореАрд▓реЗ `vocab.vectors[vocab.stoi[s]]` рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ\n",
|
||||
"\n",
|
||||
"рдпрд╣рд╛рдБ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрд▓рд╛рдИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реЗрд░ рд╕рдореАрдХрд░рдг **kind-man+woman = queen** рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдг рдЫ (рдпрд╕рд▓рд╛рдИ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдореИрд▓реЗ рдереЛрд░реИ рдЧреБрдгрд╛рдВрдХ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрдиреБрдкрд░реНтАНрдпреЛ):\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'queen'"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# get the vector corresponding to kind-man+woman\n",
|
||||
"qvec = vocab.vectors[vocab.stoi['king']]-vocab.vectors[vocab.stoi['man']]+1.3*vocab.vectors[vocab.stoi['woman']]\n",
|
||||
"# find the index of the closest embedding vector \n",
|
||||
"d = torch.sum((vocab.vectors-qvec)**2,dim=1)\n",
|
||||
"min_idx = torch.argmin(d)\n",
|
||||
"# find the corresponding word\n",
|
||||
"vocab.itos[min_idx]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ рддреА рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди, рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдорд╛ рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ GloVe рд╢рдмреНрджрд╛рд╡рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдПрдиреНрдХреЛрдб рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def offsetify(b):\n",
|
||||
" # first, compute data tensor from all sequences\n",
|
||||
" x = [torch.tensor(encode(t[1],voc=vocab)) for t in b] # pass the instance of vocab to encode function!\n",
|
||||
" # now, compute the offsets by accumulating the tensor of sequence lengths\n",
|
||||
" o = [0] + [len(t) for t in x]\n",
|
||||
" o = torch.tensor(o[:-1]).cumsum(dim=0)\n",
|
||||
" return ( \n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]), # labels\n",
|
||||
" torch.cat(x), # text \n",
|
||||
" o\n",
|
||||
" )"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд╕реНрддреЛ рдХрд┐ рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рджреЗрдЦреНрдпреМрдВ, рд╕рдмреИ рднреЗрдХреНрдЯрд░ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ `vocab.vectors` рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдорд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЫрдиреНред рдпрд╕рд▓реЗ рддреА рд╡рдЬрдирд╣рд░реВрд▓рд╛рдИ рдПрдореНрдмреЗрдбрд┐рдЩ рддрд╣рдХреЛ рд╡рдЬрдирд╣рд░реВрдорд╛ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реЗрд░ рд▓реЛрдб рдЧрд░реНрди рдЕрддреНрдпрдиреНрдд рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"net = EmbedClassifier(len(vocab),len(vocab.vectors[0]),len(classes))\n",
|
||||
"net.embedding.weight.data = vocab.vectors\n",
|
||||
"net = net.to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.6271875\n",
|
||||
"6400: acc=0.68078125\n",
|
||||
"9600: acc=0.7030208333333333\n",
|
||||
"12800: acc=0.71984375\n",
|
||||
"16000: acc=0.7346875\n",
|
||||
"19200: acc=0.7455729166666667\n",
|
||||
"22400: acc=0.7529464285714286\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(35.53972978646833, 0.7575175943698017)"
|
||||
]
|
||||
},
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=offsetify, shuffle=True)\n",
|
||||
"train_epoch_emb(net,train_loader, lr=4, epoch_size=25000)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдХрд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ GloVe рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдирднрдПрдХреЛ рдХрд╛рд░рдгрд▓реЗ рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓реЗ рд╢реБрджреНрдзрддрд╛рдорд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рджреЗрдЦреНрди рдирд╕рдХреЗрдХреЛ рдореБрдЦреНрдп рдХрд╛рд░рдгрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╣реЛ, рд░ рддреНрдпрд╕реИрд▓реЗ рддреА рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рдореВрд▓рддрдГ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕ рддрдереНрдпрд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ рдЖрдлреНрдиреИ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рдиреНрджрд░реНрднрдЧрдд рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"Word2Vec рдЬрд╕реНрддрд╛ рдкрд░рдореНрдкрд░рд╛рдЧрдд рдкреНрд░реАрдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВрдХреЛ рдПрдЙрдЯрд╛ рдореБрдЦреНрдп рд╕реАрдорд╛рдмрджреНрдзрддрд╛ рднрдиреЗрдХреЛ рд╢рдмреНрдж рдЕрд░реНрде рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд╕рдорд╕реНрдпрд╛ рд╣реЛред рдпрджреНрдпрдкрд┐ рдкреНрд░реАрдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрд▓реЗ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рдХреЗрд╣реА рдЕрд░реНрде рд╕рдореЗрдЯреНрди рд╕рдХреНрдЫрдиреН, рдХреБрдиреИ рдкрдирд┐ рд╢рдмреНрджрдХреЛ рд╕рдмреИ рд╕рдореНрднрд╛рд╡рд┐рдд рдЕрд░реНрде рдПрдЙрдЯреИ рдПрдореНрдмреЗрдбрд┐рдЩрдорд╛ рд╕рдореЗрдЯрд┐рдиреНрдЫред рдпрд╕рд▓реЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдореЛрдбреЗрд▓рд╣рд░реВрдорд╛ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╕рдХреНрдЫ, рдХрд┐рдирднрдиреЗ рдзреЗрд░реИ рд╢рдмреНрджрд╣рд░реВ, рдЬрд╕реНрддреИ 'play' рд╢рдмреНрдж, рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рд╕рдиреНрджрд░реНрдн рдЕрдиреБрд╕рд╛рд░ рдлрд░рдХ рдЕрд░реНрде рд░рд╛рдЦреНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, 'play' рд╢рдмреНрджрд▓реЗ рдпреА рджреБрдИ рд╡рд╛рдХреНрдпрд╣рд░реВрдорд╛ рдирд┐рдХреИ рдлрд░рдХ рдЕрд░реНрде рд░рд╛рдЦреНрдЫ:\n",
|
||||
"- рдо рдерд┐рдПрдЯрд░рдорд╛ рдПрдЙрдЯрд╛ **play** рд╣реЗрд░реНрди рдЧрдПрдБред\n",
|
||||
"- рдЬреЛрди рдЖрдлреНрдирд╛ рд╕рд╛рдереАрд╣рд░реВрд╕рдБрдЧ **play** рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдорд╛рдерд┐рдХрд╛ рдкреНрд░реАрдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрд▓реЗ 'play' рд╢рдмреНрджрдХрд╛ рдпреА рджреБрд╡реИ рдЕрд░реНрдерд╣рд░реВ рдПрдЙрдЯреИ рдПрдореНрдмреЗрдбрд┐рдЩрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫрдиреНред рдпрд╕ рд╕реАрдорд╛рдмрджреНрдзрддрд╛рд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ **рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓**рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬреБрди рдареВрд▓реЛ рдкрд╛рдардХреЛ рд╕рдВрдЧреНрд░рд╣рдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рд╣реБрдиреНрдЫ рд░ *рдЬрд╛рдиреНрджрдЫ* рдХрд┐ рд╢рдмреНрджрд╣рд░реВ рд╡рд┐рднрд┐рдиреНрди рд╕рдиреНрджрд░реНрднрд╣рд░реВрдорд╛ рдХрд╕рд░реА рд░рд╛рдЦреНрди рд╕рдХрд┐рдиреНрдЫред рд╕рдиреНрджрд░реНрднрдЧрдд рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрдХреЛ рдЪрд░реНрдЪрд╛ рдпрд╕ рдЯреНрдпреБрдЯреЛрд░рд┐рдпрд▓рдХреЛ рджрд╛рдпрд░рд╛рднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдкрд░реНрдЫ, рддрд░ рд╣рд╛рдореА рдпрд╕рдмрд╛рд░реЗ рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рдХреБрд░рд╛ рдЧрд░реНрджрд╛ рдЕрд░реНрдХреЛ рдпреБрдирд┐рдЯрдорд╛ рдлрд░реНрдХрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рдЫред рд╣рд╛рдореА рд╢реБрджреНрдзрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛ рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_pytorch",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "f50b026abce5cf36783a560ea72cb9b1",
|
||||
"translation_date": "2025-08-28T09:47:38+00:00",
|
||||
"source_file": "lessons/5-NLP/14-Embeddings/EmbeddingsPyTorch.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,695 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА рдЙрдЪреНрдЪ-рдЖрдпрд╛рдореАрдп bag-of-words рднреЗрдХреНрдЯрд░рд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрдпреМрдВ рдЬрд╕рдХреЛ рд▓рдореНрдмрд╛рдЗ `vocab_size` рдерд┐рдпреЛ, рд░ рд╣рд╛рдореАрд▓реЗ рдХрдо-рдЖрдпрд╛рдореАрдп positional representation рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ sparse one-hot representation рдорд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдпреМрдВред рдпреЛ one-hot representation рдореЗрдореЛрд░реА-рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рдЫреИрдиред рд╕рд╛рдереИ, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд▓рд╛рдИ рдПрдХ-рдЕрд░реНрдХрд╛рдмрд╛рдЯ рд╕реНрд╡рддрдиреНрддреНрд░ рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ one-hot encoded рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓реЗ рд╢рдмреНрджрд╣рд░реВ рдмреАрдЪрдХреЛ рдЕрд░реНрдердкреВрд░реНрдг рд╕рдорд╛рдирддрд╛рд╣рд░реВ рд╡реНрдпрдХреНрдд рдЧрд░реНрджреИрдирдиреНред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдЗрдХрд╛рдИрдорд╛, рд╣рд╛рдореА **News AG** рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рдЕрдиреНрд╡реЗрд╖рдг рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗрдЫреМрдВред рд╕реБрд░реБ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рдбреЗрдЯрд╛ рд▓реЛрдб рдЧрд░реМрдВ рд░ рдЕрдШрд┐рд▓реНрд▓реЛ рдЗрдХрд╛рдИрдмрд╛рдЯ рдХреЗрд╣реА рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рдПрдореНрдмреЗрдбрд┐рдЩ рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ?\n",
|
||||
"\n",
|
||||
"**рдПрдореНрдмреЗрдбрд┐рдЩ** рдХреЛ рд╡рд┐рдЪрд╛рд░ рднрдиреЗрдХреЛ рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЕрд░реНрдердкреВрд░реНрдг рдЕрд░реНрде рдЭрд▓реНрдХрд╛рдЙрдиреЗ рдХрдо-рдЖрдпрд╛рдореАрдп рдШрдирд╛ рднреЗрдХреНрдЯрд░рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдиреБ рд╣реЛред рд╣рд╛рдореА рдкрдЫрд┐ рдЕрд░реНрдердкреВрд░реНрдг рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдЩ рдХрд╕рд░реА рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВ, рддрд░ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рдПрдореНрдмреЗрдбрд┐рдЩрд▓рд╛рдИ рд╢рдмреНрдж рднреЗрдХреНрдЯрд░рдХреЛ рдЖрдпрд╛рдо рдШрдЯрд╛рдЙрдиреЗ рддрд░рд┐рдХрд╛ рднрдиреЗрд░ рд╕реЛрдЪреМрдВред \n",
|
||||
"\n",
|
||||
"рддреНрдпрд╕реИрд▓реЗ, рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░рд▓реЗ рд╢рдмреНрджрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ `embedding_size` рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рднреЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рдпреЛ рдХреЗрд╣реА рд╣рджрд╕рдореНрдо `Dense` рд▓реЗрдпрд░рд╕рдБрдЧ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдЫ, рддрд░ рдПрдХ-рд╣рдЯ рдЗрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рднреЗрдХреНрдЯрд░рд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреЗ рд╕рдЯреНрдЯрд╛, рдпреЛ рд╢рдмреНрдж рдирдореНрдмрд░ рд▓рд┐рди рд╕рдХреНрд╖рдо рдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдкрд╣рд┐рд▓реЛ рд▓реЗрдпрд░рдХреЛ рд░реВрдкрдорд╛ рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдмреНрдпрд╛рдЧ-рдСрдл-рд╡рд░реНрдбреНрд╕ рдореЛрдбреЗрд▓рдмрд╛рдЯ **рдПрдореНрдмреЗрдбрд┐рдЩ рдмреНрдпрд╛рдЧ** рдореЛрдбреЗрд▓рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╣рд╛рдБ рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╣рд╛рдореНрд░реЛ рдкрд╛рдардХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрджрд▓рд╛рдИ рд╕рдореНрдмрдиреНрдзрд┐рдд рдПрдореНрдмреЗрдбрд┐рдЩрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рддреА рд╕рдмреИ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрдорд╛ рдХреЗрд╣реА рд╕рдордЧреНрд░ рдХрд╛рд░реНрдп рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВ, рдЬрд╕реНрддреИ `sum`, `average` рд╡рд╛ `max`ред \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рд╡рд░реНрдЧреАрдХрд░рдг рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рдореНрди рд▓реЗрдпрд░рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:\n",
|
||||
"\n",
|
||||
"* `TextVectorization` рд▓реЗрдпрд░, рдЬрд╕рд▓реЗ рд╕реНрдЯреНрд░рд┐рдЩрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рдЯреЛрдХрди рдирдореНрдмрд░рд╣рд░реВрдХреЛ рдЯреЗрдиреНрд╕рд░ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рд╣рд╛рдореА рдХреЗрд╣реА рдЙрдкрдпреБрдХреНрдд рд╢рдмреНрджрд╛рд╡рд▓реА рдЖрдХрд╛рд░ `vocab_size` рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдХрдо-рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ 1 рд╣реБрдиреЗрдЫ, рд░ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ $n$ рд╣реБрдиреЗрдЫ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА $n$ рдЯреЛрдХрдирд╣рд░реВ рдкрд░рд┐рдгрд╛рдордХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ, рдкреНрд░рддреНрдпреЗрдХрдорд╛ 0 рджреЗрдЦрд┐ `vocab_size` рд╕рдореНрдордХрд╛ рдирдореНрдмрд░рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫрдиреНред\n",
|
||||
"* `Embedding` рд▓реЗрдпрд░, рдЬрд╕рд▓реЗ $n$ рдирдореНрдмрд░рд╣рд░реВ рд▓рд┐рдиреНрдЫ, рд░ рдкреНрд░рддреНрдпреЗрдХ рдирдореНрдмрд░рд▓рд╛рдИ рджрд┐рдЗрдПрдХреЛ рд▓рдореНрдмрд╛рдЗрдХреЛ рдШрдирд╛ рднреЗрдХреНрдЯрд░рдорд╛ рдШрдЯрд╛рдЙрдБрдЫ (рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ 100)ред рдпрд╕рд░реА, $n$ рдЖрдХрд╛рд░рдХреЛ рдЗрдирдкреБрдЯ рдЯреЗрдиреНрд╕рд░рд▓рд╛рдИ $n\\times 100$ рдЯреЗрдиреНрд╕рд░рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреЗрдЫред \n",
|
||||
"* рдПрдЧреНрд░рд┐рдЧреЗрд╕рди рд▓реЗрдпрд░, рдЬрд╕рд▓реЗ рдкрд╣рд┐рд▓реЛ рдЕрдХреНрд╖рдХреЛ рд╕рд╛рдердорд╛ рдпрд╕ рдЯреЗрдиреНрд╕рд░рдХреЛ рдФрд╕рдд рд▓рд┐рдиреНрдЫ, рдЕрд░реНрдерд╛рддреН рдпреЛ рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╕рдмреИ $n$ рдЗрдирдкреБрдЯ рдЯреЗрдиреНрд╕рд░рд╣рд░реВрдХреЛ рдФрд╕рдд рдЧрдгрдирд╛ рдЧрд░реНрдиреЗрдЫред рдпреЛ рд▓реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди, рд╣рд╛рдореА `Lambda` рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдпрд╕рдорд╛ рдФрд╕рдд рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдп рдкрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред рдЖрдЙрдЯрдкреБрдЯрдХреЛ рдЖрдХрд╛рд░ 100 рд╣реБрдиреЗрдЫ, рд░ рдпреЛ рд╕рдореНрдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдордХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реБрдиреЗрдЫред\n",
|
||||
"* рдЕрдиреНрддрд┐рдо `Dense` рд░реЗрдЦреАрдп рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
" Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
" text_vectorization (TextVec (None, None) 0 \n",
|
||||
" torization) \n",
|
||||
" \n",
|
||||
" embedding (Embedding) (None, None, 100) 3000000 \n",
|
||||
" \n",
|
||||
" lambda (Lambda) (None, 100) 0 \n",
|
||||
" \n",
|
||||
" dense (Dense) (None, 4) 404 \n",
|
||||
" \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 3,000,404\n",
|
||||
"Trainable params: 3,000,404\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = 30000\n",
|
||||
"batch_size = 128\n",
|
||||
"\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,input_shape=(1,))\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer, \n",
|
||||
" keras.layers.Embedding(vocab_size,100),\n",
|
||||
" keras.layers.Lambda(lambda x: tf.reduce_mean(x,axis=1)),\n",
|
||||
" keras.layers.Dense(4, activation='softmax')\n",
|
||||
"])\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`summary` рдкреНрд░рд┐рдиреНрдЯрдЖрдЙрдЯрдорд╛, **output shape** рд╕реНрддрдореНрднрдорд╛ рдкрд╣рд┐рд▓реЛ рдЯреЗрдиреНрд╕рд░ рдЖрдпрд╛рдо `None` рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рдЖрдХрд╛рд░рд▓рд╛рдИ рдЬрдирд╛рдЙрдБрдЫ, рд░ рджреЛрд╕реНрд░реЛ рдЖрдпрд╛рдо рдЯреЛрдХрди рдЕрдиреБрдХреНрд░рдордХреЛ рд▓рдореНрдмрд╛рдЗрд▓рд╛рдИ рдЬрдирд╛рдЙрдБрдЫред рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ рд░рд╣реЗрдХрд╛ рд╕рдмреИ рдЯреЛрдХрди рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдХреЛ рд▓рдореНрдмрд╛рдЗ рдлрд░рдХ-рдлрд░рдХ рд╣реБрдиреНрдЫред рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдХреБрд░рд╛ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдЕрдм рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n",
|
||||
"938/938 [==============================] - 20s 20ms/step - loss: 0.7891 - acc: 0.8155 - val_loss: 0.4470 - val_acc: 0.8642\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x22255515100>"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"print(\"Training vectorizer\")\n",
|
||||
"vectorizer.adapt(ds_train.take(500).map(extract_text))\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ** рдХрд┐ рд╣рд╛рдореА рдбреЗрдЯрд╛ рдХреЛ рдЙрдкрд╕реЗрдЯрдХреЛ рдЖрдзрд╛рд░рдорд╛ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрджреИрдЫреМрдВред рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЫрд┐рдЯреЛ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЧрд░рд┐рдПрдХреЛ рд╣реЛ, рд░ рдпрд╕рд▓реЗ рдпрд╕реНрддреЛ рд╕реНрдерд┐рддрд┐ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫ рдЬрд╣рд╛рдБ рд╣рд╛рдореНрд░реЛ рдкрд╛рдардХрд╛ рд╕рдмреИ рдЯреЛрдХрдирд╣рд░реВ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдЙрдкрд╕реНрдерд┐рдд рдирд╣реБрди рд╕рдХреНрдЫрдиреНред рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддреА рдЯреЛрдХрдирд╣рд░реВ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреЗрдЫ, рдЬрд╕рд▓реЗ рдЕрд▓рд┐рдХрддрд┐ рдХрдо рд╢реБрджреНрдзрддрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рди рд╕рдХреНрдЫред рддрд░, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирдорд╛ рдкрд╛рдардХреЛ рдЙрдкрд╕реЗрдЯрд▓реЗ рдкреНрд░рд╛рдпрдГ рд░рд╛рдореНрд░реЛ рд╢рдмреНрджрдХреЛрд╢ рдЕрдиреБрдорд╛рди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### рднрд┐рдиреНрди рдЖрдХрд╛рд░рдХрд╛ рднреЗрд░рд┐рдПрдмрд▓ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"рдЖрдЙрдиреБрд╣реЛрд╕реН, рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВрдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╕рд░реА рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛ рдмреБрдЭреМрдВред рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рдЗрдирдкреБрдЯ рдЯреЗрдиреНрд╕рд░рдХреЛ рдЖрдпрд╛рдо 1 рдЫ, рд░ рд╣рд╛рдореА 128-рд▓рд╛рдореЛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдЯреЗрдиреНрд╕рд░рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдХрд╛рд░ $128 \\times 1$ рд╣реБрдиреНрдЫред рддрд░, рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдХреНрдпрдорд╛ рдЯреЛрдХрдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдлрд░рдХ рд╣реБрдиреНрдЫред рдпрджрд┐ рд╣рд╛рдореА `TextVectorization` рд▓реЗрдпрд░рд▓рд╛рдИ рдПрдХрд▓ рдЗрдирдкреБрдЯрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдЫреМрдВ рднрдиреЗ, рдЯреЗрдХреНрд╕реНрдЯ рдХрд╕рд░реА рдЯреЛрдХрдирд╛рдЗрдЬ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреНрдиреЗ рдЖрдзрд╛рд░рдорд╛ рдлрд░реНрдХрд╛рдЗрдиреЗ рдЯреЛрдХрдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдлрд░рдХ рд╣реБрдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"tf.Tensor([ 1 45], shape=(2,), dtype=int64)\n",
|
||||
"tf.Tensor([ 112 1271 1 3 1747 158], shape=(6,), dtype=int64)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print(vectorizer('Hello, world!'))\n",
|
||||
"print(vectorizer('I am glad to meet you!'))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рддрд░, рдЬрдм рд╣рд╛рдореА рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░рд▓рд╛рдИ рдзреЗрд░реИ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдЫреМрдВ, рдпрд╕рд▓реЗ рдЖрдпрддрд╛рдХрд╛рд░ рдЖрдХрд╛рд░рдХреЛ рдЯреЗрдиреНрд╕рд░ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреБрдкрд░реНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓реЗ рдкреНрд░рдпреЛрдЧ рдирдЧрд░рд┐рдПрдХрд╛ рддрддреНрд╡рд╣рд░реВрд▓рд╛рдИ PAD рдЯреЛрдХрди (рдЬрд╕рдХреЛ рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╢реВрдиреНрдп рд╣реЛ) рд▓реЗ рднрд░рд┐рдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tf.Tensor: shape=(2, 6), dtype=int64, numpy=\n",
|
||||
"array([[ 1, 45, 0, 0, 0, 0],\n",
|
||||
" [ 112, 1271, 1, 3, 1747, 158]], dtype=int64)>"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vectorizer(['Hello, world!','I am glad to meet you!'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпрд╣рд╛рдБ рд╣рд╛рдореА рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[[ 1.53059261e-02, 6.80514947e-02, 3.14026810e-02, ...,\n",
|
||||
" -8.92002955e-02, 1.52911525e-04, -5.65562584e-02],\n",
|
||||
" [ 2.57456154e-01, 2.79364467e-01, -2.03605562e-01, ...,\n",
|
||||
" -2.07474351e-01, 8.31158683e-02, -2.03911960e-01],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02],\n",
|
||||
" [ 3.98201384e-02, -8.03454965e-03, 2.39790026e-02, ...,\n",
|
||||
" -7.18549127e-04, 2.66963355e-02, -4.30646613e-02]],\n",
|
||||
"\n",
|
||||
" [[ 1.89674050e-01, 2.61548996e-01, -3.67433839e-02, ...,\n",
|
||||
" -2.07366899e-01, -1.05442435e-01, -2.36952081e-01],\n",
|
||||
" [ 6.16133213e-02, 1.80511594e-01, 9.77298319e-02, ...,\n",
|
||||
" -5.46628237e-02, -1.07340455e-01, -1.06589928e-01],\n",
|
||||
" [ 1.53059261e-02, 6.80514947e-02, 3.14026810e-02, ...,\n",
|
||||
" -8.92002955e-02, 1.52911525e-04, -5.65562584e-02],\n",
|
||||
" [-4.84890305e-02, -8.41715634e-02, 1.51529670e-01, ...,\n",
|
||||
" 1.28192469e-01, -7.77286515e-02, 1.26041949e-01],\n",
|
||||
" [-4.17212099e-02, -5.60694858e-02, 4.08860669e-02, ...,\n",
|
||||
" 8.70475471e-02, 8.92383084e-02, 1.67974353e-01],\n",
|
||||
" [ 2.85779923e-01, 4.57767487e-01, 4.52292450e-02, ...,\n",
|
||||
" -1.97419018e-01, -2.04659685e-01, -2.79758364e-01]]],\n",
|
||||
" dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.layers[1](vectorizer(['Hello, world!','I am glad to meet you!'])).numpy()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ**: рдкреНрдпрд╛рдбрд┐рдЩрдХреЛ рдорд╛рддреНрд░рд╛ рдХрдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдХреЗрд╣реА рдЕрд╡рд╕реНрдерд╛рдорд╛ рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рд░рд╣реЗрдХрд╛ рд╕рдмреИ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд▓рд╛рдИ рдмрдвреНрджреЛ рд▓рдореНрдмрд╛рдЗрдХреЛ рдХреНрд░рдо (рд╡рд╛, рдЕрдЭ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛, рдЯреЛрдХрдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛) рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ рд╕рдорд╛рди рд▓рдореНрдмрд╛рдЗрдХрд╛ рдЕрдиреБрдХреНрд░рдорд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕реЗрдореНрдпрд╛рдиреНрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдЩ: Word2Vec\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░рд▓реЗ рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ рдореНрдпрд╛рдк рдЧрд░реНрди рд╕рд┐рдХреЗрдХреЛ рдерд┐рдпреЛ, рддрд░ рддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВрдорд╛ рд╕реЗрдореНрдпрд╛рдиреНрдЯрд┐рдХ рдЕрд░реНрде рдерд┐рдПрдиред рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдпрд╕реНрддреЛ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕рд┐рдХреНрди рд╕рдХреНрдпреМрдВ рдЬрд╕рд▓реЗ рд╕рдорд╛рди рд╢рдмреНрджрд╣рд░реВ рд╡рд╛ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рдХреБрдиреИ рднреЗрдХреНрдЯрд░ рджреВрд░реА (рдЬрд╕реНрддреИ рдпреБрдХреНрд▓рд┐рдбрд┐рдпрди рджреВрд░реА) рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдирдЬрд┐рдХрдХреЛ рднреЗрдХреНрдЯрд░рд╣рд░реВрд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ рднрдиреЗ рд░рд╛рдореНрд░реЛ рд╣реБрдиреЗ рдерд┐рдпреЛред\n",
|
||||
"\n",
|
||||
"рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдПрдореНрдмреЗрдбрд┐рдЩ рдореЛрдбреЗрд▓рд▓рд╛рдИ [Word2Vec](https://en.wikipedia.org/wiki/Word2vec) рдЬрд╕реНрддрд╛ рдкреНрд░рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдареВрд▓реЛ рдкрд╛рда рд╕рдВрдЧреНрд░рд╣рдорд╛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╡рд┐рддрд░рдгрд╛рддреНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рджреБрдИ рдореБрдЦреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫ:\n",
|
||||
"\n",
|
||||
" - **рдХрдиреНрдЯрд┐рдиреНрдпреБрдЕрд╕ рдмреНрдпрд╛рдЧ-рдЕрдл-рд╡рд░реНрдбреНрд╕** (CBoW), рдЬрд╣рд╛рдБ рд╣рд╛рдореА рдореЛрдбреЗрд▓рд▓рд╛рдИ рд╡рд░рдкрд░рдХреЛ рд╕рдиреНрджрд░реНрднрдмрд╛рдЯ рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдиреНрдЫреМрдВред рджрд┐рдЗрдПрдХреЛ ngram $(W_{-2},W_{-1},W_0,W_1,W_2)$ рдорд╛, рдореЛрдбреЗрд▓рдХреЛ рд▓рдХреНрд╖реНрдп $(W_{-2},W_{-1},W_1,W_2)$ рдмрд╛рдЯ $W_0$ рдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрдиреБ рд╣реЛред\n",
|
||||
" - **рдХрдиреНрдЯрд┐рдиреНрдпреБрдЕрд╕ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо** CBoW рдХреЛ рд╡рд┐рдкрд░реАрдд рд╣реЛред рдореЛрдбреЗрд▓рд▓реЗ рд╡рд░рдкрд░рдХреЛ рд╕рдиреНрджрд░реНрдн рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЭреНрдпрд╛рд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд░реНрддрдорд╛рди рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"CBoW рдЫрд┐рдЯреЛ рд╣реБрдиреНрдЫ, рдЬрдмрдХрд┐ рд╕реНрдХрд┐рдк-рдЧреНрд░рд╛рдо рдврд┐рд▓реЛ рднрдП рдкрдирд┐ рдпреЛ рджреБрд░реНрд▓рдн рд╢рдмреНрджрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд░рд╛рдореНрд░реЛ рдХрд╛рдо рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Google News рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ Word2Vec рдПрдореНрдмреЗрдбрд┐рдЩрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╣рд╛рдореА **gensim** рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рддрд▓ рд╣рд╛рдореА 'neural' рд╢рдмреНрджрд╕рдБрдЧ рд╕рдмреИрднрдиреНрджрд╛ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рд╢рдмреНрджрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note:** рдЬрдм рддрдкрд╛рдИрдВ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд╢рдмреНрдж рднреЗрдХреНрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рддрд┐рдиреАрд╣рд░реВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдХреЗрд╣реА рд╕рдордп рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import gensim.downloader as api\n",
|
||||
"w2v = api.load('word2vec-google-news-300')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"neuronal -> 0.7804799675941467\n",
|
||||
"neurons -> 0.7326500415802002\n",
|
||||
"neural_circuits -> 0.7252851724624634\n",
|
||||
"neuron -> 0.7174385190010071\n",
|
||||
"cortical -> 0.6941086649894714\n",
|
||||
"brain_circuitry -> 0.6923246383666992\n",
|
||||
"synaptic -> 0.6699118614196777\n",
|
||||
"neural_circuitry -> 0.6638563275337219\n",
|
||||
"neurochemical -> 0.6555314064025879\n",
|
||||
"neuronal_activity -> 0.6531826257705688\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"for w,p in w2v.most_similar('neural'):\n",
|
||||
" print(f\"{w} -> {p}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рд╢рдмреНрджрдмрд╛рдЯ рднреЗрдХреНрдЯрд░ рдПрдореНрдмреЗрдбрд┐рдЩ рдкрдирд┐ рдирд┐рдХрд╛рд▓реНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕рд▓рд╛рдИ рд╡рд░реНрдЧреАрдХрд░рдг рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдПрдореНрдмреЗрдбрд┐рдЩрдорд╛ рейрежреж рдШрдЯрдХрд╣рд░реВ рдЫрдиреН, рддрд░ рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рднреЗрдХреНрдЯрд░рдХрд╛ рдкрд╣рд┐рд▓реЛ реиреж рдШрдЯрдХрд╣рд░реВ рдорд╛рддреНрд░ рджреЗрдЦрд╛рдЙрдБрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([ 0.01226807, 0.06225586, 0.10693359, 0.05810547, 0.23828125,\n",
|
||||
" 0.03686523, 0.05151367, -0.20703125, 0.01989746, 0.10058594,\n",
|
||||
" -0.03759766, -0.1015625 , -0.15820312, -0.08105469, -0.0390625 ,\n",
|
||||
" -0.05053711, 0.16015625, 0.2578125 , 0.10058594, -0.25976562],\n",
|
||||
" dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v['play'][:20]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдорд╣рд╛рди рдХреБрд░рд╛ рд╕реЗрдорд╛рдиреНрдЯрд┐рдХ рдПрдореНрдмреЗрдбрд┐рдЩреНрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рднрдиреЗрдХреЛ рддрдкрд╛рдИрдВрд▓реЗ рд╕реЗрдорд╛рдиреНрдЯрд┐рдХреНрд╕рдХреЛ рдЖрдзрд╛рд░рдорд╛ рднреЗрдХреНрдЯрд░ рдЗрдирдХреЛрдбрд┐рдЩрд▓рд╛рдИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА *рд░рд╛рдЬрд╛* рд░ *рдорд╣рд┐рд▓рд╛* рд╢рдмреНрджрд╣рд░реВрдХреЛ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╕рдБрдЧ рд╕рдХреЗрд╕рдореНрдо рдирдЬрд┐рдХ рд░ *рдкреБрд░реБрд╖* рд╢рдмреНрджрдмрд╛рдЯ рд╕рдХреЗрд╕рдореНрдо рдЯрд╛рдврд╛ рд╣реБрдиреЗ рд╢рдмреНрдж рдЦреЛрдЬреНрди рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"('queen', 0.7118192911148071)"
|
||||
]
|
||||
},
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"w2v.most_similar(positive=['king','woman'],negative=['man'])[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"source": [
|
||||
"рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдХреЗрд╣реА рдЖрдиреНрддрд░рд┐рдХ GenSym рдЬрд╛рджреВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рддрд░ рдЖрдзрд╛рд░рднреВрдд рддрд░реНрдХ рд╡рд╛рд╕реНрддрд╡рдореИ рдзреЗрд░реИ рд╕рд░рд▓ рдЫред рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рд░реЛрдЪрдХ рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ рддрдкрд╛рдИрдВ рдПрдореНрдмреЗрдбрд┐рдЩ рднреЗрдХреНрдЯрд░рд╣рд░реВрдорд╛ рд╕рд╛рдорд╛рдиреНрдп рднреЗрдХреНрдЯрд░ рдЕрдкрд░реЗрд╢рдирд╣рд░реВ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ рддреНрдпрд╕рд▓реЗ рд╢рдмреНрджрдХреЛ **рдЕрд░реНрдерд╣рд░реВ**рдорд╛ рдЕрдкрд░реЗрд╢рдирд╣рд░реВ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрджрдЫред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдгрд▓рд╛рдИ рднреЗрдХреНрдЯрд░ рдЕрдкрд░реЗрд╢рдирд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд╡реНрдпрдХреНрдд рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ: рд╣рд╛рдореА **KING-MAN+WOMAN** рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рднреЗрдХреНрдЯрд░ рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВ (рд╕рдореНрдмрдиреНрдзрд┐рдд рд╢рдмреНрджрд╣рд░реВрдХреЛ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рдорд╛ `+` рд░ `-` рдЕрдкрд░реЗрд╢рдирд╣рд░реВ рдЧрд░рд┐рдиреНрдЫ), рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЙрдХреНрдд рднреЗрдХреНрдЯрд░рд╕рдБрдЧ рдирдЬрд┐рдХрдХреЛ рд╢рдмреНрдж рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'queen'"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# get the vector corresponding to kind-man+woman\n",
|
||||
"qvec = w2v['king']-1.7*w2v['man']+1.7*w2v['woman']\n",
|
||||
"# find the index of the closest embedding vector \n",
|
||||
"d = np.sum((w2v.vectors-qvec)**2,axis=1)\n",
|
||||
"min_idx = np.argmin(d)\n",
|
||||
"# find the corresponding word\n",
|
||||
"w2v.index_to_key[min_idx]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **NOTE**: рд╣рд╛рдореАрд▓реЗ *man* рд░ *woman* рднреЗрдХреНрдЯрд░рд╣рд░реВрдорд╛ рд╕рд╛рдиреЛ рдЧреБрдгрд╛рдВрдХ рдердкреНрдиреБрдкрд░реЗрдХреЛ рдерд┐рдпреЛ - рдпрд╕рд▓рд╛рдИ рд╣рдЯрд╛рдПрд░ рдХреЗ рд╣реБрдиреНрдЫ рд╣реЗрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"\n",
|
||||
"рдирд┐рдХрдЯрддрдо рднреЗрдХреНрдЯрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди, рд╣рд╛рдореАрд▓реЗ TensorFlow рдХреЛ рдореЗрдХрд╛рдирд┐рдЬрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ рднреЗрдХреНрдЯрд░ рд░ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рд░рд╣реЗрдХрд╛ рд╕рдмреИ рднреЗрдХреНрдЯрд░рд╣рд░реВ рдмреАрдЪрдХреЛ рджреВрд░реАрдХреЛ рднреЗрдХреНрдЯрд░ рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ `argmin` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдиреНрдпреВрдирддрдо рд╢рдмреНрджрдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдБрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Word2Vec рд╢рдмреНрджрд╛рд░реНрдерд▓рд╛рдИ рд╡реНрдпрдХреНрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рддрд░рд┐рдХрд╛ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ, рддрд░ рдпрд╕рдорд╛ рдирд┐рдореНрди рдЬрд╕реНрддрд╛ рдзреЗрд░реИ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЫрдиреН:\n",
|
||||
"\n",
|
||||
"* CBoW рд░ skip-gram рдореЛрдбреЗрд▓рд╣рд░реВ **predictive embeddings** рд╣реБрдиреН, рд░ рдпреАрд▓реЗ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд╕рдиреНрджрд░реНрднрд▓рд╛рдИ рдорд╛рддреНрд░ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрдЫрдиреНред Word2Vec рд▓реЗ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рд╕рдиреНрджрд░реНрднрдХреЛ рдлрд╛рдЗрджрд╛ рдЙрдард╛рдЙрдБрджреИрдиред\n",
|
||||
"* Word2Vec рд▓реЗ рд╢рдмреНрджрдХреЛ **morphology** рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИрди, рдЕрд░реНрдерд╛рддреН рд╢рдмреНрджрдХреЛ рдЕрд░реНрде рд╢рдмреНрджрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧрд╣рд░реВ, рдЬрд╕реНрддреИ рдореВрд▓ (root), рдорд╛ рдирд┐рд░реНрднрд░ рд╣реБрди рд╕рдХреНрдЫ рднрдиреНрдиреЗ рддрдереНрдпрд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрдЫред \n",
|
||||
"\n",
|
||||
"**FastText** рд▓реЗ рджреЛрд╕реНрд░реЛ рд╕реАрдорд╛рд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫ, рд░ Word2Vec рдорд╛ рдЖрдзрд╛рд░рд┐рдд рднрдПрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рд░ рддреНрдпрд╕ рд╢рдмреНрджрднрд┐рддреНрд░ рдкрд╛рдЗрдиреЗ character n-grams рдХрд╛ рд▓рд╛рдЧрд┐ рднреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ рд╕рд┐рдХреНрдЫред рдпреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдгрдорд╛ рдПрдХ рднреЗрдХреНрдЯрд░рдорд╛ рдФрд╕рдд рдЧрд░рд┐рдиреНрдЫред рдпрд╕рд▓реЗ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдорд╛ рдзреЗрд░реИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрдгрдирд╛ рдердкреЗ рдкрдирд┐, рдпрд╕рд▓реЗ рд╢рдмреНрдж embeddings рд▓рд╛рдИ рдЙрдк-рд╢рдмреНрдж рдЬрд╛рдирдХрд╛рд░реАрд▓рд╛рдИ рд╕рдореЗрдЯреНрди рд╕рдХреНрд╖рдо рдмрдирд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрд░реНрдХреЛ рд╡рд┐рдзрд┐, **GloVe**, рд╢рдмреНрдж embeddings рдХреЛ рд▓рд╛рдЧрд┐ рдлрд░рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫ, рдЬреБрди word-context matrix рдХреЛ factorization рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЫред рд╕реБрд░реБрдорд╛, рдпреЛ рдПрдЙрдЯрд╛ рдареВрд▓реЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдЙрдБрдЫ рдЬрд╕рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдиреНрджрд░реНрднрд╣рд░реВрдорд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЧрдиреНрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рд▓рд╛рдИ рдХрдо рдЖрдпрд╛рдордорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫ рдЬрд╕рд▓реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рд╣рд╛рдирд┐рд▓рд╛рдИ рдиреНрдпреВрдирддрдо рдмрдирд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"gensim рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рддреА рд╢рдмреНрдж embeddings рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдЫ, рд░ рддрдкрд╛рдИрдВрд▓реЗ рдорд╛рдерд┐рдХреЛ рдореЛрдбреЗрд▓ рд▓реЛрдб рдЧрд░реНрдиреЗ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реЗрд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Keras рдорд╛ pretrained embeddings рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрд▓рд╛рдИ рд╕рдВрд╢реЛрдзрди рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ embedding layer рдорд╛ semantic embeddings, рдЬрд╕реНрддреИ Word2Vec, рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрджрдЫреМрдВред pretrained embedding рд░ text corpus рдХреЛ рд╢рдмреНрджрд╛рд╡рд▓реАрд╣рд░реВ рдкреНрд░рд╛рдпрдГ рдореЗрд▓ рдирдЦрд╛рдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдПрдЙрдЯрд╛ рд╡рд┐рдХрд▓реНрдк рдЫрд╛рдиреНрдиреБрдкрд░реНрдЫред рдпрд╣рд╛рдБ рд╣рд╛рдореА рджреБрдИ рд╕рдореНрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрдЫреМрдВ: tokenizer vocabulary рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ, рд░ Word2Vec embeddings рдХреЛ vocabulary рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗред\n",
|
||||
"\n",
|
||||
"### Tokenizer vocabulary рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"Tokenizer vocabulary рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, vocabulary рдХрд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВрдХреЛ Word2Vec embeddings рд╣реБрдиреЗрдЫ, рд░ рдХреЗрд╣реА рд╣рд░рд╛рдЙрдиреЗрдЫрдиреНред рд╣рд╛рдореНрд░реЛ vocabulary size `vocab_size` рдЫ, рд░ Word2Vec embedding vector рдХреЛ рд▓рдореНрдмрд╛рдЗ `embed_size` рдЫ рднрдиреЗ, embedding layer рдХреЛ рддреМрд▓ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХреЛ рдЖрдХрд╛рд░ `vocab_size`$\\times$`embed_size` рд╣реБрдиреЗрдЫред рд╣рд╛рдореА рдпреЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рд▓рд╛рдИ vocabulary рдорд╛рд░реНрдлрдд рдЧрдПрд░ рднрд░рдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Embedding size: 300\n",
|
||||
"Populating matrix, this will take some time...Done, found 4551 words, 784 words missing\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"embed_size = len(w2v.get_vector('hello'))\n",
|
||||
"print(f'Embedding size: {embed_size}')\n",
|
||||
"\n",
|
||||
"vocab = vectorizer.get_vocabulary()\n",
|
||||
"W = np.zeros((vocab_size,embed_size))\n",
|
||||
"print('Populating matrix, this will take some time...',end='')\n",
|
||||
"found, not_found = 0,0\n",
|
||||
"for i,w in enumerate(vocab):\n",
|
||||
" try:\n",
|
||||
" W[i] = w2v.get_vector(w)\n",
|
||||
" found+=1\n",
|
||||
" except:\n",
|
||||
" # W[i] = np.random.normal(0.0,0.3,size=(embed_size,))\n",
|
||||
" not_found+=1\n",
|
||||
"\n",
|
||||
"print(f\"Done, found {found} words, {not_found} words missing\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╢рдмреНрджрд╣рд░реВ рдЬреБрди Word2Vec рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдЙрдкрд▓рдмреНрдз рдЫреИрдирдиреН, рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╢реВрдиреНрдпрдХреЛ рд░реВрдкрдорд╛ рдЫреЛрдбреНрди рд╕рдХреНрдЫреМрдВ, рд╡рд╛ рдПрдЙрдЯрд╛ рд░реНрдпрд╛рдиреНрдбрдо рднреЗрдХреНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рдкреНрд░реАрдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рд╡рдЬрдирд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"emb = keras.layers.Embedding(vocab_size,embed_size,weights=[W],trainable=False)\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer, emb,\n",
|
||||
" keras.layers.Lambda(lambda x: tf.reduce_mean(x,axis=1)),\n",
|
||||
" keras.layers.Dense(4, activation='softmax')\n",
|
||||
"])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"938/938 [==============================] - 10s 10ms/step - loss: 1.1075 - acc: 0.7822 - val_loss: 0.9134 - val_acc: 0.8175\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x2220226ef10>"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),\n",
|
||||
" validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **Note**: рд╣рд╛рдореАрд▓реЗ `Embedding` рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ `trainable=False` рд╕реЗрдЯ рдЧрд░реЗрдХреЛ рджреЗрдЦрд┐рдиреНрдЫ, рдЬрд╕рдХреЛ рдЕрд░реНрде рд╣рд╛рдореА Embedding рд▓реЗрдпрд░рд▓рд╛рдИ рдкреБрдирдГ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреИрдиреМрдВред рдпрд╕рд▓реЗ рд╕рдЯреАрдХрддрд╛ рдЕрд▓рд┐ рдХрдо рд╣реБрди рд╕рдХреНрдЫ, рддрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдЧрддрд┐ рдмрдврд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"### Embedding рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдШрд┐рд▓реНрд▓реЛ рд╡рд┐рдзрд┐рдХреЛ рдПрдЙрдЯрд╛ рд╕рдорд╕реНрдпрд╛ рднрдиреЗрдХреЛ TextVectorization рд░ Embedding рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рд╢рдмреНрджрдХреЛрд╢рд╣рд░реВ рдлрд░рдХ рд╣реБрдиреБ рд╣реЛред рдпрд╕ рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рд╣рд╛рдореА рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n",
|
||||
"* рд╣рд╛рдореНрд░реЛ рд╢рдмреНрджрдХреЛрд╢рдорд╛ Word2Vec рдореЛрдбреЗрд▓ рдкреБрдирдГ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"* Pretrained Word2Vec рдореЛрдбреЗрд▓рдХреЛ рд╢рдмреНрджрдХреЛрд╢рдмрд╛рдЯ рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдбреЗрдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реНрджрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рд╢рдмреНрджрдХреЛрд╢ рд▓реЛрдб рдЧрд░реНрдиреЗ рдХреНрд░рдордорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рджреЛрд╕реНрд░реЛ рд╡рд┐рдзрд┐ рд╕рдЬрд┐рд▓реЛ рджреЗрдЦрд┐рдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реМрдВред рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореА Word2Vec embeddings рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рдмреНрджрдХреЛрд╢рд╕рд╣рд┐рдд `TextVectorization` рд▓реЗрдпрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vocab = list(w2v.vocab.keys())\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(input_shape=(1,))\n",
|
||||
"vectorizer.set_vocabulary(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Gensim рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдЩреНрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдПрдЙрдЯрд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрдЩреНрд╕рди, `get_keras_embeddings`, рд╕рдорд╛рд╡реЗрд╢ рдЫ, рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд Keras рдПрдореНрдмреЗрдбрд┐рдЩреНрд╕ рддрд╣ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Epoch 1/5\n",
|
||||
"938/938 [==============================] - 20s 14ms/step - loss: 1.3377 - acc: 0.4978 - val_loss: 1.2995 - val_acc: 0.5647\n",
|
||||
"Epoch 2/5\n",
|
||||
"938/938 [==============================] - 10s 10ms/step - loss: 1.2587 - acc: 0.5722 - val_loss: 1.2339 - val_acc: 0.5842\n",
|
||||
"Epoch 3/5\n",
|
||||
"938/938 [==============================] - 10s 10ms/step - loss: 1.1980 - acc: 0.5884 - val_loss: 1.1826 - val_acc: 0.5954\n",
|
||||
"Epoch 4/5\n",
|
||||
"938/938 [==============================] - 12s 13ms/step - loss: 1.1503 - acc: 0.6002 - val_loss: 1.1417 - val_acc: 0.6018\n",
|
||||
"Epoch 5/5\n",
|
||||
"938/938 [==============================] - 11s 12ms/step - loss: 1.1120 - acc: 0.6097 - val_loss: 1.1083 - val_acc: 0.6104\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x2220ccb81c0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer, \n",
|
||||
" w2v.get_keras_embedding(train_embeddings=False),\n",
|
||||
" keras.layers.Lambda(lambda x: tf.reduce_mean(x,axis=1)),\n",
|
||||
" keras.layers.Dense(4, activation='softmax')\n",
|
||||
"])\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'])\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128),epochs=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рджреЗрдЦреНрди рдирд╕рдХреНрдиреБрдХреЛ рдПрдХ рдХрд╛рд░рдг рднрдиреЗрдХреЛ рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдХрд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ GloVe рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдирднрдПрдХрд╛ рдХрд╛рд░рдг рд╣реЛ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рддреА рд╢рдмреНрджрд╣рд░реВрд▓рд╛рдИ рдореВрд▓рддрдГ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░рд┐рдиреНрдЫред рдпрд╕рд▓рд╛рдИ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЖрдлреНрдиреИ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рдиреНрджрд░реНрднрд╛рддреНрдордХ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдкрд╛рд░рдореНрдкрд░рд┐рдХ рдкреНрд░реАрдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ рдЬрд╕реНрддреИ Word2Vec рдХреЛ рдореБрдЦреНрдп рд╕реАрдорд┐рддрддрд╛ рдпреЛ рд╣реЛ рдХрд┐, рдпрджреНрдпрдкрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╢рдмреНрджрдХреЛ рдХреЗрд╣реА рдЕрд░реНрде рд╕рдорд╛рддреНрди рд╕рдХреНрдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдЕрд░реНрдерд╣рд░реВ рдмреАрдЪ рдлрд░рдХ рдЫреБрдЯреНрдпрд╛рдЙрди рд╕рдХреНрджреИрдирдиреНред рдпрд╕рд▓реЗ рдбрд╛рдЙрдирд╕реНрдЯреНрд░реАрдо рдореЛрдбреЗрд▓рд╣рд░реВрдорд╛ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, 'play' рд╢рдмреНрджрдХреЛ рдпреА рджреБрдИ рд╡рд╛рдХреНрдпрд╣рд░реВрдорд╛ рдлрд░рдХ рдЕрд░реНрде рдЫ:\n",
|
||||
"- рдо рдерд┐рдПрдЯрд░рдорд╛ рдПрдЙрдЯрд╛ **play** рд╣реЗрд░реНрди рдЧрдПрдБред\n",
|
||||
"- рдЬреЛрди рдЖрдлреНрдирд╛ рд╕рд╛рдереАрд╣рд░реВрд╕рдБрдЧ **play** рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореАрд▓реЗ рдЪрд░реНрдЪрд╛ рдЧрд░реЗрдХрд╛ рдкреНрд░реАрдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрд▓реЗ 'play' рд╢рдмреНрджрдХреЛ рджреБрд╡реИ рдЕрд░реНрдерд▓рд╛рдИ рдПрдЙрдЯреИ рдПрдореНрдмреЗрдбрд┐рдЩрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫред рдпрд╕ рд╕реАрдорд┐рддрддрд╛рд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓рд╛рдИ **рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓** рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдЬреБрди рдареВрд▓реЛ рдкрд╛рдардХреЛ рд╕рдВрдЧреНрд░рд╣рдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рд╣реБрдиреНрдЫ, рд░ *рдЬрд╛рдиреНрджрдЫ* рдХрд┐ рд╢рдмреНрджрд╣рд░реВ рд╡рд┐рднрд┐рдиреНрди рд╕рдиреНрджрд░реНрднрд╣рд░реВрдорд╛ рдХрд╕рд░реА рд░рд╛рдЦреНрди рд╕рдХрд┐рдиреНрдЫред рд╕рдиреНрджрд░реНрднрд╛рддреНрдордХ рдПрдореНрдмреЗрдбрд┐рдЩрд╣рд░реВрдХреЛ рдЪрд░реНрдЪрд╛ рдпрд╕ рдЯреНрдпреБрдЯреЛрд░рд┐рдпрд▓рдХреЛ рджрд╛рдпрд░рд╛рднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдЫ, рддрд░ рд╣рд╛рдореА рдпрд╕рдмрд╛рд░реЗ рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рдХреБрд░рд╛ рдЧрд░реНрджрд╛ рдЕрд░реНрдХреЛ рдпреБрдирд┐рдЯрдорд╛ рдлрд░реНрдХрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рдЫред рд╣рд╛рдореА рд╢реБрджреНрдзрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛ рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "b859482be7f61d1eadc2c6a2720a37e4",
|
||||
"translation_date": "2025-08-28T09:43:15+00:00",
|
||||
"source_file": "lessons/5-NLP/14-Embeddings/EmbeddingsTF.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,574 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "NXTSugt6ieXh"
|
||||
},
|
||||
"source": [
|
||||
"## CBoW рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рдпреЛ рдиреЛрдЯрдмреБрдХ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдХреЛ рдПрдХ рднрд╛рдЧ рд╣реЛред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА CBoW рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реЗрд░ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ Word2Vec рдПрдореНрдмреЗрдбрд┐рдЩ рд╕реНрдкреЗрд╕ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореА AG News рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рдкрд╛рдардХреЛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import os\n",
|
||||
"import collections\n",
|
||||
"import builtins\n",
|
||||
"import random\n",
|
||||
"import numpy as np"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "q-UiiJUKaxHj"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "TFbR8CZaTZ1q"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"рдкрд╣рд┐рд▓реЗ рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реМрдВ рд░ рдЯреЛрдХрдирд╛рдЗрдЬрд░ рд░ рд╢рдмреНрджрдХреЛрд╢ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реМрдВред рд╣рд╛рдореА рдЧрдгрдирд╛рд╣рд░реВрд▓рд╛рдИ рдХреЗрд╣реА рд╕реАрдорд┐рдд рдЧрд░реНрди `vocab_size` рд▓рд╛рдИ 5000 рдорд╛ рд╕реЗрдЯ рдЧрд░реНрдиреЗрдЫреМрдВред\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "HIwC7lI5T-ov"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def load_dataset(ngrams = 1, min_freq = 1, vocab_size = 5000 , lines_cnt = 500):\n",
|
||||
" tokenizer = torchtext.data.utils.get_tokenizer('basic_english')\n",
|
||||
" print(\"Loading dataset...\")\n",
|
||||
" test_dataset, train_dataset = torchtext.datasets.AG_NEWS(root='./data')\n",
|
||||
" train_dataset = list(train_dataset)\n",
|
||||
" test_dataset = list(test_dataset)\n",
|
||||
" classes = ['World', 'Sports', 'Business', 'Sci/Tech']\n",
|
||||
" print('Building vocab...')\n",
|
||||
" counter = collections.Counter()\n",
|
||||
" for i, (_, line) in enumerate(train_dataset):\n",
|
||||
" counter.update(torchtext.data.utils.ngrams_iterator(tokenizer(line),ngrams=ngrams))\n",
|
||||
" if i == lines_cnt:\n",
|
||||
" break\n",
|
||||
" vocab = torchtext.vocab.Vocab(collections.Counter(dict(counter.most_common(vocab_size))), min_freq=min_freq)\n",
|
||||
" return train_dataset, test_dataset, classes, vocab, tokenizer"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "wdZuygtgiuLG"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"train_dataset, test_dataset, _, vocab, tokenizer = load_dataset()"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "4d1nU1gsivGu",
|
||||
"outputId": "949fe272-ae0e-49f5-c373-6703458b3a74"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def encode(x, vocabulary, tokenizer = tokenizer):\n",
|
||||
" return [vocabulary[s] for s in tokenizer(x)]"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "1XDYNhG8ToFV"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "LIlQk6_PaHVY"
|
||||
},
|
||||
"source": [
|
||||
"## CBoW рдореЛрдбреЗрд▓\n",
|
||||
"\n",
|
||||
"CBoW рд▓реЗ $2N$ рдЫрд┐рдореЗрдХреА рд╢рдмреНрджрд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рдорд╛ рдПрдЙрдЯрд╛ рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрди рд╕рд┐рдХреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЬрдм $N=1$ рд╣реБрдиреНрдЫ, рд╣рд╛рдореАрд▓реЗ рд╡рд╛рдХреНрдп *I like to train networks* рдмрд╛рдЯ рдирд┐рдореНрди рдЬреЛрдбреАрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ: (like,I), (I, like), (to, like), (like,to), (train,to), (to, train), (networks, train), (train,networks)ред рдпрд╣рд╛рдБ, рдкрд╣рд┐рд▓реЛ рд╢рдмреНрдж рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЫрд┐рдореЗрдХреА рд╢рдмреНрдж рд╣реЛ, рд░ рджреЛрд╕реНрд░реЛ рд╢рдмреНрдж рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░рд┐рдПрдХреЛ рд╢рдмреНрдж рд╣реЛред\n",
|
||||
"\n",
|
||||
"рдЕрд░реНрдХреЛ рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрди рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдЫрд┐рдореЗрдХреА рд╢рдмреНрджрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рджрд┐рдиреБрдкрд░реНрдиреЗрдЫ, рд░ рд╢рдмреНрдж рдирдореНрдмрд░рд▓рд╛рдИ рдЖрдЙрдЯрдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред CBoW рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рд╕рдВрд░рдЪрдирд╛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░рдХреЛ рдЫ:\n",
|
||||
"\n",
|
||||
"* рдЗрдирдкреБрдЯ рд╢рдмреНрджрд▓рд╛рдИ embedding layer рдорд╛рд░реНрдлрдд рдкрдард╛рдЗрдиреНрдЫред рдпреЛ embedding layer рдиреИ рд╣рд╛рдореНрд░реЛ Word2Vec embedding рд╣реБрдиреЗрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЕрд▓рдЧ рд░реВрдкрдорд╛ `embedder` рднреЗрд░рд┐рдПрдмрд▓рдХреЛ рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореА embedding size = 30 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдпрджреНрдпрдкрд┐ рддрдкрд╛рдИрдВ рдЙрдЪреНрдЪ dimensions (рд╡рд╛рд╕реНрддрд╡рд┐рдХ word2vec рдорд╛ 300 рд╣реБрдиреНрдЫ) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рдЪрд╛рд╣рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"* Embedding vector рд▓рд╛рдИ рддреНрдпрд╕рдкрдЫрд┐ рдПрдЙрдЯрд╛ linear layer рдорд╛ рдкрдард╛рдЗрдиреНрдЫ рдЬрд╕рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрдиреЗрдЫред рддреНрдпрд╕реИрд▓реЗ рдпрд╕рдорд╛ `vocab_size` neurons рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдЖрдЙрдЯрдкреБрдЯрдХреЛ рд▓рд╛рдЧрд┐, рдпрджрд┐ рд╣рд╛рдореА `CrossEntropyLoss` рд▓рд╛рдИ loss function рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ рднрдиреЗ, рд╣рд╛рдореАрд▓реЗ рдПрдХ-рд╣рдЯ encoding рдмрд┐рдирд╛ рдорд╛рддреНрд░ рд╢рдмреНрдж рдирдореНрдмрд░рд╣рд░реВрд▓рд╛рдИ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдордХреЛ рд░реВрдкрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"vocab_size = len(vocab)\n",
|
||||
"\n",
|
||||
"embedder = torch.nn.Embedding(num_embeddings = vocab_size, embedding_dim = 30)\n",
|
||||
"model = torch.nn.Sequential(\n",
|
||||
" embedder,\n",
|
||||
" torch.nn.Linear(in_features = 30, out_features = vocab_size),\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"print(model)"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "akKTcKQKkfl2",
|
||||
"outputId": "da687e3e-a8ec-4c1a-e456-ab8cd6ac7dad"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"Sequential(\n",
|
||||
" (0): Embedding(5002, 30)\n",
|
||||
" (1): Linear(in_features=30, out_features=5002, bias=True)\n",
|
||||
")\n"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "Nud6jgGPaHVa"
|
||||
},
|
||||
"source": [
|
||||
"## рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рддрдпрд╛рд░ рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдм рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд▓рд╛рдИ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЧрд░реМрдВ рдЬрд╕рд▓реЗ рдкрд╛рдардмрд╛рдЯ CBoW рд╢рдмреНрдж рдЬреЛрдбреАрд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░реНрдиреЗрдЫред рдпреЛ рдХрд╛рд░реНрдпрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╡рд┐рдиреНрдбреЛ рд╕рд╛рдЗрдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫ, рд░ рдЬреЛрдбреАрд╣рд░реВрдХреЛ рд╕реЗрдЯ - рдЗрдирдкреБрдЯ рд░ рдЖрдЙрдЯрдкреБрдЯ рд╢рдмреНрджрд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдиреЗрдЫред рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдпреЛ рдХрд╛рд░реНрдп рд╢рдмреНрджрд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рднреЗрдХреНрдЯрд░рд╣рд░реВ/рдЯреЗрдиреНрд╕рд░рд╣рд░реВрдорд╛ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ - рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╛рдард▓рд╛рдИ рдПрдиреНрдХреЛрдб рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫ, `to_cbow` рдХрд╛рд░реНрдпрдорд╛ рдкрдард╛рдЙрдиреБ рдЕрдШрд┐ред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "x-dsXygOieXn",
|
||||
"outputId": "c2218280-e540-40ba-9546-efe48d0d714f"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"[['like', 'I'], ['to', 'I'], ['I', 'like'], ['to', 'like'], ['train', 'like'], ['I', 'to'], ['like', 'to'], ['train', 'to'], ['networks', 'to'], ['like', 'train'], ['to', 'train'], ['networks', 'train'], ['to', 'networks'], ['train', 'networks']]\n",
|
||||
"[[232, 172], [5, 172], [172, 232], [5, 232], [0, 232], [172, 5], [232, 5], [0, 5], [1202, 5], [232, 0], [5, 0], [1202, 0], [5, 1202], [0, 1202]]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def to_cbow(sent,window_size=2):\n",
|
||||
" res = []\n",
|
||||
" for i,x in enumerate(sent):\n",
|
||||
" for j in range(max(0,i-window_size),min(i+window_size+1,len(sent))):\n",
|
||||
" if i!=j:\n",
|
||||
" res.append([sent[j],x])\n",
|
||||
" return res\n",
|
||||
"\n",
|
||||
"print(to_cbow(['I','like','to','train','networks']))\n",
|
||||
"print(to_cbow(encode('I like to train networks', vocab)))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "XVaaDLjaaHVb"
|
||||
},
|
||||
"source": [
|
||||
"рдЖрдЙрдиреБрд╣реЛрд╕реН рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рддрдпрд╛рд░ рдЧрд░реМрдВред рд╣рд╛рдореА рд╕рдмреИ рд╕рдорд╛рдЪрд╛рд░рд╣рд░реВ рд╣реЗрд░реНрдиреЗрдЫреМрдВ, `to_cbow` рдХрд▓ рдЧрд░реЗрд░ рд╢рдмреНрдж рдЬреЛрдбреАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рддреА рдЬреЛрдбреАрд╣рд░реВрд▓рд╛рдИ `X` рд░ `Y` рдорд╛ рдердкреНрдиреЗрдЫреМрдВред рд╕рдордп рдмрдЪрддрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдкрд╣рд┐рд▓реЛ резрежk рд╕рдорд╛рдЪрд╛рд░ рд╡рд╕реНрддреБрд╣рд░реВрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВ - рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкрд░реНрдЦрдирдХреЛ рд▓рд╛рдЧрд┐ рдердк рд╕рдордп рдЫ рд░ рд░рд╛рдореНрд░реЛ рдПрдореНрдмреЗрдбрд┐рдЩ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рддрдкрд╛рдИрдВ рд╕рдЬрд┐рд▓реИ рдпреЛ рд╕реАрдорд╛рд▓рд╛рдИ рд╣рдЯрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ :)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "54b-Gd9TieXo"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X = []\n",
|
||||
"Y = []\n",
|
||||
"for i, x in zip(range(10000), train_dataset):\n",
|
||||
" for w1, w2 in to_cbow(encode(x[1], vocab), window_size = 5):\n",
|
||||
" X.append(w1)\n",
|
||||
" Y.append(w2)\n",
|
||||
"\n",
|
||||
"X = torch.tensor(X)\n",
|
||||
"Y = torch.tensor(Y)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рддреНрдпреЛ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдкрдирд┐ рдПрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдбрд╛рдЯрд╛рд▓реЛрдбрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ:\n"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "cwWy0PzXWhN5"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"class SimpleIterableDataset(torch.utils.data.IterableDataset):\n",
|
||||
" def __init__(self, X, Y):\n",
|
||||
" super(SimpleIterableDataset).__init__()\n",
|
||||
" self.data = []\n",
|
||||
" for i in range(len(X)):\n",
|
||||
" self.data.append( (Y[i], X[i]) )\n",
|
||||
" random.shuffle(self.data)\n",
|
||||
"\n",
|
||||
" def __iter__(self):\n",
|
||||
" return iter(self.data)"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "mfoAcGPFZU8p"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "e4NQ_-5waHVc"
|
||||
},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рддреНрдпреЛ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдкрдирд┐ рдПрдХ рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдбрд╛рдЯрд╛рд▓реЛрдбрд░ рдмрдирд╛рдЙрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "AbLUcojlieXo"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"ds = SimpleIterableDataset(X, Y)\n",
|
||||
"dl = torch.utils.data.DataLoader(ds, batch_size = 256)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "pKQr7sXeaHVc"
|
||||
},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реМрдВред рд╣рд╛рдореА `SGD` рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬрд░ рдЙрдЪреНрдЪ рд▓рд░реНрдирд┐рдЩ рд░реЗрдЯрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рддрдкрд╛рдИрдВрд▓реЗ рдЕрдиреНрдп рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬрд░рд╣рд░реВ, рдЬрд╕реНрддреИ `Adam`, рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрдирд┐ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╕реБрд░реБрдорд╛ рд╣рд╛рдореА резреж рдЗрдкреЛрдХреНрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВ - рд░ рдпрджрд┐ рддрдкрд╛рдИрдВ рдЕрдЭ рдХрдо рд╣рд╛рдирд┐ рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдпреЛ рд╕реЗрд▓ рдкреБрди: рдЪрд▓рд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"def train_epoch(net, dataloader, lr = 0.01, optimizer = None, loss_fn = torch.nn.CrossEntropyLoss(), epochs = None, report_freq = 1):\n",
|
||||
" optimizer = optimizer or torch.optim.Adam(net.parameters(), lr = lr)\n",
|
||||
" loss_fn = loss_fn.to(device)\n",
|
||||
" net.train()\n",
|
||||
"\n",
|
||||
" for i in range(epochs):\n",
|
||||
" total_loss, j = 0, 0, \n",
|
||||
" for labels, features in dataloader:\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" features, labels = features.to(device), labels.to(device)\n",
|
||||
" out = net(features)\n",
|
||||
" loss = loss_fn(out, labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" total_loss += loss\n",
|
||||
" j += 1\n",
|
||||
" if i % report_freq == 0:\n",
|
||||
" print(f\"Epoch: {i+1}: loss={total_loss.item()/j}\")\n",
|
||||
"\n",
|
||||
" return total_loss.item()/j"
|
||||
],
|
||||
"metadata": {
|
||||
"id": "HeeCYKr_KF1w"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"source": [
|
||||
"train_epoch(net = model, dataloader = dl, optimizer = torch.optim.SGD(model.parameters(), lr = 0.1), loss_fn = torch.nn.CrossEntropyLoss(), epochs = 10)"
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "KVgwGtDHgDlT",
|
||||
"outputId": "2447833f-f0e3-4566-c33d-addbfe2f451d"
|
||||
},
|
||||
"execution_count": null,
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"Epoch: 1: loss=5.664632366860172\n",
|
||||
"Epoch: 2: loss=5.632101973960962\n",
|
||||
"Epoch: 3: loss=5.610399051405015\n",
|
||||
"Epoch: 4: loss=5.594621561080262\n",
|
||||
"Epoch: 5: loss=5.582538017415446\n",
|
||||
"Epoch: 6: loss=5.572900234519603\n",
|
||||
"Epoch: 7: loss=5.564951676341915\n",
|
||||
"Epoch: 8: loss=5.558288112064614\n",
|
||||
"Epoch: 9: loss=5.552576955031129\n",
|
||||
"Epoch: 10: loss=5.547634165194347\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"5.547634165194347"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 16
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "W8u2qXZmaHVd"
|
||||
},
|
||||
"source": [
|
||||
"## Word2Vec рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рд╣реЗрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"Word2Vec рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореНрд░реЛ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рд░рд╣реЗрдХрд╛ рд╕рдмреИ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рднреЗрдХреНрдЯрд░рд╣рд░реВ рдирд┐рдХрд╛рд▓реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"id": "r8TatcXjkU_t"
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vectors = torch.stack([embedder(torch.tensor(vocab[s])) for s in vocab.itos], 0)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "3OcX21UOaHVd"
|
||||
},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "bz6tAeLzieXp",
|
||||
"outputId": "5b20850e-4342-45e9-f840-cfac2b4d61d8"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"name": "stdout",
|
||||
"text": [
|
||||
"tensor([-0.0915, 2.1224, -0.0281, -0.6819, 1.1219, 0.6458, -1.3704, -1.3314,\n",
|
||||
" -1.1437, 0.4496, 0.2301, -0.3515, -0.8485, 1.0481, 0.4386, -0.8949,\n",
|
||||
" 0.5644, 1.0939, -2.5096, 3.2949, -0.2601, -0.8640, 0.1421, -0.0804,\n",
|
||||
" -0.5083, -1.0560, 0.9753, -0.5949, -1.6046, 0.5774],\n",
|
||||
" grad_fn=<EmbeddingBackward>)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"paris_vec = embedder(torch.tensor(vocab['paris']))\n",
|
||||
"print(paris_vec)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "pHTJlaeYaHVd"
|
||||
},
|
||||
"source": [
|
||||
"рдпреЛ Word2Vec рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╢рдмреНрджрд╣рд░реВ рдЦреЛрдЬреНрди рд░реЛрдЪрдХ рдЫред рддрд▓рдХреЛ рдХрд╛рд░реНрдпрд▓реЗ рджрд┐рдЗрдПрдХреЛ рдЗрдирдкреБрдЯрдХреЛ рд▓рд╛рдЧрд┐ `n` рдирдЬрд┐рдХрдХрд╛ рд╢рдмреНрджрд╣рд░реВ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗрдЫред рддрд┐рдиреАрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди, рд╣рд╛рдореА $|w_i - v|$ рдХреЛ рдорд╛рди рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВ, рдЬрд╣рд╛рдБ $v$ рд╣рд╛рдореНрд░реЛ рдЗрдирдкреБрдЯ рд╢рдмреНрджрд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рднреЗрдХреНрдЯрд░ рд╣реЛ, рд░ $w_i$ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рд░рд╣реЗрдХреЛ $i$-рдФрдВ рд╢рдмреНрджрдХреЛ рдЗрдирдХреЛрдбрд┐рдЩ рд╣реЛред рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдПрд░реЗрд▓рд╛рдИ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдЫреМрдВ рд░ `argsort` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдореНрдмрдиреНрдзрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХрд╣рд░реВ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдЫреМрдВ, рд░ рд╕реВрдЪреАрдХрд╛ рдкрд╣рд┐рд▓реЛ `n` рддрддреНрд╡рд╣рд░реВ рд▓рд┐рдиреНрдЫреМрдВ, рдЬрд╕рд▓реЗ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдирдЬрд┐рдХрдХрд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕реНрдерд╛рдирд▓рд╛рдИ рдЗрдирдХреЛрдб рдЧрд░реНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "NlZyi-_olFar",
|
||||
"outputId": "b5dbb163-88c4-4d5a-eaf2-6751f700e98c"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['microsoft', 'quoted', 'lp', 'rate', 'top']"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 56
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def close_words(x, n = 5):\n",
|
||||
" vec = embedder(torch.tensor(vocab[x]))\n",
|
||||
" top5 = np.linalg.norm(vectors.detach().numpy() - vec.detach().numpy(), axis = 1).argsort()[:n]\n",
|
||||
" return [ vocab.itos[x] for x in top5 ]\n",
|
||||
"\n",
|
||||
"close_words('microsoft')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "-dQq7xeAln0U",
|
||||
"outputId": "66f768c3-c248-4bfd-ce4f-c8ffc6d0dd0d"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['basketball', 'lot', 'sinai', 'states', 'healthdaynews']"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 51
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"close_words('basketball')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"base_uri": "https://localhost:8080/"
|
||||
},
|
||||
"id": "fJXqK26b29sa",
|
||||
"outputId": "78f0baba-ffd0-485a-dd87-0a12bedfd7fa"
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "execute_result",
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"['funds', 'travel', 'sydney', 'japan', 'business']"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"execution_count": 77
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"close_words('funds')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"id": "My0VeTDd3Ji8"
|
||||
},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдХреБрд░рд╛\n",
|
||||
"\n",
|
||||
"CBoW рдЬрд╕реНрддрд╛ рдЪрддреБрд░ рддрд░рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА Word2Vec рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рддрдкрд╛рдИрдВрд▓реЗ skip-gram рдореЛрдбреЗрд▓ рдкрдирд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдХреЗрдиреНрджреНрд░рд┐рдп рд╢рдмреНрдж рджрд┐рдЗрдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЫреЗрдЙрдЫрд╛рдЙрдХрд╛ рд╢рдмреНрджрд╣рд░реВ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рд┐рдХреНрдЫ, рд░ рдпрд╕рд▓реЗ рдХрддреНрддрд┐рдХреЛ рд░рд╛рдореНрд░реЛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдЫ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"colab": {
|
||||
"collapsed_sections": [],
|
||||
"name": "CBoW-PyTorch.ipynb",
|
||||
"provenance": []
|
||||
},
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"gpuClass": "standard",
|
||||
"coopTranslator": {
|
||||
"original_hash": "36df28efe3fe40b6fb0a7fa48fe3ea82",
|
||||
"translation_date": "2025-08-28T09:18:51+00:00",
|
||||
"source_file": "lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,479 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдЕрдШрд┐рд▓реНрд▓реЛ рдореЛрдбреНрдпреБрд▓рдорд╛, рд╣рд╛рдореАрд▓реЗ рдкрд╛рдардХреЛ рдзрдиреА рдЕрд░реНрдердкреВрд░реНрдг рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВ, рд░ рдЗрдореНрдмреЗрдбрд┐рдЩреНрд╕рдХреЛ рдорд╛рдерд┐ рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рд░реЗрдЦреАрдп рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВред рдпреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓реЗ рд╡рд╛рдХреНрдпрдорд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕рдордЧреНрд░ рдЕрд░реНрдерд▓рд╛рдИ рд╕рдореЗрдЯреНрдЫ, рддрд░ рдпрд╕рд▓реЗ рд╢рдмреНрджрд╣рд░реВрдХреЛ **рдХреНрд░рдо**рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИрди, рдХрд┐рдирднрдиреЗ рдЗрдореНрдмреЗрдбрд┐рдЩреНрд╕рдХреЛ рдорд╛рдерд┐ рдЧрд░рд┐рдПрдХреЛ рд╕рдордЧреНрд░ рдЕрдкрд░реЗрд╢рдирд▓реЗ рдореВрд▓ рдкрд╛рдардмрд╛рдЯ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рд╣рдЯрд╛рдЗрджрд┐рдиреНрдЫред рдпреА рдореЛрдбреЗрд▓рд╣рд░реВрд▓реЗ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдХреНрд░рдорд▓рд╛рдИ рдореЛрдбреЗрд▓ рдЧрд░реНрди рдирд╕рдХреНрдиреЗ рднрдПрдХрд╛рд▓реЗ, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкрд╛рда рдЙрддреНрдкрд╛рджрди (text generation) рд╡рд╛ рдкреНрд░рд╢реНрди рдЙрддреНрддрд░рдЬрд╕реНрддрд╛ рдЬрдЯрд┐рд▓ рд╡рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХреНрджреИрдирдиреНред\n",
|
||||
"\n",
|
||||
"рдкрд╛рда рдЕрдиреБрдХреНрд░рдордХреЛ рдЕрд░реНрде рд╕рдореЗрдЯреНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдЕрд░реНрдХреЛ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдЬрд╕рд▓рд╛рдИ **рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ** (recurrent neural network) рд╡рд╛ RNN рднрдирд┐рдиреНрдЫред RNN рдорд╛, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рд╡рд╛рдХреНрдпрд▓рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдПрдХ рдкрдЯрдХрдорд╛ рдПрдЙрдЯрд╛ рдкреНрд░рддреАрдХ (symbol) рдорд╛рд░реНрдлрдд рдкрдард╛рдЙрдБрдЫреМрдВ, рд░ рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдХреЗрд╣реА **рд╕реНрдерд┐рддрд┐** (state) рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫ, рдЬрд╕рд▓рд╛рдИ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдкреНрд░рддреАрдХрд╕рдБрдЧ рдлреЗрд░рд┐ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкрдард╛рдЙрдБрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рджрд┐рдЗрдПрдХреЛ рдЯреЛрдХрдирд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо $X_0,\\dots,X_n$ рдХреЛ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛, RNN рд▓реЗ рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХрд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫ, рд░ рдпреЛ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рдЕрдиреНрддреНрдпрд╕рдореНрдо рдмреНрдпрд╛рдХ рдкреНрд░реЛрдкреЛрдЧреЗрд╕рди (back propagation) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдиреНрдЫред рдкреНрд░рддреНрдпреЗрдХ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХрд▓реЗ $(X_i,S_i)$ рдХреЛ рдЬреЛрдбреАрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк $S_{i+1}$ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рдЕрдиреНрддрд┐рдо рд╕реНрдерд┐рддрд┐ $S_n$ рд╡рд╛ рдЖрдЙрдЯрдкреБрдЯ $X_n$ рд▓рд╛рдИ рд░реЗрдЦреАрдп рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛рдорд╛ рдкрдард╛рдЗрдиреНрдЫ, рдЬрд╕рд▓реЗ рдирддрд┐рдЬрд╛ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рд╕рдмреИ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХрд╣рд░реВрд▓реЗ рдПрдЙрдЯреИ рддреМрд▓ (weights) рд╕рд╛рдЭрд╛ рдЧрд░реНрдЫрдиреН, рд░ рдПрдХ рдкрдЯрдХрдХреЛ рдмреНрдпрд╛рдХ рдкреНрд░реЛрдкреЛрдЧреЗрд╕рди рдкрд╛рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреНрддреНрдпрд╕рдореНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░рд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рд╕реНрдерд┐рддрд┐ рднреЗрдХреНрдЯрд░рд╣рд░реВ $S_0,\\dots,S_n$ рдиреЗрдЯрд╡рд░реНрдХрдорд╛рд░реНрдлрдд рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫрдиреН, рдпрд╕рд▓реЗ рд╢рдмреНрджрд╣рд░реВ рдмреАрдЪрдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рд╕рд┐рдХреНрди рд╕рдХреНрд╖рдо рд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЬрдм *not* рд╢рдмреНрдж рдХрддреИ рдЕрдиреБрдХреНрд░рдордорд╛ рджреЗрдЦрд╛ рдкрд░реНрдЫ, рдпрд╕рд▓реЗ рд╕реНрдерд┐рддрд┐ рднреЗрдХреНрдЯрд░рднрд┐рддреНрд░рдХрд╛ рдХреЗрд╣реА рддрддреНрд╡рд╣рд░реВрд▓рд╛рдИ рдирдХрд╛рд░реНрди (negate) рд╕рд┐рдХреНрди рд╕рдХреНрдЫ, рдЬрд╕рд▓реЗ рдирдХрд╛рд░рд╛рддреНрдордХрддрд╛ (negation) рдЙрддреНрдкрдиреНрди рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"> рдЪрд┐рддреНрд░рдорд╛ рджреЗрдЦрд╛рдЗрдПрдХрд╛ рд╕рдмреИ RNN рдмреНрд▓рдХрд╣рд░реВрдХреЛ рддреМрд▓ рд╕рд╛рдЭрд╛ рдЧрд░рд┐рдПрдХреЛрд▓реЗ, рдПрдЙрдЯреИ рдЪрд┐рддреНрд░рд▓рд╛рдИ рдПрдЙрдЯрд╛ рдмреНрд▓рдХ (рджрд╛рдпрд╛рдБрддрд░реНрдл) рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рдорд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд┐рдбрдмреНрдпрд╛рдХ рд▓реВрдк (recurrent feedback loop) рд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддрд┐рд▓рд╛рдИ рдЗрдирдкреБрдЯрдорд╛ рдлрд┐рд░реНрддрд╛ рдкрдард╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣реЗрд░реМрдВ, рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрд▓реЗ рд╣рд╛рдореНрд░реЛ рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реНрди рдХрд╕рд░реА рдорджреНрджрдд рдЧрд░реНрди рд╕рдХреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_size = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рд╛рдзрд╛рд░рдг RNN рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛\n",
|
||||
"\n",
|
||||
"рд╕рд╛рдзрд╛рд░рдг RNN рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЗрдХрд╛рдИ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реЗрдЦреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╣реЛ, рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯ рднреЗрдХреНрдЯрд░ рд░ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рд▓рд╛рдИ рдЬреЛрдбреЗрд░ рд▓рд┐рдиреНрдЫ, рд░ рдирдпрд╛рдБ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред PyTorch рд▓реЗ рдпрд╕ рдЗрдХрд╛рдИрд▓рд╛рдИ `RNNCell` рд╡рд░реНрдЧрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫ, рд░ рдпрд╕реНрддрд╛ рдХреЛрд╖рд╣рд░реВрдХреЛ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ `RNN` рддрд╣рдХреЛ рд░реВрдкрдорд╛ред\n",
|
||||
"\n",
|
||||
"RNN рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдкрд╣рд┐рд▓реЗ рдЗрдирдкреБрдЯ рд╢рдмреНрджрд╛рд╡рд▓реАрдХреЛ рдЖрдпрд╛рдо рдШрдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ embedding рддрд╣ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рдХреЛ рдорд╛рдерд┐ RNN рддрд╣ рд░рд╛рдЦреНрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class RNNClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.rnn = torch.nn.RNN(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,h = self.rnn(x)\n",
|
||||
" return self.fc(x.mean(dim=1))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **Note:** рдпрд╣рд╛рдБ рд╣рд╛рдореА рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдирдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ, рддрд░ рдЕрдЭ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░ рдЬрд╕реНрддреИ Word2Vec рд╡рд╛ GloVe рдПрдореНрдмреЗрдбрд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕рдХреЛ рд╡рд░реНрдгрди рдЕрдШрд┐рд▓реНрд▓реЛ рдпреБрдирд┐рдЯрдорд╛ рдЧрд░рд┐рдПрдХреЛ рдЫред рд░рд╛рдореНрд░реЛ рдмреБрдЭрд╛рдЗрдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдХреЛрдбрд▓рд╛рдИ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдЙрди рдЪрд╛рд╣рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛, рд╣рд╛рдореА рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛ рд▓реЛрдбрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдкреНрд░рддреНрдпреЗрдХ рдмреНрдпрд╛рдЪрдорд╛ рд╕рдорд╛рди рд▓рдореНрдмрд╛рдЗрдХреЛ рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╣реБрдиреЗрдЫред RNN рд▓реЗрдпрд░рд▓реЗ рдПрдореНрдмреЗрдбрд┐рдЩ рдЯреЗрдиреНрд╕рд░рд╣рд░реВрдХреЛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕ рд▓рд┐рдиреНрдЫ, рд░ рджреБрдИ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫ:\n",
|
||||
"* $x$ рднрдиреЗрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдорд╛ RNN рд╕реЗрд▓рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВрдХреЛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕ рд╣реЛ\n",
|
||||
"* $h$ рднрдиреЗрдХреЛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рдХреЛ рдЕрдиреНрддрд┐рдо рддрддреНрд╡рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреНрддрд┐рдо рд╣рд┐рдбрди рд╕реНрдЯреЗрдЯ рд╣реЛ\n",
|
||||
"\n",
|
||||
"рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдЬрдбрд┐рдд рд▓реАрдирд┐рдпрд░ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рд▓рд╛рдЧреВ рдЧрд░реНрдЫреМрдВ рддрд╛рдХрд┐ рд╡рд░реНрдЧрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реНред\n",
|
||||
"\n",
|
||||
"> **Note:** RNN рд╣рд░реВрд▓рд╛рдИ рдЯреНрд░реЗрди рдЧрд░реНрди рдирд┐рдХреИ рдЧрд╛рд╣реНрд░реЛ рд╣реБрдиреНрдЫ, рдХрд┐рдирднрдиреЗ RNN рд╕реЗрд▓рд╣рд░реВ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рдХреЛ рд▓рдореНрдмрд╛рдЗрдорд╛ рдЕрдиреНрд░реЛрд▓ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рдмреНрдпрд╛рдХ рдкреНрд░реЛрдкреЛрдЧреЗрд╕рдирдорд╛ рд╕рдВрд▓рдЧреНрди рд▓реЗрдпрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдирд┐рдХреИ рдареВрд▓реЛ рд╣реБрдиреНрдЫред рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╕рд╛рдиреЛ рд▓рд░реНрдирд┐рдЩ рд░реЗрдЯ рдЪрдпрди рдЧрд░реНрдиреБрдкрд░реНрдЫ, рд░ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рдареВрд▓реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ рдЯреНрд░реЗрди рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпрд╕рд▓реЗ рдзреЗрд░реИ рд╕рдордп рд▓рд┐рди рд╕рдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ GPU рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.3090625\n",
|
||||
"6400: acc=0.38921875\n",
|
||||
"9600: acc=0.4590625\n",
|
||||
"12800: acc=0.511953125\n",
|
||||
"16000: acc=0.5506875\n",
|
||||
"19200: acc=0.57921875\n",
|
||||
"22400: acc=0.6070089285714285\n",
|
||||
"25600: acc=0.6304296875\n",
|
||||
"28800: acc=0.6484027777777778\n",
|
||||
"32000: acc=0.66509375\n",
|
||||
"35200: acc=0.6790056818181818\n",
|
||||
"38400: acc=0.6929166666666666\n",
|
||||
"41600: acc=0.7035817307692308\n",
|
||||
"44800: acc=0.7137276785714286\n",
|
||||
"48000: acc=0.72225\n",
|
||||
"51200: acc=0.73001953125\n",
|
||||
"54400: acc=0.7372794117647059\n",
|
||||
"57600: acc=0.7436631944444444\n",
|
||||
"60800: acc=0.7503947368421052\n",
|
||||
"64000: acc=0.75634375\n",
|
||||
"67200: acc=0.7615773809523809\n",
|
||||
"70400: acc=0.7662642045454545\n",
|
||||
"73600: acc=0.7708423913043478\n",
|
||||
"76800: acc=0.7751822916666666\n",
|
||||
"80000: acc=0.7790625\n",
|
||||
"83200: acc=0.7825\n",
|
||||
"86400: acc=0.7858564814814815\n",
|
||||
"89600: acc=0.7890513392857142\n",
|
||||
"92800: acc=0.7920474137931034\n",
|
||||
"96000: acc=0.7952708333333334\n",
|
||||
"99200: acc=0.7982258064516129\n",
|
||||
"102400: acc=0.80099609375\n",
|
||||
"105600: acc=0.8037594696969697\n",
|
||||
"108800: acc=0.8060569852941176\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=padify, shuffle=True)\n",
|
||||
"net = RNNClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд▓рд╛рдореЛ рдЫреЛрдЯреЛ рд╕рдордп рд╕реНрдореГрддрд┐ (LSTM)\n",
|
||||
"\n",
|
||||
"рдкрд░рдореНрдкрд░рд╛рдЧрдд RNN рдХреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХрд▓рд╛рдИ **vanishing gradients** рд╕рдорд╕реНрдпрд╛ рднрдирд┐рдиреНрдЫред рдХрд┐рдирднрдиреЗ RNN рд╣рд░реВ рдПрдХреИ рдкрдЯрдХрдХреЛ рдмреНрдпрд╛рдХ-рдкреНрд░реЛрдкрд╛рдЧреЗрд╕рди рдкрд╛рд╕рдорд╛ рдЕрдиреНрдд-рджреЗрдЦрд┐-рдЕрдиреНрддрд╕рдореНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЧрд░рд┐рдиреНрдЫрдиреН, рдпрд╕рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдкрд╣рд┐рд▓реЛ рддрд╣рд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рдлреИрд▓рд╛рдЙрди рдХрдард┐рдирд╛рдЗ рдЕрдиреБрднрд╡ рдЧрд░реНрдЫ, рдЬрд╕рдХрд╛ рдХрд╛рд░рдг рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдЯрд╛рдврд╛ рдЯреЛрдХрдирд╣рд░реВ рдмреАрдЪрдХреЛ рд╕рдореНрдмрдиреНрдз рд╕рд┐рдХреНрди рд╕рдХреНрджреИрдиред рдпрд╕ рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ **рд╕реНрдкрд╖реНрдЯ рдЕрд╡рд╕реНрдерд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди**рдХреЛ рдкрд░рд┐рдЪрдп рдЧрд░рд╛рдЙрдиреЗ рдПрдЙрдЯрд╛ рддрд░рд┐рдХрд╛ рднрдиреЗрдХреЛ **рдЧреЗрдЯрд╣рд░реВ** рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛред рдпрд╕ рдкреНрд░рдХрд╛рд░рдХрд╛ рджреБрдИ рд╕рдмреИрднрдиреНрджрд╛ рдкреНрд░рдЦреНрдпрд╛рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВ рд╣реБрдиреН: **рд▓рд╛рдореЛ рдЫреЛрдЯреЛ рд╕рдордп рд╕реНрдореГрддрд┐** (LSTM) рд░ **рдЧреЗрдЯреЗрдб рд░рд┐рд▓реЗрдХреЛ рдЗрдХрд╛рдИ** (GRU)ред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM рдиреЗрдЯрд╡рд░реНрдХ RNN рдЬрд╕реНрддреИ рд╕рдВрд░рдЪрд┐рдд рдЫ, рддрд░ рдпрд╣рд╛рдБ рджреБрдИ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рдЫрдиреН рдЬреБрди рддрд╣рджреЗрдЦрд┐ рддрд╣рд╕рдореНрдо рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫ: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд╡рд╕реНрдерд╛ $c$, рд░ рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░ $h$ред рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИрдорд╛, рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░ $h_i$ рдЗрдирдкреБрдЯ $x_i$рд╕рдБрдЧ рдЬреЛрдбрд┐рдиреНрдЫ, рд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ **рдЧреЗрдЯрд╣рд░реВ** рдорд╛рд░реНрдлрдд рдЕрд╡рд╕реНрдерд╛ $c$рдорд╛ рдХреЗ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдЫрдиреНред рдкреНрд░рддреНрдпреЗрдХ рдЧреЗрдЯ рдПрдХ рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рд╣реЛ рдЬрд╕рдорд╛ рд╕рд┐рдЧреНрдореЛрдЗрдб рд╕рдХреНрд░рд┐рдпрддрд╛ рд╣реБрдиреНрдЫ (рдЖрдЙрдЯрдкреБрдЯ $[0,1]$рдХреЛ рджрд╛рдпрд░рд╛рдорд╛), рдЬрд╕рд▓рд╛рдИ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рд╕рдБрдЧ рдЧреБрдгрд╛ рдЧрд░реНрджрд╛ рдмрд┐рдЯрд╡рд╛рдЗрдЬ рдорд╛рд╕реНрдХрдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫред рдорд╛рдерд┐рдХреЛ рдЪрд┐рддреНрд░рдорд╛ (рдмрд╛рдпрд╛рдБрджреЗрдЦрд┐ рджрд╛рдпрд╛рдБ) рдирд┐рдореНрди рдЧреЗрдЯрд╣рд░реВ рдЫрдиреН:\n",
|
||||
"* **рднреБрд▓реНрдиреЗ рдЧреЗрдЯ** рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░ рд▓рд┐рдиреНрдЫ рд░ рднреЗрдХреНрдЯрд░ $c$рдХрд╛ рдХреБрди-рдХреБрди рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рднреБрд▓реНрдиреБрдкрд░реНрдЫ рд░ рдХреБрди-рдХреБрди рдкрд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫ рднрдиреНрдиреЗ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдЫред \n",
|
||||
"* **рдЗрдирдкреБрдЯ рдЧреЗрдЯ** рдЗрдирдкреБрдЯ рд░ рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░рдмрд╛рдЯ рдХреЗрд╣реА рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдиреНрдЫ, рд░ рдпрд╕рд▓рд╛рдИ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдЫред\n",
|
||||
"* **рдЖрдЙрдЯрдкреБрдЯ рдЧреЗрдЯ** рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рдХреЗрд╣реА рд░реЗрдЦреАрдп рддрд╣ рдорд╛рд░реНрдлрдд $\\tanh$ рд╕рдХреНрд░рд┐рдпрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░ $h_i$ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рдХреЛ рдХреЗрд╣реА рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдЪрдпрди рдЧрд░реНрдЫ рддрд╛рдХрд┐ рдирдпрд╛рдБ рдЕрд╡рд╕реНрдерд╛ $c_{i+1}$ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реНред\n",
|
||||
"\n",
|
||||
"рдЕрд╡рд╕реНрдерд╛ $c$рдХрд╛ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВрд▓рд╛рдИ рдХреЗрд╣реА рдЭрдгреНрдбрд╛рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓рд╛рдИ рдЕрди рд░ рдЕрдл рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЬрдм рд╣рд╛рдореА рдЕрдиреБрдХреНрд░рдордорд╛ *Alice* рдирд╛рдо рднреЗрдЯреНрдЫреМрдВ, рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдорд╣рд┐рд▓рд╛ рдкрд╛рддреНрд░рд▓рд╛рдИ рдЬрдирд╛рдЙрдБрдЫ рднрдиреНрдиреЗ рдорд╛рдиреНрди рд╕рдХреНрдЫреМрдВ, рд░ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЭрдгреНрдбрд╛ рдЙрдард╛рдЙрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рд╡рд╛рдХреНрдпрдорд╛ рдорд╣рд┐рд▓рд╛ рд╕рдВрдЬреНрдЮрд╛ рдЫред рдЬрдм рд╣рд╛рдореА рдердк *and Tom* рд╡рд╛рдХреНрдпрд╛рдВрд╢ рднреЗрдЯреНрдЫреМрдВ, рд╣рд╛рдореАрд▓реЗ рдмрд╣реБрд╡рдЪрди рд╕рдВрдЬреНрдЮрд╛ рднрдПрдХреЛ рдЭрдгреНрдбрд╛ рдЙрдард╛рдЙрдБрдЫреМрдВред рдпрд╕рд░реА рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рд╣реЗрд░рдлреЗрд░ рдЧрд░реЗрд░ рд╣рд╛рдореАрд▓реЗ рд╡рд╛рдХреНрдпрдХрд╛ рднрд╛рдЧрд╣рд░реВрдХреЛ рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рдЧреБрдгрд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рд╕рдХреНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"> **Note**: LSTM рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдмреБрдЭреНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрд░реЛрдд рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдУрд▓рд╛рд╣рджреНрд╡рд╛рд░рд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдпреЛ рдЙрддреНрдХреГрд╖реНрдЯ рд▓реЗрдЦ [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) рд╣реЛред\n",
|
||||
"\n",
|
||||
"рдпрджреНрдпрдкрд┐ LSTM рд╕реЗрд▓рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдЬрдЯрд┐рд▓ рджреЗрдЦрд┐рдиреНрдЫ, PyTorch рд▓реЗ рдпрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ `LSTMCell` рд╡рд░реНрдЧрднрд┐рддреНрд░ рд▓реБрдХрд╛рдЙрдБрдЫ, рд░ рд╕рдореНрдкреВрд░реНрдг LSTM рддрд╣рд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди `LSTM` рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдЧрд░реНрдЫред рддреНрдпрд╕реИрд▓реЗ, LSTM рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдерд┐ рджреЗрдЦрд┐рдПрдХреЛ рд╕рд╛рдзрд╛рд░рдг RNN рдЬрд╕реНрддреИ рд╣реБрдиреЗрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" x,(h,c) = self.rnn(x)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.259375\n",
|
||||
"6400: acc=0.25859375\n",
|
||||
"9600: acc=0.26177083333333334\n",
|
||||
"12800: acc=0.2784375\n",
|
||||
"16000: acc=0.313\n",
|
||||
"19200: acc=0.3528645833333333\n",
|
||||
"22400: acc=0.3965625\n",
|
||||
"25600: acc=0.4385546875\n",
|
||||
"28800: acc=0.4752777777777778\n",
|
||||
"32000: acc=0.505375\n",
|
||||
"35200: acc=0.5326704545454546\n",
|
||||
"38400: acc=0.5557552083333334\n",
|
||||
"41600: acc=0.5760817307692307\n",
|
||||
"44800: acc=0.5954910714285714\n",
|
||||
"48000: acc=0.6118333333333333\n",
|
||||
"51200: acc=0.62681640625\n",
|
||||
"54400: acc=0.6404779411764706\n",
|
||||
"57600: acc=0.6520138888888889\n",
|
||||
"60800: acc=0.662828947368421\n",
|
||||
"64000: acc=0.673546875\n",
|
||||
"67200: acc=0.6831547619047619\n",
|
||||
"70400: acc=0.6917897727272727\n",
|
||||
"73600: acc=0.6997146739130434\n",
|
||||
"76800: acc=0.707109375\n",
|
||||
"80000: acc=0.714075\n",
|
||||
"83200: acc=0.7209134615384616\n",
|
||||
"86400: acc=0.727037037037037\n",
|
||||
"89600: acc=0.7326674107142858\n",
|
||||
"92800: acc=0.7379633620689655\n",
|
||||
"96000: acc=0.7433645833333333\n",
|
||||
"99200: acc=0.7479032258064516\n",
|
||||
"102400: acc=0.752119140625\n",
|
||||
"105600: acc=0.7562405303030303\n",
|
||||
"108800: acc=0.76015625\n",
|
||||
"112000: acc=0.7641339285714286\n",
|
||||
"115200: acc=0.7677777777777778\n",
|
||||
"118400: acc=0.7711233108108108\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.03487814127604167, 0.7728)"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch(net,train_loader, lr=0.001)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдорд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдХрд╛ рд╕рдмреИ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд▓рд╛рдИ рд╢реВрдиреНрдп рднреЗрдХреНрдЯрд░рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрдпрд╛рдб рдЧрд░реНрдиреБрдкрд░реЗрдХреЛ рдерд┐рдпреЛред рдпрд╕рд▓реЗ рдХреЗрд╣реА рдореЗрдореЛрд░реАрдХреЛ рдЦрдкрдд рдЧрд░рд╛рдЙрдБрдЫ, рддрд░ RNNs рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛, рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдЗрдирдкреБрдЯ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдердк RNN рд╕реЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рдЕрдЭ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдорд╛ рднрд╛рдЧ рд▓рд┐рдиреНрдЫрдиреН рддрд░ рдХреБрдиреИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЗрдирдкреБрдЯ рдЬрд╛рдирдХрд╛рд░реА рдмреЛрдХреЗрдХрд╛ рд╣реБрдБрджреИрдирдиреНред рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдХреНрд░рдо рдЖрдХрд╛рд░рдорд╛ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБ рдзреЗрд░реИ рд░рд╛рдореНрд░реЛ рд╣реБрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╕рд▓рд╛рдИ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, PyTorch рдорд╛ рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдо рднрдгреНрдбрд╛рд░рдгрдХреЛ рд╡рд┐рд╢реЗрд╖ рдврд╛рдБрдЪрд╛ рдкреНрд░рд╕реНрддреБрдд рдЧрд░рд┐рдПрдХреЛ рдЫред рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ рдЗрдирдкреБрдЯ рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рдЫ, рдЬреБрди рдпрд╕ рдкреНрд░рдХрд╛рд░ рджреЗрдЦрд┐рдиреНрдЫ:\n",
|
||||
"```\n",
|
||||
"[[1,2,3,4,5],\n",
|
||||
" [6,7,8,0,0],\n",
|
||||
" [9,0,0,0,0]]\n",
|
||||
"```\n",
|
||||
"рдпрд╣рд╛рдБ 0 рд▓реЗ рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдорд╛рдирд╣рд░реВрд▓рд╛рдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫ, рд░ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рдореНрдмрд╛рдЗ рднреЗрдХреНрдЯрд░ `[5,3,1]` рд╣реЛред\n",
|
||||
"\n",
|
||||
"рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдордХреЛ рд╕рд╛рде рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд░реВрдкрдорд╛ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЛ рд╕рдореВрд╣рдХреЛ RNN рд╕реЗрд▓рд╣рд░реВ рдареВрд▓реЛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪ (`[1,6,9]`) рдмрд╛рдЯ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реБ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рддрд░ рддреНрдпрд╕рдкрдЫрд┐ рддреЗрд╕реНрд░реЛ рдЕрдиреБрдХреНрд░рдордХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдЫ, рд░ рдЫреЛрдЯреЛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВ (`[2,7]`, `[3,8]`) рдХреЛ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреБрдкрд░реНрдЫред рдпрд╕рд░реА, рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рдПрдХ рднреЗрдХреНрдЯрд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░рд┐рдиреНрдЫ - рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛ `[1,6,9,2,7,3,8,4,5]`, рд░ рд▓рдореНрдмрд╛рдЗ рднреЗрдХреНрдЯрд░ (`[5,3,1]`), рдЬрд╕рдмрд╛рдЯ рд╣рд╛рдореА рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдореВрд▓ рдкреНрдпрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди, рд╣рд╛рдореА `torch.nn.utils.rnn.pack_padded_sequence` рдлрдЩреНрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рд╕рдмреИ рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд╣рд╣рд░реВ, рдЬрд╕реНрддреИ RNN, LSTM рд░ GRU, рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдЫрдиреН, рд░ рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫрдиреН, рдЬрд╕рд▓рд╛рдИ `torch.nn.utils.rnn.pad_packed_sequence` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбрд┐рдХреЛрдб рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рд▓рдореНрдмрд╛рдЗ рднреЗрдХреНрдЯрд░ рдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд░ рддреНрдпрд╕реИрд▓реЗ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВ рддрдпрд╛рд░ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдлрд░рдХ рдлрдЩреНрд╕рди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_length(b):\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch and length sequence itself\n",
|
||||
" len_seq = list(map(len,v))\n",
|
||||
" l = max(len_seq)\n",
|
||||
" return ( # tuple of three tensors - labels, padded features, length sequence\n",
|
||||
" torch.LongTensor([t[0]-1 for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v]),\n",
|
||||
" torch.tensor(len_seq)\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader_len = torch.utils.data.DataLoader(train_dataset, batch_size=16, collate_fn=pad_length, shuffle=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ `LSTMClassifier` рдЬрд╕реНрддреИ рд╣реБрдиреЗрдЫ, рддрд░ `forward` рдкрд╛рд╕рд▓реЗ рдкрд╛рдб рдЧрд░рд┐рдПрдХреЛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рд░ рдЕрдиреБрдХреНрд░рдо рд▓рдореНрдмрд╛рдЗрд╣рд░реВрдХреЛ рднреЗрдХреНрдЯрд░ рджреБрд╡реИ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫред рдПрдореНрдмреЗрдбрд┐рдЩ рдЧрдгрдирд╛ рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореА рдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдо рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВ, рдпрд╕рд▓рд╛рдИ LSTM рддрд╣рдорд╛ рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдкрд░рд┐рдгрд╛рдорд▓рд╛рдИ рдлреЗрд░реА рдЕрдирдкреНрдпрд╛рдХ рдЧрд░реНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note**: рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЕрдирдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдкрд░рд┐рдгрд╛рдо `x` рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИрдиреМрдВ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рдкрдЫрд┐рд▓реНрд▓реЛ рдЧрдгрдирд╛рд╣рд░реВрдорд╛ рд▓реБрдХреЗрдХреЛ рддрд╣рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рддреНрдпрд╕реИрд▓реЗ, рд╣рд╛рдореА рдпрд╕ рдХреЛрдбрдмрд╛рдЯ рдЕрдирдкреНрдпрд╛рдХрд┐рдЩ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╣рдЯрд╛рдЙрди рд╕рдХреНрдЫреМрдВред рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдпрд╣рд╛рдБ рд░рд╛рдЦреНрдиреЗ рдХрд╛рд░рдг рднрдиреЗрдХреЛ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдХреЛрдб рд╕рдЬрд┐рд▓реИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рд╕рдХреНрд╖рдо рдмрдирд╛рдЙрдиреБ рд╣реЛ, рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛рдИ рдердк рдЧрдгрдирд╛рд╣рд░реВрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реЗред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMPackClassifier(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, embed_dim, hidden_dim, num_class):\n",
|
||||
" super().__init__()\n",
|
||||
" self.hidden_dim = hidden_dim\n",
|
||||
" self.embedding = torch.nn.Embedding(vocab_size, embed_dim)\n",
|
||||
" self.embedding.weight.data = torch.randn_like(self.embedding.weight.data)-0.5\n",
|
||||
" self.rnn = torch.nn.LSTM(embed_dim,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, num_class)\n",
|
||||
"\n",
|
||||
" def forward(self, x, lengths):\n",
|
||||
" batch_size = x.size(0)\n",
|
||||
" x = self.embedding(x)\n",
|
||||
" pad_x = torch.nn.utils.rnn.pack_padded_sequence(x,lengths,batch_first=True,enforce_sorted=False)\n",
|
||||
" pad_x,(h,c) = self.rnn(pad_x)\n",
|
||||
" x, _ = torch.nn.utils.rnn.pad_packed_sequence(pad_x,batch_first=True)\n",
|
||||
" return self.fc(h[-1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3200: acc=0.285625\n",
|
||||
"6400: acc=0.33359375\n",
|
||||
"9600: acc=0.3876041666666667\n",
|
||||
"12800: acc=0.44078125\n",
|
||||
"16000: acc=0.4825\n",
|
||||
"19200: acc=0.5235416666666667\n",
|
||||
"22400: acc=0.5559821428571429\n",
|
||||
"25600: acc=0.58609375\n",
|
||||
"28800: acc=0.6116666666666667\n",
|
||||
"32000: acc=0.63340625\n",
|
||||
"35200: acc=0.6525284090909091\n",
|
||||
"38400: acc=0.668515625\n",
|
||||
"41600: acc=0.6822596153846154\n",
|
||||
"44800: acc=0.6948214285714286\n",
|
||||
"48000: acc=0.7052708333333333\n",
|
||||
"51200: acc=0.71521484375\n",
|
||||
"54400: acc=0.7239889705882353\n",
|
||||
"57600: acc=0.7315277777777778\n",
|
||||
"60800: acc=0.7388486842105263\n",
|
||||
"64000: acc=0.74571875\n",
|
||||
"67200: acc=0.7518303571428572\n",
|
||||
"70400: acc=0.7576988636363636\n",
|
||||
"73600: acc=0.7628940217391305\n",
|
||||
"76800: acc=0.7681510416666667\n",
|
||||
"80000: acc=0.7728125\n",
|
||||
"83200: acc=0.7772235576923077\n",
|
||||
"86400: acc=0.7815393518518519\n",
|
||||
"89600: acc=0.7857700892857142\n",
|
||||
"92800: acc=0.7895043103448276\n",
|
||||
"96000: acc=0.7930520833333333\n",
|
||||
"99200: acc=0.7959072580645161\n",
|
||||
"102400: acc=0.798994140625\n",
|
||||
"105600: acc=0.802064393939394\n",
|
||||
"108800: acc=0.8051378676470589\n",
|
||||
"112000: acc=0.8077857142857143\n",
|
||||
"115200: acc=0.8104600694444445\n",
|
||||
"118400: acc=0.8128293918918919\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(0.029785829671223958, 0.8138166666666666)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMPackClassifier(vocab_size,64,32,len(classes)).to(device)\n",
|
||||
"train_epoch_emb(net,train_loader_len, lr=0.001,use_pack_sequence=True)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ:** рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдпрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ `use_pack_sequence` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рджреЗрдЦреНрдиреБрднрдПрдХреЛ рд╣реБрди рд╕рдХреНрдЫред рд╣рд╛рд▓, `pack_padded_sequence` рдХрд╛рд░реНрдпрд▓реЗ рд▓рдореНрдмрд╛рдЗ рдЕрдиреБрдХреНрд░рдо рдЯреЗрдиреНрд╕рд░рд▓рд╛рдИ CPU рдЙрдкрдХрд░рдгрдорд╛ рд╣реБрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рд░ рддреНрдпрд╕реИрд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛рд░реНрдпрд▓реЗ GPU рдорд╛ рд▓рдореНрдмрд╛рдЗ рдЕрдиреБрдХреНрд░рдо рдбреЗрдЯрд╛ рд╕рд╛рд░реНрдирдмрд╛рдЯ рдмрдЪреНрдиреБрдкрд░реНрдЫред рддрдкрд╛рдИрдВ [`torchnlp.py`](../../../../../lessons/5-NLP/16-RNN/torchnlp.py) рдлрд╛рдЗрд▓рдорд╛ рд░рд╣реЗрдХреЛ `train_emb` рдХрд╛рд░реНрдпрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рд░ рдмрд╣реБ-рд╕реНрддрд░реАрдп RNNs\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░рд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛, рд╕рдмреИ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ рдПрдХ рджрд┐рд╢рд╛рдорд╛ рдХрд╛рдо рдЧрд░реНрдереЗ, рдЕрдиреБрдХреНрд░рдордХреЛ рд╕реБрд░реБрдмрд╛рдЯ рдЕрдиреНрддреНрдпрд╕рдореНрдоред рдпреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рджреЗрдЦрд┐рдиреНрдЫ, рдХрд┐рдирдХрд┐ рдпреЛ рд╣рд╛рдореАрд▓реЗ рдкрдвреНрдиреЗ рд░ рдмреЛрд▓реНрдиреЗ рддрд░рд┐рдХрд╛рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫред рддрд░, рдзреЗрд░реИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╣рд╛рдореАрд╕рдБрдЧ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдордорд╛ рдЬрддрд╛рддрддреИ рдкрд╣реБрдБрдЪ рд╣реБрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЧрдгрдирд╛ рджреБрд╡реИ рджрд┐рд╢рд╛рдорд╛ рдЪрд▓рд╛рдЙрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрди рд╕рдХреНрдЫред рдпрд╕реНрддрд╛ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрд▓рд╛рдИ **рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ** RNNs рднрдирд┐рдиреНрдЫ, рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ RNN/LSTM/GRU рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ `bidirectional=True` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрд╛рд╕ рдЧрд░реЗрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рдиреЗрдЯрд╡рд░реНрдХрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓рд╛рдИ рджреБрдИрд╡рдЯрд╛ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ, рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╢рд╛рдХрд╛ рд▓рд╛рдЧрд┐ рдПрдХред PyTorch рд▓реЗ рддреА рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рджреБрдИ рдЧреБрдгрд╛ рдареВрд▓реЛ рдЖрдХрд╛рд░рдХреЛ рдПрдХ рднреЗрдХреНрдЯрд░рдХреЛ рд░реВрдкрдорд╛ рдЗрдирдХреЛрдб рдЧрд░реНрдЫ, рдЬреБрди рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫ, рдХрд┐рдирдХрд┐ рд╕рд╛рдорд╛рдиреНрдпрдд: рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╛рдкреНрдд рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рдкреВрд░реНрдг-рд╕рдореНрдкрд░реНрдХрд┐рдд рд░реЗрдЦреАрдп рддрд╣рдорд╛ рдкрд╛рд╕ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ, рд░ рддрд╣ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рдЖрдХрд╛рд░рдХреЛ рдпреЛ рд╡реГрджреНрдзрд┐ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрди рдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХ, рдПрдХ-рджрд┐рд╢рд╛рддреНрдордХ рд╣реЛрд╕реН рд╡рд╛ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ, рдЕрдиреБрдХреНрд░рдорднрд┐рддреНрд░рдХрд╛ рдХреЗрд╣реА рдврд╛рдБрдЪрд╛рд╣рд░реВ рд╕рдорд╛рддреНрдЫ, рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╡рд╛ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдЫред рдЬрд╕реНрддреИ рдХрдирднреЛрд▓реНрдпреБрд╕рдирд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдорд╛, рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рддрд╣рд▓реЗ рдирд┐рдХрд╛рд▓реЗрдХрд╛ рддрд▓реНрд▓реЛ-рд╕реНрддрд░реАрдп рдврд╛рдБрдЪрд╛рд╣рд░реВрдмрд╛рдЯ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдврд╛рдБрдЪрд╛рд╣рд░реВ рд╕рдорд╛рддреНрди рдЕрд░реНрдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд╣ рдорд╛рдерд┐ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ **рдмрд╣реБ-рд╕реНрддрд░реАрдп RNN** рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдорд╛ рдкреБрд░реНтАНрдпрд╛рдЙрдБрдЫ, рдЬрд╕рдорд╛ рджреБрдИ рд╡рд╛ рдмрдвреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ рд╣реБрдиреНрдЫрдиреН, рдЬрд╣рд╛рдБ рдЕрдШрд┐рд▓реНрд▓реЛ рддрд╣рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛рдИ рдЕрд░реНрдХреЛ рддрд╣рдорд╛ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*рдлрд░реНрдирд╛рдиреНрдбреЛ рд▓реЛрдкреЗрдЬрдХреЛ [рдпреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдкреЛрд╕реНрдЯ](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) рдмрд╛рдЯ рдЪрд┐рддреНрд░*\n",
|
||||
"\n",
|
||||
"PyTorch рд▓реЗ рдпрд╕реНрддрд╛ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫ, рдХрд┐рдирдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ RNN/LSTM/GRU рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ `num_layers` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрд╛рд╕ рдЧрд░реНрди рдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рддрд╣рд╣рд░реВрдХреЛ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдЫред рдпрд╕рд▓реЗ рд▓реБрдХреЗрдХреЛ/рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рдХреЛ рдЖрдХрд╛рд░ рд╕рдорд╛рдиреБрдкрд╛рддрд┐рдХ рд░реВрдкрдорд╛ рдмрдвреНрдиреЗ рдЕрд░реНрде рдкрдирд┐ рд░рд╛рдЦреНрдЫ, рд░ рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд╣рд╣рд░реВрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрджрд╛ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ RNNs\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдЗрдХрд╛рдИрдорд╛, рд╣рд╛рдореАрд▓реЗ рджреЗрдЦреНрдпреМрдВ рдХрд┐ RNNs рд▓рд╛рдИ рдХреНрд░рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддрд░ рд╡рд╛рд╕реНрддрд╡рдорд╛, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкрд╛рда рдЙрддреНрдкрд╛рджрди, рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рдж, рд░ рдЕрдиреНрдп рдзреЗрд░реИ рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рдкрдирд┐ рд╕рдореНрд╣рд╛рд▓реНрди рд╕рдХреНрдЫрдиреНред рд╣рд╛рдореА рддреА рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдЗрдХрд╛рдИрдорд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "522ee52ae3d5ae933e283286254e9a55",
|
||||
"translation_date": "2025-08-28T09:38:55+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNPyTorch.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,460 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдЕрдШрд┐рд▓реНрд▓реЛ рдореЛрдбреНрдпреБрд▓рдорд╛, рд╣рд╛рдореАрд▓реЗ рдкрд╛рдардХреЛ рд╕рдореГрджреНрдз рдЕрд░реНрдердкреВрд░реНрдг рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рд░реВ рдХрднрд░ рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВред рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓реЗ рд╡рд╛рдХреНрдпрдорд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕рдордЧреНрд░ рдЕрд░реНрдерд▓рд╛рдИ рд╕рдореЗрдЯреНрдЫ, рддрд░ рдпреЛ рд╢рдмреНрджрд╣рд░реВрдХреЛ **рдХреНрд░рдо**рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрджреИрди, рдХрд┐рдирднрдиреЗ рдПрдореНрдмреЗрдбрд┐рдЩ рдкрдЫрд┐ рд╣реБрдиреЗ рд╕рдордЧреНрд░ рдЕрдкрд░реЗрд╢рдирд▓реЗ рдореВрд▓ рдкрд╛рдардмрд╛рдЯ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рд╣рдЯрд╛рдЙрдБрдЫред рдпреА рдореЛрдбреЗрд▓рд╣рд░реВрд▓реЗ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдХреНрд░рдордмрджреНрдзрддрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рдирд╕рдХреНрдиреЗ рднрдПрдХрд╛рд▓реЗ, рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкрд╛рда рдЙрддреНрдкрд╛рджрди рд╡рд╛ рдкреНрд░рд╢реНрди рдЙрддреНрддрд░рдЬрд╕реНрддрд╛ рдЬрдЯрд┐рд▓ рд╡рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХреНрджреИрдирдиреНред\n",
|
||||
"\n",
|
||||
"рдкрд╛рда рдЕрдиреБрдХреНрд░рдордХреЛ рдЕрд░реНрде рд╕рдореЗрдЯреНрди, рд╣рд╛рдореА **рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ** рднрдирд┐рдиреЗ рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред RNN рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рд╡рд╛рдХреНрдпрд▓рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдПрдХ рдкрдЯрдХрдорд╛ рдПрдХ рдЯреЛрдХрди рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рд░ рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдХреЗрд╣реА **рд╕реНрдерд┐рддрд┐** рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫ, рдЬреБрди рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЯреЛрдХрдирд╕рдБрдЧ рдлреЗрд░рд┐ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдЯреЛрдХрдирд╣рд░реВрдХреЛ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдо $X_0,\\dots,X_n$ рджрд┐рдЗрдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, RNN рд▓реЗ рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХрд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫ, рд░ рдпреЛ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рдмреНрдпрд╛рдХрдкреНрд░реЛрдкреЛрдЧреЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреНрдд-рджреЗрдЦрд┐-рдЕрдиреНрддрд╕рдореНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдЫред рдкреНрд░рддреНрдпреЗрдХ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХрд▓реЗ $(X_i,S_i)$ рдЬреЛрдбреАрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк $S_{i+1}$ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рдЕрдиреНрддрд┐рдо рд╕реНрдерд┐рддрд┐ $S_n$ рд╡рд╛ рдЖрдЙрдЯрдкреБрдЯ $Y_n$ рд▓рд╛рдИ рд░реИрдЦрд┐рдХ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛рдорд╛ рдкрдард╛рдЗрдиреНрдЫ рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реНред рд╕рдмреИ рдиреЗрдЯрд╡рд░реНрдХ рдмреНрд▓рдХрд╣рд░реВрд▓реЗ рд╕рдорд╛рди рддреМрд▓рд╣рд░реВ рд╕рд╛рдЭрд╛ рдЧрд░реНрдЫрдиреН, рд░ рдПрдХ рдмреНрдпрд╛рдХрдкреНрд░реЛрдкреЛрдЧреЗрд╕рди рдкрд╛рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдиреНрдд-рджреЗрдЦрд┐-рдЕрдиреНрддрд╕рдореНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░рд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"> рдорд╛рдерд┐рдХреЛ рдЪрд┐рддреНрд░рд▓реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рдЕрдирд░реЛрд▓ рдЧрд░рд┐рдПрдХреЛ рд░реВрдк (рдмрд╛рдпрд╛рдБрддрд┐рд░) рд░ рдердк рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (рджрд╛рдпрд╛рдБрддрд┐рд░) рдорд╛ рджреЗрдЦрд╛рдЙрдБрдЫред рд╕рдмреИ RNN рд╕реЗрд▓рд╣рд░реВрд▓реЗ рд╕рдорд╛рди **рд╕рд╛рдЭрд╛ рдЧрд░реНрди рдорд┐рд▓реНрдиреЗ рддреМрд▓рд╣рд░реВ** рднрдПрдХреЛ рдХреБрд░рд╛ рдмреБрдЭреНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирдХрд┐ рд╕реНрдерд┐рддрд┐ рднреЗрдХреНрдЯрд░рд╣рд░реВ $S_0,\\dots,S_n$ рдиреЗрдЯрд╡рд░реНрдХрдорд╛рд░реНрдлрдд рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫрдиреН, RNN рд▓реЗ рд╢рдмреНрджрд╣рд░реВ рдмреАрдЪрдХреЛ рдХреНрд░рдордмрджреНрдз рдирд┐рд░реНрднрд░рддрд╛ рд╕рд┐рдХреНрди рд╕рдХреНрд╖рдо рд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЬрдм *not* рд╢рдмреНрдж рдЕрдиреБрдХреНрд░рдордорд╛ рдХрддреИ рджреЗрдЦрд╛ рдкрд░реНрдЫ, рдпрд╕рд▓реЗ рд╕реНрдерд┐рддрд┐ рднреЗрдХреНрдЯрд░рднрд┐рддреНрд░рдХрд╛ рдХреЗрд╣реА рддрддреНрд╡рд╣рд░реВрд▓рд╛рдИ рдирдХрд╛рд░реНрди рд╕рд┐рдХреНрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рднрд┐рддреНрд░, рдкреНрд░рддреНрдпреЗрдХ RNN рд╕реЗрд▓рдорд╛ рджреБрдИ рддреМрд▓ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ $W_H$ рд░ $W_I$, рд░ рдмрд╛рдпрд╕ $b$ рд╣реБрдиреНрдЫред рдкреНрд░рддреНрдпреЗрдХ RNN рдЪрд░рдгрдорд╛, рдЗрдирдкреБрдЯ $X_i$ рд░ рдЗрдирдкреБрдЯ рд╕реНрдерд┐рддрд┐ $S_i$ рджрд┐рдЗрдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддрд┐ $S_{i+1} = f(W_H\\times S_i + W_I\\times X_i+b)$ рдХреЛ рд░реВрдкрдорд╛ рдЧрдгрдирд╛ рдЧрд░рд┐рдиреНрдЫ, рдЬрд╣рд╛рдБ $f$ рд╕рдХреНрд░рд┐рдпрддрд╛ рдлрд▓рди рд╣реЛ (рдкреНрд░рд╛рдпрдГ $\\tanh$)ред\n",
|
||||
"\n",
|
||||
"> рдкрд╛рда рдЙрддреНрдкрд╛рджрди (рдЬрд╕рд▓рд╛рдИ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдпреБрдирд┐рдЯрдорд╛ рдХрднрд░ рдЧрд░реНрдиреЗрдЫреМрдВ) рд╡рд╛ рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рджрдЬрд╕реНрддрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ RNN рдЪрд░рдгрдорд╛ рдХреЗрд╣реА рдЖрдЙрдЯрдкреБрдЯ рдорд╛рди рдкрдирд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЕрд░реНрдХреЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ $W_O$ рдкрдирд┐ рд╣реБрдиреНрдЫ, рд░ рдЖрдЙрдЯрдкреБрдЯ $Y_i=f(W_O\\times S_i+b_O)$ рдХреЛ рд░реВрдкрдорд╛ рдЧрдгрдирд╛ рдЧрд░рд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣реЗрд░реМрдВ, рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреБрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрд▓реЗ рд╣рд╛рдореНрд░реЛ рд╕рдорд╛рдЪрд╛рд░ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реНрди рдХрд╕рд░реА рдорджреНрджрдд рдЧрд░реНрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"> рд╕реНрдпрд╛рдиреНрдбрдмрдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдирд┐рдореНрди рд╕реЗрд▓ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдбреЗрдЯрд╛ рдкреНрд░рд┐рдлреЗрдЪ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрджрд┐ рддрдкрд╛рдИрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдкрдорд╛ рдЪрд▓рд╛рдЗрд░рд╣рдиреБрднрдПрдХреЛ рдЫ рднрдиреЗ, рддрдкрд╛рдИрдВ рдирд┐рдореНрди рд╕реЗрд▓рд▓рд╛рдИ рдЫреЛрдбреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import sys\n",
|
||||
"!{sys.executable} -m pip install --quiet tensorflow_datasets==4.4.0\n",
|
||||
"!cd ~ && wget -q -O - https://mslearntensorflowlp.blob.core.windows.net/data/tfds-ag-news.tgz | tar xz"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"# We are going to be training pretty large models. In order not to face errors, we need\n",
|
||||
"# to set tensorflow option to grow GPU memory allocation when required\n",
|
||||
"physical_devices = tf.config.list_physical_devices('GPU') \n",
|
||||
"if len(physical_devices)>0:\n",
|
||||
" tf.config.experimental.set_memory_growth(physical_devices[0], True)\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"рдареВрд▓рд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджрд╛, GPU рдореЗрдореЛрд░реАрдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рдорд╕реНрдпрд╛ рд╣реБрди рд╕рдХреНрдЫред рд╣рд╛рдореАрд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рд╕рд╛рдЗрдЬрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрдирд┐ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рд╣реБрди рд╕рдХреНрдЫ, рддрд╛рдХрд┐ рдбрд╛рдЯрд╛ GPU рдореЗрдореЛрд░реАрдорд╛ рдлрд┐рдЯ рд╣реЛрд╕реН рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░реНрдпрд╛рдкреНрдд рдЫрд┐рдЯреЛ рд╣реЛрд╕реНред рдпрджрд┐ рддрдкрд╛рдИрдВ рдпреЛ рдХреЛрдб рдЖрдлреНрдиреИ GPU рдореЗрд╕рд┐рдирдорд╛ рдЪрд▓рд╛рдЗрд░рд╣рдиреБрднрдПрдХреЛ рдЫ рднрдиреЗ, рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд▓рд╛рдИ рдЫрд┐рдЯреЛ рдмрдирд╛рдЙрди рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рд╕рд╛рдЗрдЬ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реЗрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"> **Note**: NVidia рдбреНрд░рд╛рдЗрднрд░рдХрд╛ рдХреЗрд╣реА рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрд▓реЗ рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдкрдЫрд┐ рдореЗрдореЛрд░реА рд░рд┐рд▓рд┐рдЬ рдирдЧрд░реНрдиреЗ рдХреБрд░рд╛ рдерд╛рд╣рд╛ рдЫред рд╣рд╛рдореАрд▓реЗ рдпрд╕ рдиреЛрдЯрдмреБрдХрдорд╛ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЪрд▓рд╛рдЗрд░рд╣реЗрдХрд╛ рдЫреМрдВ, рд░ рдпрд╕рд▓реЗ рдХреЗрд╣реА рд╕реЗрдЯрдЕрдкрд╣рд░реВрдорд╛ рдореЗрдореЛрд░реА рд╕рдорд╛рдкреНрдд рд╣реБрди рд╕рдХреНрдЫ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдпрджрд┐ рддрдкрд╛рдИрдВ рдпрд╕реИ рдиреЛрдЯрдмреБрдХрдорд╛ рдЖрдлреНрдиреИ рдкрд░реАрдХреНрд╖рдгрд╣рд░реВ рдЧрд░рд┐рд░рд╣рдиреБрднрдПрдХреЛ рдЫ рднрдиреЗред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реБ рдЧрд░реНрджрд╛ рдХреЗрд╣реА рдЕрдиреМрдареЛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╕рд╛рдордирд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдиреЛрдЯрдмреБрдХрдХреЛ рдХрд░реНрдиреЗрд▓ рдкреБрдирдГ рд╕реБрд░реБ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": true,
|
||||
"jupyter": {
|
||||
"outputs_hidden": false,
|
||||
"source_hidden": false
|
||||
},
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"batch_size = 16\n",
|
||||
"embed_size = 64"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рд╛рдзрд╛рд░рдг RNN рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛\n",
|
||||
"\n",
|
||||
"рд╕рд╛рдзрд╛рд░рдг RNN рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЗрдХрд╛рдИ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд░реЗрдЦреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╣реЛ, рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯ рднреЗрдХреНрдЯрд░ рд░ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рд▓рд╛рдИ рд▓рд┐рдиреНрдЫ, рд░ рдирдпрд╛рдБ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрджрдЫред Keras рдорд╛, рдпрд╕рд▓рд╛рдИ `SimpleRNN` рддрд╣рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдпрджреНрдпрдкрд┐ рд╣рд╛рдореА рдПрдХ-рд╣рдЯ рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ RNN рддрд╣рдорд╛ рд╕рд┐рдзреИ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдпреЛ рд░рд╛рдореНрд░реЛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЗрди рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЙрдЪреНрдЪ рдЖрдпрд╛рдорд┐рдХрддрд╛рдХрд╛ рдХрд╛рд░рдгред рддреНрдпрд╕реИрд▓реЗ, рд╣рд╛рдореА рд╢рдмреНрдж рднреЗрдХреНрдЯрд░рд╣рд░реВрдХреЛ рдЖрдпрд╛рдорд┐рдХрддрд╛ рдШрдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдПрдореНрдмреЗрдбрд┐рдЩ рддрд╣ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рддреНрдпрд╕рдкрдЫрд┐ RNN рддрд╣, рд░ рдЕрдиреНрддрдорд╛ `Dense` рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ред\n",
|
||||
"\n",
|
||||
"> **Note**: рдЬрдм рдЖрдпрд╛рдорд┐рдХрддрд╛ рдпрддрд┐ рдЙрдЪреНрдЪ рдЫреИрди, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдЬрдм рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░ рдЯреЛрдХрдирд╛рдЗрдЬреЗрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдПрдХ-рд╣рдЯ рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ рд╕рд┐рдзреИ RNN рд╕реЗрд▓рдорд╛ рдкрд╛рд╕ рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрди рд╕рдХреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"text_vectorization (TextVect (None, None) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"embedding (Embedding) (None, None, 64) 1280000 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"simple_rnn (SimpleRNN) (None, 16) 1296 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, 4) 68 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 1,281,364\n",
|
||||
"Trainable params: 1,281,364\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vocab_size = 20000\n",
|
||||
"\n",
|
||||
"vectorizer = keras.layers.experimental.preprocessing.TextVectorization(\n",
|
||||
" max_tokens=vocab_size,\n",
|
||||
" input_shape=(1,))\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ:** рдпрд╣рд╛рдБ рд╣рд╛рдореА рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЕрдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ, рддрд░ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА Word2Vec рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдЩ рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕рдХреЛ рд╡рд░реНрдгрди рдЕрдШрд┐рд▓реНрд▓реЛ рдЗрдХрд╛рдИрдорд╛ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпреЛ рдХреЛрдбрд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдЩрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдЙрдиреБ рддрдкрд╛рдИрдВрдХреЛ рд▓рд╛рдЧрд┐ рд░рд╛рдореНрд░реЛ рдЕрднреНрдпрд╛рд╕ рд╣реБрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рдирд┐рдХреИ рдХрдард┐рди рд╣реБрдиреНрдЫ, рдХрд┐рдирднрдиреЗ RNN рд╕реЗрд▓рд╣рд░реВрд▓рд╛рдИ рдЕрдиреБрдХреНрд░рдордХреЛ рд▓рдореНрдмрд╛рдЗрд╕рдореНрдо рдЕрдирд░реЛрд▓ рдЧрд░реНрджрд╛, рдмреНрдпрд╛рдХрдкреНрд░реЛрдкрд╛рдЧреЗрд╕рдирдорд╛ рд╕рдВрд▓рдЧреНрди рддрд╣рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдзреЗрд░реИ рдареВрд▓реЛ рд╣реБрдиреНрдЫред рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╕рд╛рдиреЛ рд╕рд┐рдХрд╛рдЗ рджрд░ рдЪрдпрди рдЧрд░реНрдиреБрдкрд░реНрдЫ, рд░ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдареВрд▓реЛ рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпрд╕рд▓реЗ рдзреЗрд░реИ рд╕рдордп рд▓рд┐рди рд╕рдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ GPU рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдЪрд╛рдБрдбреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА RNN рдореЛрдбреЗрд▓рд▓рд╛рдИ рдХреЗрд╡рд▓ рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВрдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВ, рд╡рд┐рд╡рд░рдгрд▓рд╛рдИ рдЫреЛрдбреЗрд░ред рддрдкрд╛рдИрдВ рд╡рд┐рд╡рд░рдгрд╕рд╣рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдХрд┐ рднрдиреЗрд░ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training vectorizer\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_title(x):\n",
|
||||
" return x['title']\n",
|
||||
"\n",
|
||||
"def tupelize_title(x):\n",
|
||||
" return (extract_title(x),x['label'])\n",
|
||||
"\n",
|
||||
"print('Training vectorizer')\n",
|
||||
"vectorizer.adapt(ds_train.take(2000).map(extract_title))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 82s 11ms/step - loss: 0.6629 - acc: 0.7623 - val_loss: 0.5559 - val_acc: 0.7995\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3e0030d350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize_title).batch(batch_size),validation_data=ds_test.map(tupelize_title).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {
|
||||
"nteract": {
|
||||
"transient": {
|
||||
"deleting": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"**рдиреЛрдЯ** рдХрд┐ рдпрд╣рд╛рдБ рд╕рдЯреАрдХрддрд╛ рдХрдо рд╣реБрди рд╕рдХреНрдЫ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рдХреЗрд╡рд▓ рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджреИрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рднреЗрд░рд┐рдПрдмрд▓ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рд╣рд░реВ рдкреБрдирдГ рд╣реЗрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"`TextVectorization` рд▓реЗрдпрд░рд▓реЗ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ рднреЗрд░рд┐рдПрдмрд▓ рд▓рдореНрдмрд╛рдЗ рднрдПрдХрд╛ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рд╣рд░реВрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдкреНрдпрд╛рдб рдЯреЛрдХрдирд╣рд░реВрд╕рдБрдЧ рдкреНрдпрд╛рдб рдЧрд░реНрдиреЗ рдХреБрд░рд╛ рдпрд╛рдж рдЧрд░реНрдиреБрд╣реЛрд╕реНред рддреА рдЯреЛрдХрдирд╣рд░реВрд▓реЗ рдкрдирд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдорд╛ рднрд╛рдЧ рд▓рд┐рдиреНрдЫрдиреН, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдореЛрдбреЗрд▓рдХреЛ рдХрдирднрд░реНрдЬреЗрдиреНрд╕ рдЬрдЯрд┐рд▓ рд╣реБрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рдкреНрдпрд╛рдбрд┐рдЩрдХреЛ рдорд╛рддреНрд░рд╛ рдХрдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓реЗ рд▓рд┐рди рд╕рдХреНрдиреЗ рдХреЗрд╣реА рдЙрдкрд╛рдпрд╣рд░реВ рдЫрдиреНред рддреАрдордзреНрдпреЗ рдПрдХ рдЙрдкрд╛рдп рднрдиреЗрдХреЛ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рдХреЛ рд▓рдореНрдмрд╛рдЗрдЕрдиреБрд╕рд╛рд░ рдкреБрдирдГ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдиреБ рд░ рд╕рдмреИ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рд╣рд░реВрд▓рд╛рдИ рд╕рд╛рдЗрдЬрдЕрдиреБрд╕рд╛рд░ рд╕рдореВрд╣ рдмрдирд╛рдЙрдиреБ рд╣реЛред рдпреЛ `tf.data.experimental.bucket_by_sequence_length` рдлрдВрдХреНрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ (рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН [рдбрдХреБрдореЗрдиреНрдЯреЗрд╕рди](https://www.tensorflow.org/api_docs/python/tf/data/experimental/bucket_by_sequence_length))ред\n",
|
||||
"\n",
|
||||
"рдЕрд░реНрдХреЛ рдЙрдкрд╛рдп рднрдиреЗрдХреЛ **рдорд╛рд╕реНрдХрд┐рдЩ** рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рд╣реЛред Keras рдорд╛, рдХреЗрд╣реА рд▓реЗрдпрд░рд╣рд░реВрд▓реЗ рдердк рдЗрдирдкреБрдЯрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрдЫрдиреН, рдЬрд╕рд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджрд╛ рдХреБрди рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ рдзреНрдпрд╛рди рджрд┐рдиреБрдкрд░реНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓рдорд╛ рдорд╛рд╕реНрдХрд┐рдЩ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди, рд╣рд╛рдореА рдпрд╛ рдд рдЫреБрдЯреНрдЯреИ `Masking` рд▓реЗрдпрд░ ([рдбрдХреБрдореЗрдиреНрдЯреЗрд╕рди](https://keras.io/api/layers/core_layers/masking/)) рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдпрд╛ `Embedding` рд▓реЗрдпрд░рдХреЛ `mask_zero=True` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note**: рдпреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд▓реЗ рд╕рдореНрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдПрдЙрдЯрд╛ рдЗрдкреЛрдХ рдкреВрд░рд╛ рдЧрд░реНрди рдХрд░рд┐рдм рел рдорд┐рдиреЗрдЯ рд╕рдордп рд▓рд┐рдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдзреИрд░реНрдп рд╕рдХрд┐рдпреЛ рднрдиреЗ рдХреБрдиреИ рдкрдирд┐ рд╕рдордпрдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд░реЛрдХреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдбрд╛рдЯрд╛рдХреЛ рдорд╛рддреНрд░рд╛ рд╕реАрдорд┐рдд рдЧрд░реНрди рдкрдирд┐ рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, `ds_train` рд░ `ds_test` рдбреЗрдЯрд╛рд╕реЗрдЯрд╣рд░реВ рдкрдЫрд┐ `.take(...)` рдХреНрд▓рдЬ рдердкреЗрд░ред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7500/7500 [==============================] - 371s 49ms/step - loss: 0.5401 - acc: 0.8079 - val_loss: 0.3780 - val_acc: 0.8822\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3dec118850>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size,embed_size,mask_zero=True),\n",
|
||||
" keras.layers.SimpleRNN(16),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рдорд╛рд╕реНрдХрд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫреМрдВ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рд╢реАрд░реНрд╖рдХрд╣рд░реВ рд░ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рд╕рдореНрдкреВрд░реНрдг рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рди рд╕рдХреНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note**: рдХреЗ рддрдкрд╛рдИрдВрд▓реЗ рдзреНрдпрд╛рди рджрд┐рдиреБрднрдПрдХреЛ рдЫ рдХрд┐ рд╣рд╛рдореАрд▓реЗ рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВрдорд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░рд┐рдПрдХреЛ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВ, рди рдХрд┐ рд▓реЗрдЦрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реАрдорд╛? рд╕рдореНрднрд╛рд╡рд┐рдд рд░реВрдкрдорд╛, рдпрд╕рд▓реЗ рдХреЗрд╣реА рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░рд▓рд╛рдИ рдкреБрдирдГ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБ рд░рд╛рдореНрд░реЛ рд╣реБрдиреНрдЫред рддрд░, рдпрд╕рд▓реЗ рд╕рд╛рдиреЛ рдорд╛рддреНрд░ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрди рд╕рдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╕рд░рд▓рддрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЕрдШрд┐рд▓реНрд▓реЛ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░рдореИ рд░рд╣рдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## LSTM: рд▓рд╛рдореЛ рдЫреЛрдЯреЛ-рдЕрд╡рдзрд┐ рд╕реНрдореГрддрд┐\n",
|
||||
"\n",
|
||||
"RNNs рдХреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рд╣реЛ **vanishing gradients**ред RNNs рдзреЗрд░реИ рд▓рд╛рдореЛ рд╣реБрди рд╕рдХреНрдЫрдиреН, рд░ рдмреНрдпрд╛рдХрдкреНрд░реЛрдкреЛрдЧреЗрд╕рдирдХреЛ рдХреНрд░рдордорд╛ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдкрд╣рд┐рд▓реЛ рддрд╣рд╕рдореНрдо рдЧреНрд░реЗрдбрд┐рдпрдиреНрдЯрд╣рд░реВ рдлреИрд▓рд╛рдЙрди рдЧрд╛рд╣реНрд░реЛ рд╣реБрди рд╕рдХреНрдЫред рдЬрдм рдпрд╕реНрддреЛ рд╣реБрдиреНрдЫ, рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдЯрд╛рдврд╛рдХрд╛ рдЯреЛрдХрдирд╣рд░реВ рдмреАрдЪрдХреЛ рд╕рдореНрдмрдиреНрдз рд╕рд┐рдХреНрди рд╕рдХреНрджреИрдиред рдпреЛ рд╕рдорд╕реНрдпрд╛рд▓рд╛рдИ рдЯрд╛рд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ **рдЧреЗрдЯрд╣рд░реВ** рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ **рд╕реНрдкрд╖реНрдЯ рдЕрд╡рд╕реНрдерд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди** рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрдиреЗ рдПрдЙрдЯрд╛ рдЙрдкрд╛рдп рд╣реЛред рдЧреЗрдЯрд╣рд░реВ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрдиреЗ рджреБрдИ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВ рд╣реБрдиреН **рд▓рд╛рдореЛ рдЫреЛрдЯреЛ-рдЕрд╡рдзрд┐ рд╕реНрдореГрддрд┐** (LSTM) рд░ **рдЧреЗрдЯреЗрдб рд░рд┐рд▓реЗрд╕ рдпреВрдирд┐рдЯ** (GRU)ред рдпрд╣рд╛рдБ рд╣рд╛рдореА LSTM рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"LSTM рдиреЗрдЯрд╡рд░реНрдХ RNN рдЬрд╕реНрддреИ рддрд░рд┐рдХрд╛рд▓реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реБрдиреНрдЫ, рддрд░ рджреБрдИ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рдЫрдиреН рдЬреБрди рддрд╣рджреЗрдЦрд┐ рддрд╣рд╕рдореНрдо рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫ: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд╡рд╕реНрдерд╛ $c$, рд░ рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░ $h$ред рдкреНрд░рддреНрдпреЗрдХ рдпреБрдирд┐рдЯрдорд╛, рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░ $h_{t-1}$ рдЗрдирдкреБрдЯ $x_t$ рд╕рдБрдЧ рд╕рдВрдпреЛрдЬрди рдЧрд░рд┐рдиреНрдЫ, рд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╕рдБрдЧреИ **рдЧреЗрдЯрд╣рд░реВ** рдорд╛рд░реНрдлрдд рдЕрд╡рд╕реНрдерд╛ $c_t$ рд░ рдЖрдЙрдЯрдкреБрдЯ $h_{t}$ рдорд╛ рдХреЗ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдЫрдиреНред рдкреНрд░рддреНрдпреЗрдХ рдЧреЗрдЯрдорд╛ рд╕рд┐рдЧреНрдореЛрдЗрдб рд╕рдХреНрд░рд┐рдпрддрд╛ рд╣реБрдиреНрдЫ (рдЖрдЙрдЯрдкреБрдЯ $[0,1]$ рдХреЛ рджрд╛рдпрд░рд╛рдорд╛), рдЬрд╕рд▓рд╛рдИ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рд╕рдБрдЧ рдЧреБрдгрд╛ рдЧрд░реНрджрд╛ рдмрд┐рдЯрд╡рд╛рдЗрдЬ рдорд╛рд╕реНрдХрдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫред LSTM рд╣рд░реВрд╕рдБрдЧ рдирд┐рдореНрди рдЧреЗрдЯрд╣рд░реВ рд╣реБрдиреНрдЫрдиреН (рдорд╛рдерд┐рдХреЛ рдЪрд┐рддреНрд░рдорд╛ рдмрд╛рдпрд╛рдБрджреЗрдЦрд┐ рджрд╛рдпрд╛рдБ):\n",
|
||||
"* **рднреВрд▓реНрдиреЗ рдЧреЗрдЯ** рдЬрд╕рд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдЫ рдХрд┐ рднреЗрдХреНрдЯрд░ $c_{t-1}$ рдХрд╛ рдХреБрди рдШрдЯрдХрд╣рд░реВ рдмрд┐рд░реНрд╕рдиреБ рдкрд░реНрдЫ, рд░ рдХреБрди рдкрд╛рд╕ рдЧрд░реНрди рджрд┐рдиреБ рдкрд░реНрдЫред\n",
|
||||
"* **рдЗрдирдкреБрдЯ рдЧреЗрдЯ** рдЬрд╕рд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдЫ рдХрд┐ рдЗрдирдкреБрдЯ рднреЗрдХреНрдЯрд░ рд░ рдЕрдШрд┐рд▓реНрд▓реЛ рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░рдмрд╛рдЯ рдХрддрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреБрдкрд░реНрдЫред\n",
|
||||
"* **рдЖрдЙрдЯрдкреБрдЯ рдЧреЗрдЯ** рдЬрд╕рд▓реЗ рдирдпрд╛рдБ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░ рд▓рд┐рдиреНрдЫ рд░ рдпрд╕рдХреЛ рдХреБрди рдШрдЯрдХрд╣рд░реВ рдирдпрд╛рдБ рд▓реБрдХреЗрдХреЛ рднреЗрдХреНрдЯрд░ $h_t$ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗрдЫ рднрдиреЗрд░ рдирд┐рд░реНрдгрдп рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрд╡рд╕реНрдерд╛ $c$ рдХрд╛ рдШрдЯрдХрд╣рд░реВрд▓рд╛рдИ рдЭрдгреНрдбрд╛рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓рд╛рдИ рдЕрди рд░ рдЕрдл рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЬрдм рд╣рд╛рдореА рдЕрдиреБрдХреНрд░рдордорд╛ *Alice* рдирд╛рдо рднреЗрдЯреНрдЫреМрдВ, рд╣рд╛рдореА рдЕрдиреБрдорд╛рди рдЧрд░реНрдЫреМрдВ рдХрд┐ рдпреЛ рдорд╣рд┐рд▓рд╛ рд╣реЛ, рд░ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЭрдгреНрдбрд╛ рдЙрдард╛рдЙрдБрдЫреМрдВ рдЬрд╕рд▓реЗ рднрдиреНрдЫ рдХрд┐ рд╡рд╛рдХреНрдпрдорд╛ рдорд╣рд┐рд▓рд╛ рд╕рдВрдЬреНрдЮрд╛ рдЫред рдЬрдм рд╣рд╛рдореА рдердк *and Tom* рд╢рдмреНрджрд╣рд░реВ рднреЗрдЯреНрдЫреМрдВ, рд╣рд╛рдореА рдЭрдгреНрдбрд╛ рдЙрдард╛рдЙрдБрдЫреМрдВ рдЬрд╕рд▓реЗ рднрдиреНрдЫ рдХрд┐ рдмрд╣реБрд╡рдЪрди рд╕рдВрдЬреНрдЮрд╛ рдЫред рдпрд╕рд░реА рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рд╣реЗрд░рдлреЗрд░ рдЧрд░реЗрд░ рд╣рд╛рдореА рд╡рд╛рдХреНрдпрдХрд╛ рд╡реНрдпрд╛рдХрд░рдгреАрдп рдЧреБрдгрд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"> **Note**: LSTM рд╣рд░реВрдХреЛ рдЖрдиреНрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпрд╣рд╛рдБ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╕реНрд░реЛрдд рдЫ: [Understanding LSTM Networks](https://colah.github.io/posts/2015-08-Understanding-LSTMs/) рдХреНрд░рд┐рд╕реНрдЯреЛрдлрд░ рдУрд▓рд╛рд╣рджреНрд╡рд╛рд░рд╛ред\n",
|
||||
"\n",
|
||||
"рдпрджреНрдпрдкрд┐ LSTM рд╕реЗрд▓рдХреЛ рдЖрдиреНрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдЬрдЯрд┐рд▓ рджреЗрдЦрд┐рди рд╕рдХреНрдЫ, Keras рд▓реЗ рдпреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ `LSTM` рддрд╣рднрд┐рддреНрд░ рд▓реБрдХрд╛рдЙрдБрдЫ, рддреНрдпрд╕реИрд▓реЗ рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореАрд▓реЗ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рдПрдХ рдорд╛рддреНрд░ рдХреБрд░рд╛ рднрдиреЗрдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд╣рд▓рд╛рдИ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреБ рд╣реЛ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"15000/15000 [==============================] - 188s 13ms/step - loss: 0.5692 - acc: 0.7916 - val_loss: 0.3441 - val_acc: 0.8870\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f3d6af5c350>"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, embed_size),\n",
|
||||
" keras.layers.LSTM(8),\n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(8),validation_data=ds_test.map(tupelize).batch(8))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рд░ рдмрд╣реБ-рд╕реНрддрд░реАрдп RNNs\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрд╣рд┐рд▓реЗрд╕рдореНрдордХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдорд╛, рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрд▓реЗ рдЕрдиреБрдХреНрд░рдордХреЛ рд╕реБрд░реБрджреЗрдЦрд┐ рдЕрдиреНрддреНрдпрд╕рдореНрдо рдХрд╛рдо рдЧрд░реНрдЫрдиреНред рдпреЛ рд╣рд╛рдореАрд▓рд╛рдИ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рд╛рдЧреНрдЫ рдХрд┐рдирднрдиреЗ рдпреЛ рддреНрдпрд╣реА рджрд┐рд╢рд╛рдорд╛ рд╣реБрдиреНрдЫ рдЬрд╕рд░реА рд╣рд╛рдореА рдкрдвреНрдЫреМрдВ рд╡рд╛ рднрд╛рд╖рдг рд╕реБрдиреНрдЫреМрдВред рддрд░, рддреНрдпрд╕реНрддрд╛ рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЬрд╕рдорд╛ рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдордХреЛ рдЕрдирд┐рдпрдорд┐рдд рдкрд╣реБрдБрдЪ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдЫ, рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЧрдгрдирд╛ рджреБрдмреИ рджрд┐рд╢рд╛рдорд╛ рдЪрд▓рд╛рдЙрдиреБ рдмрдвреА рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред RNNs рдЬрд╕рд▓реЗ рджреБрдмреИ рджрд┐рд╢рд╛рдорд╛ рдЧрдгрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫрдиреН, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ **рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ** RNNs рднрдирд┐рдиреНрдЫ, рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд╣рд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ `Bidirectional` рддрд╣рд▓реЗ рдЖрд╡рд░рдг рдЧрд░реЗрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"> **Note**: `Bidirectional` рддрд╣рд▓реЗ рдЖрдлреНрдиреЛ рднрд┐рддреНрд░рдХреЛ рддрд╣рдХреЛ рджреБрдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдЙрдБрдЫ, рд░ рддреАрдордзреНрдпреЗ рдПрдХрдХреЛ `go_backwards` рдЧреБрдгрд▓рд╛рдИ `True` рдорд╛ рд╕реЗрдЯ рдЧрд░реНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдпреЛ рдЕрдиреБрдХреНрд░рдордХреЛ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛рдорд╛ рдЬрд╛рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрд▓реЗ, рдПрдХрджрд┐рд╢рд╛рддреНрдордХ рд╣реЛрд╕реН рд╡рд╛ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ, рдЕрдиреБрдХреНрд░рдорднрд┐рддреНрд░рдХрд╛ рдврд╛рдБрдЪрд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдорд╛рддреНрдЫрдиреН, рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░рд╣рд░реВрдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдЫрдиреН рд╡рд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЖрдЙрдЯрдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдлрд┐рд░реНрддрд╛ рджрд┐рдиреНрдЫрдиреНред рдХрдиреНрднреЛрд▓реНрдпреБрд╕рдирд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдХреЛ рдЬрд╕реНрддреИ, рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рддрд╣рд▓реЗ рдирд┐рдХрд╛рд▓реЗрдХрд╛ рддрд▓реНрд▓реЛ рд╕реНрддрд░рдХрд╛ рдврд╛рдБрдЪрд╛рд╣рд░реВрдмрд╛рдЯ рдЙрдЪреНрдЪ рд╕реНрддрд░рдХрд╛ рдврд╛рдБрдЪрд╛рд╣рд░реВ рд╕рдорд╛рддреНрди рдЕрд░реНрдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд╣ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ **рдмрд╣реБ-рд╕реНрддрд░реАрдп RNN** рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рдорд╛ рдкреБрд░реНтАНрдпрд╛рдЙрдБрдЫ, рдЬрд╕рдорд╛ рджреБрдИ рд╡рд╛ рдмрдвреА рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ рд╣реБрдиреНрдЫрдиреН, рдЬрд╣рд╛рдБ рдЕрдШрд┐рд▓реНрд▓реЛ рддрд╣рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛рдИ рдЕрд░реНрдХреЛ рддрд╣рдорд╛ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкрдард╛рдЗрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*рдлрд░реНрдирд╛рдиреНрдбреЛ рд▓реЛрдкреЗрдЬрдХреЛ [рдпреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдкреЛрд╕реНрдЯ](https://towardsdatascience.com/from-a-lstm-cell-to-a-multilayer-lstm-network-with-pytorch-2899eb5696f3) рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рдЪрд┐рддреНрд░ред*\n",
|
||||
"\n",
|
||||
"Keras рд▓реЗ рдпреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдмрдирд╛рдЙрдБрдЫ, рдХрд┐рдирднрдиреЗ рддрдкрд╛рдИрдВрд▓реЗ рдореЛрдбреЗрд▓рдорд╛ рдердк рдкреБрдирд░рд╛рд╡рд░реНрддреА рддрд╣рд╣рд░реВ рдердкреНрди рдорд╛рддреНрд░ рдЖрд╡рд╢реНрдпрдХ рдЫред рдЕрдиреНрддрд┐рдо рддрд╣ рдмрд╛рд╣реЗрдХ рд╕рдмреИ рддрд╣рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ `return_sequences=True` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд▓реЗ рддрд╣рд▓рд╛рдИ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЧрдгрдирд╛рдХреЛ рдЕрдиреНрддрд┐рдо рдЕрд╡рд╕реНрдерд╛ рдорд╛рддреНрд░ рд╣реЛрдЗрди, рд╕рдмреИ рдордзреНрдпрд╡рд░реНрддреА рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рдлрд┐рд░реНрддрд╛ рджрд┐рди рдЖрд╡рд╢реНрдпрдХ рдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм, рд╣рд╛рдореНрд░реЛ рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рджреБрдИ-рддрд╣ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ LSTM рдмрдирд╛рдФрдВред\n",
|
||||
"\n",
|
||||
"> **Note** рдпреЛ рдХреЛрдбрд▓реЗ рдлреЗрд░рд┐ рдзреЗрд░реИ рд╕рдордп рд▓рд┐рди рд╕рдХреНрдЫ, рддрд░ рдпрд╕рд▓реЗ рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рджреЗрдЦрд┐рдПрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рджрд┐рдиреНрдЫред рддреНрдпрд╕реИрд▓реЗ рд╕рд╛рдпрдж рдпреЛ рдкрд░реНрдЦрди рд░ рдкрд░рд┐рдгрд╛рдо рд╣реЗрд░реНрди рд▓рд╛рдпрдХ рдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"5044/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r5045/7500 [===================>..........] - ETA: 2:33 - loss: 0.3709 - acc: 0.8706"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" vectorizer,\n",
|
||||
" keras.layers.Embedding(vocab_size, 128, mask_zero=True),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64,return_sequences=True)),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(64)), \n",
|
||||
" keras.layers.Dense(4,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(batch_size),\n",
|
||||
" validation_data=ds_test.map(tupelize).batch(batch_size))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ RNNs\n",
|
||||
"\n",
|
||||
"рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо, рд╣рд╛рдореАрд▓реЗ RNNs рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрд╛рдардХреЛ рдХреНрд░рдорд▓рд╛рдИ рд╡рд░реНрдЧреАрдХрд░рдг рдЧрд░реНрдиреЗ рдХреБрд░рд╛рдорд╛ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реЗрдХрд╛ рдЫреМрдВред рддрд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкрд╛рда рд╕рд┐рд░реНрдЬрдирд╛ рд░ рднрд╛рд╖рд╛ рдЕрдиреБрд╡рд╛рдж рдЬрд╕реНрддрд╛ рдзреЗрд░реИ рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╣рд░реВ рдкрдирд┐ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН тАФ рд╣рд╛рдореА рддреА рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдЗрдХрд╛рдИрдорд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernel_info": {
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py37_tensorflow",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_tensorflow-py"
|
||||
},
|
||||
"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.7.9"
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "81351e61f619b432ff51010a4f993194",
|
||||
"translation_date": "2025-08-28T09:34:55+00:00",
|
||||
"source_file": "lessons/5-NLP/16-RNN/RNNTF.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,414 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"Recurrent Neural Networks (RNNs) рд░ рддрд┐рдирдХрд╛ рдЧреЗрдЯреЗрдб рд╕реЗрд▓ рднреЗрд░рд┐рдпрдиреНрдЯрд╣рд░реВ рдЬрд╕реНрддреИ Long Short Term Memory Cells (LSTMs) рд░ Gated Recurrent Units (GRUs) рд▓реЗ рднрд╛рд╖рд╛ рдореЛрдбрд▓рд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рдореЗрдХрд╛рдирд┐рдЬреНрдо рдкреНрд░рджрд╛рди рдЧрд░реЗ, рдЕрд░реНрдерд╛рддреН рдпреАрд▓реЗ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдХреНрд░рдо рд╕рд┐рдХреНрди рд╕рдХреНрдЫрдиреН рд░ рдЕрдиреБрдХреНрд░рдордорд╛ рдЖрдЙрдиреЗ рдЕрд░реНрдХреЛ рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ RNNs рд▓рд╛рдИ **рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн рдХрд╛рд░реНрдпрд╣рд░реВ** рдЬрд╕реНрддреИ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рдЙрддреНрдкрд╛рджрди, рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рдж, рд░ рдпрд╣рд╛рдБрд╕рдореНрдо рдХрд┐ рдЫрд╡рд┐рдХреЛ рдХреНрдпрд╛рдкреНрд╢рдирд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдкрдЫрд┐рд▓реНрд▓реЛ рдпреБрдирд┐рдЯрдорд╛ рд╣рд╛рдореАрд▓реЗ рдЫрд▓рдлрд▓ рдЧрд░реЗрдХреЛ RNN рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдорд╛, рдкреНрд░рддреНрдпреЗрдХ RNN рдпреБрдирд┐рдЯрд▓реЗ рдЕрд░реНрдХреЛ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛ (hidden state) рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдереНрдпреЛред рддрд░, рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдпреБрдирд┐рдЯрдорд╛ рдЕрд░реНрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрдирд┐ рдердкреНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдПрдЙрдЯрд╛ **рдЕрдиреБрдХреНрд░рдо** (рдЬрд╕рдХреЛ рд▓рдореНрдмрд╛рдЗ рдореВрд▓ рдЕрдиреБрдХреНрд░рдорд╕рдБрдЧ рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдЫ) рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЕрдЭреИ, рд╣рд╛рдореА рддреНрдпрд╕реНрддрд╛ RNN рдпреБрдирд┐рдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдЬрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдорд╛ рдЗрдирдкреБрдЯ рд╕реНрд╡реАрдХрд╛рд░реНрджреИрдирдиреН, рддрд░ рдХреЗрд╡рд▓ рдХреБрдиреИ рд╕реБрд░реБрд╡рд╛рддреА рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░ рд▓рд┐рдиреНрдЫрдиреН, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдиреЛрдЯрдмреБрдХрдорд╛, рд╣рд╛рдореА рд╕рд░рд▓ рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн рдореЛрдбреЗрд▓рд╣рд░реВрдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рд╣реБрдиреЗрдЫреМрдВ рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╛рда рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдЫред рд╕рд░рд▓рддрд╛рдХрд╛ рд▓рд╛рдЧрд┐, рдЖрдЙрдиреБрд╣реЛрд╕реН **рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░рдХреЛ рдиреЗрдЯрд╡рд░реНрдХ** рдирд┐рд░реНрдорд╛рдг рдЧрд░реМрдВ, рдЬрд╕рд▓реЗ рдЕрдХреНрд╖рд░-рдкреНрд░рддрд┐-рдЕрдХреНрд╖рд░ рдкрд╛рда рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛, рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣реА рдкрд╛рда рдХрд░реНрдкрд╕ рд▓рд┐рдиреБрдкрд░реНрдЫ, рд░ рдпрд╕рд▓рд╛рдИ рдЕрдХреНрд╖рд░ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреБрдкрд░реНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"import numpy as np\n",
|
||||
"from torchnlp import *\n",
|
||||
"train_dataset,test_dataset,classes,vocab = load_dataset()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╡рд░реНрдгрдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдирд┐рд░реНрдорд╛рдг\n",
|
||||
"\n",
|
||||
"рд╡рд░реНрдг-рд╕реНрддрд░рдХреЛ рдЬрдирд░реЗрдЯрд┐рдн рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди, рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╛рдард▓рд╛рдИ рд╢рдмреНрджрд╣рд░реВрдорд╛ рд╣реЛрдЗрди, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд░реНрдгрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ рдлрд░рдХ рдЯреЛрдХрдирд╛рдЗрдЬрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Vocabulary size = 82\n",
|
||||
"Encoding of 'a' is 1\n",
|
||||
"Character with code 13 is c\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def char_tokenizer(words):\n",
|
||||
" return list(words) #[word for word in words]\n",
|
||||
"\n",
|
||||
"counter = collections.Counter()\n",
|
||||
"for (label, line) in train_dataset:\n",
|
||||
" counter.update(char_tokenizer(line))\n",
|
||||
"vocab = torchtext.vocab.vocab(counter)\n",
|
||||
"\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"print(f\"Vocabulary size = {vocab_size}\")\n",
|
||||
"print(f\"Encoding of 'a' is {vocab.get_stoi()['a']}\")\n",
|
||||
"print(f\"Character with code 13 is {vocab.get_itos()[13]}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯрдмрд╛рдЯ рдкрд╛рдард▓рд╛рдИ рдХрд╕рд░реА рдПрдиреНрдХреЛрдб рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"tensor([ 0, 1, 2, 2, 3, 4, 5, 6, 3, 7, 8, 1, 9, 10, 3, 11, 2, 1,\n",
|
||||
" 12, 3, 7, 1, 13, 14, 3, 15, 16, 5, 17, 3, 5, 18, 8, 3, 7, 2,\n",
|
||||
" 1, 13, 14, 3, 19, 20, 8, 21, 5, 8, 9, 10, 22, 3, 20, 8, 21, 5,\n",
|
||||
" 8, 9, 10, 3, 23, 3, 4, 18, 17, 9, 5, 23, 10, 8, 2, 2, 8, 9,\n",
|
||||
" 10, 24, 3, 0, 1, 2, 2, 3, 4, 5, 9, 8, 8, 5, 25, 10, 3, 26,\n",
|
||||
" 12, 27, 16, 26, 2, 27, 16, 28, 29, 30, 1, 16, 26, 3, 17, 31, 3, 21,\n",
|
||||
" 2, 5, 9, 1, 23, 13, 32, 16, 27, 13, 10, 24, 3, 1, 9, 8, 3, 10,\n",
|
||||
" 8, 8, 27, 16, 28, 3, 28, 9, 8, 8, 16, 3, 1, 28, 1, 27, 16, 6])"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def enc(x):\n",
|
||||
" return torch.LongTensor(encode(x,voc=vocab,tokenizer=char_tokenizer))\n",
|
||||
"\n",
|
||||
"enc(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА RNN рд▓рд╛рдИ рдкрд╛рда рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдиреЗ рддрд░рд┐рдХрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реБрдиреЗрдЫред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдорд╛, рд╣рд╛рдореА `nchars` рд▓рдореНрдмрд╛рдЗрдХреЛ рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓рд┐рдиреЗрдЫреМрдВ, рд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдЕрдХреНрд╖рд░рдХреЛ рд▓рд╛рдЧрд┐ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдЕрдХреНрд╖рд░ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреЗрдЫреМрдВ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рджреГрд╢реНрдпрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджреИ, рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣реА рд╡рд┐рд╢реЗрд╖ рдЕрдХреНрд╖рд░рд╣рд░реВ рдкрдирд┐ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрди рдЪрд╛рд╣рди рд╕рдХреНрдЫреМрдВ, рдЬрд╕реНрддреИ *end-of-sequence* `<eos>`ред рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рдЕрдиреНрддрд╣реАрди рдкрд╛рда рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛рдХреЛ рдЖрдХрд╛рд░рд▓рд╛рдИ `nchars` рдЯреЛрдХрдирд╣рд░реВрдХреЛ рдмрд░рд╛рдмрд░рдорд╛ рд╕реНрдерд┐рд░ рдЧрд░реНрдиреЗрдЫреМрдВред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг `nchars` рдЗрдирдкреБрдЯрд╣рд░реВ рд░ `nchars` рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВ (рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯ рд╢реНрд░реГрдВрдЦрд▓рд╛рд▓рд╛рдИ рдПрдХ рдкреНрд░рддреАрдХ рдмрд╛рдпрд╛рдБ рд╕рд┐рдлреНрдЯ рдЧрд░реЗрдХреЛ рд╣реБрдиреНрдЫ) рдмрд╛рдЯ рдмрдиреЗрдХреЛ рд╣реБрдиреЗрдЫред рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ рдпрд╕реНрддрд╛ рдзреЗрд░реИ рд╢реНрд░реГрдВрдЦрд▓рд╛рд╣рд░реВ рд╣реБрдиреЗрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рдпрд╕реНрддреЛ рд╣реБрдиреЗрдЫ: рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдЪрд╛рд░ рдкрд╛рдардХреЛ рд▓рдореНрдмрд╛рдЗ `l` рд▓рд┐рдиреЗрдЫреМрдВ, рд░ рддреНрдпрд╕рдмрд╛рдЯ рд╕рдмреИ рд╕рдореНрднрд╛рд╡рд┐рдд рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдпреЛрдЬрдирд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗрдЫреМрдВ (рддреНрдпрд╣рд╛рдБ `l-nchars` рдпрд╕реНрддрд╛ рд╕рдВрдпреЛрдЬрдирд╣рд░реВ рд╣реБрдиреЗрдЫрдиреН)ред рдпреА рд╕рдВрдпреЛрдЬрдирд╣рд░реВрд▓реЗ рдПрдЙрдЯрд╛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рдмрдирд╛рдЙрдиреЗрдЫрдиреН, рд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдгрдорд╛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВрдХреЛ рдЖрдХрд╛рд░ рдлрд░рдХ рд╣реБрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"(tensor([[ 0, 1, 2, ..., 28, 29, 30],\n",
|
||||
" [ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" ...,\n",
|
||||
" [20, 8, 21, ..., 1, 28, 1],\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16]]),\n",
|
||||
" tensor([[ 1, 2, 2, ..., 29, 30, 1],\n",
|
||||
" [ 2, 2, 3, ..., 30, 1, 16],\n",
|
||||
" [ 2, 3, 4, ..., 1, 16, 26],\n",
|
||||
" ...,\n",
|
||||
" [ 8, 21, 5, ..., 28, 1, 27],\n",
|
||||
" [21, 5, 8, ..., 1, 27, 16],\n",
|
||||
" [ 5, 8, 9, ..., 27, 16, 6]]))"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"nchars = 100\n",
|
||||
"\n",
|
||||
"def get_batch(s,nchars=nchars):\n",
|
||||
" ins = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" outs = torch.zeros(len(s)-nchars,nchars,dtype=torch.long,device=device)\n",
|
||||
" for i in range(len(s)-nchars):\n",
|
||||
" ins[i] = enc(s[i:i+nchars])\n",
|
||||
" outs[i] = enc(s[i+1:i+nchars+1])\n",
|
||||
" return ins,outs\n",
|
||||
"\n",
|
||||
"get_batch(train_dataset[0][1])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рдЬреЗрдирд░реЗрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реМрдВред рдпреЛ рдХреБрдиреИ рдкрдирд┐ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕реЗрд▓рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╣реБрди рд╕рдХреНрдЫ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдпреБрдирд┐рдЯрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВ (рд╕рд╛рдзрд╛рд░рдг, LSTM рд╡рд╛ GRU)ред рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА LSTM рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдЕрдХреНрд╖рд░рд╣рд░реВрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рдзреЗрд░реИ рд╕рд╛рдиреЛ рдЫ, рд╣рд╛рдореАрд▓рд╛рдИ embedding рд▓реЗрдпрд░рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░реНрджреИрди, one-hot-encoded рдЗрдирдкреБрдЯ рд╕рд┐рдзреИ LSTM рд╕реЗрд▓рдорд╛ рдЬрд╛рди рд╕рдХреНрдЫред рддрд░, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ LSTM рдорд╛ рдкрд╛рд╕ рдЧрд░реНрдиреБ рдЕрдШрд┐ one-hot-encode рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпреЛ `forward` рдкрд╛рд╕рдХреЛ рдХреНрд░рдордорд╛ `one_hot` рдлрдВрдХреНрд╢рди рдХрд▓ рдЧрд░реЗрд░ рдЧрд░рд┐рдиреНрдЫред рдЖрдЙрдЯрдкреБрдЯ рдЗрдиреНрдХреЛрдбрд░ рднрдиреЗрдХреЛ рдПрдЙрдЯрд╛ linear рд▓реЗрдпрд░ рд╣реБрдиреЗрдЫ рдЬрд╕рд▓реЗ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ one-hot-encoded рдЖрдЙрдЯрдкреБрдЯрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class LSTMGenerator(torch.nn.Module):\n",
|
||||
" def __init__(self, vocab_size, hidden_dim):\n",
|
||||
" super().__init__()\n",
|
||||
" self.rnn = torch.nn.LSTM(vocab_size,hidden_dim,batch_first=True)\n",
|
||||
" self.fc = torch.nn.Linear(hidden_dim, vocab_size)\n",
|
||||
"\n",
|
||||
" def forward(self, x, s=None):\n",
|
||||
" x = torch.nn.functional.one_hot(x,vocab_size).to(torch.float32)\n",
|
||||
" x,s = self.rnn(x,s)\n",
|
||||
" return self.fc(x),s"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛, рд╣рд╛рдореАрд▓реЗ рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рдкрд╛рдард▓рд╛рдИ рдирдореВрдирд╛ рдмрдирд╛рдЙрди рд╕рдХреНрд╖рдо рд╣реБрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рддреНрдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА `generate` рдирд╛рдордХ рдПрдХ рдХрд╛рд░реНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВ рдЬрд╕рд▓реЗ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реНрдЯреНрд░рд┐рдЩ `start` рдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реНрджреИ, рд▓рдореНрдмрд╛рдЗ `size` рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдЩ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╕рд▓реЗ рдХрд╛рдо рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЫред рдкрд╣рд┐рд▓реЛ, рд╣рд╛рдореА рд╕рдореНрдкреВрд░реНрдг `start` рд╕реНрдЯреНрд░рд┐рдЩрд▓рд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдорд╛рд░реНрдлрдд рдкрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдЖрдЙрдЯрдкреБрдЯ рдЕрд╡рд╕реНрдерд╛ `s` рд░ рдЕрд░реНрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░рд┐рдПрдХреЛ рдЕрдХреНрд╖рд░ `out` рд▓рд┐рдиреЗрдЫреМрдВред рдХрд┐рдирднрдиреЗ `out` рдПрдХ-рд╣рдЯ рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдЫ, рд╣рд╛рдореА `argmax` рд▓рд┐рдиреНрдЫреМрдВ рддрд╛рдХрд┐ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдЕрдХреНрд╖рд░ `nc` рдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реН, рд░ `itos` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдХреНрд╖рд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдИ рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реВрдЪреА `chars` рдорд╛ рдердкреНрди рд╕рдХрд┐рдпреЛрд╕реНред рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдПрдХ рдЕрдХреНрд╖рд░ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ, `size` рдкрдЯрдХ рджреЛрд╣реЛрд░реНрдпрд╛рдЗрдиреНрдЫ рддрд╛рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдЕрдХреНрд╖рд░рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def generate(net,size=100,start='today '):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" nc = torch.argmax(out[0][-1])\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реМрдВ! рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реВрдк рд╣рд╛рдореНрд░рд╛ рдЕрдШрд┐рд▓реНрд▓рд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдЬрд╕реНрддреИ рдЫ, рддрд░ рдпрд╕рдкрдЯрдХ рд╣рд╛рдореА рд╕рдЯреАрдХрддрд╛ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реНрдиреЗ рд╕рдЯреНрдЯрд╛ рдкреНрд░рддреНрдпреЗрдХ резрежрежреж рдЗрдкреЛрдХреНрд╕рдорд╛ рдирдореВрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЙрддреНрдкрдиреНрди рдкрд╛рда рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рд╣рд╛рдореАрд▓реЗ рдХрд╕рд░реА рд╣рд╛рдирд┐ рдЧрдгрдирд╛ рдЧрд░реНрдЫреМрдВ рднрдиреНрдиреЗ рдХреБрд░рд╛рдорд╛ рджрд┐рдиреБрдкрд░реНрдЫред рд╣рд╛рдореАрд▓реЗ рдПрдХ-рд╣рдЯ-рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдЖрдЙрдЯрдкреБрдЯ `out` рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд╛рда `text_out` (рдЬрд╕рд▓реЗ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░ рдЗрдиреНрдбреЗрдХреНрд╕рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫ) рджрд┐рдЗрдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╣рд╛рдирд┐ рдЧрдгрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫред рднрд╛рдЧреНрдпрд╡рд╢, `cross_entropy` рдлрдВрдХреНрд╢рдирд▓реЗ рдкрд╣рд┐рд▓реЛ рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рдЕрдирдиреНрдпрд╕реНрдд (unnormalized) рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ рд░ рджреЛрд╕реНрд░реЛ рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рд╡рд░реНрдЧ рд╕рдВрдЦреНрдпрд╛ (class number) рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрдЫ, рдЬреБрди рдареНрдпрд╛рдХреНрдХреИ рд╣рд╛рдореАрд╕рдБрдЧ рдЫред рдпрд╕рд▓реЗ рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рд╕рд╛рдЗрдЬрдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдФрд╕рдд рдЧрдгрдирд╛ рдкрдирд┐ рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореАрд▓реЗ `samples_to_train` рдирдореВрдирд╛рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реАрдорд┐рдд рдЧрд░реНрдЫреМрдВ, рддрд╛рдХрд┐ рдзреЗрд░реИ рд╕рдордп рдХреБрд░реНрдиреБ рдирдкрд░реЛрд╕реНред рд╣рд╛рдореА рддрдкрд╛рдИрдВрд▓рд╛рдИ рд▓рд╛рдореЛ рд╕рдордпрд╕рдореНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдЧрд░реНрдЫреМрдВ, рд╕рдореНрднрд╡рддрдГ рдХреЗрд╣реА рдЗрдкреЛрдХреНрд╕рд╕рдореНрдо (рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдХреЛрдб рд╡рд░рд┐рдкрд░рд┐ рдЕрд░реНрдХреЛ рд▓реВрдк рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫ)ред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Current loss = 4.398899078369141\n",
|
||||
"today sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr sr s\n",
|
||||
"Current loss = 2.161320447921753\n",
|
||||
"today and to the tor to to the tor to to the tor to to the tor to to the tor to to the tor to to the tor t\n",
|
||||
"Current loss = 1.6722588539123535\n",
|
||||
"today and the court to the could to the could to the could to the could to the could to the could to the c\n",
|
||||
"Current loss = 2.423795223236084\n",
|
||||
"today and a second to the conternation of the conternation of the conternation of the conternation of the \n",
|
||||
"Current loss = 1.702607274055481\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.692358136177063\n",
|
||||
"today and the company to the company to the company to the company to the company to the company to the co\n",
|
||||
"Current loss = 1.9722288846969604\n",
|
||||
"today and the control the control the control the control the control the control the control the control \n",
|
||||
"Current loss = 1.8705692291259766\n",
|
||||
"today and the second to the second to the second to the second to the second to the second to the second t\n",
|
||||
"Current loss = 1.7626899480819702\n",
|
||||
"today and a security and a security and a security and a security and a security and a security and a secu\n",
|
||||
"Current loss = 1.5574463605880737\n",
|
||||
"today and the company and the company and the company and the company and the company and the company and \n",
|
||||
"Current loss = 1.5620026588439941\n",
|
||||
"today and the be that the be the be that the be the be that the be the be that the be the be that the be t\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"net = LSTMGenerator(vocab_size,64).to(device)\n",
|
||||
"\n",
|
||||
"samples_to_train = 10000\n",
|
||||
"optimizer = torch.optim.Adam(net.parameters(),0.01)\n",
|
||||
"loss_fn = torch.nn.CrossEntropyLoss()\n",
|
||||
"net.train()\n",
|
||||
"for i,x in enumerate(train_dataset):\n",
|
||||
" # x[0] is class label, x[1] is text\n",
|
||||
" if len(x[1])-nchars<10:\n",
|
||||
" continue\n",
|
||||
" samples_to_train-=1\n",
|
||||
" if not samples_to_train: break\n",
|
||||
" text_in, text_out = get_batch(x[1])\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" out,s = net(text_in)\n",
|
||||
" loss = torch.nn.functional.cross_entropy(out.view(-1,vocab_size),text_out.flatten()) #cross_entropy(out,labels)\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" if i%1000==0:\n",
|
||||
" print(f\"Current loss = {loss.item()}\")\n",
|
||||
" print(generate(net))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рд░рд╛рдореНрд░реЛ рдкрд╛рда рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫ, рддрд░ рдпрд╕рд▓рд╛рдИ рдЕрдЭ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдХреЗрд╣реА рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН:\n",
|
||||
"\n",
|
||||
"* **рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рдЙрддреНрдкрд╛рджрдирд▓рд╛рдИ рдЕрдЭ рд░рд╛рдореНрд░реЛ рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реНред** рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛ рддрдпрд╛рд░ рдЧрд░реНрджрд╛ рдПрдЙрдЯрд╛ рдирдореВрдирд╛рдмрд╛рдЯ рдПрдЙрдЯрд╛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рдЙрддреНрдкрд╛рджрди рдЧрд░реНтАНрдпреМрдВред рдпреЛ рдЖрджрд░реНрд╢ рд╣реЛрдЗрди, рдХрд┐рдирднрдиреЗ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВ рд╕рдмреИ рдлрд░рдХ рдЖрдХрд╛рд░рдХрд╛ рд╣реБрдиреНрдЫрдиреН, рд░ рдХреЗрд╣реА рдЕрд╡рд╕реНрдерд╛рдорд╛ рдд рдЙрддреНрдкрд╛рджрди рдиреИ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди, рдХрд┐рдирднрдиреЗ рдкрд╛рда `nchars` рднрдиреНрджрд╛ рд╕рд╛рдиреЛ рд╣реБрдиреНрдЫред рд╕рд╛рдереИ, рд╕рд╛рдирд╛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВрд▓реЗ GPU рд▓рд╛рдИ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдкрдорд╛ рд▓реЛрдб рдЧрд░реНрджреИрдирдиреНред рд╕рдмреИ рдирдореВрдирд╛рд╣рд░реВрдмрд╛рдЯ рдПрдЙрдЯрд╛ рдареВрд▓реЛ рдкрд╛рдардХреЛ рдЯреБрдХреНрд░рд╛ рд▓рд┐рдиреБ, рддреНрдпрд╕рдкрдЫрд┐ рд╕рдмреИ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдЬреЛрдбреАрд╣рд░реВ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреБ, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╢рдлрд▓ рдЧрд░реНрдиреБ, рд░ рд╕рдорд╛рди рдЖрдХрд╛рд░рдХрд╛ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд╣рд░реВ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреБ рдЕрдЭ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реБрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"* **рдорд▓реНрдЯрд┐рд▓реЗрдпрд░ LSTMред** 2 рд╡рд╛ 3 рддрд╣рдХрд╛ LSTM рд╕реЗрд▓рд╣рд░реВ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред рдЬрд╕реНрддреИ рд╣рд╛рдореАрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдпреБрдирд┐рдЯрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реНтАНрдпреМрдВ, LSTM рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рддрд╣рд▓реЗ рдкрд╛рдардмрд╛рдЯ рдирд┐рд╢реНрдЪрд┐рдд рдврд╛рдБрдЪрд╛рд╣рд░реВ рдирд┐рдХрд╛рд▓реНрдЫред рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░рдХреЛ рдЬреЗрдиреЗрд░реЗрдЯрд░рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореА рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рддрд▓реНрд▓реЛ LSTM рддрд╣рд▓реЗ рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рд╕рдореВрд╣ (syllables) рдирд┐рдХрд╛рд▓реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗрдЫ, рд░ рдорд╛рдерд┐рд▓реНрд▓реЛ рддрд╣рд╣рд░реВрд▓реЗ рд╢рдмреНрдж рд░ рд╢рдмреНрдж рд╕рдВрдпреЛрдЬрдирд╣рд░реВ рдирд┐рдХрд╛рд▓реНрдиреЗрдЫрдиреНред рдпреЛ LSTM рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ рддрд╣рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ (number-of-layers) рдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрд╛рд╕ рдЧрд░реЗрд░ рд╕рдЬрд┐рд▓реИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"* рддрдкрд╛рдИрдВрд▓реЗ **GRU рдпреБрдирд┐рдЯрд╣рд░реВ** рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрдирд┐ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рдЪрд╛рд╣рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рд░ рдХреБрди рд░рд╛рдореНрд░реЛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдЫ рднрдиреЗрд░ рд╣реЗрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╕рд╛рдереИ, **рд╡рд┐рднрд┐рдиреНрди рд▓реБрдХреЗрдХреЛ рддрд╣рдХреЛ рдЖрдХрд╛рд░ (hidden layer sizes)** рд╕рдБрдЧ рдкрдирд┐ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдзреЗрд░реИ рдареВрд▓реЛ рд▓реБрдХреЗрдХреЛ рддрд╣рд▓реЗ рдУрднрд░рдлрд┐рдЯрд┐рдВрдЧрдХреЛ рдХрд╛рд░рдг рджрд┐рди рд╕рдХреНрдЫ (рдЬрд╕реНрддреИ, рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдареНрдпрд╛рдХреНрдХреИ рдкрд╛рда рд╕рд┐рдХреНрдиреЗрдЫ), рд░ рд╕рд╛рдиреЛ рдЖрдХрд╛рд░рд▓реЗ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рдЙрддреНрдкрд╛рджрди рдирдЧрд░реНрди рд╕рдХреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдирд░рдо рдкрд╛рда рдЙрддреНрдкрд╛рджрди рд░ рддрд╛рдкрдХреНрд░рдо\n",
|
||||
"\n",
|
||||
"`generate` рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдкрд░рд┐рднрд╛рд╖рд╛рдорд╛, рд╣рд╛рдореА рд╕рдзреИрдВ рдЙрдЪреНрдЪрддрдо рд╕рдореНрднрд╛рд╡рдирд╛ рднрдПрдХреЛ рдЕрдХреНрд╖рд░рд▓рд╛рдИ рдЙрддреНрдкрдиреНрди рдкрд╛рдардХреЛ рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░рдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдЗрд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВред рдпрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдкрд╛рда рдкреНрд░рд╛рдпрдГ рдмрд╛рд░рдореНрдмрд╛рд░ рдЙрд╣реА рдЕрдХреНрд╖рд░ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрдорд╛ \"рдЪрдХреНрд░\" рд╣реБрдиреЗ рдЧрд░реНрдереНрдпреЛ, рдЬрд╕реНрддреИ рдпреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"рддрд░, рдпрджрд┐ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдореНрднрд╛рд╡рдирд╛ рд╡рд┐рддрд░рдгрд▓рд╛рдИ рд╣реЗрд░реНтАНрдпреМрдВ рднрдиреЗ, рдХреЗрд╣реА рдЙрдЪреНрдЪрддрдо рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВрдХреЛ рдмреАрдЪрдХреЛ рднрд┐рдиреНрдирддрд╛ рдзреЗрд░реИ рдареВрд▓реЛ рдирд╣реБрди рд╕рдХреНрдЫ, рдЬрд╕реНрддреИ рдПрдЙрдЯрд╛ рдЕрдХреНрд╖рд░рдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ реж.реи рд╣реБрди рд╕рдХреНрдЫ, рдЕрд░реНрдХреЛрдХреЛ реж.резреп, рдЖрджрд┐ред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, '*play*' рдЕрдиреБрдХреНрд░рдордорд╛ рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░ рдЦреЛрдЬреНрджрд╛, рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░ рд╕рдорд╛рди рд░реВрдкрдорд╛ рдЦрд╛рд▓реА рдард╛рдЙрдБ рд╡рд╛ **e** (рдЬрд╕реНрддреИ *player* рд╢рдмреНрджрдорд╛) рд╣реБрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдпреЛ рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛ рдкреБрд░реНтАНрдпрд╛рдЙрдБрдЫ рдХрд┐ рд╕рдзреИрдВ рдЙрдЪреНрдЪ рд╕рдореНрднрд╛рд╡рдирд╛ рднрдПрдХреЛ рдЕрдХреНрд╖рд░ рдЪрдпрди рдЧрд░реНрдиреБ \"рдиреНрдпрд╛рдпреЛрдЪрд┐рдд\" рд╣реБрдБрджреИрди, рдХрд┐рдирднрдиреЗ рджреЛрд╕реНрд░реЛ рдЙрдЪреНрдЪрддрдо рдЪрдпрди рдЧрд░реНрджрд╛ рдкрдирд┐ рдЕрд░реНрдердкреВрд░реНрдг рдкрд╛рдардорд╛ рдкреБрдЧреНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рдмрдвреА рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реБрдиреНрдЫ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓реЗ рджрд┐рдПрдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ рд╡рд┐рддрд░рдгрдмрд╛рдЯ рдЕрдХреНрд╖рд░рд╣рд░реВ **рдирдореВрдирд╛** рдЧрд░рд┐рдпреЛрд╕реНред\n",
|
||||
"\n",
|
||||
"рдпреЛ рдирдореВрдирд╛ `multinomial` рдирд╛рдордХ рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ **multinomial distribution** рд▓рд╛рдЧреВ рдЧрд░реНрдЫред рдпреЛ **рдирд░рдо** рдкрд╛рда рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдп рдирд┐рдореНрди рд░реВрдкрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today and a company and complete an all the land the restrational the as a security and has provers the pay to and a report and the computer in the stand has filities and working the law the stations for a company and with the company and the final the first company and refight of the state and and workin\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today he oniis its first to Aus bomblaties the marmation a to manan boogot that pirate assaid a relaid their that goverfin the the Cappets Ecrotional Assonia Cition targets it annight the w scyments Blamity #39;s TVeer Diercheg Reserals fran envyuil that of ster said access what succers of Dour-provelith\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today holy they a 11 will meda a toket subsuaties, engins for Chanos, they's has stainger past to opening orital his thempting new Nattona was al innerforder advan-than #36;s night year his religuled talitatian what the but with Wednesday to Justment will wemen of Mark CCC Camp as Timed Nae wome a leaders\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today gpone 2.5 fech atcusion poor cocles toparsdorM.cht Line Pamage put 43 his calt lowed to the book, that has authh-the silia rruch ailing to'ory andhes beutirsimi- Aefffive heading offil an auf eacklets is charged evis, Gunymy oy) Mony has it after-sloythyor loveId out filme, the Natabl -Najuntaxiggs \n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today plary, P.slan chly\\401 mardregationly #39;t 8.1Mide) closes ,filtcon alfly playin roven!\\grea.-QFBEP: Iss onfarchQ/itilia CCf Zivesigntwasta orce.-Peul-aw.uicrin of fuglinfsut aftaningwo, MIEX awayew Aice Woiduar Corvagiugge oppo esig ThusBratourid canthly-RyI.co lagitems\\eexciaishes.conBabntusmor I\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(net,size=100,start='today ',temperature=1.0):\n",
|
||||
" chars = list(start)\n",
|
||||
" out, s = net(enc(chars).view(1,-1).to(device))\n",
|
||||
" for i in range(size):\n",
|
||||
" #nc = torch.argmax(out[0][-1])\n",
|
||||
" out_dist = out[0][-1].div(temperature).exp()\n",
|
||||
" nc = torch.multinomial(out_dist,1)[0]\n",
|
||||
" chars.append(vocab.get_itos()[nc])\n",
|
||||
" out, s = net(nc.view(1,-1),s)\n",
|
||||
" return ''.join(chars)\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"--- Temperature = {i}\\n{generate_soft(net,size=300,start='Today ',temperature=i)}\\n\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ **рддрд╛рдкрдХреНрд░рдо** рдирд╛рдордХ рдЕрд░реНрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реЗрдХрд╛ рдЫреМрдВ, рдЬрд╕рд▓реЗ рдЙрдЪреНрдЪ рд╕рдореНрднрд╛рд╡рдирд╛рдорд╛ рдХрддреНрддрд┐рдХреЛ рдХрдбрд╛рдЗрдХрд╛ рд╕рд╛рде рдЯрд╛рдБрд╕рд┐рдиреБрдкрд░реНрдЫ рднрдиреЗрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрджрд┐ рддрд╛рдкрдХреНрд░рдо рез.реж рдЫ рднрдиреЗ, рд╣рд╛рдореА рдирд┐рд╖реНрдкрдХреНрд╖ рдмрд╣реБрдкрдж рдирдореВрдирд╛ рд▓рд┐рдиреНрдЫреМрдВ, рд░ рдЬрдм рддрд╛рдкрдХреНрд░рдо рдЕрдирдиреНрддрддрд┐рд░ рдЬрд╛рдиреНрдЫ - рд╕рдмреИ рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВ рд╕рдорд╛рди рд╣реБрдиреНрдЫрдиреН, рд░ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░ рдЕрдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рдЪрдпрди рдЧрд░реНрдЫреМрдВред рддрд▓рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рддрд╛рдкрдХреНрд░рдо рдзреЗрд░реИ рдмрдврд╛рдЙрдБрджрд╛ рдкрд╛рда рдЕрд░реНрдерд╣реАрди рдмрдиреНрдЫ, рд░ рдЬрдм рдпреЛ реж рдирдЬрд┐рдХ рд╣реБрдиреНрдЫ, рдпреЛ \"рдЪрдХреНрд░рд┐рдд\" рдХрдбрд╛-рдЙрддреНрдкрдиреНрди рдкрд╛рда рдЬрд╕реНрддреИ рджреЗрдЦрд┐рдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрдорд╛ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛рд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "7673cd150d96c74c6d6011460094efb4",
|
||||
"translation_date": "2025-08-28T09:16:21+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativePyTorch.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,493 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"Recurrent Neural Networks (RNNs) рд░ рддрд┐рдирдХрд╛ рдЧреЗрдЯреЗрдб рд╕реЗрд▓ рднреЗрд░рд┐рдпрдиреНрдЯрд╣рд░реВ рдЬрд╕реНрддреИ Long Short Term Memory Cells (LSTMs) рд░ Gated Recurrent Units (GRUs) рд▓реЗ рднрд╛рд╖рд╛ рдореЛрдбрд▓рд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдореЗрдХрд╛рдирд┐рдЬреНрдо рдкреНрд░рджрд╛рди рдЧрд░реЗ, рдЕрд░реНрдерд╛рддреН рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╢рдмреНрджрд╣рд░реВрдХреЛ рдХреНрд░рдо рд╕рд┐рдХреНрди рд╕рдХреНрдЫрдиреН рд░ рдЕрдиреБрдХреНрд░рдордорд╛ рдЕрд░реНрдХреЛ рд╢рдмреНрджрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ RNNs рд▓рд╛рдИ **рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн рдХрд╛рд░реНрдпрд╣рд░реВ** рдЬрд╕реНрддреИ рд╕рд╛рдорд╛рдиреНрдп рдкрд╛рда рдЙрддреНрдкрд╛рджрди, рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рдж, рд░ рдпрд╣рд╛рдБрд╕рдореНрдо рдХрд┐ рдЫрд╡рд┐ рдХреНрдпрд╛рдкреНрд╢рдирд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдкрдЫрд┐рд▓реНрд▓реЛ рдпреБрдирд┐рдЯрдорд╛ рд╣рд╛рдореАрд▓реЗ рдЫрд▓рдлрд▓ рдЧрд░реЗрдХреЛ RNN рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдорд╛, рдкреНрд░рддреНрдпреЗрдХ RNN рдпреБрдирд┐рдЯрд▓реЗ рдЕрд░реНрдХреЛ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдереНрдпреЛред рддрд░, рд╣рд╛рдореА рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдпреБрдирд┐рдЯрдорд╛ рдЕрд░реНрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрдирд┐ рдердкреНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ **рдЕрдиреБрдХреНрд░рдо** (рдЬрд╕рдХреЛ рд▓рдореНрдмрд╛рдЗ рдореВрд▓ рдЕрдиреБрдХреНрд░рдорд╕рдБрдЧ рд╕рдорд╛рди рд╣реБрдиреНрдЫ) рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЕрдЭреИ, рд╣рд╛рдореА RNN рдпреБрдирд┐рдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдЬрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдорд╛ рдЗрдирдкреБрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрджреИрдирдиреН, рд░ рдХреЗрд╡рд▓ рдХреЗрд╣реА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рднреЗрдХреНрдЯрд░ рд▓рд┐рдиреНрдЫрдиреН, рдЕрдирд┐ рдЖрдЙрдЯрдкреБрдЯрдХреЛ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдиреЛрдЯрдмреБрдХрдорд╛, рд╣рд╛рдореА рд╕рд░рд▓ рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн рдореЛрдбреЗрд▓рд╣рд░реВрдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рд╣реБрдиреЗрдЫреМрдВ рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╛рда рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдЫред рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рдЖрдЙрдиреБрд╣реЛрд╕реН **рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░ рдиреЗрдЯрд╡рд░реНрдХ** рдирд┐рд░реНрдорд╛рдг рдЧрд░реМрдВ, рдЬрд╕рд▓реЗ рдЕрдХреНрд╖рд░-рдкреНрд░рддрд┐-рдЕрдХреНрд╖рд░ рдкрд╛рда рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдЫред рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛, рд╣рд╛рдореАрд▓реЗ рдХреЗрд╣реА рдкрд╛рда рдХреЛрд╖ рд▓рд┐рдиреЗрдЫреМрдВ, рд░ рдпрд╕рд▓рд╛рдИ рдЕрдХреНрд╖рд░ рдЕрдиреБрдХреНрд░рдордорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░ рд╢рдмреНрджрдХреЛрд╢ рдирд┐рд░реНрдорд╛рдг\n",
|
||||
"\n",
|
||||
"рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░рдХреЛ рдЬреЗрдиреЗрд░реЗрдЯрд┐рдн рдиреЗрдЯрд╡рд░реНрдХ рдмрдирд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рдкрд╛рдард▓рд╛рдИ рд╢рдмреНрджрд╣рд░реВрдорд╛ рд╣реЛрдЗрди, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред `TextVectorization` рд▓реЗрдпрд░, рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рдЖрдПрдХрд╛ рдерд┐рдпреМрдВ, рдпрд╕рд▓рд╛рдИ рдЧрд░реНрди рд╕рдХреНрджреИрди, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд╕рдБрдЧ рджреБрдИ рд╡рд┐рдХрд▓реНрдк рдЫрдиреН:\n",
|
||||
"\n",
|
||||
"* рдкрд╛рдард▓рд╛рдИ рдореНрдпрд╛рдиреБрдЕрд▓реА рд▓реЛрдб рдЧрд░реЗрд░ 'рд╣рд╛рддрд▓реЗ' рдЯреЛрдХрдирд╛рдЗрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЬрд╕реНрддреИ [рдпреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Keras рдЙрджрд╛рд╣рд░рдг](https://keras.io/examples/generative/lstm_character_level_text_generation/) рдорд╛ рджреЗрдЦрд╛рдЗрдПрдХреЛ рдЫред\n",
|
||||
"* рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░рдХреЛ рдЯреЛрдХрдирд╛рдЗрдЬреЗрд╕рдирдХрд╛ рд▓рд╛рдЧрд┐ `Tokenizer` рдХреНрд▓рд╛рд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА рджреЛрд╕реНрд░реЛ рд╡рд┐рдХрд▓реНрдк рдЕрдкрдирд╛рдЙрдиреЗрдЫреМрдВред `Tokenizer` рд▓рд╛рдИ рд╢рдмреНрджрд╣рд░реВрдорд╛ рдЯреЛрдХрдирд╛рдЗрдЬ рдЧрд░реНрди рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░рдмрд╛рдЯ рд╢рдмреНрдж-рд╕реНрддрд░рдХреЛ рдЯреЛрдХрдирд╛рдЗрдЬреЗрд╕рдирдорд╛ рд╕рдЬрд┐рд▓реИ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░рдХреЛ рдЯреЛрдХрдирд╛рдЗрдЬреЗрд╕рди рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ `char_level=True` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])\n",
|
||||
"\n",
|
||||
"tokenizer = keras.preprocessing.text.Tokenizer(char_level=True,lower=False)\n",
|
||||
"tokenizer.fit_on_texts([x['title'].numpy().decode('utf-8') for x in ds_train])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ **sequence рдХреЛ рдЕрдиреНрддреНрдп** рдЬрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯрд╛ рд╡рд┐рд╢реЗрд╖ рдЯреЛрдХрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рдЬрд╕рд▓рд╛рдИ рд╣рд╛рдореА `<eos>` рднрдиреНрдиреЗрдЫреМрдВред рдпрд╕рд▓рд╛рдИ рд╢рдмреНрджрдХреЛрд╢рдорд╛ рдореНрдпрд╛рдиреБрдЕрд▓реА рдердкреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"eos_token = len(tokenizer.word_index)+1\n",
|
||||
"tokenizer.word_index['<eos>'] = eos_token\n",
|
||||
"\n",
|
||||
"vocab_size = eos_token + 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[[48, 2, 10, 10, 5, 44, 1, 25, 5, 8, 10, 13, 78]]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.texts_to_sequences(['Hello, world!'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╢реАрд░реНрд╖рдХрд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдПрдХ рдЬрдирд░реЗрдЯрд┐рдн RNN рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореАрд▓реЗ RNN рд▓рд╛рдИ рд╕рдорд╛рдЪрд╛рд░ рд╢реАрд░реНрд╖рдХрд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рдпрд╕ рдкреНрд░рдХрд╛рд░ рд╣реБрдиреЗрдЫред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдорд╛, рд╣рд╛рдореА рдПрдЙрдЯрд╛ рд╢реАрд░реНрд╖рдХ рд▓рд┐рдиреЗрдЫреМрдВ, рдЬрд╕рд▓рд╛рдИ RNN рдорд╛ рдЦреБрд╡рд╛рдЗрдиреЗрдЫ, рд░ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдЕрдХреНрд╖рд░рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдЕрдХреНрд╖рд░ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреЗрдЫреМрдВ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрдиреБрдХреНрд░рдордХреЛ рдЕрдиреНрддрд┐рдо рдЕрдХреНрд╖рд░рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ `<eos>` рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореАрд▓реЗ рдпрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЬрдирд░реЗрдЯрд┐рдн RNN рдХреЛ рдореБрдЦреНрдп рднрд┐рдиреНрдирддрд╛ рднрдиреЗрдХреЛ рд╣рд╛рдореА RNN рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдмрд╛рдЯ рдЖрдЙрдЯрдкреБрдЯ рд▓рд┐рдиреЗрдЫреМрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЕрдиреНрддрд┐рдо рд╕реЗрд▓рдмрд╛рдЯред рдпреЛ `return_sequences` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд▓рд╛рдИ RNN рд╕реЗрд▓рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реЗрд░ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рддреНрдпрд╕реИрд▓реЗ, рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛, рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдЗрдирдкреБрдЯ рдХреЗрд╣реА рд▓рдореНрдмрд╛рдЗрдХреЛ рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╣реБрдиреЗрдЫ, рд░ рдЖрдЙрдЯрдкреБрдЯ рдЙрд╣реА рд▓рдореНрдмрд╛рдЗрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╣реБрдиреЗрдЫ, рддрд░ рдПрдХ рддрддреНрд╡рд▓реЗ рд╕рд┐рдлреНрдЯ рдЧрд░рд┐рдПрдХреЛ рд░ `<eos>` рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рдЧрд░рд┐рдПрдХреЛред рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдорд╛ рдпрд╕реНрддрд╛ рдзреЗрд░реИ рдЕрдиреБрдХреНрд░рдорд╣рд░реВ рд╣реБрдиреЗрдЫрдиреН, рд░ рд╣рд╛рдореАрд▓реЗ рд╕рдмреИ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд▓рд╛рдИ рдорд┐рд▓рд╛рдЙрди **рдкреНрдпрд╛рдбрд┐рдЩ** рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореАрд▓рд╛рдИ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА рдорд┐рдирд┐рдмреНрдпрд╛рдЪ рд╕реНрддрд░рдорд╛ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд▓рд╛рдИ рдкреНрдпрд╛рдб рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рд╣рд╛рдореА рдкрд╣рд┐рд▓реЗ `.batch()` рдХрд▓ рдЧрд░реЗрд░ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рдмреНрдпрд╛рдЪ рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди `map` рдЧрд░реНрдиреЗрдЫреМрдВред рддреНрдпрд╕реИрд▓реЗ, рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдпрд▓реЗ рд╕рдореНрдкреВрд░реНрдг рдорд┐рдирд┐рдмреНрдпрд╛рдЪрд▓рд╛рдИ рдПрдЙрдЯрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреЗрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch(x):\n",
|
||||
" x = [t.numpy().decode('utf-8') for t in x]\n",
|
||||
" z = tokenizer.texts_to_sequences(x)\n",
|
||||
" z = tf.keras.preprocessing.sequence.pad_sequences(z)\n",
|
||||
" return tf.one_hot(z,vocab_size), tf.one_hot(tf.concat([z[:,1:],tf.constant(eos_token,shape=(len(z),1))],axis=1),vocab_size)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рдЧрд░реНрдиреЗ рдХреЗрд╣реА рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХреБрд░рд╛рд╣рд░реВ:\n",
|
||||
"\n",
|
||||
"* рдкрд╣рд┐рд▓реЛрдорд╛, рд╣рд╛рдореА рд╕реНрдЯреНрд░рд┐рдЩ рдЯреЗрдиреНрд╕рд░рдмрд╛рдЯ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд╛рда рдирд┐рдХрд╛рд▓реНрдЫреМрдВред\n",
|
||||
"* `text_to_sequences` рд▓реЗ рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВрдХреЛ рд╕реВрдЪреАрд▓рд╛рдИ рдкреВрд░реНрдгрд╛рдВрдХ рдЯреЗрдиреНрд╕рд░рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдЫред\n",
|
||||
"* `pad_sequences` рд▓реЗ рддреА рдЯреЗрдиреНрд╕рд░рд╣рд░реВрд▓рд╛рдИ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЕрдзрд┐рдХрддрдо рд▓рдореНрдмрд╛рдЗрд╕рдореНрдо рдкреБрд░реНтАНрдпрд╛рдПрд░ рднрд░реНрдЫред\n",
|
||||
"* рдЕрдиреНрддрддрдГ, рд╣рд╛рдореА рд╕рдмреИ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рд╡рди-рд╣рдЯ рдПрдиреНрдХреЛрдб рдЧрд░реНрдЫреМрдВ, рд╕рд╛рдереИ рд╢рд┐рдлреНрдЯрд┐рдЩ рд░ `<eos>` рдердкреНрдиреЗ рдХрд╛рдо рдкрдирд┐ рдЧрд░реНрдЫреМрдВред рд╣рд╛рдореА рдЪрд╛рдБрдбреИ рдмреБрдЭреНрдиреЗрдЫреМрдВ рдХрд┐ рдХрд┐рди рд╣рд╛рдореАрд▓рд╛рдИ рд╡рди-рд╣рдЯ-рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдЫред\n",
|
||||
"\n",
|
||||
"рддрд░, рдпреЛ рдлрдЩреНрд╕рди **Pythonic** рдЫ, рдЕрд░реНрдерд╛рддреН рдпрд╕рд▓рд╛рдИ Tensorflow рдХреЛ рдХрдореНрдкреНрдпреБрдЯреЗрд╢рдирд▓ рдЧреНрд░рд╛рдлрдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрдиред рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдпреЛ рдлрдЩреНрд╕рдирд▓рд╛рдИ `Dataset.map` рдлрдЩреНрд╕рдирдорд╛ рд╕рд┐рдзреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЦреЛрдЬреНрдпреМрдВ рднрдиреЗ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЖрдЙрдиреЗрдЫрдиреНред рдпрд╕ Pythonic рдХрд▓рд▓рд╛рдИ `py_function` рд░реНтАНрдпрд╛рдкрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдореЗрдЯреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def title_batch_fn(x):\n",
|
||||
" x = x['title']\n",
|
||||
" a,b = tf.py_function(title_batch,inp=[x],Tout=(tf.float32,tf.float32))\n",
|
||||
" return a,b"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"> **рдиреЛрдЯ**: Pythonic рд░ Tensorflow рд░реВрдкрд╛рдиреНрддрд░рдг рдХрд╛рд░реНрдпрд╣рд░реВ рдмреАрдЪрдХреЛ рднрд┐рдиреНрдирддрд╛ рдмреБрдЭреНрди рдЕрд▓рд┐ рдЬрдЯрд┐рд▓ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ, рд░ рддрдкрд╛рдИрдВ рд╕реЛрдЪреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдХрд┐рди рд╣рд╛рдореАрд▓реЗ рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ `fit` рдорд╛ рдкрдард╛рдЙрдиреБ рдЕрдШрд┐ рд╕рд╛рдорд╛рдиреНрдп Python рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрджреИрдиреМрдВред рдпрджреНрдпрдкрд┐ рдпреЛ рдкрдХреНрдХреИ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, `Dataset.map` рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдареВрд▓реЛ рдлрд╛рдЗрджрд╛ рд╣реБрдиреНрдЫ, рдХрд┐рдирднрдиреЗ рдбреЗрдЯрд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдкрд╛рдЗрдкрд▓рд╛рдЗрди Tensorflow рдХреЛ рдЧрдгрдирд╛рддреНрдордХ рдЧреНрд░рд╛рдл рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ GPU рдЧрдгрдирд╛рдХреЛ рдлрд╛рдЗрджрд╛ рд▓рд┐рдиреНрдЫ, рд░ CPU/GPU рдмреАрдЪ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдо рдЧрд░реНрджрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ generator рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпреЛ рдХреБрдиреИ рдкрдирд┐ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕реЗрд▓рдорд╛ рдЖрдзрд╛рд░рд┐рдд рд╣реБрди рд╕рдХреНрдЫ рдЬреБрди рд╣рд╛рдореАрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдЗрдХрд╛рдИрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВ (рдЬрд╕реНрддреИ, simple, LSTM рд╡рд╛ GRU)ред рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореА LSTM рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдЕрдХреНрд╖рд░рд╣рд░реВрд▓рд╛рдИ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫ, рд░ рд╢рдмреНрджрдХреЛрд╢рдХреЛ рдЖрдХрд╛рд░ рдзреЗрд░реИ рд╕рд╛рдиреЛ рдЫ, рд╣рд╛рдореАрд▓рд╛рдИ embedding layer рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкрд░реНрджреИрди, one-hot-encoded рдЗрдирдкреБрдЯ рд╕рд┐рдзреИ LSTM рд╕реЗрд▓рдорд╛ рдЬрд╛рди рд╕рдХреНрдЫред рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░ `Dense` classifier рд╣реБрдиреЗрдЫ, рдЬрд╕рд▓реЗ LSTM рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛рдИ one-hot-encoded рдЯреЛрдХрди рдирдореНрдмрд░рд╣рд░реВрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╕рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореА variable-length sequences рд╕рдВрдЧ рдХрд╛рдо рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВ, рд╣рд╛рдореА `Masking` рд▓реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдЬрд╕рд▓реЗ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ padded рднрд╛рдЧрд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрдиреЗ рдорд╛рд╕реНрдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫред рдпреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ рдЖрд╡рд╢реНрдпрдХ рдЫреИрди, рдХрд┐рдирднрдиреЗ `<eos>` рдЯреЛрдХрди рднрдиреНрджрд╛ рдкрд░рдХреЛ рд╕рдмреИ рдХреБрд░рд╛рдорд╛ рд╣рд╛рдореА рдзреЗрд░реИ рд░реБрдЪрд┐ рд░рд╛рдЦреНрджреИрдиреМрдВ, рддрд░ рд╣рд╛рдореА рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рд▓реЗрдпрд░рд╕рдБрдЧ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред `input_shape` `(None, vocab_size)` рд╣реБрдиреЗрдЫ, рдЬрд╣рд╛рдБ `None` рд▓реЗ variable length рдХреЛ sequence рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫ, рд░ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рдкрдирд┐ `(None, vocab_size)` рд╣реБрдиреЗрдЫ, рдЬреБрди рддрдкрд╛рдИрдВрд▓реЗ `summary` рдмрд╛рдЯ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"masking (Masking) (None, None, 84) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"lstm (LSTM) (None, None, 128) 109056 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense (Dense) (None, None, 84) 10836 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 119,892\n",
|
||||
"Trainable params: 119,892\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n",
|
||||
"15000/15000 [==============================] - 229s 15ms/step - loss: 1.5385\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c1245e0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Masking(input_shape=(None,vocab_size)),\n",
|
||||
" keras.layers.LSTM(128,return_sequences=True),\n",
|
||||
" keras.layers.Dense(vocab_size,activation='softmax')\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()\n",
|
||||
"model.compile(loss='categorical_crossentropy')\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреЗрд╣реА рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред рд╕рдмреИрднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ, рд╣рд╛рдореАрд▓рд╛рдИ рдЯреЛрдХрди рдирдореНрдмрд░рд╣рд░реВрдХреЛ рдХреНрд░рдорджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░рд┐рдПрдХреЛ рдкрд╛рдард▓рд╛рдИ рдбрд┐рдХреЛрдб рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рдЪрд╛рд╣рд┐рдиреНрдЫред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА `tokenizer.sequences_to_texts` рдлрдВрдХреНрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ; рддрд░, рдпреЛ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░ рдЯреЛрдХрдирд╛рдЗрдЬреЗрд╕рдирд╕рдБрдЧ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИрдиред рддреНрдпрд╕реИрд▓реЗ, рд╣рд╛рдореА рдЯреЛрдХрдирд╛рдЗрдЬрд░рдмрд╛рдЯ рдЯреЛрдХрдирд╣рд░реВрдХреЛ рд╢рдмреНрджрдХреЛрд╢ (рдЬрд╕рд▓рд╛рдИ `word_index` рднрдирд┐рдиреНрдЫ) рд▓рд┐рдиреНрдЫреМрдВ, рд░рд┐рднрд░реНрд╕ рдореНрдпрд╛рдк рдмрдирд╛рдЙрдБрдЫреМрдВ, рд░ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рдбрд┐рдХреЛрдбрд┐рдЩ рдлрдВрдХреНрд╢рди рд▓реЗрдЦреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"reverse_map = {val:key for key, val in tokenizer.word_index.items()}\n",
|
||||
"\n",
|
||||
"def decode(x):\n",
|
||||
" return ''.join([reverse_map[t] for t in x])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм, рд╣рд╛рдореА рдХреЗрд╣реА рд╕реНрдЯреНрд░рд┐рдЩ `start` рдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВ, рдпрд╕рд▓рд╛рдИ рдПрдХ рдЕрдиреБрдХреНрд░рдо `inp` рдорд╛ рдПрдиреНрдХреЛрдб рдЧрд░реНрдиреЗрдЫреМрдВ, рд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдорд╛ рд╣рд╛рдореНрд░реЛ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рдмреЛрд▓рд╛рдЙрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЖрдЙрдЯрдкреБрдЯ `out` рдПрдХ `vocab_size` рддрддреНрд╡рд╣рд░реВрдХреЛ рднреЗрдХреНрдЯрд░ рд╣реЛ рдЬрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрдирдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫ, рд░ рд╣рд╛рдореА `argmax` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдмреИрднрдиреНрджрд╛ рд╕рдореНрднрд╛рд╡рд┐рдд рдЯреЛрдХрди рдирдореНрдмрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рд╕рдХреНрдЫреМрдВред рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рдпреЛ рдЕрдХреНрд╖рд░рд▓рд╛рдИ рдЙрддреНрдкрдиреНрди рдЯреЛрдХрдирд╣рд░реВрдХреЛ рд╕реВрдЪреАрдорд╛ рдердкреНрдЫреМрдВ, рд░ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдЕрдЧрд╛рдбрд┐ рдмрдврд╛рдЙрдБрдЫреМрдВред рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЕрдХреНрд╖рд░ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди `size` рдкрдЯрдХ рджреЛрд╣реЛрд░реНрдпрд╛рдЗрдиреНрдЫ рддрд╛рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЕрдХреНрд╖рд░рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реН, рд░ рд╣рд╛рдореА рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд░реВрдкрдорд╛ `eos_token` рднреЗрдЯрд┐рдПрдкрдЫрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реЛрдХреНрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'Today #39;s lead to strike for the strike for the strike for the strike (AFP)'"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate(model,size=100,start='Today '):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" nc = tf.argmax(out)\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc.numpy())\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
" \n",
|
||||
"generate(model)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рдирдореВрдирд╛ рдЖрдЙрдЯрдкреБрдЯ \n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд╕рдБрдЧ *рд╕рдЯреАрдХрддрд╛* рдЬрд╕реНрддрд╛ рдХреБрдиреИ рдЙрдкрдпреЛрдЧреА рдореЗрдЯреНрд░рд┐рдХреНрд╕рд╣рд░реВ рдЫреИрдирдиреН, рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓ рд╕реБрдзрд╛рд░ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдорд╛рддреНрд░ рддрд░рд┐рдХрд╛ рднрдиреЗрдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рдЙрддреНрдкрдиреНрди рдЧрд░рд┐рдПрдХреЛ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ **рдирдореВрдирд╛ рд▓рд┐рдиреБ** рд╣реЛред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА **рдХрд▓рдмреНрдпрд╛рдХрд╣рд░реВ** рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЕрд░реНрдерд╛рддреН рддреНрдпрд╕реНрддрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдЬреБрди рд╣рд╛рдореА `fit` рдХрд╛рд░реНрдпрдорд╛ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рд░ рдЬреБрди рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рд╕рдордп-рд╕рдордпрдорд╛ рдмреЛрд▓рд╛рдЗрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Epoch 1/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.2703\n",
|
||||
"Today #39;s a lead in the company for the strike\n",
|
||||
"Epoch 2/3\n",
|
||||
"15000/15000 [==============================] - 227s 15ms/step - loss: 1.2057\n",
|
||||
"Today #39;s the Market Service on Security Start (AP)\n",
|
||||
"Epoch 3/3\n",
|
||||
"15000/15000 [==============================] - 226s 15ms/step - loss: 1.1752\n",
|
||||
"Today #39;s a line on the strike to start for the start\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7fa40c74e3d0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"sampling_callback = keras.callbacks.LambdaCallback(\n",
|
||||
" on_epoch_end = lambda batch, logs: print(generate(model))\n",
|
||||
")\n",
|
||||
"\n",
|
||||
"model.fit(ds_train.batch(8).map(title_batch_fn),callbacks=[sampling_callback],epochs=3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЛ рдЙрджрд╛рд╣рд░рдгрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдХреЗрд╣реА рд░рд╛рдореНрд░реЛ рдкрд╛рда рдЙрддреНрдкрд╛рджрди рдЧрд░реНрджрдЫ, рддрд░ рдпрд╕рд▓рд╛рдИ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рдорд╛ рдЕрдЭ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n",
|
||||
"* **рдЕрдзрд┐рдХ рдкрд╛рда**ред рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдХрд╛рд░реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖рдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХрд╛ рдЫреМрдВ, рддрд░ рддрдкрд╛рдИрдВ рдкреВрд░реНрдг рдкрд╛рдард╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред рдпрд╛рдж рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ RNNs рд▓рд╛рдореЛ рдЕрдиреБрдХреНрд░рдорд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рдзреЗрд░реИ рд░рд╛рдореНрд░реЛ рдЫреИрдирдиреН, рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЫреЛрдЯреЛ рд╡рд╛рдХреНрдпрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреБ рд╡рд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрдХреНрд░рдо рд▓рдореНрдмрд╛рдЗ `num_chars` (рдЬрд╕реНрддреИ, 256) рдХреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдирдорд╛ рд╕рдзреИрдВ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред рддрдкрд╛рдИрдВ рдорд╛рдерд┐рдХреЛ рдЙрджрд╛рд╣рд░рдгрд▓рд╛рдИ рдпрд╕реНрддреЛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛рдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, [рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Keras рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓](https://keras.io/examples/generative/lstm_character_level_text_generation/) рд▓рд╛рдИ рдкреНрд░реЗрд░рдгрд╛рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИред\n",
|
||||
"* **рдмрд╣реБ-рд╕реНрддрд░реАрдп LSTM**ред LSTM рдХреЛ 2 рд╡рд╛ 3 рддрд╣ рдХреЛрд╢рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБ рдЙрдкрдпреБрдХреНрдд рд╣реБрдиреНрдЫред рдЬрд╕реНрддреИ рд╣рд╛рдореАрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдЗрдХрд╛рдИрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реНрдпреМрдВ, рдкреНрд░рддреНрдпреЗрдХ LSTM рддрд╣рд▓реЗ рдкрд╛рдардмрд╛рдЯ рдирд┐рд╢реНрдЪрд┐рдд рдврд╛рдБрдЪрд╛рд╣рд░реВ рдирд┐рдХрд╛рд▓реНрдЫ, рд░ рдХреНрдпрд╛рд░реЗрдХреНрдЯрд░-рд╕реНрддрд░рдХреЛ рдЬреЗрдиреЗрд░реЗрдЯрд░рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╣рд╛рдореА рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рддрд▓реНрд▓реЛ LSTM рддрд╣рд▓реЗ рдЕрдХреНрд╖рд░рд╣рд░реВ рдирд┐рдХрд╛рд▓реНрдиреЗ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реА рд▓рд┐рдиреНрдЫ, рд░ рдорд╛рдерд┐рд▓реНрд▓реЛ рддрд╣рд╣рд░реВрд▓реЗ рд╢рдмреНрдж рд░ рд╢рдмреНрдж рд╕рдВрдпреЛрдЬрдирд╣рд░реВред рдпреЛ рд╕рд░рд▓ рд░реВрдкрдорд╛ LSTM рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ рддрд╣рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд░ рдЧрд░реЗрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"* рддрдкрд╛рдИрдВ **GRU рдпреБрдирд┐рдЯрд╣рд░реВ** рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреБрди рд░рд╛рдореНрд░реЛ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдЫрдиреН рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ, рд░ **рд╡рд┐рднрд┐рдиреНрди рд▓реБрдХреЗрдХреЛ рддрд╣ рдЖрдХрд╛рд░рд╣рд░реВ** рд╕рдВрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред рдзреЗрд░реИ рдареВрд▓реЛ рд▓реБрдХреЗрдХреЛ рддрд╣рд▓реЗ рдУрднрд░рдлрд┐рдЯрд┐рдВрдЧрдХреЛ рдкрд░рд┐рдгрд╛рдо рджрд┐рди рд╕рдХреНрдЫ (рдЬрд╕реНрддреИ, рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рдареНрдпрд╛рдХреНрдХреИ рдкрд╛рда рд╕рд┐рдХреНрдЫ), рд░ рд╕рд╛рдиреЛ рдЖрдХрд╛рд░рд▓реЗ рд░рд╛рдореНрд░реЛ рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрд╛рджрди рдирдЧрд░реНрди рд╕рдХреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рд╕рдлреНрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдЙрддреНрдкрд╛рджрди рд░ рддрд╛рдкрдорд╛рди\n",
|
||||
"\n",
|
||||
"`generate` рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдкрд░рд┐рднрд╛рд╖рд╛рдорд╛, рд╣рд╛рдореА рд╕рдзреИрдВ рдЙрдЪреНрдЪрддрдо рд╕рдореНрднрд╛рд╡рдирд╛ рднрдПрдХреЛ рдЕрдХреНрд╖рд░рд▓рд╛рдИ рдЙрддреНрдкрдиреНрди рдЯреЗрдХреНрд╕реНрдЯрдХреЛ рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░рдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдЗрд░рд╣реЗрдХрд╛ рдерд┐рдпреМрдВред рдпрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд╛рдпрдГ рдмрд╛рд░рдореНрдмрд╛рд░ рдЙрд╣реА рдЕрдХреНрд╖рд░ рдЕрдиреБрдХреНрд░рдордорд╛ \"рдЪрдХреНрд░\" рд╣реБрдиреЗ рдЧрд░реНрдереНрдпреЛ, рдЬрд╕реНрддреИ рдпреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛:\n",
|
||||
"```\n",
|
||||
"today of the second the company and a second the company ...\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"рддрд░, рдпрджрд┐ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░рдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ рд╡рд┐рддрд░рдгрд▓рд╛рдИ рд╣реЗрд░реНрдЫреМрдВ рднрдиреЗ, рдХреЗрд╣реА рдЙрдЪреНрдЪрддрдо рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВрдХреЛ рдмреАрдЪрдХреЛ рдЕрдиреНрддрд░ рдареВрд▓реЛ рдирд╣реБрди рд╕рдХреНрдЫ, рдЬрд╕реНрддреИ рдПрдЙрдЯрд╛ рдЕрдХреНрд╖рд░рдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ реж.реи рд╣реБрди рд╕рдХреНрдЫ рднрдиреЗ рдЕрд░реНрдХреЛрдХреЛ реж.резрепред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, '*play*' рдЕрдиреБрдХреНрд░рдордХреЛ рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░ рдЦреЛрдЬреНрджрд╛, рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░ рд╕реНрдкреЗрд╕ рд╡рд╛ **e** (рдЬрд╕реНрддреИ *player* рд╢рдмреНрджрдорд╛) рджреБрд╡реИ рд╣реБрди рд╕рдХреНрдЫред\n",
|
||||
"\n",
|
||||
"рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдпреЛ рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛ рдкреБрд░реНтАНрдпрд╛рдЙрдБрдЫ рдХрд┐ рдЙрдЪреНрдЪ рд╕рдореНрднрд╛рд╡рдирд╛ рднрдПрдХреЛ рдЕрдХреНрд╖рд░ рдЪрдпрди рдЧрд░реНрдиреБ рд╕рдзреИрдВ \"рдиреНрдпрд╛рдпреЛрдЪрд┐рдд\" рд╣реБрдБрджреИрди, рдХрд┐рдирдХрд┐ рджреЛрд╕реНрд░реЛ рдЙрдЪреНрдЪрддрдо рдЪрдпрди рдЧрд░реНрджрд╛ рдкрдирд┐ рдЕрд░реНрдердкреВрд░реНрдг рдЯреЗрдХреНрд╕реНрдЯрдорд╛ рдкреБрдЧреНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рдЕрдзрд┐рдХ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реБрдиреНрдЫ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓реЗ рджрд┐рдПрдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ рд╡рд┐рддрд░рдгрдмрд╛рдЯ рдЕрдХреНрд╖рд░рд╣рд░реВ **рдирдореВрдирд╛** рдЧрд░реМрдВред\n",
|
||||
"\n",
|
||||
"рдпреЛ рдирдореВрдирд╛ `np.multinomial` рдлрдЩреНрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ **рдорд▓реНрдЯрд┐рдиреЛрдорд┐рдпрд▓ рд╡рд┐рддрд░рдг** рдирд╛рдордХ рд╡рд┐рдзрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдЫред рддрд▓ рджрд┐рдЗрдПрдХреЛ рдлрдЩреНрд╕рдирд▓реЗ рдпреЛ **рд╕рдлреНрдЯ** рдЯреЗрдХреНрд╕реНрдЯ рдЙрддреНрдкрд╛рджрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
"--- Temperature = 0.3\n",
|
||||
"Today #39;s strike #39; to start at the store return\n",
|
||||
"On Sunday PO to Be Data Profit Up (Reuters)\n",
|
||||
"Moscow, SP wins straight to the Microsoft #39;s control of the space start\n",
|
||||
"President olding of the blast start for the strike to pay <b>...</b>\n",
|
||||
"Little red riding hood ficed to the spam countered in European <b>...</b>\n",
|
||||
"\n",
|
||||
"--- Temperature = 0.8\n",
|
||||
"Today countie strikes ryder missile faces food market blut\n",
|
||||
"On Sunday collores lose-toppy of sale of Bullment in <b>...</b>\n",
|
||||
"Moscow, IBM Diffeiting in Afghan Software Hotels (Reuters)\n",
|
||||
"President Ol Luster for Profit Peaced Raised (AP)\n",
|
||||
"Little red riding hood dace on depart talks #39; bank up\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.0\n",
|
||||
"Today wits House buiting debate fixes #39; supervice stake again\n",
|
||||
"On Sunday arling digital poaching In for level\n",
|
||||
"Moscow, DS Up 7, Top Proble Protest Caprey Mamarian Strike\n",
|
||||
"President teps help of roubler stepted lessabul-Dhalitics (AFP)\n",
|
||||
"Little red riding hood signs on cash in Carter-youb\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.3\n",
|
||||
"Today wits flawer ro, pSIA figat's co DroftwavesIs Talo up\n",
|
||||
"On Sunday hround elitwing wint EU Powerburlinetien\n",
|
||||
"Moscow, Bazz #39;s sentries olymen winnelds' next for Olympite Huc?\n",
|
||||
"President lost securitys from power Elections in Smiltrials\n",
|
||||
"Little red riding hood vides profit, exponituity, profitmainalist-at said listers\n",
|
||||
"\n",
|
||||
"--- Temperature = 1.8\n",
|
||||
"Today #39;It: He deat: N.KA Asside\n",
|
||||
"On Sunday i arry Par aldeup patient Wo stele1\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"ename": "KeyError",
|
||||
"evalue": "0",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"\\n--- Temperature = {i}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mj\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mgenerate_soft\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msize\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m300\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mwords\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mj\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mtemperature\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-33-db32367a0feb>\u001b[0m in \u001b[0;36mgenerate_soft\u001b[0;34m(model, size, start, temperature)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mchars\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0minp\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minp\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mnc\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mchars\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mwords\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m'Today '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'On Sunday '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Moscow, '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'President '\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'Little red riding hood '\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36mdecode\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;32m<ipython-input-10-3f5fa6130b1d>\u001b[0m in \u001b[0;36m<listcomp>\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mdecode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mreverse_map\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mt\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||||
"\u001b[0;31mKeyError\u001b[0m: 0"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def generate_soft(model,size=100,start='Today ',temperature=1.0):\n",
|
||||
" inp = tokenizer.texts_to_sequences([start])[0]\n",
|
||||
" chars = inp\n",
|
||||
" for i in range(size):\n",
|
||||
" out = model(tf.expand_dims(tf.one_hot(inp,vocab_size),0))[0][-1]\n",
|
||||
" probs = tf.exp(tf.math.log(out)/temperature).numpy().astype(np.float64)\n",
|
||||
" probs = probs/np.sum(probs)\n",
|
||||
" nc = np.argmax(np.random.multinomial(1,probs,1))\n",
|
||||
" if nc==eos_token:\n",
|
||||
" break\n",
|
||||
" chars.append(nc)\n",
|
||||
" inp = inp+[nc]\n",
|
||||
" return decode(chars)\n",
|
||||
"\n",
|
||||
"words = ['Today ','On Sunday ','Moscow, ','President ','Little red riding hood ']\n",
|
||||
" \n",
|
||||
"for i in [0.3,0.8,1.0,1.3,1.8]:\n",
|
||||
" print(f\"\\n--- Temperature = {i}\")\n",
|
||||
" for j in range(5):\n",
|
||||
" print(generate_soft(model,size=300,start=words[j],temperature=i))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ **рддрд╛рдкрдХреНрд░рдо** рдирд╛рдордХ рдЕрд░реНрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реЗрдХрд╛ рдЫреМрдВ, рдЬрд╕рд▓реЗ рдЙрдЪреНрдЪ рд╕рдореНрднрд╛рд╡рдирд╛рдорд╛ рдХрддрд┐ рджреГрдврддрд╛рдХрд╛ рд╕рд╛рде рдЯрд╛рдБрд╕рд┐рдиреБрдкрд░реНрдЫ рднрдиреЗрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрджрд┐ рддрд╛рдкрдХреНрд░рдо рез.реж рдЫ рднрдиреЗ, рд╣рд╛рдореА рдирд┐рд╖реНрдкрдХреНрд╖ рдмрд╣реБрдкрдж рдирдореВрдирд╛ рд▓рд┐рдиреНрдЫреМрдВ, рд░ рдЬрдм рддрд╛рдкрдХреНрд░рдо рдЕрдирдиреНрддрддрд┐рд░ рдЬрд╛рдиреНрдЫ - рд╕рдмреИ рд╕рдореНрднрд╛рд╡рдирд╛рд╣рд░реВ рд╕рдорд╛рди рд╣реБрдиреНрдЫрдиреН, рд░ рд╣рд╛рдореАрд▓реЗ рдЕрд░реНрдХреЛ рдЕрдХреНрд╖рд░ рдЕрдирд┐рдпрдорд┐рдд рд░реВрдкрдорд╛ рдЪрдпрди рдЧрд░реНрдЫреМрдВред рддрд▓рдХреЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рдЬрдм рд╣рд╛рдореА рддрд╛рдкрдХреНрд░рдо рдзреЗрд░реИ рдмрдврд╛рдЙрдБрдЫреМрдВ, рдкрд╛рда рдЕрд░реНрдерд╣реАрди рдмрдиреНрдЫ, рд░ рдЬрдм рдпреЛ реж рдирдЬрд┐рдХ рдЬрд╛рдиреНрдЫ, рдпреЛ \"рдЪрдХреНрд░рд┐рдд\" рдХрдбрд╛-рдЙрддреНрдкрдиреНрди рдкрд╛рда рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред \n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "9fbb7d5fda708537649f71f5f646fcde",
|
||||
"translation_date": "2025-08-28T09:12:58+00:00",
|
||||
"source_file": "lessons/5-NLP/17-GenerativeNetworks/GenerativeTF.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,353 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдгрд╛рд▓реА рд░ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░рд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдХреЛ рдПрдХ рдкреНрд░рдореБрдЦ рдХрдордЬреЛрд░реА рдпреЛ рд╣реЛ рдХрд┐ рдЕрдиреБрдХреНрд░рдордХрд╛ рд╕рдмреИ рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдирддрд┐рдЬрд╛рдорд╛ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫрдиреНред рдпрд╕рд▓реЗ рдирд╛рдорд┐рдд рдЗрдХрд╛рдИ рдкрд╣рд┐рдЪрд╛рди (Named Entity Recognition) рд░ рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рдж (Machine Translation) рдЬрд╕реНрддрд╛ рдЕрдиреБрдХреНрд░рдо-рджреЗрдЦрд┐-рдЕрдиреБрдХреНрд░рдо рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдирдХ LSTM рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЛрдбреЗрд▓рд╣рд░реВрд╕рдБрдЧ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рд╕рдХреНрджреИрдиред рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛, рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдордХрд╛ рдХреЗрд╣реА рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдЕрдиреНрдп рд╢рдмреНрджрд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирддрд┐рдЬрд╛рд╣рд░реВрдорд╛ рдмрдвреА рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рдж рдЬрд╕реНрддрд╛ рдЕрдиреБрдХреНрд░рдо-рджреЗрдЦрд┐-рдЕрдиреБрдХреНрд░рдо рдореЛрдбреЗрд▓рд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпреЛ рджреБрдИ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ, рдЬрд╣рд╛рдБ рдПрдЙрдЯрд╛ рдиреЗрдЯрд╡рд░реНрдХ (**рдПрдиреНрдХреЛрдбрд░**) рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╕рдЩреНрдХреБрдЪрд┐рдд рдЧрд░реНрдЫ, рд░ рдЕрд░реНрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ (**рдбрд┐рдХреЛрдбрд░**) рдпрд╕ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рдЕрдиреБрд╡рд╛рджрд┐рдд рдирддрд┐рдЬрд╛рдорд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдЫред рдпрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЕрдиреНрддрд┐рдо рдЕрд╡рд╕реНрдерд╛рд▓реЗ рд╡рд╛рдХреНрдпрдХреЛ рд╕реБрд░реБрд╡рд╛рдд рд╕рдореНрдЭрди рдЧрд╛рд╣реНрд░реЛ рд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рд▓рд╛рдореЛ рд╡рд╛рдХреНрдпрд╣рд░реВрдорд╛ рдореЛрдбреЗрд▓рдХреЛ рдЧреБрдгрд╕реНрддрд░ рдХрдордЬреЛрд░ рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"**рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ** (Attention Mechanisms) рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рднреЗрдХреНрдЯрд░рдХреЛ рд╕рдиреНрджрд░реНрднрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡рд▓рд╛рдИ RNN рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреАрдорд╛ рддреМрд▓ рджрд┐рдиреЗ рдорд╛рдзреНрдпрдо рдкреНрд░рджрд╛рди рдЧрд░реНрдЫред рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рднрдиреЗрдХреЛ рдЗрдирдкреБрдЯ RNN рдХрд╛ рдордзреНрдпрд╡рд░реНрддреА рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рд░ рдЖрдЙрдЯрдкреБрдЯ RNN рдмреАрдЪ рдЫреЛрдЯреЛ рдорд╛рд░реНрдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд╣реЛред рдпрд╕рд░реА, рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рддреАрдХ $y_t$ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрд╛, рд╣рд╛рдореА рд╕рдмреИ рдЗрдирдкреБрдЯ рд▓реБрдХреЗрдХрд╛ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ $h_i$ рд▓рд╛рдИ рд╡рд┐рднрд┐рдиреНрди рддреМрд▓ рдЧреБрдгрд╛рдВрдХ $\\alpha_{t,i}$ рдХрд╛ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) рдорд╛ рдПрдбрд┐рдЯрд┐рдн рдзреНрдпрд╛рди рдкреНрд░рдгрд╛рд▓реА рднрдПрдХреЛ рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЛрдбреЗрд▓, [рдпреЛ рдмреНрд▓рдЧ рдкреЛрд╕реНрдЯ](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) рдмрд╛рдЯ рдЙрджреНрдзреГрдд]*\n",
|
||||
"\n",
|
||||
"рдзреНрдпрд╛рди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ $\\{\\alpha_{i,j}\\}$ рд▓реЗ рдЗрдирдкреБрдЯрдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрдХреНрд░рдордХреЛ рдХреБрдиреИ рд╢рдмреНрдж рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдХрддреНрддрд┐рдХреЛ рднреВрдорд┐рдХрд╛ рдЦреЗрд▓реНрдЫрдиреН рднрдиреНрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫред рддрд▓ рдпрд╕реНрддреЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЗрдПрдХреЛ рдЫ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рдЪрд┐рддреНрд░ (Fig.3)*\n",
|
||||
"\n",
|
||||
"рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рд╢реЛрдзрдирдорд╛ рд╣рд╛рд▓рдХреЛ рд╡рд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдпрдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрд╡рд╕реНрдерд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдЫрдиреНред рддрд░ рдзреНрдпрд╛рди рдердкреНрджрд╛ рдореЛрдбреЗрд▓рдХрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдзреЗрд░реИ рдмрдвреНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ RNN рд╣рд░реВрд╕рдБрдЧ рд╕реНрдХреЗрд▓рд┐рдЩ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫред RNN рд╣рд░реВрдХреЛ рд╕реНрдХреЗрд▓рд┐рдЩрдХреЛ рдкреНрд░рдореБрдЦ рдмрд╛рдзрд╛ рднрдиреЗрдХреЛ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рдХреГрддрд┐рд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд▓рд╛рдИ рдмреНрдпрд╛рдЪ рд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдмрдирд╛рдЙрди рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдмрдирд╛рдЙрдБрдЫред RNN рдорд╛ рдЕрдиреБрдХреНрд░рдордХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡рд▓рд╛рдИ рдХреНрд░рдорд┐рдХ рд░реВрдкрдорд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдпрд╕рд▓рд╛рдИ рд╕рдЬрд┐рд▓реИ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдмрдирд╛рдЙрди рд╕рдХрд┐рдБрджреИрдиред\n",
|
||||
"\n",
|
||||
"рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреЗ рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рдЕрдкрдирддреНрд╡ рд░ рдпрд╕ рдмрд╛рдзрд╛рд▓реЗ рдЖрдЬ рд╣рд╛рдореАрд▓реЗ BERT рджреЗрдЦрд┐ OpenGPT3 рд╕рдореНрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНтАНрдпреЛред\n",
|
||||
"\n",
|
||||
"## рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдЕрдШрд┐рд▓реНрд▓реЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреАрдХреЛ рд╕рдиреНрджрд░реНрднрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЪрд░рдгрдорд╛ рдЕрдЧрд╛рдбрд┐ рдмрдврд╛рдЙрдиреЗ рд╕рдЯреНрдЯрд╛, **рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВ** рд▓реЗ **рд╕реНрдерд╛рдирдЧрдд рдПрдиреНрдХреЛрдбрд┐рдЩрд╣рд░реВ** рд░ рдзреНрдпрд╛рди рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рджрд┐рдЗрдПрдХреЛ рдЗрдирдкреБрдЯрдХреЛ рд╕рдиреНрджрд░реНрднрд▓рд╛рдИ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдкрд╛рдардХреЛ рдЭреНрдпрд╛рд▓рднрд┐рддреНрд░ рд╕рдореЗрдЯреНрдЫред рддрд▓рдХреЛ рдЫрд╡рд┐рд▓реЗ рдХрд╕рд░реА рд╕реНрдерд╛рдирдЧрдд рдПрдиреНрдХреЛрдбрд┐рдЩрд╣рд░реВрд▓реЗ рдзреНрдпрд╛рди рдкреНрд░рдгрд╛рд▓реАрд╕рдБрдЧ рдорд┐рд▓реЗрд░ рдЭреНрдпрд╛рд▓рднрд┐рддреНрд░рдХреЛ рд╕рдиреНрджрд░реНрдн рд╕рдореЗрдЯреНрди рд╕рдХреНрдЫ рднрдиреНрдиреЗ рджреЗрдЦрд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рд╕реНрдерд╛рдирд▓рд╛рдИ рд╕реНрд╡рддрдиреНрддреНрд░ рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд╛рдирдорд╛ рдореНрдпрд╛рдк рдЧрд░рд┐рдиреНрдЫ, рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░рд╣рд░реВрд▓реЗ RNN рд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛ рд░рд╛рдореНрд░реЛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдзреЗрд░реИ рдареВрд▓реЛ рд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдкреВрд░реНрдг рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рд╕рдХреНрд╖рдо рд╣реБрдиреНрдЫрдиреНред рдкреНрд░рддреНрдпреЗрдХ рдзреНрдпрд╛рди рд╣реЗрдбрд▓реЗ рд╢рдмреНрджрд╣рд░реВ рдмреАрдЪрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╕рд┐рдХреНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рд╢реЛрдзрдирдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рд╕реБрдзрд╛рд░ рдЧрд░реНрдЫред\n",
|
||||
"\n",
|
||||
"**BERT** (Bidirectional Encoder Representations from Transformers) рдПрдХ рдзреЗрд░реИ рдареВрд▓реЛ рдмрд╣реБ-рддрд╣ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдиреЗрдЯрд╡рд░реНрдХ рд╣реЛ, рдЬрд╕рдорд╛ *BERT-base* рдХрд╛ рд▓рд╛рдЧрд┐ резреи рддрд╣рд╣рд░реВ рд░ *BERT-large* рдХрд╛ рд▓рд╛рдЧрд┐ реирек рддрд╣рд╣рд░реВ рдЫрдиреНред рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рдареВрд▓реЛ рдкрд╛рда рдбрд╛рдЯрд╛рдХреЛ рдХрд░реНрдкрд╕ (WikiPedia + рдкреБрд╕реНрддрдХрд╣рд░реВ) рдорд╛ рдЕрд╕реБрдкрд░рднрд╛рдЗрдЬреНрдб рдкреНрд░рд╢рд┐рдХреНрд╖рдг (рд╡рд╛рдХреНрдпрдорд╛ рд▓реБрдХреЗрдХрд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░рд┐рдиреНрдЫред рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рдореЛрдбреЗрд▓рд▓реЗ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕реНрддрд░рдХреЛ рднрд╛рд╖рд╛ рдмреБрдЭрд╛рдЗ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫ, рдЬрд╕рд▓рд╛рдИ рдЕрдиреНрдп рдбрд╛рдЯрд╛рд╕реЗрдЯрд╣рд░реВрд╕рдБрдЧ рдлрд╛рдЗрди рдЯреНрдпреБрдирд┐рдЩ рдЧрд░реЗрд░ рдЙрдкрдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ **рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рд▓рд░реНрдирд┐рдЩ** рднрдирд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"BERT, DistilBERT, BigBird, OpenGPT3 рдЬрд╕реНрддрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдХрд╛ рдзреЗрд░реИ рднреЗрд░рд┐рдПрд╕рдирд╣рд░реВ рдЫрдиреН, рдЬрд╕рд▓рд╛рдИ рдлрд╛рдЗрди рдЯреНрдпреБрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред [HuggingFace package](https://github.com/huggingface/) рд▓реЗ рдпреА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВрд▓рд╛рдИ PyTorch рдХрд╛ рд╕рд╛рде рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред\n",
|
||||
"\n",
|
||||
"## рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ BERT рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рд╣реЗрд░реМрдВ, рдХрд╕рд░реА рд╣рд╛рдореА рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд BERT рдореЛрдбреЗрд▓рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдкрд░рдореНрдкрд░рд╛рдЧрдд рдХрд╛рд░реНрдп рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ: рдЕрдиреБрдХреНрд░рдо рд╡рд░реНрдЧреАрдХрд░рдгред рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдореВрд▓ AG News рдбрд╛рдЯрд╛рд╕реЗрдЯ рд╡рд░реНрдЧреАрдХреГрдд рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдкрд╣рд┐рд▓реЗ, HuggingFace рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░ рд╣рд╛рдореНрд░реЛ рдбрд╛рдЯрд╛рд╕реЗрдЯ рд▓реЛрдб рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loading dataset...\n",
|
||||
"Building vocab...\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"import torchtext\n",
|
||||
"from torchnlp import *\n",
|
||||
"import transformers\n",
|
||||
"train_dataset, test_dataset, classes, vocab = load_dataset()\n",
|
||||
"vocab_len = len(vocab)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ BERT рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдПрдХрд╛рд▓реЗ, рд╣рд╛рдореАрд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ рдЯреЛрдХрдирд╛рдЗрдЬрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдорд╛, рд╣рд╛рдореА рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ BERT рдореЛрдбреЗрд▓рд╕рдБрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЯреЛрдХрдирд╛рдЗрдЬрд░ рд▓реЛрдб рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"HuggingFace рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдорд╛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рд╕рдВрдЧреНрд░рд╣ рдЫ, рдЬрд╕рд▓рд╛рдИ рддрдкрд╛рдИрдВ `from_pretrained` рдлрдЩреНрд╕рдирд╣рд░реВрдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдирд╛рдорд╣рд░реВ рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реЗрд░ рд╕рдЬрд┐рд▓реИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдореЛрдбреЗрд▓рдХрд╛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдмреИ рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓рд╣рд░реВ рд╕реНрд╡рддрдГ рдбрд╛рдЙрдирд▓реЛрдб рд╣реБрдиреЗрдЫред\n",
|
||||
"\n",
|
||||
"рддрд░, рдХреЗрд╣реА рдЕрд╡рд╕реНрдерд╛рдорд╛ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрдлреНрдиреИ рдореЛрдбреЗрд▓рд╣рд░реВ рд▓реЛрдб рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрди рд╕рдХреНрдЫред рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдЯреЛрдХрдирд╛рдЗрдЬрд░рдХрд╛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ, рдореЛрдбреЗрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рднрдПрдХреЛ `config.json` рдлрд╛рдЗрд▓, рдмрд╛рдЗрдирд░реА рд╡реЗрдЯрд╣рд░реВ рд▓рдЧрд╛рдпрддрдХрд╛ рд╕рдмреИ рд╕рдореНрдмрдиреНрдзрд┐рдд рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# To load the model from Internet repository using model name. \n",
|
||||
"# Use this if you are running from your own copy of the notebooks\n",
|
||||
"bert_model = 'bert-base-uncased' \n",
|
||||
"\n",
|
||||
"# To load the model from the directory on disk. Use this for Microsoft Learn module, because we have\n",
|
||||
"# prepared all required files for you.\n",
|
||||
"bert_model = './bert'\n",
|
||||
"\n",
|
||||
"tokenizer = transformers.BertTokenizer.from_pretrained(bert_model)\n",
|
||||
"\n",
|
||||
"MAX_SEQ_LEN = 128\n",
|
||||
"PAD_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.pad_token)\n",
|
||||
"UNK_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.unk_token)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`tokenizer` рд╡рд╕реНрддреБрдорд╛ `encode` рдХрд╛рд░реНрдп рд╣реБрдиреНрдЫ рдЬрд╕рд▓рд╛рдИ рдкрд╛рдард▓рд╛рдИ рд╕рд┐рдзреИ рдПрдиреНрдХреЛрдб рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[101, 1052, 22123, 2953, 2818, 2003, 1037, 2307, 7705, 2005, 17953, 2361, 102]"
|
||||
]
|
||||
},
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.encode('PyTorch is a great framework for NLP')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рддреНрдпрд╕рдкрдЫрд┐, рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рдХреНрд░рдордорд╛ рдбрд╛рдЯрд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдЗрдЯрд░реЗрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рдХрд┐рдирднрдиреЗ BERT рд▓реЗ рдЖрдлреНрдиреЛ рдиреИ рдХреЛрдбрд┐рдЩреНрдЧ рдлрдЩреНрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реЗрдХреЛ `padify` рдЬрд╕реНрддреИ рдПрдХ padding рдлрдЩреНрд╕рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def pad_bert(b):\n",
|
||||
" # b is the list of tuples of length batch_size\n",
|
||||
" # - first element of a tuple = label, \n",
|
||||
" # - second = feature (text sequence)\n",
|
||||
" # build vectorized sequence\n",
|
||||
" v = [tokenizer.encode(x[1]) for x in b]\n",
|
||||
" # compute max length of a sequence in this minibatch\n",
|
||||
" l = max(map(len,v))\n",
|
||||
" return ( # tuple of two tensors - labels and features\n",
|
||||
" torch.LongTensor([t[0] for t in b]),\n",
|
||||
" torch.stack([torch.nn.functional.pad(torch.tensor(t),(0,l-len(t)),mode='constant',value=0) for t in v])\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
"train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=8, collate_fn=pad_bert, shuffle=True)\n",
|
||||
"test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=8, collate_fn=pad_bert)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореА `bert-base-uncased` рдирд╛рдордХреЛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ BERT рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред `BertForSequenceClassfication` рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЛрдбреЗрд▓ рд▓реЛрдб рдЧрд░реМрдВред рдпрд╕рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫ рдХрд┐ рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓рд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рд╡рд░реНрдЧреАрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЫ, рдЕрдиреНрддрд┐рдо рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рд╕рд╣рд┐рддред рддрдкрд╛рдИрдВрд▓реЗ рдЪреЗрддрд╛рд╡рдиреА рд╕рдиреНрджреЗрд╢ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫ рдЬрд╕рд▓реЗ рдЕрдиреНрддрд┐рдо рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░рдХреЛ рд╡рдЬрдирд╣рд░реВ рдЖрд░рдореНрдн рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреЗрд░ рдЬрдирд╛рдЙрдБрдЫ, рд░ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд┐-рдЯреНрд░реЗрдирд┐рдЩ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗрдЫ - рдпреЛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдареАрдХ рдЫ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд▓реЗ рдЧрд░реНрди рд▓рд╛рдЧреЗрдХреЛ рдХреБрд░рд╛ рдпрд╣реА рд╣реЛ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Some weights of the model checkpoint at ./bert were not used when initializing BertForSequenceClassification: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.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 ./bert 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": [
|
||||
"model = transformers.BertForSequenceClassification.from_pretrained(bert_model,num_labels=4).to(device)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реБ рдЧрд░реНрди рддрдпрд╛рд░ рдЫреМрдВ! рдХрд┐рдирднрдиреЗ BERT рдкрд╣рд┐рд▓реЗ рдиреИ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдЫ, рд╣рд╛рдореА рд╕реБрд░реБрд╡рд╛рддрдорд╛ рд╕рд╛рдиреЛ learning rate рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ рддрд╛рдХрд┐ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ weights рдмрд┐рдЧреНрд░рди рдирдЬрд╛рдУрд╕реНред\n",
|
||||
"\n",
|
||||
"рд╕рдмреИ рдХрдард┐рди рдХрд╛рдо `BertForSequenceClassification` рдореЛрдбреЗрд▓рд▓реЗ рдЧрд░реНрдЫред рдЬрдм рд╣рд╛рдореА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбрд╛рдЯрд╛рдорд╛ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрдЫреМрдВ, рдпрд╕рд▓реЗ рдЗрдирдкреБрдЯ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрдХреЛ рд▓рд╛рдЧрд┐ loss рд░ рдиреЗрдЯрд╡рд░реНрдХ рдЖрдЙрдЯрдкреБрдЯ рджреБрд╡реИ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдЫред рд╣рд╛рдореА loss рд▓рд╛рдИ parameter optimization рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ (`loss.backward()` рд▓реЗ backward pass рдЧрд░реНрдЫ), рд░ `out` рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг accuracy рдЧрдгрдирд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ, рдЬреБрди `argmax` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдПрдХреЛ labels `labs` рд▓рд╛рдИ рдЕрдкреЗрдХреНрд╖рд┐рдд `labels` рд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реЗрд░ рдЧрдгрдирд╛ рдЧрд░рд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди, рд╣рд╛рдореА loss рд░ accuracy рд▓рд╛рдИ рдХреЗрд╣реА iterations рд╕рдореНрдо рдЬрдореНрдорд╛ рдЧрд░реНрдЫреМрдВ, рд░ рдкреНрд░рддреНрдпреЗрдХ `report_freq` рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрдХреНрд░рд╣рд░реВрдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рд┐рдиреНрдЯ рдЧрд░реНрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдпреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рдореНрднрд╡рддрдГ рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА iterations рдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдЧрд░реНрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Loss = 1.1254194641113282, Accuracy = 0.585\n",
|
||||
"Loss = 0.6194715118408203, Accuracy = 0.83\n",
|
||||
"Loss = 0.46665248870849607, Accuracy = 0.8475\n",
|
||||
"Loss = 0.4309701919555664, Accuracy = 0.8575\n",
|
||||
"Loss = 0.35427074432373046, Accuracy = 0.8825\n",
|
||||
"Loss = 0.3306886291503906, Accuracy = 0.8975\n",
|
||||
"Loss = 0.30340143203735354, Accuracy = 0.8975\n",
|
||||
"Loss = 0.26139299392700194, Accuracy = 0.915\n",
|
||||
"Loss = 0.26708646774291994, Accuracy = 0.9225\n",
|
||||
"Loss = 0.3667240524291992, Accuracy = 0.8675\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"optimizer = torch.optim.Adam(model.parameters(), lr=2e-5)\n",
|
||||
"\n",
|
||||
"report_freq = 50\n",
|
||||
"iterations = 500 # make this larger to train for longer time!\n",
|
||||
"\n",
|
||||
"model.train()\n",
|
||||
"\n",
|
||||
"i,c = 0,0\n",
|
||||
"acc_loss = 0\n",
|
||||
"acc_acc = 0\n",
|
||||
"\n",
|
||||
"for labels,texts in train_loader:\n",
|
||||
" labels = labels.to(device)-1 # get labels in the range 0-3 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" loss, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc = torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" optimizer.zero_grad()\n",
|
||||
" loss.backward()\n",
|
||||
" optimizer.step()\n",
|
||||
" acc_loss += loss\n",
|
||||
" acc_acc += acc\n",
|
||||
" i+=1\n",
|
||||
" c+=1\n",
|
||||
" if i%report_freq==0:\n",
|
||||
" print(f\"Loss = {acc_loss.item()/c}, Accuracy = {acc_acc.item()/c}\")\n",
|
||||
" c = 0\n",
|
||||
" acc_loss = 0\n",
|
||||
" acc_acc = 0\n",
|
||||
" iterations-=1\n",
|
||||
" if not iterations:\n",
|
||||
" break"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рддрдкрд╛рдИрдВ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдпрджрд┐ рддрдкрд╛рдИрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╛рдЙрдиреБрд╣реБрдиреНрдЫ рд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдкрд░реНрдЦрдиреБрд╣реБрдиреНрдЫ) рдХрд┐ BERT рд╡рд░реНрдЧреАрдХрд░рдгрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдзреЗрд░реИ рд░рд╛рдореНрд░реЛ рд╢реБрджреНрдзрддрд╛ рджрд┐рдиреНрдЫ! рдпрд╕рдХреЛ рдХрд╛рд░рдг BERT рд▓реЗ рднрд╛рд╖рд╛ рд╕рдВрд░рдЪрдирд╛рд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмреБрдЭрд┐рд╕рдХреЗрдХреЛ рдЫ, рд░ рд╣рд╛рдореАрд▓реЗ рдЕрдиреНрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрд▓рд╛рдИ рдорд╛рддреНрд░ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрд░, рдХрд┐рдирднрдиреЗ BERT рдареВрд▓реЛ рдореЛрдбреЗрд▓ рд╣реЛ, рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд╛рдореЛ рд╕рдордп рд▓рд┐рдиреНрдЫ, рд░ рдЧрдореНрднреАрд░ рдХрдореНрдкреНрдпреБрдЯреЗрд╢рдирд▓ рд╢рдХреНрддрд┐ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдЫ! (GPU, рд░ рд╕рдореНрднрд╡рддрдГ рдПрдХрднрдиреНрджрд╛ рдмрдвреА GPU).\n",
|
||||
"\n",
|
||||
"> **Note:** рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдиреЛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ BERT рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВред рдареВрд▓рд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рд╕рдореНрднрд╡рддрдГ рдЕрдЭ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рджрд┐рди рд╕рдХреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореЛрдбреЗрд▓рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдореВрд▓реНрдпрд╛рдЩреНрдХрди рд▓реВрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реВрдкрд╕рдБрдЧ рдзреЗрд░реИ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдЫ, рддрд░ рд╣рд╛рдореАрд▓реЗ `model.eval()` рдХрд▓ рдЧрд░реЗрд░ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдореЛрдбрдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрди рдмрд┐рд░реНрд╕рдиреБ рд╣реБрдБрджреИрдиред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final accuracy: 0.9047029702970297\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.eval()\n",
|
||||
"iterations = 100\n",
|
||||
"acc = 0\n",
|
||||
"i = 0\n",
|
||||
"for labels,texts in test_loader:\n",
|
||||
" labels = labels.to(device)-1 \n",
|
||||
" texts = texts.to(device)\n",
|
||||
" _, out = model(texts, labels=labels)[:2]\n",
|
||||
" labs = out.argmax(dim=1)\n",
|
||||
" acc += torch.mean((labs==labels).type(torch.float32))\n",
|
||||
" i+=1\n",
|
||||
" if i>iterations: break\n",
|
||||
" \n",
|
||||
"print(f\"Final accuracy: {acc.item()/i}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдХреБрд░рд╛\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдпреБрдирд┐рдЯрдорд╛, рд╣рд╛рдореАрд▓реЗ **transformers** рдкреБрд╕реНрддрдХрд╛рд▓рдпрдмрд╛рдЯ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓ рд▓рд┐рдиреБ рд░ рдпрд╕рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпрдорд╛ рдЕрдиреБрдХреВрд▓рди рдЧрд░реНрдиреБ рдХрддрд┐ рд╕рдЬрд┐рд▓реЛ рдЫ рднрдиреНрдиреЗ рджреЗрдЦреНрдпреМрдВред рдпрд╕реИрдЧрд░реА, BERT рдореЛрдбреЗрд▓рд╣рд░реВрд▓рд╛рдИ рдЗрдХрд╛рдИ рдирд┐рдХрд╛рд╕реА, рдкреНрд░рд╢реНрди рдЙрддреНрддрд░, рд░ рдЕрдиреНрдп NLP рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"Transformer рдореЛрдбреЗрд▓рд╣рд░реВ NLP рдорд╛ рд╣рд╛рд▓рдХреЛ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдкреНрд░рд╡рд┐рдзрд┐рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫрдиреН, рд░ рдкреНрд░рд╛рдпрдГ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЬрдм рддрдкрд╛рдИрдВ рдЕрдиреБрдХреВрд▓ NLP рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдерд╛рд▓реНрдиреБрд╣реБрдиреНрдЫ, рдпреЛ рдкрд╣рд┐рд▓реЛ рд╕рдорд╛рдзрд╛рди рд╣реБрдиреБрдкрд░реНрдЫ рдЬрд╕рд╕рдБрдЧ рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред рддрд░, рдпрджрд┐ рддрдкрд╛рдИрдВ рдЙрдиреНрдирдд рдиреНрдпреВрд░рд▓ рдореЛрдбреЗрд▓рд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпрд╕ рдореЛрдбреНрдпреБрд▓рдорд╛ рдЫрд▓рдлрд▓ рдЧрд░рд┐рдПрдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рднреВрдд рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рдмреБрдЭреНрдиреБ рдЕрддреНрдпрдиреНрдд рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрд┐ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "py37_pytorch",
|
||||
"language": "python",
|
||||
"name": "conda-env-py37_pytorch-py"
|
||||
},
|
||||
"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.7.7"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "753865967678a92dbce7d7efbd36d980",
|
||||
"translation_date": "2025-08-28T09:23:47+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/TransformersPyTorch.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,819 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдзреНрдпрд╛рди рдореЗрдХрд╛рдирд┐рдЬреНрдо рд░ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░рд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдХреЛ рдПрдХ рдкреНрд░рдореБрдЦ рдХрдордЬреЛрд░реА рдпреЛ рд╣реЛ рдХрд┐ рдЕрдиреБрдХреНрд░рдордХрд╛ рд╕рдмреИ рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдирддрд┐рдЬрд╛рдорд╛ рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫрдиреНред рдпрд╕рд▓реЗ рдирд╛рдорд┐рдд рдЗрдХрд╛рдИ рдкрд╣рд┐рдЪрд╛рди рд░ рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рдж рдЬрд╕реНрддрд╛ рдЕрдиреБрдХреНрд░рдо-рджреЗрдЦрд┐-рдЕрдиреБрдХреНрд░рдо рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдирдХ LSTM рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЛрдбреЗрд▓рд╣рд░реВрд╕рдБрдЧ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдЧрд░реНрджреИрдиред рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛рдорд╛, рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдордХрд╛ рдХреЗрд╣реА рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдЕрдиреНрдп рд╢рдмреНрджрд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдмрдвреА рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдореЗрд╕рд┐рди рдЕрдиреБрд╡рд╛рдж рдЬрд╕реНрддрд╛ рдЕрдиреБрдХреНрд░рдо-рджреЗрдЦрд┐-рдЕрдиреБрдХреНрд░рдо рдореЛрдбреЗрд▓рд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпреЛ рджреБрдИ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫ, рдЬрд╣рд╛рдБ рдПрдЙрдЯрд╛ рдиреЗрдЯрд╡рд░реНрдХ (**рдПрдиреНрдХреЛрдбрд░**) рдЗрдирдкреБрдЯ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╕рдЩреНрдХреБрдЪрд┐рдд рдЧрд░реНрдЫ, рд░ рдЕрд░реНрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ (**рдбрд┐рдХреЛрдбрд░**) рдпрд╕ рд▓реБрдХреЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рд▓рд╛рдИ рдЕрдиреБрд╡рд╛рджрд┐рдд рдирддрд┐рдЬрд╛рдорд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрдЫред рдпрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдЕрдиреНрддрд┐рдо рдЕрд╡рд╕реНрдерд╛рд▓реЗ рд╡рд╛рдХреНрдпрдХреЛ рд╕реБрд░реБрд╡рд╛рдд рд╕рдореНрдЭрди рдЧрд╛рд╣реНрд░реЛ рдорд╛рдиреНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рд▓рд╛рдореЛ рд╡рд╛рдХреНрдпрд╣рд░реВрдорд╛ рдореЛрдбреЗрд▓рдХреЛ рдЧреБрдгрд╕реНрддрд░ рдХрдордЬреЛрд░ рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"**рдзреНрдпрд╛рди рдореЗрдХрд╛рдирд┐рдЬреНрдорд╣рд░реВ** RNN рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреАрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рднреЗрдХреНрдЯрд░рдХреЛ рд╕рдиреНрджрд░реНрднрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡рд▓рд╛рдИ рддреМрд▓ рджрд┐рдиреЗ рдорд╛рдзреНрдпрдо рдкреНрд░рджрд╛рди рдЧрд░реНрдЫрдиреНред рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рднрдиреЗрдХреЛ рдЗрдирдкреБрдЯ RNN рдХрд╛ рдордзреНрдпрд╡рд░реНрддреА рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рд░ рдЖрдЙрдЯрдкреБрдЯ RNN рдмреАрдЪ рдЫреЛрдЯреЛ рдорд╛рд░реНрдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБ рд╣реЛред рдпрд╕рд░реА, рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рддреАрдХ $y_t$ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрд╛, рд╣рд╛рдореА рд╕рдмреИ рдЗрдирдкреБрдЯ рд▓реБрдХреЗрдХрд╛ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ $h_i$ рд▓рд╛рдИ рд╡рд┐рднрд┐рдиреНрди рддреМрд▓ рдЧреБрдгрд╛рдВрдХ $\\alpha_{t,i}$ рдХрд╛ рд╕рд╛рде рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) рдорд╛ рдПрдбрд┐рдЯрд┐рдн рдзреНрдпрд╛рди рдореЗрдХрд╛рдирд┐рдЬреНрдо рднрдПрдХреЛ рдПрдиреНрдХреЛрдбрд░-рдбрд┐рдХреЛрдбрд░ рдореЛрдбреЗрд▓, [рдпреЛ рдмреНрд▓рдЧ рдкреЛрд╕реНрдЯ](https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html) рдмрд╛рдЯ рдЙрджреНрдзреГрдд]*\n",
|
||||
"\n",
|
||||
"рдзреНрдпрд╛рди рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕ $\\{\\alpha_{i,j}\\}$ рд▓реЗ рдЗрдирдкреБрдЯрдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рд╢рдмреНрджрд╣рд░реВрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рдЕрдиреБрдХреНрд░рдордХреЛ рдХреБрдиреИ рд╢рдмреНрдж рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдХрддреНрддрд┐рдХреЛ рднреВрдорд┐рдХрд╛ рдЦреЗрд▓реНрдЫрдиреН рднрдиреНрдиреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрджрдЫред рддрд▓ рдпрд╕реНрддреЛ рдореНрдпрд╛рдЯреНрд░рд┐рдХреНрд╕рдХреЛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЗрдПрдХреЛ рдЫ:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"*[Bahdanau et al., 2015](https://arxiv.org/pdf/1409.0473.pdf) рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рдЪрд┐рддреНрд░ (Fig.3)*\n",
|
||||
"\n",
|
||||
"рдзреНрдпрд╛рди рдореЗрдХрд╛рдирд┐рдЬреНрдорд╣рд░реВ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рд╢реЛрдзрдирдорд╛ рд╣рд╛рд▓рдХреЛ рд╡рд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдпрдХреЛ рдЙрддреНрдХреГрд╖реНрдЯ рдЕрд╡рд╕реНрдерд╛рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рдЫрдиреНред рдзреНрдпрд╛рди рдердкреНрджрд╛ рдореЛрдбреЗрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдзреЗрд░реИ рдмрдвреНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ RNN рд╣рд░реВрд╕рдБрдЧ рд╕реНрдХреЗрд▓рд┐рдЩ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рджреЗрдЦрд╛ рдкрд░реНрдЫред RNN рд╣рд░реВрдХреЛ рд╕реНрдХреЗрд▓рд┐рдЩрдХреЛ рдкреНрд░рдореБрдЦ рдмрд╛рдзрд╛ рднрдиреЗрдХреЛ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░рдХреГрддрд┐рд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрд▓рд╛рдИ рдмреНрдпрд╛рдЪ рд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдмрдирд╛рдЙрди рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдмрдирд╛рдЙрдБрдЫред RNN рдорд╛ рдЕрдиреБрдХреНрд░рдордХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡рд▓рд╛рдИ рдХреНрд░рдорд┐рдХ рд░реВрдкрдорд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдиреБрдкрд░реНрдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдпрд╕рд▓рд╛рдИ рд╕рдЬрд┐рд▓реИ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдмрдирд╛рдЙрди рд╕рдХрд┐рдБрджреИрдиред\n",
|
||||
"\n",
|
||||
"рдзреНрдпрд╛рди рдореЗрдХрд╛рдирд┐рдЬреНрдорд╣рд░реВрдХреЛ рдЕрдкрдирддреНрд╡ рд░ рдпрд╕ рдмрд╛рдзрд╛рд▓реЗ рдЖрдЬ рд╣рд╛рдореАрд▓реЗ BERT рджреЗрдЦрд┐ OpenGPT3 рд╕рдореНрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВрдХреЛ рд╕рд┐рд░реНрдЬрдирд╛рд▓рд╛рдИ рдЬрдиреНрдо рджрд┐рдпреЛред\n",
|
||||
"\n",
|
||||
"## рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдкреНрд░рддреНрдпреЗрдХ рдЕрдШрд┐рд▓реНрд▓реЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреАрдХреЛ рд╕рдиреНрджрд░реНрднрд▓рд╛рдИ рдЕрд░реНрдХреЛ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЪрд░рдгрдорд╛ рдЕрдЧрд╛рдбрд┐ рдмрдврд╛рдЙрдиреЗ рд╕рдЯреНрдЯрд╛, **рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВ** рд▓реЗ **рдкреЛрдЬрд┐рд╕рдирд▓ рдЗрдиреНрдХреЛрдбрд┐рдЩрд╣рд░реВ** рд░ **рдзреНрдпрд╛рди** рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рджрд┐рдЗрдПрдХреЛ рдЗрдирдкреБрдЯрдХреЛ рд╕рдиреНрджрд░реНрднрд▓рд╛рдИ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдкрд╛рдардХреЛ рдЭреНрдпрд╛рд▓рднрд┐рддреНрд░ рд╕рдореЗрдЯреНрдЫрдиреНред рддрд▓рдХреЛ рдЫрд╡рд┐рд▓реЗ рдкреЛрдЬрд┐рд╕рдирд▓ рдЗрдиреНрдХреЛрдбрд┐рдЩрд╣рд░реВ рд░ рдзреНрдпрд╛рдирд▓реЗ рдХрд╕рд░реА рдЭреНрдпрд╛рд▓рднрд┐рддреНрд░рдХреЛ рд╕рдиреНрджрд░реНрдн рд╕рдореЗрдЯреНрди рд╕рдХреНрдЫ рднрдиреНрдиреЗ рджреЗрдЦрд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"рдХрд┐рдирднрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рд╕реНрдерд┐рддрд┐рд▓рд╛рдИ рд╕реНрд╡рддрдиреНрддреНрд░ рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдерд┐рддрд┐рдорд╛ рдореНрдпрд╛рдк рдЧрд░рд┐рдиреНрдЫ, рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░рд╣рд░реВрд▓реЗ RNN рд╣рд░реВрдХреЛ рддреБрд▓рдирд╛рдорд╛ рд░рд╛рдореНрд░реЛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдзреЗрд░реИ рдареВрд▓реЛ рд░ рдЕрдЭ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдкреВрд░реНрдг рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рд╕рдХреНрд╖рдо рдмрдирд╛рдЙрдБрдЫред рдкреНрд░рддреНрдпреЗрдХ рдзреНрдпрд╛рди рд╣реЗрдбрд▓реЗ рд╢рдмреНрджрд╣рд░реВ рдмреАрдЪрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдореНрдмрдиреНрдзрд╣рд░реВ рд╕рд┐рдХреНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рд╢реЛрдзрдирдХрд╛ рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рд╕реБрдзрд╛рд░ рд▓реНрдпрд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"## рд╕рд╛рдзрд╛рд░рдг рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓ рдирд┐рд░реНрдорд╛рдг\n",
|
||||
"\n",
|
||||
"Keras рдорд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рддрд╣ рд╕рдорд╛рд╡реЗрд╢ рдЫреИрди, рддрд░ рд╣рд╛рдореА рдЖрдлреИрдВ рдмрдирд╛рдЙрди рд╕рдХреНрдЫреМрдВред рдкрд╣рд┐рд▓реЗрдЭреИрдВ, рд╣рд╛рдореА AG News рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдгрдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рд╣реБрдиреЗрдЫреМрдВ, рддрд░ рдпреЛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВрд▓реЗ рдЕрдЭ рдХрдард┐рди NLP рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдирддрд┐рдЬрд╛ рджреЗрдЦрд╛рдЙрдБрдЫрдиреНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import tensorflow as tf\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import tensorflow_datasets as tfds\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"ds_train, ds_test = tfds.load('ag_news_subset').values()\n",
|
||||
"\n",
|
||||
"def extract_text(x):\n",
|
||||
" return x['title']+' '+x['description']\n",
|
||||
"\n",
|
||||
"def tupelize(x):\n",
|
||||
" return (extract_text(x),x['label'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Keras рдорд╛ рдирдпрд╛рдБ рд▓реЗрдпрд░рд╣рд░реВрд▓реЗ `Layer` рд╡рд░реНрдЧрд▓рд╛рдИ рд╕рдмрдХреНрд▓рд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдЫ, рд░ `call` рдореЗрдердб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрдкрд░реНрдЫред рд╕реБрд░реБ рдЧрд░реМрдВ **Positional Embedding** рд▓реЗрдпрд░рдмрд╛рдЯред рд╣рд╛рдореА [Keras рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбрдХреБрдореЗрдиреНрдЯреЗрд╕рдирдмрд╛рдЯ рдХреЗрд╣реА рдХреЛрдб](https://keras.io/examples/nlp/text_classification_with_transformer/) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореАрд▓реЗ рд╕рдмреИ рдЗрдирдкреБрдЯ рд╕рд┐рдХреНрд╡реЗрдиреНрд╕рд╣рд░реВрд▓рд╛рдИ `maxlen` рд▓рдореНрдмрд╛рдЗрдорд╛ рдкреНрдпрд╛рдб рдЧрд░реНрдиреЗрдЫреМрдВ рднрдиреНрдиреЗ рдорд╛рдиреНрдиреЗрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class TokenAndPositionEmbedding(keras.layers.Layer):\n",
|
||||
" def __init__(self, maxlen, vocab_size, embed_dim):\n",
|
||||
" super(TokenAndPositionEmbedding, self).__init__()\n",
|
||||
" self.token_emb = keras.layers.Embedding(input_dim=vocab_size, output_dim=embed_dim)\n",
|
||||
" self.pos_emb = keras.layers.Embedding(input_dim=maxlen, output_dim=embed_dim)\n",
|
||||
" self.maxlen = maxlen\n",
|
||||
"\n",
|
||||
" def call(self, x):\n",
|
||||
" maxlen = self.maxlen\n",
|
||||
" positions = tf.range(start=0, limit=maxlen, delta=1)\n",
|
||||
" positions = self.pos_emb(positions)\n",
|
||||
" x = self.token_emb(x)\n",
|
||||
" return x+positions"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЛ рддрд╣ рджреБрдИрд╡рдЯрд╛ `Embedding` рддрд╣рд╣рд░реВрдмрд╛рдЯ рдмрдиреЗрдХреЛ рдЫ: рдЯреЛрдХрдирд╣рд░реВрд▓рд╛рдИ рдПрдореНрдмреЗрдб рдЧрд░реНрди (рдЬрд╕рд░реА рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЗ рдЪрд░реНрдЪрд╛ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВ) рд░ рдЯреЛрдХрдирдХреЛ рд╕реНрдерд╛рдирд╣рд░реВрд▓рд╛рдИ рдПрдореНрдмреЗрдб рдЧрд░реНрдиред рдЯреЛрдХрди рд╕реНрдерд╛рдирд╣рд░реВ `tf.range` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 0 рджреЗрдЦрд┐ `maxlen` рд╕рдореНрдордХреЛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рдХреНрд░рдордХреЛ рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдиреНрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдПрдореНрдмреЗрдбрд┐рдЩ рддрд╣рдорд╛ рдкрдард╛рдЗрдиреНрдЫред рджреБрдИрд╡рдЯрд╛ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдПрдореНрдмреЗрдбрд┐рдЩ рднреЗрдХреНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдЬреЛрдбрд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯрдХреЛ рд╕реНрдерд╛рдирдЧрдд-рдПрдореНрдмреЗрдб рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрджрдЫ, рдЬрд╕рдХреЛ рдЖрдХрд╛рд░ `maxlen`$\\times$`embed_dim` рд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм, рд╣рд╛рдореА рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдмреНрд▓рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реМрдВред рдпрд╕рд▓реЗ рдкрд╣рд┐рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдПрдореНрдмреЗрдбрд┐рдЩ рддрд╣рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд▓рд╛рдИ рд▓рд┐рдиреЗрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class TransformerBlock(keras.layers.Layer):\n",
|
||||
" def __init__(self, embed_dim, num_heads, ff_dim, rate=0.1):\n",
|
||||
" super(TransformerBlock, self).__init__()\n",
|
||||
" self.att = keras.layers.MultiHeadAttention(num_heads=num_heads, key_dim=embed_dim, name='attn')\n",
|
||||
" self.ffn = keras.Sequential(\n",
|
||||
" [keras.layers.Dense(ff_dim, activation=\"relu\"), keras.layers.Dense(embed_dim),]\n",
|
||||
" )\n",
|
||||
" self.layernorm1 = keras.layers.LayerNormalization(epsilon=1e-6)\n",
|
||||
" self.layernorm2 = keras.layers.LayerNormalization(epsilon=1e-6)\n",
|
||||
" self.dropout1 = keras.layers.Dropout(rate)\n",
|
||||
" self.dropout2 = keras.layers.Dropout(rate)\n",
|
||||
"\n",
|
||||
" def call(self, inputs, training):\n",
|
||||
" attn_output = self.att(inputs, inputs)\n",
|
||||
" attn_output = self.dropout1(attn_output, training=training)\n",
|
||||
" out1 = self.layernorm1(inputs + attn_output)\n",
|
||||
" ffn_output = self.ffn(out1)\n",
|
||||
" ffn_output = self.dropout2(ffn_output, training=training)\n",
|
||||
" return self.layernorm2(out1 + ffn_output)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм, рд╣рд╛рдореА рдкреВрд░реНрдг рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рддрдпрд╛рд░ рдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential_1\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"text_vectorization (TextVect (None, 256) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"token_and_position_embedding (None, 256, 32) 648192 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"transformer_block (Transform (None, 256, 32) 10656 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"global_average_pooling1d (Gl (None, 32) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_2 (Dropout) (None, 32) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense_2 (Dense) (None, 20) 660 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_3 (Dropout) (None, 20) 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dense_3 (Dense) (None, 4) 84 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 659,592\n",
|
||||
"Trainable params: 659,592\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"embed_dim = 32 # Embedding size for each token\n",
|
||||
"num_heads = 2 # Number of attention heads\n",
|
||||
"ff_dim = 32 # Hidden layer size in feed forward network inside transformer\n",
|
||||
"maxlen = 256\n",
|
||||
"vocab_size = 20000\n",
|
||||
"\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.experimental.preprocessing.TextVectorization(max_tokens=vocab_size,output_sequence_length=maxlen, input_shape=(1,)),\n",
|
||||
" TokenAndPositionEmbedding(maxlen, vocab_size, embed_dim),\n",
|
||||
" TransformerBlock(embed_dim, num_heads, ff_dim),\n",
|
||||
" keras.layers.GlobalAveragePooling1D(),\n",
|
||||
" keras.layers.Dropout(0.1),\n",
|
||||
" keras.layers.Dense(20, activation=\"relu\"),\n",
|
||||
" keras.layers.Dropout(0.1),\n",
|
||||
" keras.layers.Dense(4, activation=\"softmax\")\n",
|
||||
"])\n",
|
||||
"\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Training tokenizer\n",
|
||||
"938/938 [==============================] - 45s 39ms/step - loss: 0.4978 - acc: 0.8068 - val_loss: 0.2808 - val_acc: 0.9124\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f9c2427a0d0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print('Training tokenizer')\n",
|
||||
"model.layers[0].adapt(ds_train.map(extract_text))\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## BERT рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбреЗрд▓рд╣рд░реВ\n",
|
||||
"\n",
|
||||
"**BERT** (Bidirectional Encoder Representations from Transformers) рдПрдХ рдзреЗрд░реИ рдареВрд▓реЛ рдмрд╣реБ-рд╕реНрддрд░реАрдп рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдиреЗрдЯрд╡рд░реНрдХ рд╣реЛ рдЬрд╕рдорд╛ *BERT-base* рдХрд╛ рд▓рд╛рдЧрд┐ резреи рддрд╣рд╣рд░реВ рд░ *BERT-large* рдХрд╛ рд▓рд╛рдЧрд┐ реирек рддрд╣рд╣рд░реВ рдЫрдиреНред рдпреЛ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдорд╛ рдареВрд▓реЛ рдкрд╛рда рдбрд╛рдЯрд╛рдХреЛ рд╕рдВрдЧреНрд░рд╣ (WikiPedia + рдХрд┐рддрд╛рдмрд╣рд░реВ) рдорд╛ рдЕрд╕реБрдкрд░рднрд╛рдЗрдЬреНрдб рддрд╛рд▓рд┐рдо (рд╡рд╛рдХреНрдпрдорд╛ рд▓реБрдХреЗрдХрд╛ рд╢рдмреНрджрд╣рд░реВрдХреЛ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдЧрд░реНрджреИ) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдиреНрдЫред рдкреНрд░рд┐-рдЯреНрд░реЗрдирд┐рдЩрдХреЛ рдХреНрд░рдордорд╛ рдореЛрдбреЗрд▓рд▓реЗ рднрд╛рд╖рд╛рдХреЛ рдЧрд╣рд┐рд░реЛ рд╕рдордЭ рд╣рд╛рд╕рд┐рд▓ рдЧрд░реНрдЫ, рдЬрд╕рд▓рд╛рдИ рдЕрдиреНрдп рдбрд╛рдЯрд╛рд╕реЗрдЯрд╣рд░реВрд╕рдБрдЧ рдлрд╛рдЗрди рдЯреНрдпреБрдирд┐рдЩ рдЧрд░реЗрд░ рдЙрдкрдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ **рдЯреНрд░рд╛рдиреНрд╕рдлрд░ рд▓рд░реНрдирд┐рдЩ** рднрдирд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"BERT, DistilBERT, BigBird, OpenGPT3 рд▓рдЧрд╛рдпрддрдХрд╛ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдХрд╛ рдзреЗрд░реИ рднреЗрд░рд┐рдПрд╕рдирд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓рд╛рдИ рдлрд╛рдЗрди рдЯреНрдпреБрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ BERT рдореЛрдбреЗрд▓рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдкрд░рдореНрдкрд░рд╛рдЧрдд рдХреНрд░рдо рд╡рд░реНрдЧреАрдХрд░рдг рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рдорд╛рдзрд╛рдирдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛ рд╣реЗрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореА [official documentation](https://www.tensorflow.org/text/tutorials/classify_text_with_bert) рдмрд╛рдЯ рдХреЗрд╣реА рд╡рд┐рдЪрд╛рд░ рд░ рдХреЛрдб рд▓рд┐рдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдореЛрдбреЗрд▓рд╣рд░реВ рд▓реЛрдб рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА **Tensorflow hub** рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдорд╛, BERT-рд╡рд┐рд╢реЗрд╖ рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рд▓реЛрдб рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"ename": "ModuleNotFoundError",
|
||||
"evalue": "No module named 'tensorflow_text'",
|
||||
"output_type": "error",
|
||||
"traceback": [
|
||||
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
||||
"\u001b[1;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
|
||||
"\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_41180/4216669875.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mtensorflow_text\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mtensorflow_hub\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mhub\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mvectorizer\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mhub\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mKerasLayer\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
|
||||
"\u001b[1;31mModuleNotFoundError\u001b[0m: No module named 'tensorflow_text'"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import tensorflow_text \n",
|
||||
"import tensorflow_hub as hub\n",
|
||||
"vectorizer = hub.KerasLayer('https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'input_type_ids': <tf.Tensor: shape=(1, 128), dtype=int32, numpy=\n",
|
||||
" array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int32)>,\n",
|
||||
" 'input_word_ids': <tf.Tensor: shape=(1, 128), dtype=int32, numpy=\n",
|
||||
" array([[ 101, 1045, 2293, 19081, 102, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0]], dtype=int32)>,\n",
|
||||
" 'input_mask': <tf.Tensor: shape=(1, 128), dtype=int32, numpy=\n",
|
||||
" array([[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
|
||||
" 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],\n",
|
||||
" dtype=int32)>}"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"vectorizer(['I love transformers'])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рдХрд┐ рддрдкрд╛рдИрд▓реЗ рддреНрдпрд╣реА рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬреБрди рдореВрд▓ рдиреЗрдЯрд╡рд░реНрдХрд▓рд╛рдИ рддрд╛рд▓рд┐рдо рджрд┐рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред рд╕рд╛рдереИ, BERT рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░рд▓реЗ рддреАрдирд╡рдЯрд╛ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдЫ:\n",
|
||||
"* `input_word_ids`, рдЬреБрди рдЗрдирдкреБрдЯ рд╡рд╛рдХреНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдЯреЛрдХрди рдирдореНрдмрд░рд╣рд░реВрдХреЛ рдХреНрд░рдо рд╣реЛ\n",
|
||||
"* `input_mask`, рдЬрд╕рд▓реЗ рдХреНрд░рдордХреЛ рдХреБрди рднрд╛рдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрдирдкреБрдЯ рд╣реЛ рд░ рдХреБрди рднрд╛рдЧ рдкреНрдпрд╛рдбрд┐рдЩ рд╣реЛ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред рдпреЛ `Masking` рддрд╣рд▓реЗ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрдиреЗ рдорд╛рд╕реНрдХрд╕рдБрдЧ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдЫ\n",
|
||||
"* `input_type_ids` рднрд╛рд╖рд╛ рдореЛрдбрд▓рд┐рдЩ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рд░ рдПрдЙрдЯреИ рдХреНрд░рдордорд╛ рджреБрдИрд╡рдЯрд╛ рдЗрдирдкреБрдЯ рд╡рд╛рдХреНрдпрд╣рд░реВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рддреНрдпрд╕рдкрдЫрд┐, рд╣рд╛рдореА BERT рдлрд┐рдЪрд░ рдПрдХреНрд╕реНрдЯреНрд░реНрдпрд╛рдХреНрдЯрд░рд▓рд╛рдИ рдЗрдирд╕реНрдЯреНрдпрд╛рдиреНрд╕рд┐рдпреЗрдЯ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"bert = hub.KerasLayer('https://tfhub.dev/tensorflow/small_bert/bert_en_uncased_L-4_H-128_A-2/1')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"pooled_output -> (1, 128)\n",
|
||||
"encoder_outputs -> 4\n",
|
||||
"sequence_output -> (1, 128, 128)\n",
|
||||
"default -> (1, 128)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"z = bert(vectorizer(['I love transformers']))\n",
|
||||
"for i,x in z.items():\n",
|
||||
" print(f\"{i} -> { len(x) if isinstance(x, list) else x.shape }\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рддреНрдпрд╕реИрд▓реЗ, BERT рд▓реЗрдпрд░рд▓реЗ рдХреЗрд╣реА рдЙрдкрдпреЛрдЧреА рдирддрд┐рдЬрд╛рд╣рд░реВ рдлрд░реНрдХрд╛рдЙрдБрдЫ:\n",
|
||||
"* `pooled_output` рдЕрдиреБрдХреНрд░рдордорд╛ рд╕рдмреИ рдЯреЛрдХрдирд╣рд░реВрдХреЛ рдФрд╕рдд рдирд┐рдХрд╛рд▓реНрдиреЗ рдкрд░рд┐рдгрд╛рдо рд╣реЛред рдпрд╕рд▓рд╛рдИ рд╕рдореНрдкреВрд░реНрдг рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдмреМрджреНрдзрд┐рдХ рдЕрд░реНрдердкреВрд░реНрдг рдПрдореНрдмреЗрдбрд┐рдЩрдХреЛ рд░реВрдкрдорд╛ рд╣реЗрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рд╣рд╛рдореНрд░реЛ рдЕрдШрд┐рд▓реНрд▓реЛ рдореЛрдбреЗрд▓рдорд╛ `GlobalAveragePooling1D` рд▓реЗрдпрд░рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд╕рдБрдЧ рд╕рдорд╛рди рдЫред\n",
|
||||
"* `sequence_output` рдЕрдиреНрддрд┐рдо рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рд▓реЗрдпрд░рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛ (рдпреЛ рдорд╛рдерд┐рдХреЛ рдореЛрдбреЗрд▓рдорд╛ `TransformerBlock` рдХреЛ рдЖрдЙрдЯрдкреБрдЯрд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫ)ред\n",
|
||||
"* `encoder_outputs` рд╕рдмреИ рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рд▓реЗрдпрд░рд╣рд░реВрдХреЛ рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВ рд╣реБрдиреНред рдХрд┐рдирдХрд┐ рд╣рд╛рдореАрд▓реЗ 4-рд▓реЗрдпрд░ BERT рдореЛрдбреЗрд▓ рд▓реЛрдб рдЧрд░реЗрдХрд╛ рдЫреМрдВ (рдЬрд╕рдХреЛ рдирд╛рдордорд╛ `4_H` рд╕рдорд╛рд╡реЗрд╢ рдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рдмрд╛рдЯ рддрдкрд╛рдИрдВ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ), рдпрд╕рдорд╛ 4 рдЯреЗрдиреНрд╕рд░рд╣рд░реВ рдЫрдиреНред рдЕрдиреНрддрд┐рдо рдЯреЗрдиреНрд╕рд░ `sequence_output` рдЬрд╕реНрддреИ рд╣реЛред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рдЕрдиреНрддреНрдп-рджреЗрдЦрд┐-рдЕрдиреНрддреНрдп рд╡рд░реНрдЧреАрдХрд░рдг рдореЛрдбреЗрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореА *functional model definition* рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬрд╣рд╛рдБ рд╣рд╛рдореА рдореЛрдбреЗрд▓ рдЗрдирдкреБрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдЫреМрдВ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдЧрдгрдирд╛ рдЧрд░реНрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВрдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрдЫреМрдВред рд╣рд╛рдореА BERT рдореЛрдбреЗрд▓рдХреЛ рд╡рдЬрдирд╣рд░реВрд▓рд╛рдИ non-trainable рдмрдирд╛рдЙрдиреЗрдЫреМрдВ, рд░ рдХреЗрд╡рд▓ рдЕрдиреНрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рдорд╛рддреНрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"model\"\n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # Connected to \n",
|
||||
"==================================================================================================\n",
|
||||
"input_1 (InputLayer) [(None,)] 0 \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer (KerasLayer) {'input_type_ids': ( 0 input_1[0][0] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer_1 (KerasLayer) {'pooled_output': (N 4782465 keras_layer[0][0] \n",
|
||||
" keras_layer[0][1] \n",
|
||||
" keras_layer[0][2] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dropout_4 (Dropout) (None, 128) 0 keras_layer_1[0][5] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dense_4 (Dense) (None, 4) 516 dropout_4[0][0] \n",
|
||||
"==================================================================================================\n",
|
||||
"Total params: 4,782,981\n",
|
||||
"Trainable params: 516\n",
|
||||
"Non-trainable params: 4,782,465\n",
|
||||
"__________________________________________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"inp = keras.Input(shape=(),dtype=tf.string)\n",
|
||||
"x = vectorizer(inp)\n",
|
||||
"x = bert(x)\n",
|
||||
"x = keras.layers.Dropout(0.1)(x['pooled_output'])\n",
|
||||
"out = keras.layers.Dense(4,activation='softmax')(x)\n",
|
||||
"model = keras.models.Model(inp,out)\n",
|
||||
"bert.trainable = False\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"938/938 [==============================] - 528s 559ms/step - loss: 0.8056 - acc: 0.6983 - val_loss: 0.5953 - val_acc: 0.7888\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f9bb1e36d00>"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer='adam')\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпрджреНрдпрдкрд┐ рдереЛрд░реИ рдЯреНрд░реЗрди рдЧрд░реНрди рд╕рдХрд┐рдиреЗ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЫрдиреН, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдХреИ рдврд┐рд▓реЛ рдЫ, рдХрд┐рдирдХрд┐ BERT рдлрд┐рдЪрд░ рдПрдХреНрд╕реНрдЯреНрд░реНрдпрд╛рдХреНрдЯрд░ рдХрдореНрдкреНрдпреБрдЯреЗрд╢рдирд▓ рд░реВрдкрдорд╛ рднрд╛рд░реА рдЫред рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рд╣рд╛рдореАрд▓реЗ рдЙрдЪрд┐рдд рд╢реБрджреНрдзрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреЗрдиреМрдВ, рдпрд╛ рдд рдЯреНрд░реЗрдирд┐рдЩрдХреЛ рдХрдореАрдХрд╛ рдХрд╛рд░рдг, рдпрд╛ рдореЛрдбреЗрд▓ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рдЕрднрд╛рд╡рдХрд╛ рдХрд╛рд░рдгред\n",
|
||||
"\n",
|
||||
"рдЕрдм BERT рдХреЛ рд╡рдЬрдирд╣рд░реВ рдЕрдирдлреНрд░рд┐рдЬ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рдкрдирд┐ рдЯреНрд░реЗрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдзреЗрд░реИ рд╕рд╛рдиреЛ рд▓рд░реНрдирд┐рдЩ рд░реЗрдЯ рдЖрд╡рд╢реНрдпрдХ рдЫ, рд╕рд╛рдереИ **warmup** рд╕рд╣рд┐рддрдХреЛ рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЯреНрд░реЗрдирд┐рдЩ рд░рдгрдиреАрддрд┐ рдЪрд╛рд╣рд┐рдиреНрдЫ, **AdamW** рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ред рд╣рд╛рдореА `tf-models-official` рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬрд░ рдмрдирд╛рдЙрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"model\"\n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # Connected to \n",
|
||||
"==================================================================================================\n",
|
||||
"input_1 (InputLayer) [(None,)] 0 \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer (KerasLayer) {'input_type_ids': ( 0 input_1[0][0] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"keras_layer_1 (KerasLayer) {'pooled_output': (N 4782465 keras_layer[0][0] \n",
|
||||
" keras_layer[0][1] \n",
|
||||
" keras_layer[0][2] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dropout_4 (Dropout) (None, 128) 0 keras_layer_1[0][5] \n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"dense_4 (Dense) (None, 4) 516 dropout_4[0][0] \n",
|
||||
"==================================================================================================\n",
|
||||
"Total params: 4,782,981\n",
|
||||
"Trainable params: 4,782,980\n",
|
||||
"Non-trainable params: 1\n",
|
||||
"__________________________________________________________________________________________________\n",
|
||||
"938/938 [==============================] - 629s 664ms/step - loss: 0.6344 - acc: 0.7658 - val_loss: 0.4876 - val_acc: 0.8247\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f9bb0bd0070>"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from official.nlp import optimization \n",
|
||||
"bert.trainable=True\n",
|
||||
"model.summary()\n",
|
||||
"epochs = 3\n",
|
||||
"opt = optimization.create_optimizer(\n",
|
||||
" init_lr=3e-5,\n",
|
||||
" num_train_steps=epochs*len(ds_train),\n",
|
||||
" num_warmup_steps=0.1*epochs*len(ds_train),\n",
|
||||
" optimizer_type='adamw')\n",
|
||||
"\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',metrics=['acc'], optimizer=opt)\n",
|
||||
"model.fit(ds_train.map(tupelize).batch(128),validation_data=ds_test.map(tupelize).batch(128))"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд╕рд░реА рддрдкрд╛рдИрдВрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд▓рд┐ рдврд┐рд▓реЛ рд╣реБрдиреНрдЫ - рддрд░ рддрдкрд╛рдИрдВрд▓реЗ рдХреЗрд╣реА рдЗрдкреЛрдХреНрд╕ (рел-резреж) рдХреЛ рд▓рд╛рдЧрд┐ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реЗрд░ рдкрд╣рд┐рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рддрд░рд┐рдХрд╛рд╣рд░реВрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрджреИ рдЙрддреНрдХреГрд╖реНрдЯ рдирддрд┐рдЬрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"## Huggingface Transformers рдкреБрд╕реНрддрдХрд╛рд▓рдп\n",
|
||||
"\n",
|
||||
"Transformer рдореЛрдбреЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЕрд░реНрдХреЛ рдзреЗрд░реИ рд╕рд╛рдорд╛рдиреНрдп (рд░ рдЕрд▓рд┐ рд╕рд░рд▓) рддрд░рд┐рдХрд╛ [HuggingFace рдкреНрдпрд╛рдХреЗрдЬ](https://github.com/huggingface/) рд╣реЛ, рдЬрд╕рд▓реЗ рд╡рд┐рднрд┐рдиреНрди NLP рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓ рдирд┐рд░реНрдорд╛рдг рдмреНрд▓рдХрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдпреЛ Tensorflow рд░ PyTorch рджреБрдмреИрдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрд▓рдмреНрдз рдЫ, рдЬреБрди рдЕрд░реНрдХреЛ рдзреЗрд░реИ рд▓реЛрдХрдкреНрд░рд┐рдп рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реЛред\n",
|
||||
"\n",
|
||||
"> **Note**: рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ Transformers рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдирдорд╛ рдЪрд╛рд╕реЛ рдЫреИрди рднрдиреЗ - рддрдкрд╛рдИрдВ рдпреЛ рдиреЛрдЯрдмреБрдХрдХреЛ рдЕрдиреНрддреНрдпрд╕рдореНрдо рдЬрд╛рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдХрд┐рдирднрдиреЗ рдпрд╣рд╛рдБ рдорд╛рдерд┐ рдЧрд░рд┐рдПрдХрд╛ рдХреБрд░рд╛рд╣рд░реВрднрдиреНрджрд╛ рдзреЗрд░реИ рдлрд░рдХ рдХреЗрд╣реА рджреЗрдЦрд┐рдиреЗ рдЫреИрдиред рд╣рд╛рдореА BERT рдореЛрдбреЗрд▓рд▓рд╛рдИ рдлрд░рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░ рдзреЗрд░реИ рдареВрд▓реЛ рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗ рдЙрд╣реА рдЪрд░рдгрд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреЗрдЫреМрдВред рддреНрдпрд╕реИрд▓реЗ, рдпреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдХреЗрд╣реА рд▓рд╛рдореЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдХреЗрд╡рд▓ рдХреЛрдб рд╣реЗрд░реНрди рдЪрд╛рд╣рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рд╣реЗрд░реМрдВ, рд╣рд╛рдореНрд░реЛ рд╕рдорд╕реНрдпрд╛ [Huggingface Transformers](http://huggingface.co) рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд╕рд░реА рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдкрд╣рд┐рд▓реЛ рдХреБрд░рд╛ рд╣рд╛рдореАрд▓реЗ рдЧрд░реНрдиреЗ рднрдиреЗрдХреЛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣реЗрдХреЛ рдореЛрдбреЗрд▓ рдЪрдпрди рдЧрд░реНрдиреБ рд╣реЛред рдХреЗрд╣реА рдмрд┐рд▓реНрдЯ-рдЗрди рдореЛрдбреЗрд▓рд╣рд░реВрдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд, Huggingface рдорд╛ [рдЕрдирд▓рд╛рдЗрди рдореЛрдбреЗрд▓ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА](https://huggingface.co/models) рдЙрдкрд▓рдмреНрдз рдЫ, рдЬрд╣рд╛рдБ рддрдкрд╛рдИрдВ рд╕рдореБрджрд╛рдпрджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдЗрдПрдХрд╛ рдзреЗрд░реИ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рдореЛрдбреЗрд▓рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддреА рд╕рдмреИ рдореЛрдбреЗрд▓рд╣рд░реВ рдХреЗрд╡рд▓ рдореЛрдбреЗрд▓рдХреЛ рдирд╛рдо рдкреНрд░рджрд╛рди рдЧрд░реЗрд░ рд▓реЛрдб рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдореЛрдбреЗрд▓рдХрд╛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдмреИ рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓рд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рд╣реБрдиреЗрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдХрд╣рд┐рд▓реЗрдХрд╛рд╣реАрдБ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрдлреНрдиреИ рдореЛрдбреЗрд▓рд╣рд░реВ рд▓реЛрдб рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрди рд╕рдХреНрдЫ, рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рд╕рдмреИ рд╕рдореНрдмрдиреНрдзрд┐рдд рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рднрдПрдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рдорд╛ рдЯреЛрдХрдирд╛рдЗрдЬрд░рдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ, `config.json` рдлрд╛рдЗрд▓рдорд╛ рдореЛрдбреЗрд▓рдХрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ, рдмрд╛рдЗрдирд░реА рд╡реЗрдЯрд╣рд░реВ рдЖрджрд┐ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫрдиреНред\n",
|
||||
"\n",
|
||||
"рдореЛрдбреЗрд▓рдХреЛ рдирд╛рдордмрд╛рдЯ, рд╣рд╛рдореА рдореЛрдбреЗрд▓ рд░ рдЯреЛрдХрдирд╛рдЗрдЬрд░ рджреБрд╡реИрд▓рд╛рдИ рдЗрдирд┐рд╕рд┐рдпрд▓рд╛рдЗрдЬ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдЯреЛрдХрдирд╛рдЗрдЬрд░рдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import transformers\n",
|
||||
"\n",
|
||||
"# To load the model from Internet repository using model name. \n",
|
||||
"# Use this if you are running from your own copy of the notebooks\n",
|
||||
"bert_model = 'bert-base-uncased' \n",
|
||||
"\n",
|
||||
"# To load the model from the directory on disk. Use this for Microsoft Learn module, because we have\n",
|
||||
"# prepared all required files for you.\n",
|
||||
"#bert_model = './bert'\n",
|
||||
"\n",
|
||||
"tokenizer = transformers.BertTokenizer.from_pretrained(bert_model)\n",
|
||||
"\n",
|
||||
"MAX_SEQ_LEN = 128\n",
|
||||
"PAD_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.pad_token)\n",
|
||||
"UNK_INDEX = tokenizer.convert_tokens_to_ids(tokenizer.unk_token)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"`tokenizer` рд╡рд╕реНрддреБрдорд╛ `encode` рдХрд╛рд░реНрдп рд╣реБрдиреНрдЫ рдЬрд╕рд▓рд╛рдИ рдкрд╛рдард▓рд╛рдИ рд╕рд┐рдзреИ рдПрдиреНрдХреЛрдб рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[101, 23435, 12314, 2003, 1037, 2307, 7705, 2005, 17953, 2361, 102]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer.encode('Tensorflow is a great framework for NLP')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореА рдЯреЛрдХрдирд╛рдЗрдЬрд░рд▓рд╛рдИ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рдореЛрдбреЗрд▓рдорд╛ рдкрд╛рд╕ рдЧрд░реНрди рдЙрдкрдпреБрдХреНрдд рддрд░рд┐рдХрд╛рдорд╛ рдПрдиреНрдХреЛрдб рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ, рдЬрд╕реНрддреИ `token_ids`, `input_mask` рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реЗрд░ред рд╣рд╛рдореАрд▓реЗ `return_tensors='tf'` рддрд░реНрдХ рдкреНрд░рджрд╛рди рдЧрд░реЗрд░ Tensorflow рдЯреЗрдиреНрд╕рд░рд╣рд░реВ рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреЗрд░ рдкрдирд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"{'input_ids': <tf.Tensor: shape=(1, 5), dtype=int32, numpy=array([[ 101, 7592, 1010, 2045, 102]], dtype=int32)>, 'token_type_ids': <tf.Tensor: shape=(1, 5), dtype=int32, numpy=array([[0, 0, 0, 0, 0]], dtype=int32)>, 'attention_mask': <tf.Tensor: shape=(1, 5), dtype=int32, numpy=array([[1, 1, 1, 1, 1]], dtype=int32)>}"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tokenizer(['Hello, there'],return_tensors='tf')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ `bert-base-uncased` рдирд╛рдордХ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ BERT рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред *Uncased* рд▓реЗ рдореЛрдбреЗрд▓ рдХреЗрд╕-рдЗрдиреНрд╕реЗрдиреНрд╕рд┐рдЯрд┐рдн (рдЕрдХреНрд╖рд░рдХреЛ рдареВрд▓рд╛-рд╕рд╛рдирд╛ рдлрд░рдХ рдирдорд╛рдиреНрдиреЗ) рднрдПрдХреЛ рдЬрдирд╛рдЙрдБрдЫред\n",
|
||||
"\n",
|
||||
"рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ рдЯреЛрдХрдирд╛рдЗрдЬ рдЧрд░рд┐рдПрдХреЛ рдЕрдиреБрдХреНрд░рдо рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрдкрд░реНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдбрд╛рдЯрд╛ рдкреНрд░рд╢реЛрдзрди рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрдиреЗрдЫреМрдВред рдХрд┐рдирднрдиреЗ `tokenizer.encode` рдПрдЙрдЯрд╛ Python рдлрдЩреНрд╕рди рд╣реЛ, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЕрдШрд┐рд▓реНрд▓реЛ рдпреБрдирд┐рдЯрдорд╛ рдЬрд╕реНрддреИ `py_function` рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд▓ рдЧрд░реНрдиреЗ рд╕рдорд╛рди рддрд░рд┐рдХрд╛ рдЕрдкрдирд╛рдЙрдиреЗрдЫреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 31,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def process(x):\n",
|
||||
" return tokenizer.encode(x.numpy().decode('utf-8'),return_tensors='tf',padding='max_length',max_length=MAX_SEQ_LEN,truncation=True)[0]\n",
|
||||
"\n",
|
||||
"def process_fn(x):\n",
|
||||
" s = x['title']+' '+x['description']\n",
|
||||
" e = tf.py_function(process,inp=[s],Tout=(tf.int32))\n",
|
||||
" e.set_shape(MAX_SEQ_LEN)\n",
|
||||
" return e,x['label']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА `BertForSequenceClassification` рдкреНрдпрд╛рдХреЗрдЬ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЛрдбреЗрд▓ рд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпрд╕рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫ рдХрд┐ рд╣рд╛рдореНрд░реЛ рдореЛрдбреЗрд▓рд╕рдБрдЧ рд╡рд░реНрдЧреАрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд╣рд┐рд▓реЗ рдиреИ рдЫ, рдЕрдиреНрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд╕рд╣рд┐рддред рддрдкрд╛рдИрдВрд▓реЗ рдЪреЗрддрд╛рд╡рдиреА рд╕рдиреНрджреЗрд╢ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫ рдЬрд╕рд▓реЗ рдЕрдиреНрддрд┐рдо рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛рдХрд╛ рддреМрд▓рд╣рд░реВ рдЖрд░рдореНрдн рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреА рдЬрдирд╛рдЙрдБрдЫ, рд░ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдЫ - рдпреЛ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдареАрдХ рдЫ, рдХрд┐рдирднрдиреЗ рд╣рд╛рдореАрд▓реЗ рдЧрд░реНрди рд▓рд╛рдЧреЗрдХреЛ рдХреБрд░рд╛ рдпрд╣реА рд╣реЛ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 32,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"model = transformers.TFBertForSequenceClassification.from_pretrained(bert_model,num_labels=4,output_attentions=False)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 33,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"tf_bert_for_sequence_classification_1\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"bert (TFBertMainLayer) multiple 109482240 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_75 (Dropout) multiple 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"classifier (Dense) multiple 3076 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 109,485,316\n",
|
||||
"Trainable params: 109,485,316\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЬрд╕реНрддреЛ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ `summary()` рдмрд╛рдЯ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдореЛрдбреЗрд▓рдорд╛ рд▓рдЧрднрдЧ резрезреж рдорд┐рд▓рд┐рдпрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЫрдиреН! рд╕рдореНрднрд╡рддрдГ, рдпрджрд┐ рд╣рд╛рдореА рд╕рд╛рдиреЛ рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рд╕рд╛рдзрд╛рд░рдг рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рдЪрд╛рд╣рдиреНрдЫреМрдВ рднрдиреЗ, рд╣рд╛рдореА BERT рдмреЗрд╕ рд▓реЗрдпрд░рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рдЪрд╛рд╣рдБрджреИрдиреМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 34,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"tf_bert_for_sequence_classification_1\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
"Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
"bert (TFBertMainLayer) multiple 109482240 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"dropout_75 (Dropout) multiple 0 \n",
|
||||
"_________________________________________________________________\n",
|
||||
"classifier (Dense) multiple 3076 \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 109,485,316\n",
|
||||
"Trainable params: 3,076\n",
|
||||
"Non-trainable params: 109,482,240\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.layers[0].trainable = False\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реБрд░реБ рдЧрд░реНрди рддрдпрд╛рд░ рдЫреМрдВ!\n",
|
||||
"\n",
|
||||
"> **Note**: рдкреВрд░реНрдг-рд╕реНрддрд░рдХреЛ BERT рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрди рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрди рд╕рдХреНрдЫ! рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рейреи рдмреНрдпрд╛рдЪрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВред рдпреЛ рдХреЗрд╡рд▓ рдореЛрдбреЗрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╕рд░реА рд╕реЗрдЯрдЕрдк рдЧрд░рд┐рдиреНрдЫ рднрдиреНрдиреЗ рджреЗрдЦрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛред рдпрджрд┐ рддрдкрд╛рдИрдВ рдкреВрд░реНрдг-рд╕реНрддрд░рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рдЗрдЪреНрдЫреБрдХ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ - `steps_per_epoch` рд░ `validation_steps` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реН, рд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЧрд░реНрди рддрдпрд╛рд░ рд╣реБрдиреБрд╣реЛрд╕реН!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 30,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"32/32 [==============================] - 142s 4s/step - loss: 1.3896 - acc: 0.2500 - val_loss: 1.3863 - val_acc: 0.2480\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<tensorflow.python.keras.callbacks.History at 0x7f1d40a4b6a0>"
|
||||
]
|
||||
},
|
||||
"execution_count": 30,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.compile('adam','sparse_categorical_crossentropy',['acc'])\n",
|
||||
"tf.get_logger().setLevel('ERROR')\n",
|
||||
"model.fit(ds_train.map(process_fn).batch(32),validation_data=ds_test.map(process_fn).batch(32),steps_per_epoch=32,validation_steps=2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдпрджрд┐ рддрдкрд╛рдИрдВ iterations рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╛рдЙрдиреБрд╣реБрдиреНрдЫ, рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рдкрд░реНрдЦрдиреБрд╣реБрдиреНрдЫ, рд░ рдзреЗрд░реИ epochs рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдИрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ BERT рд╡рд░реНрдЧреАрдХрд░рдгрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╕рдмреИрднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ accuracy рджрд┐рдиреНрдЫ! рдпрд╕рдХреЛ рдХрд╛рд░рдг BERT рд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рднрд╛рд╖рд╛рдХреЛ рд╕рдВрд░рдЪрдирд╛ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмреБрдЭрд┐рд╕рдХреЗрдХреЛ рдЫ, рд░ рд╣рд╛рдореАрд▓рд╛рдИ рдХреЗрд╡рд▓ рдЕрдиреНрддрд┐рдо classifier рд▓рд╛рдИ fine-tune рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрд░, рдХрд┐рдирднрдиреЗ BERT рдареВрд▓реЛ рдореЛрдбреЗрд▓ рд╣реЛ, рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд╛рдореЛ рд╕рдордп рд▓рд╛рдЧреНрдЫ, рд░ рдЧрдореНрднреАрд░ computational рд╢рдХреНрддрд┐ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдЫ! (GPU, рд░ рд╕рдореНрднрд╡рддрдГ рдПрдХрднрдиреНрджрд╛ рдмрдвреА GPU).\n",
|
||||
"\n",
|
||||
"> **Note:** рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдиреЛ pre-trained BERT рдореЛрдбреЗрд▓рдордзреНрдпреЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВред рдареВрд▓рд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рдЫрдиреН рдЬрд╕рд▓реЗ рд╕рдореНрднрд╡рддрдГ рдЕрдЭ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рджрд┐рди рд╕рдХреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдХреБрд░рд╛\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдЗрдХрд╛рдИрдорд╛, рд╣рд╛рдореАрд▓реЗ **рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░рд╣рд░реВ** рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдзреЗрд░реИ рд╣рд╛рд▓рд╕рд╛рд▓реИрдХрд╛ рдореЛрдбрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд╣рд░реВ рд╣реЗрд░реЗрдХрд╛ рдЫреМрдВред рд╣рд╛рдореАрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдкрд╛рда рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХрд╛ рдЫреМрдВ, рддрд░ рддреНрдпрд╕реНрддреИ рдЧрд░реА, BERT рдореЛрдбрд▓рд╣рд░реВрд▓рд╛рдИ рдЗрдХрд╛рдИ рдирд┐рдХрд╛рд▓реНрдиреЗ, рдкреНрд░рд╢реНрди рдЙрддреНрддрд░ рджрд┐рдиреЗ, рд░ рдЕрдиреНрдп NLP рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред\n",
|
||||
"\n",
|
||||
"рдЯреНрд░рд╛рдиреНрд╕рдлрд░реНрдорд░ рдореЛрдбрд▓рд╣рд░реВ NLP рдорд╛ рд╣рд╛рд▓рдХреЛ рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдкреНрд░рд╡рд┐рдзрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрдЫрдиреН, рд░ рдкреНрд░рд╛рдпрдГ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдЬрдм рддрдкрд╛рдИрдВрд▓реЗ рдЕрдиреБрдХреВрд▓ NLP рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рдерд╛рд▓реНрдиреБрд╣реБрдиреНрдЫ, рдпреЛ рдкрд╣рд┐рд▓реЛ рд╕рдорд╛рдзрд╛рди рд╣реБрдиреБрдкрд░реНрдЫ рдЬрд╕рд╕рдБрдЧ рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдерд╛рд▓реНрдиреБрд╣реБрдиреНрдЫред рддрд░, рдпрджрд┐ рддрдкрд╛рдИрдВ рдЙрдиреНрдирдд рдиреНрдпреВрд░рд▓ рдореЛрдбрд▓рд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпрд╕ рдореЛрдбреНрдпреБрд▓рдорд╛ рдЫрд▓рдлрд▓ рдЧрд░рд┐рдПрдХрд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдиреНрдпреВрд░рд▓ рдиреЗрдЯрд╡рд░реНрдХрд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рднреВрдд рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рдмреБрдЭреНрдиреБ рдЕрддреНрдпрдиреНрдд рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "0cb620c6d4b9f7a635928804c26cf22403d89d98d79684e4529119355ee6d5a5"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "py38_tensorflow",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"coopTranslator": {
|
||||
"original_hash": "ab59c532409774988ab875f2260e8e53",
|
||||
"translation_date": "2025-08-28T09:28:07+00:00",
|
||||
"source_file": "lessons/5-NLP/18-Transformers/TransformersTF.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 4
|
||||
}
|
||||
|
|
@ -0,0 +1,490 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# рдирд╛рдорд┐рдд рдЗрдХрд╛рдИ рдорд╛рдиреНрдпрддрд╛ (NER)\n",
|
||||
"\n",
|
||||
"рдпреЛ рдиреЛрдЯрдмреБрдХ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдмрд╛рдЯ рд▓рд┐рдЗрдПрдХреЛ рд╣реЛред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА [Annotated Corpus for Named Entity Recognition](https://www.kaggle.com/datasets/abhinavwalia95/entity-annotated-corpus) рдбрд╛рдЯрд╛рд╕реЗрдЯрдорд╛ рдЖрдзрд╛рд░рд┐рдд NER рдореЛрдбреЗрд▓ рдХрд╕рд░реА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗ рднрдиреЗрд░ рд╕рд┐рдХреНрдиреЗрдЫреМрдВред рдЕрдШрд┐ рдмрдвреНрдиреБ рдЕрдШрд┐, рдХреГрдкрдпрд╛ [ner_dataset.csv](https://www.kaggle.com/datasets/abhinavwalia95/entity-annotated-corpus?resource=download&select=ner_dataset.csv) рдлрд╛рдЗрд▓рд▓рд╛рдИ рд╣рд╛рд▓рдХреЛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 62,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import pandas as pd\n",
|
||||
"from tensorflow import keras\n",
|
||||
"import numpy as np"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдбреЗрдЯрд╛рд╕реЗрдЯ рддрдпрд╛рд░ рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА рдбреЗрдЯрд╛рд╕реЗрдЯрд▓рд╛рдИ рдПрдХ рдбреЗрдЯрд╛ рдлреНрд░реЗрдордорд╛ рдкрдвреЗрд░ рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВред рдпрджрд┐ рддрдкрд╛рдИрдВ Pandas рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗрдорд╛ рдердк рдЬрд╛рдиреНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рд╣рд╛рдореНрд░реЛ [Data Science for Beginners](http://aka.ms/datascience-beginners) рдХреЛ [рдбреЗрдЯрд╛ рдкреНрд░рд╢реЛрдзрдирдХреЛ рдкрд╛рда](https://github.com/microsoft/Data-Science-For-Beginners/tree/main/2-Working-With-Data/07-python) рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/html": [
|
||||
"<div>\n",
|
||||
"<style scoped>\n",
|
||||
" .dataframe tbody tr th:only-of-type {\n",
|
||||
" vertical-align: middle;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe tbody tr th {\n",
|
||||
" vertical-align: top;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .dataframe thead th {\n",
|
||||
" text-align: right;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<table border=\"1\" class=\"dataframe\">\n",
|
||||
" <thead>\n",
|
||||
" <tr style=\"text-align: right;\">\n",
|
||||
" <th></th>\n",
|
||||
" <th>Sentence #</th>\n",
|
||||
" <th>Word</th>\n",
|
||||
" <th>POS</th>\n",
|
||||
" <th>Tag</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>Sentence: 1</td>\n",
|
||||
" <td>Thousands</td>\n",
|
||||
" <td>NNS</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>of</td>\n",
|
||||
" <td>IN</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>demonstrators</td>\n",
|
||||
" <td>NNS</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>have</td>\n",
|
||||
" <td>VBP</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>NaN</td>\n",
|
||||
" <td>marched</td>\n",
|
||||
" <td>VBN</td>\n",
|
||||
" <td>O</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" Sentence # Word POS Tag\n",
|
||||
"0 Sentence: 1 Thousands NNS O\n",
|
||||
"1 NaN of IN O\n",
|
||||
"2 NaN demonstrators NNS O\n",
|
||||
"3 NaN have VBP O\n",
|
||||
"4 NaN marched VBN O"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"df = pd.read_csv('ner_dataset.csv',encoding='unicode-escape')\n",
|
||||
"df.head()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array(['O', 'B-geo', 'B-gpe', 'B-per', 'I-geo', 'B-org', 'I-org', 'B-tim',\n",
|
||||
" 'B-art', 'I-art', 'I-per', 'I-gpe', 'I-tim', 'B-nat', 'B-eve',\n",
|
||||
" 'I-eve', 'I-nat'], dtype=object)"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tags = df.Tag.unique()\n",
|
||||
"tags"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"'O'"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"id2tag = dict(enumerate(tags))\n",
|
||||
"tag2id = { v : k for k,v in id2tag.items() }\n",
|
||||
"\n",
|
||||
"id2tag[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рдЕрдм рд╣рд╛рдореАрд▓реЗ рд╢рдмреНрджрд╛рд╡рд▓реАрд╕рдБрдЧ рдкрдирд┐ рддреНрдпрд╣реА рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рд╕рд░рд▓рддрд╛рдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╢рдмреНрджрдХреЛ рдЖрд╡реГрддреНрддрд┐рд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рдирджрд┐рдИ рд╢рдмреНрджрд╛рд╡рд▓реА рдмрдирд╛рдЙрдиреЗрдЫреМрдВ; рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирдорд╛ рддрдкрд╛рдИрдВрд▓реЗ Keras рднреЗрдХреНрдЯрд░рд╛рдЗрдЬрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ, рд░ рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"vocab = set(df['Word'].apply(lambda x: x.lower()))\n",
|
||||
"id2word = { i+1 : v for i,v in enumerate(vocab) }\n",
|
||||
"id2word[0] = '<UNK>'\n",
|
||||
"vocab.add('<UNK>')\n",
|
||||
"word2id = { v : k for k,v in id2word.items() }"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд╛рдХреНрдпрд╣рд░реВрдХреЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЖрдЙрдиреБрд╣реЛрд╕реН рдореВрд▓ рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ рд▓реВрдк рдЧрд░реМрдВ рд░ рд╕рдмреИ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд╛рдХреНрдпрд╣рд░реВрд▓рд╛рдИ `X` (рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕реВрдЪреА) рд░ `Y` (рдЯреЛрдХрдирд╣рд░реВрдХреЛ рд╕реВрдЪреА) рдорд╛ рдЕрд▓рдЧ рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 41,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X,Y = [],[]\n",
|
||||
"s,t = [],[]\n",
|
||||
"for i,row in df[['Sentence #','Word','Tag']].iterrows():\n",
|
||||
" if pd.isna(row['Sentence #']):\n",
|
||||
" s.append(row['Word'])\n",
|
||||
" t.append(row['Tag'])\n",
|
||||
" else:\n",
|
||||
" if len(s)>0:\n",
|
||||
" X.append(s)\n",
|
||||
" Y.append(t)\n",
|
||||
" s,t = [row['Word']],[row['Tag']]\n",
|
||||
"X.append(s)\n",
|
||||
"Y.append(t)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 93,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"([10386,\n",
|
||||
" 23515,\n",
|
||||
" 4134,\n",
|
||||
" 29620,\n",
|
||||
" 7954,\n",
|
||||
" 13583,\n",
|
||||
" 21193,\n",
|
||||
" 12222,\n",
|
||||
" 27322,\n",
|
||||
" 18258,\n",
|
||||
" 5815,\n",
|
||||
" 15880,\n",
|
||||
" 5355,\n",
|
||||
" 25242,\n",
|
||||
" 31327,\n",
|
||||
" 18258,\n",
|
||||
" 27067,\n",
|
||||
" 23515,\n",
|
||||
" 26444,\n",
|
||||
" 14412,\n",
|
||||
" 358,\n",
|
||||
" 26551,\n",
|
||||
" 5011,\n",
|
||||
" 30558],\n",
|
||||
" [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0])"
|
||||
]
|
||||
},
|
||||
"execution_count": 93,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def vectorize(seq):\n",
|
||||
" return [word2id[x.lower()] for x in seq]\n",
|
||||
"\n",
|
||||
"def tagify(seq):\n",
|
||||
" return [tag2id[x] for x in seq]\n",
|
||||
"\n",
|
||||
"Xv = list(map(vectorize,X))\n",
|
||||
"Yv = list(map(tagify,Y))\n",
|
||||
"\n",
|
||||
"Xv[0], Yv[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╕рд░рд▓рддрд╛рдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рд╕рдмреИ рд╡рд╛рдХреНрдпрд╣рд░реВрд▓рд╛рдИ рдЕрдзрд┐рдХрддрдо рд▓рдореНрдмрд╛рдЗрд╕рдореНрдо 0 рдЯреЛрдХрдирд╣рд░реВрджреНрд╡рд╛рд░рд╛ рднрд░рдкрд░реНрджрдЫреМрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рдирдорд╛, рд╣рд╛рдореАрд▓реЗ рдЕрдЭ рдЪрддреБрд░ рд░рдгрдиреАрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рди рд╕рдХреНрдЫреМрдВ, рд░ рдХреЗрд╡рд▓ рдПрдХ рдорд┐рдирд┐рдмреНрдпрд╛рдЪрднрд┐рддреНрд░ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд▓рд╛рдИ рднрд░рдкрд░реНрджрдЫреМрдВред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 51,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"X_data = keras.preprocessing.sequence.pad_sequences(Xv,padding='post')\n",
|
||||
"Y_data = keras.preprocessing.sequence.pad_sequences(Yv,padding='post')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЯреЛрдХрди рд╡рд░реНрдЧреАрдХрд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рд╣рд╛рдореА рдЯреЛрдХрди рд╡рд░реНрдЧреАрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рджреБрдИ-рддрд╣ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ LSTM рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рдЕрдиреНрддрд┐рдо LSTM рддрд╣рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдШрдирд╛ рд╡рд░реНрдЧреАрдХрд░рдгрдХрд░реНрддрд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА `TimeDistributed` рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ, рдЬрд╕рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдгрдорд╛ LSTM рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдПрдЙрдЯреИ рдШрдирд╛ рддрд╣ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрдЫ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 94,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Model: \"sequential_3\"\n",
|
||||
"_________________________________________________________________\n",
|
||||
" Layer (type) Output Shape Param # \n",
|
||||
"=================================================================\n",
|
||||
" embedding_4 (Embedding) (None, 104, 300) 9545400 \n",
|
||||
" \n",
|
||||
" bidirectional_6 (Bidirectio (None, 104, 200) 320800 \n",
|
||||
" nal) \n",
|
||||
" \n",
|
||||
" bidirectional_7 (Bidirectio (None, 104, 200) 240800 \n",
|
||||
" nal) \n",
|
||||
" \n",
|
||||
" time_distributed_3 (TimeDis (None, 104, 17) 3417 \n",
|
||||
" tributed) \n",
|
||||
" \n",
|
||||
"=================================================================\n",
|
||||
"Total params: 10,110,417\n",
|
||||
"Trainable params: 10,110,417\n",
|
||||
"Non-trainable params: 0\n",
|
||||
"_________________________________________________________________\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"maxlen = X_data.shape[1]\n",
|
||||
"vocab_size = len(vocab)\n",
|
||||
"num_tags = len(tags)\n",
|
||||
"model = keras.models.Sequential([\n",
|
||||
" keras.layers.Embedding(vocab_size, 300, input_length=maxlen),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(units=100, activation='tanh', return_sequences=True)),\n",
|
||||
" keras.layers.Bidirectional(keras.layers.LSTM(units=100, activation='tanh', return_sequences=True)),\n",
|
||||
" keras.layers.TimeDistributed(keras.layers.Dense(num_tags, activation='softmax'))\n",
|
||||
"])\n",
|
||||
"model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['acc'])\n",
|
||||
"model.summary()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореНрд░реЛ рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ `maxlen` рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рд░рд╣реЗрдХрд╛ рдЫреМрдВ - рдпрджрд┐ рд╣рд╛рдореА рдЪрд╛рд╣рдиреНрдЫреМрдВ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХрд▓реЗ рднрд┐рдиреНрди рд▓рдореНрдмрд╛рдЗрдХрд╛ рдЕрдиреБрдХреНрд░рдорд╣рд░реВрд▓рд╛рдИ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрди рд╕рдХреЛрд╕реН, рднрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдЧрд░реНрджрд╛ рд╣рд╛рдореАрд▓рд╛рдИ рдЕрдЭ рдЪрддреБрд░ рд╣реБрди рдЖрд╡рд╢реНрдпрдХ рдЫред\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореА рдореЛрдбреЗрд▓рд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдиреЗрдЫреМрдВред рдЧрддрд┐ рдмрдврд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдПрдХ рдЗрдкреЛрдХрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдиреЗрдЫреМрдВ, рддрд░ рддрдкрд╛рдИрдВ рд▓рд╛рдореЛ рд╕рдордпрд╕рдореНрдо рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд╕рд╛рдереИ, рддрдкрд╛рдИрдВрд▓реЗ рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рдХреЗрд╣реА рднрд╛рдЧрд▓рд╛рдИ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рд░реВрдкрдорд╛ рдЕрд▓рдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ, рддрд╛рдХрд┐ рдорд╛рдиреНрдпрддрд╛рдХреЛ рд╢реБрджреНрдзрддрд╛ рдЕрд╡рд▓реЛрдХрди рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 57,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"1499/1499 [==============================] - 740s 488ms/step - loss: 0.0667 - acc: 0.9841\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<keras.callbacks.History at 0x16f0bb2a310>"
|
||||
]
|
||||
},
|
||||
"execution_count": 57,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"model.fit(X_data,Y_data)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкрд░рд┐рдгрд╛рдо рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджреИ\n",
|
||||
"\n",
|
||||
"рдЕрдм рд╣рд╛рдореНрд░рд╛ рдЗрдХрд╛рдИ рдкрд╣рд┐рдЪрд╛рди рдореЛрдбреЗрд▓рд▓реЗ рдПрдЙрдЯрд╛ рдирдореВрдирд╛ рд╡рд╛рдХреНрдпрдорд╛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рд╣реЗрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 91,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"sent = 'John Smith went to Paris to attend a conference in cancer development institute'\n",
|
||||
"words = sent.lower().split()\n",
|
||||
"v = keras.preprocessing.sequence.pad_sequences([[word2id[x] for x in words]],padding='post',maxlen=maxlen)\n",
|
||||
"res = model(v)[0]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 92,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"john -> B-per\n",
|
||||
"smith -> I-per\n",
|
||||
"went -> O\n",
|
||||
"to -> O\n",
|
||||
"paris -> B-geo\n",
|
||||
"to -> O\n",
|
||||
"attend -> O\n",
|
||||
"a -> O\n",
|
||||
"conference -> O\n",
|
||||
"in -> O\n",
|
||||
"cancer -> B-org\n",
|
||||
"development -> I-org\n",
|
||||
"institute -> I-org\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"r = np.argmax(res.numpy(),axis=1)\n",
|
||||
"for i,w in zip(r,words):\n",
|
||||
" print(f\"{w} -> {id2tag[i]}\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдореБрдЦреНрдп рдХреБрд░рд╛\n",
|
||||
"\n",
|
||||
"рд╕рд╛рдорд╛рдиреНрдп LSTM рдореЛрдбреЗрд▓рд▓реЗ рдкрдирд┐ NER рдорд╛ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рджреЗрдЦрд╛рдЙрдБрдЫред рддрд░, рдЕрдЭ рд░рд╛рдореНрд░реЛ рдирддрд┐рдЬрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ BERT рдЬрд╕реНрддрд╛ рдареВрд▓рд╛ рдкреНрд░рд┐-рдЯреНрд░реЗрди рдЧрд░рд┐рдПрдХреЛ рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред Huggingface Transformers рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ NER рдХреЛ рд▓рд╛рдЧрд┐ BERT рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ [рдпрд╣рд╛рдБ](https://huggingface.co/course/chapter7/2?fw=pt) рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрд┐ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.12"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "254d25052dcca4ef84f59a05f2935bdc",
|
||||
"translation_date": "2025-08-28T09:32:00+00:00",
|
||||
"source_file": "lessons/5-NLP/19-NER/NER-TF.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,326 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## OpenAI GPT рд╕рдВрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ\n",
|
||||
"\n",
|
||||
"рдпреЛ рдиреЛрдЯрдмреБрдХ [AI for Beginners Curriculum](http://aka.ms/ai-beginners) рдХреЛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛред\n",
|
||||
"\n",
|
||||
"рдпрд╕ рдиреЛрдЯрдмреБрдХрдорд╛, рд╣рд╛рдореА Hugging Face рдХреЛ `transformers` рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ OpenAI-GPT рдореЛрдбреЗрд▓рд╕рдБрдЧ рдХрд╕рд░реА рдЦреЗрд▓реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреЗрд░ рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрдиреЗрдЫреМрдВред\n",
|
||||
"\n",
|
||||
"рдЕрдм рдврд┐рд▓рд╛рд╕реБрд╕реНрддреА рдирдЧрд░реА, рдЯреЗрдХреНрд╕реНрдЯ рдЬрдирд░реЗрдЯ рдЧрд░реНрдиреЗ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдЧрд░реМрдВ рд░ рд╕реБрд░реБ рдЧрд░реМрдВ!\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"c:\\Users\\bethanycheum\\Desktop\\AI-For-Beginners\\.venv\\lib\\site-packages\\tqdm\\auto.py:21: 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",
|
||||
"Downloading model.safetensors: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 479M/479M [04:28<00:00, 1.78MB/s] \n",
|
||||
"c:\\Users\\bethanycheum\\Desktop\\AI-For-Beginners\\.venv\\lib\\site-packages\\huggingface_hub\\file_download.py:133: UserWarning: `huggingface_hub` cache-system uses symlinks by default to efficiently store duplicated files but your machine does not support them in C:\\Users\\bethanycheum\\.cache\\huggingface\\hub. Caching files will still work but in a degraded version that might require more space on your disk. This warning can be disabled by setting the `HF_HUB_DISABLE_SYMLINKS_WARNING` environment variable. For more details, see https://huggingface.co/docs/huggingface_hub/how-to-cache#limitations.\n",
|
||||
"To support symlinks on Windows, you either need to activate Developer Mode or to run Python as an administrator. In order to see activate developer mode, see this article: https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development\n",
|
||||
" warnings.warn(message)\n",
|
||||
"Some weights of OpenAIGPTLMHeadModel were not initialized from the model checkpoint at openai-gpt and are newly initialized: ['position_ids']\n",
|
||||
"You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.\n",
|
||||
"Downloading (тАж)neration_config.json: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 74.0/74.0 [00:00<00:00, 48.8kB/s]\n",
|
||||
"Downloading (тАж)olve/main/vocab.json: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 816k/816k [00:00<00:00, 1.76MB/s]\n",
|
||||
"Downloading (тАж)olve/main/merges.txt: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 458k/458k [00:00<00:00, 1.11MB/s]\n",
|
||||
"Downloading (тАж)/main/tokenizer.json: 100%|тЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИтЦИ| 1.27M/1.27M [00:00<00:00, 2.12MB/s]\n",
|
||||
"Xformers is not installed correctly. If you want to use memory_efficient_attention to accelerate training use the following command to install Xformers\n",
|
||||
"pip install xformers.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': \"Hello! I am a neural network, and I want to say that i apologize for not coming to you yourself, for not helping you, and that i was too busy getting dressed and studying for a midterm. you know, the kind where the teachers are like that and they come in pairs with their boyfriends, but not with theirs. it's true, that i have had a girlfriend, and i'm only going on wednesdays and thursdays because i was too busy with college, but maybe\"},\n",
|
||||
" {'generated_text': 'Hello! I am a neural network, and I want to say that we have been blessed with a wonderful gift ; no one of us has died at all. and our spirits are strong, very strong. in one very lucky moment of luck for you, all has been given direction and destiny, and for us there are no more mysteries. the earth has been chosen for you, and that earth is now ours, and you must be forever in our hearts. \" \\n the words, as one,'},\n",
|
||||
" {'generated_text': 'Hello! I am a neural network, and I want to say that if you would just turn and face the general, you would have a nice day. \" \\n \" sure thing, \" said one of the soldiers, and started to run. the rest of the soldiers followed, shouting. the general turned to general zulu, raising his arm. the general said something in his native language, and the general immediately started to run. zulu started to move toward the wall, with the'},\n",
|
||||
" {'generated_text': 'Hello! I am a neural network, and I want to say that i am not a doctor but an anthropologist to you, a specialist, a specialist in the field of astrobiological biology, and that i am very much involved in this investigation. i am not sure, i am not certain, but i can confirm your conclusions and therefore i will go to the top. i have a colleague who has just returned from this expedition and his findings confirm that you are a specialist. that is, he'},\n",
|
||||
" {'generated_text': \"Hello! I am a neural network, and I want to say that everyone here is in agreement that no matter how many times i say to myself,'he was never a man of action on the battlefield,'or'he 'll never take a chance at killing any civilians,'or'he 'll never let his men go undefended against enemy forces of this caliber,'or'that's just what i need in a day like today. \\n you see, there are only three groups that\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 1,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"from transformers import pipeline\n",
|
||||
"\n",
|
||||
"model_name = 'openai-gpt' \n",
|
||||
"\n",
|
||||
"generator = pipeline('text-generation', model=model_name)\n",
|
||||
"\n",
|
||||
"generator(\"Hello! I am a neural network, and I want to say that\", max_length=100, num_return_sequences=5)\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкреНрд░реЙрдореНрдкреНрдЯ рдЗрдиреНрдЬрд┐рдирд┐рдпрд░рд┐рдЩ\n",
|
||||
"\n",
|
||||
"рдХреЗрд╣реА рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдорд╛, рд╕рд╣реА рдкреНрд░реЙрдореНрдкреНрдЯрд╣рд░реВ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реЗрд░ рддрдкрд╛рдИрдВ openai-gpt рдХреЛ рдЬреЗрдиреЗрд░реЗрд╢рди рддреБрд░реБрдиреНрддреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрд▓рдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'Synonyms of a word cat: the same cat i used to stare at, and you in'},\n",
|
||||
" {'generated_text': 'Synonyms of a word cat: cat of the woods, cat of the hills, cat of'},\n",
|
||||
" {'generated_text': 'Synonyms of a word cat: you! \\n \" it\\'s a girl. \" i said'},\n",
|
||||
" {'generated_text': \"Synonyms of a word cat: big cat. but how come, we didn't hear it\"},\n",
|
||||
" {'generated_text': 'Synonyms of a word cat: \" mea - o - c \" which makes them sound'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"Synonyms of a word cat:\", max_length=20, num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> positive this is so horrible - > positive that your brother is gay - >'},\n",
|
||||
" {'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> negative i will bring this on you -, < positive am i, i'},\n",
|
||||
" {'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> negative i have self - esteem i must take it - : \\n - -'},\n",
|
||||
" {'generated_text': 'I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> negative this is - : \\n if it were true that the devil would have'},\n",
|
||||
" {'generated_text': \"I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this -> positive i have you - > positive it's a bad thing, > positive\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"I love when you say this -> Positive\\nI have myself -> Negative\\nThis is awful for you to say this ->\", max_length=40, num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'Translate English to French: cat => chat, dog => chien, student => new and unusual. there were no more words to be'},\n",
|
||||
" {'generated_text': 'Translate English to French: cat => chat, dog => chien, student => student \\n his eyes were huge in his lean face as'},\n",
|
||||
" {'generated_text': \"Translate English to French: cat => chat, dog => chien, student => the teacher's words, their words, their words.\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 4,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"Translate English to French: cat => chat, dog => chien, student => \", top_k=50, max_length=30, num_return_sequences=3)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'People who liked the movie The Matrix also liked it, and there was the movie of the first man after us. \\n i wanted to laugh at how stupid these stupid actors were. no, they were'},\n",
|
||||
" {'generated_text': \"People who liked the movie The Matrix also liked the movie, and the film was the result. and that's when the man in the story was brought into reality, after a few decades. \\n a\"},\n",
|
||||
" {'generated_text': 'People who liked the movie The Matrix also liked the movie the matrix, because there was a very old movie movie called the matrix, where there was a great super hero, and the super hero came out'},\n",
|
||||
" {'generated_text': \"People who liked the movie The Matrix also liked the movie that didn't have a chance to pay cash, if they could afford it. most often they got a good deal and a lot of money,\"},\n",
|
||||
" {'generated_text': \"People who liked the movie The Matrix also liked the movie, and i didn't seem to have the same problem. \\n i 'd met the other half of my family. i spent most of my time\"}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"generator(\"People who liked the movie The Matrix also liked \", max_length=40, num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдкрд╛рда рдирдореВрдирд╛ рд░рдгрдиреАрддрд┐рд╣рд░реВ\n",
|
||||
"\n",
|
||||
"рдЕрд╣рд┐рд▓реЗрд╕рдореНрдо рд╣рд╛рдореАрд▓реЗ рд╕рд╛рдзрд╛рд░рдг **рд▓реЛрднреА** рдирдореВрдирд╛ рд░рдгрдиреАрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рдЖрдПрдХрд╛ рдЫреМрдВ, рдЬрд╣рд╛рдБ рд╣рд╛рдореАрд▓реЗ рд╕рдмреИрднрдиреНрджрд╛ рдЙрдЪреНрдЪ рд╕рдореНрднрд╛рд╡рдирд╛рдХреЛ рдЖрдзрд╛рд░рдорд╛ рдЕрд░реНрдХреЛ рд╢рдмреНрдж рдЪрдпрди рдЧрд░реЗрдХрд╛ рдерд┐рдпреМрдВред рдпрд╕рд░реА рдпреЛ рдХрд╛рдо рдЧрд░реНрдЫ: \n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw my friend, a young man, sprawled across the bed in his bed. \\n \" hi, i\\'m mike eptirard. \" \\n there was silence on the other side of the door. i listened for any trace of life but there was nothing. my heart began to pound, i was starting to sweat, i took out my wallet'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw my mother on the bed, hugging her legs to her chest and sobbing. i saw my dad and mother from the corner of my eye. \\n elfin face was covered in tears as i entered the room. my dad and mother also wept ; just as they did every other time i came to work. but this time, they had different faces'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw the room had changed because it was dark. it still smelled like a hospital. a new light shined through from a vent in the ceiling. i found myself in a bathroom and a small room with a sink and a wall of glass. the bathroom billion years ago. not so different from all of the rest of the apartment. \\n now...'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a large woman with dark hair and pale skin. she was asleep, but i noticed a faint movement of her face. i could sense she was awake. i got up and walked over to her. \\n \" hello miss. i am inspector michael o\\'dell ; we are investigating the case against you. i wanted to ask if you were the'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw i had an empty table and three empty chairs. that was all i needed. i had left a note on a table in the center of the room and had a pen in hand. \" \\n \" i think what you were doing was something he was doing to her. \" \\n \" yeah, \" i nodded with a grin. \" i'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"prompt = \"It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw\"\n",
|
||||
"generator(prompt,max_length=100,num_return_sequences=5)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**рдмрд┐рдо рд╕рд░реНрдЪ** рдЬрдирд░реЗрдЯрд░рд▓рд╛рдИ рдкрд╛рда рдЙрддреНрдкрд╛рджрдирдХрд╛ рд╡рд┐рднрд┐рдиреНрди рджрд┐рд╢рд╛рд╣рд░реВ (*рдмрд┐рдорд╣рд░реВ*) рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рд░ рдЙрдЪреНрдЪ рд╕рдордЧреНрд░ рд╕реНрдХреЛрд░ рднрдПрдХрд╛ рджрд┐рд╢рд╛рд╣рд░реВ рдЪрдпрди рдЧрд░реНрджрдЫред рддрдкрд╛рдИрдВ `num_beams` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкреНрд░рджрд╛рди рдЧрд░реЗрд░ рдмрд┐рдо рд╕рд░реНрдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрдкрд╛рдИрдВрд▓реЗ `no_repeat_ngram_size` рдкрдирд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рддрд╛рдХрд┐ рджрд┐рдЗрдПрдХреЛ рдЖрдХрд╛рд░рдХрд╛ n-grams рджреЛрд╣реЛрд░реНрдпрд╛рдЙрди рдореЛрдбреЗрд▓рд▓рд╛рдИ рджрдгреНрдбрд┐рдд рдЧрд░реНрди рд╕рдХрд┐рдпреЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a man sitting in a chair with his head in his hands. he didn\\'t look up as i approached. \\n \" excuse me, sir, \" i said. \" can i help you? \" \\n the man looked up at me. his eyes were red - rimmed and his face was pale, as if he hadn\\'t slept in days'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a man sitting at a desk in the middle of the room. he had his back to me, so i couldn\\'t see what he was doing. \" \\n \" what did he look like? \" i asked as i sat down on the bed next to her. \\n she took a deep breath and looked at me with tears in her eyes'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a woman sitting on the bed, reading a book. she looked up at me and smiled. \\n \" hi, \" she said. \" can i help you? \" \\n i sat down next to her and looked around the room. the walls were white, and there was a large window in the middle of the wall that looked out on'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a man sitting at a table in the middle of the room. he looked up as i walked in, and when he saw me, he got up and walked over to me. \\n \" can i help you? \" he asked as he put his hand on the small of my back and led me to a chair at the other end of'},\n",
|
||||
" {'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw a woman sitting on the edge of her bed, reading a book. she looked up at me and smiled. \\n \" hello, \" she said. \" can i help you? \" \\n i didn\\'t know what to say, so i just sat down in the chair next to the bed and looked at her. her hair was dark brown'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"prompt = \"It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw\"\n",
|
||||
"generator(prompt,max_length=100,num_return_sequences=5,num_beams=10,no_repeat_ngram_size=2)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"**рдирдореВрдирд╛ рдЪрдпрди**рд▓реЗ рдореЛрдбреЗрд▓рд▓реЗ рдлрд░реНрдХрд╛рдПрдХреЛ рд╕рдореНрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЕрд░реНрдХреЛ рд╢рдмреНрдж рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдЪрдпрди рдЧрд░реНрджрдЫред рддрдкрд╛рдИрдВ `do_sample=True` рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдирдореВрдирд╛ рдЪрдпрди рдЪрд╛рд▓реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддрдкрд╛рдИрдВ `temperature` рдкрдирд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдмрдвреА рд╡рд╛ рдХрдо рдирд┐рд░реНрдзрд╛рд░рдгрд╛рддреНрдордХ рдмрдирд╛рдЙрдБрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"[{'generated_text': 'It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw her. she was on the bed, but she looked very different. \\n \" honey, what\\'s the matter? \" i asked. \\n she sat up. \" i can\\'t believe it\\'s real. i\\'ve been dreaming about you for the last two days. \" \\n \" i can\\'t believe it either. i guess that\\'s how'}]"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"prompt = \"It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw\"\n",
|
||||
"generator(prompt,max_length=100,do_sample=True,temperature=0.8)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"рд╣рд╛рдореАрд▓реЗ рдирдореВрдирд╛ рдмрдирд╛рдЙрдБрджрд╛ рдердк рджреБрдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ: \n",
|
||||
"* `top_k` рд▓реЗ рдирдореВрдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рд╢рдмреНрдж рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫред рдпрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдкрд╛рдардорд╛ рдЕрдЬреАрдм (рдХрдо рд╕рдореНрднрд╛рд╡рдирд╛ рднрдПрдХрд╛) рд╢рдмреНрджрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдХрдо рдЧрд░реНрдЫред \n",
|
||||
"* `top_p` рдкрдирд┐ рдпрд╕реНрддреИ рдЫ, рддрд░ рд╣рд╛рдореА рд╕рдмреИрднрдиреНрджрд╛ рд╕рдореНрднрд╛рд╡рд┐рдд рд╢рдмреНрджрд╣рд░реВрдХреЛ рд╕рд╛рдиреЛ рдЙрдкрд╕рдореВрд╣ рдЪрдпрди рдЧрд░реНрдЫреМрдВ, рдЬрд╕рдХреЛ рдХреБрд▓ рд╕рдореНрднрд╛рд╡рдирд╛ p рднрдиреНрджрд╛ рдареВрд▓реЛ рд╣реБрдиреНрдЫред \n",
|
||||
"\n",
|
||||
"рдпреА рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдердкреЗрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕реНрд╡рддрдиреНрддреНрд░ рдорд╣рд╕реБрд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реНред \n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"attachments": {},
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЖрдлреНрдиреЛ рдореЛрдбреЗрд▓рд╣рд░реВрд▓рд╛рдИ рдлрд╛рдЗрди-рдЯреНрдпреБрди рдЧрд░реНрдиреБрд╣реЛрд╕реН\n",
|
||||
"\n",
|
||||
"рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ рдбреЗрдЯрд╛рд╕реЗрдЯрдорд╛ [рдЖрдлреНрдиреЛ рдореЛрдбреЗрд▓рд▓рд╛рдИ рдлрд╛рдЗрди-рдЯреНрдпреБрди](https://learn.microsoft.com/en-us/azure/cognitive-services/openai/how-to/fine-tuning?pivots=programming-language-studio?WT.mc_id=academic-77998-bethanycheum) рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкрд╛рдардХреЛ рд╢реИрд▓реА рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫ, рдЬрдмрдХрд┐ рднрд╛рд╖рд╛ рдореЛрдбреЗрд▓рдХреЛ рдореБрдЦреНрдп рднрд╛рдЧрд▓рд╛рдИ рдХрд╛рдпрдо рд░рд╛рдЦреНрдиреЗрдЫред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3.8.12 ('py38')",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"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.10.11"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "d4ff89615d38924a55594f16d6d20678",
|
||||
"translation_date": "2025-08-28T09:30:34+00:00",
|
||||
"source_file": "lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## рдЕрд╕рд╛рдЗрдирдореЗрдиреНрдЯ: рдбрд╛рдпреЛрдлреЗрдиреНрдЯрд╛рдЗрди рд╕рдореАрдХрд░рдгрд╣рд░реВ\n",
|
||||
"\n",
|
||||
"> рдпреЛ рдЕрд╕рд╛рдЗрдирдореЗрдиреНрдЯ [AI for Beginners Curriculum](http://github.com/microsoft/ai-for-beginners) рдХреЛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛ рд░ [рдпреЛ рдкреЛрд╕реНрдЯ](https://habr.com/post/128704/) рдмрд╛рдЯ рдкреНрд░реЗрд░рд┐рдд рдЫред\n",
|
||||
"\n",
|
||||
"рддрдкрд╛рдИрдВрдХреЛ рд▓рдХреНрд╖реНрдп рддрдерд╛рдХрдерд┐рдд **рдбрд╛рдпреЛрдлреЗрдиреНрдЯрд╛рдЗрди рд╕рдореАрдХрд░рдг** рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреБ рд╣реЛ - рдЬрд╕рдорд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдореВрд▓рд╣рд░реВ рд░ рдкреВрд░реНрдгрд╛рдВрдХ рдЧреБрдгрд╛рдВрдХрд╣рд░реВ рд╣реБрдиреНрдЫрдиреНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрд▓рдХреЛ рд╕рдореАрдХрд░рдгрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН:\n",
|
||||
"\n",
|
||||
"$$a+2b+3c+4d=30$$\n",
|
||||
"\n",
|
||||
"рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕реНрддреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдореВрд▓рд╣рд░реВ $a$,$b$,$c$,$d\\in\\mathbb{N}$ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБрдкрд░реНрдЫ рдЬрд╕рд▓реЗ рдпреЛ рд╕рдореАрдХрд░рдгрд▓рд╛рдИ рд╕рдиреНрддреБрд╖реНрдЯ рдкрд╛рд░реНрдЫред\n",
|
||||
"\n",
|
||||
"рд╕реБрдЭрд╛рд╡рд╣рд░реВ:\n",
|
||||
"1. рдореВрд▓рд╣рд░реВрд▓рд╛рдИ [0;30] рдХреЛ рдЕрдиреНрддрд░рд╛рд▓рдорд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред\n",
|
||||
"1. рдЬреАрдирдХреЛ рд░реВрдкрдорд╛, рдореВрд▓ рдорд╛рдирд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╡рд┐рдЪрд╛рд░ рдЧрд░реНрдиреБрд╣реЛрд╕реНред\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\n---\n\n**рдЕрд╕реНрд╡реАрдХрд░рдг**: \nрдпреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ AI рдЕрдиреБрд╡рд╛рдж рд╕реЗрд╡рд╛ [Co-op Translator](https://github.com/Azure/co-op-translator) рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдЕрдиреБрд╡рд╛рдж рдЧрд░рд┐рдПрдХреЛ рд╣реЛред рд╣рд╛рдореА рдпрдерд╛рд╕рдореНрднрд╡ рд╕рдЯреАрдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рддрд░ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рджрд╣рд░реВрдорд╛ рддреНрд░реБрдЯрд┐ рд╡рд╛ рдЕрд╢реБрджреНрдзрддрд╛ рд╣реБрди рд╕рдХреНрдЫред рдпрд╕рдХреЛ рдореВрд▓ рднрд╛рд╖рд╛рдорд╛ рд░рд╣реЗрдХреЛ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝рд▓рд╛рдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрд░реЛрдд рдорд╛рдирд┐рдиреБрдкрд░реНрдЫред рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реАрдХрд╛ рд▓рд╛рдЧрд┐, рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдорд╛рдирд╡ рдЕрдиреБрд╡рд╛рдж рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рдЕрдиреБрд╡рд╛рджрдХреЛ рдкреНрд░рдпреЛрдЧрдмрд╛рдЯ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдЧрд▓рддрдлрд╣рдореА рд╡рд╛ рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреЗ рдЫреИрдиреМрдВред\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"language_info": {
|
||||
"name": "python"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"coopTranslator": {
|
||||
"original_hash": "a967e1fa1e11ab2b6467b19349a4a9aa",
|
||||
"translation_date": "2025-08-28T07:26:40+00:00",
|
||||
"source_file": "lessons/6-Other/21-GeneticAlgorithms/Diophantine.ipynb",
|
||||
"language_code": "ne"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
LoadingтАж
Reference in New Issue