diff --git a/wyk/01_Wyszukiwarki-wprowadzenie.ipynb b/wyk/01_Wyszukiwarki-wprowadzenie.ipynb index 41062d9..95aaebb 100644 --- a/wyk/01_Wyszukiwarki-wprowadzenie.ipynb +++ b/wyk/01_Wyszukiwarki-wprowadzenie.ipynb @@ -836,823 +836,7 @@ "User-agent: *\n", "Disallow: /*/wyszukaj/\n", "Disallow: /*servlet\n", - "Disallow: /reloadwww?\n", - "Disallow: /dfptools/adview/\n", - "Disallow: /pub/ips/*\n", - "Disallow: /ods?\n", - "Disallow: /getFile.servlet*\n", - "Disallow: /aliasy/blad.jsp\n", - "Disallow: /znajdz.do\n", - "Disallow: /portalSearch.do\n", - "Disallow: /im/ab/b4/10/z17515435Q.jpg\n", - "Disallow: /75224259/\n", - "\n", - "User-agent: Googlebot-News\n", - "Disallow: /nowy/\n", - "Disallow: /mapa_strony\n", - "Disallow: /*/wyszukaj/\n", - "Disallow: /*/51,\n", - "Disallow: /*/55,\n", - "Disallow: /*/2,\n", - "Disallow: /*order=\n", - "Disallow: /*obxx=\n", - "Disallow: /*tag=\n", - "Disallow: /reloadwww?\n", - "Disallow: /ods?\n", - "Disallow: /*servlet\n", - "Disallow: /dfptools/adview/\n", - "\n", - "User-agent: Yandex\n", - "Disallow: /\n", - "\n", - "User-Agent: bingbot\n", - "Disallow: /\n", - "\n", - "User-agent: 008\n", - "Disallow: /\n", - "\n", - "User-agent: 010\n", - "Disallow: /\n", - "\n", - "User-agent: 360Spider\n", - "Disallow: /\n", - "\n", - "User-agent: 80legs\n", - "Disallow: /\n", - "\n", - "User-agent: Aboundex\n", - "Disallow: /\n", - "\n", - "User-agent: accelobot\n", - "Disallow: /\n", - "\n", - "User-agent: Add\\ Catalog\n", - "Disallow: /\n", - "\n", - "User-agent: AhrefsBot\n", - "Disallow: /\n", - "\n", - "User-agent: aiHitBot\n", - "Disallow: /\n", - "\n", - "User-agent: Alexibot\n", - "Disallow: /\n", - "\n", - "User-agent: Aqua_Products\n", - "Disallow: /\n", - "\n", - "User-agent: AskJeeves\n", - "Disallow: /\n", - "\n", - "User-agent: asterias\n", - "Disallow: /\n", - "\n", - "User-agent: awcheckBot\n", - "Disallow: /\n", - "\n", - "User-agent: b2w/0.1\n", - "Disallow: /\n", - "\n", - "User-agent: BackDoorBot/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: BacklinkCrawler\n", - "Disallow: /\n", - "\n", - "User-agent: Baiduspider\n", - "Disallow: /\n", - "\n", - "User-agent: BecomeBot\n", - "Disallow: /\n", - "\n", - "User-agent: BLEXBot\n", - "Disallow: /\n", - "\n", - "User-agent: BlowFish/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: Bookmark search tool\n", - "Disallow: /\n", - "\n", - "User-agent: BotALot\n", - "Disallow: /\n", - "\n", - "User-agent: brandwatch.net\n", - "Disallow: /\n", - "\n", - "User-agent: BuiltBotTough\n", - "Disallow: /\n", - "\n", - "User-agent: Bullseye/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: BunnySlippers\n", - "Disallow: /\n", - "\n", - "User-agent: Butterfly\n", - "Disallow: /\n", - "\n", - "User-agent: CatchBot\n", - "Disallow: /\n", - "\n", - "User-agent: Charlotte\n", - "Disallow: /\n", - "\n", - "User-agent: CheeseBot\n", - "Disallow: /\n", - "\n", - "User-agent: CherryPicker\n", - "Disallow: /\n", - "\n", - "User-agent: CherryPickerElite/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: CherryPickerSE/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: CLIPish\n", - "Disallow: /\n", - "\n", - "User-agent: Cliqzbot\n", - "Disallow: /\n", - "\n", - "User-agent: COMODO\n", - "Disallow: /\n", - "\n", - "User-agent: Comodo-Certificates-Spider\n", - "Disallow: /\n", - "\n", - "User-agent: CompSpyBot\n", - "Disallow: /\n", - "\n", - "User-agent: Copernic\n", - "Disallow: /\n", - "\n", - "User-agent: CopyRightCheck\n", - "Disallow: /\n", - "\n", - "User-agent: cosmos\n", - "Disallow: /\n", - "\n", - "User-agent: crawler\n", - "Disallow: /\n", - "\n", - "User-agent: Crescent\n", - "Disallow: /\n", - "\n", - "User-agent: Crescent Internet ToolPak HTTP OLE Control v.1.0\n", - "Disallow: /\n", - "\n", - "User-agent: Curious\n", - "Disallow: /\n", - "\n", - "User-agent: curl\n", - "Disallow: /\n", - "\n", - "User-agent: dataprovider\\.com\n", - "Disallow: /\n", - "\n", - "User-agent: DinoPing\n", - "Disallow: /\n", - "\n", - "User-agent: discoverybot\n", - "Disallow: /\n", - "\n", - "User-agent: DittoSpyder\n", - "Disallow: /\n", - "\n", - "User-agent: DomainCrawler\n", - "Disallow: /\n", - "\n", - "User-agent: DomainCrawler\n", - "Disallow: /\n", - "\n", - "User-agent: dotbot\n", - "Disallow: /\n", - "\n", - "User-agent: dotnetdotcom\n", - "Disallow: /\n", - "\n", - "User-agent: Dow\\ Jones\\ Searchbot\n", - "Disallow: /\n", - "\n", - "User-agent: dumbot\n", - "Disallow: /\n", - "\n", - "User-agent: EasouSpider\n", - "Disallow: /\n", - "\n", - "User-agent: EmailCollector\n", - "Disallow: /\n", - "\n", - "User-agent: EmailSiphon\n", - "Disallow: /\n", - "\n", - "User-agent: EmailWolf\n", - "Disallow: /\n", - "\n", - "User-agent: Enterprise_Search\n", - "Disallow: /\n", - "\n", - "User-agent: Enterprise_Search/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: EroCrawler\n", - "Disallow: /\n", - "\n", - "User-agent: es\n", - "Disallow: /\n", - "\n", - "User-agent: Exabot\n", - "Disallow: /\n", - "\n", - "User-agent: ExtractorPro\n", - "Disallow: /\n", - "\n", - "User-agent: EzineArticlesLinkScanner\n", - "Disallow: /\n", - "\n", - "User-agent: Ezooms\n", - "Disallow: /\n", - "\n", - "User-agent: FairAd Client\n", - "Disallow: /\n", - "\n", - "User-agent: Flaming AttackBot\n", - "Disallow: /\n", - "\n", - "User-agent: Foobot\n", - "Disallow: /\n", - "\n", - "User-agent: FreeFind\n", - "Disallow: /\n", - "\n", - "User-agent: FTRF\\:\\ Friendly\n", - "Disallow: /\n", - "\n", - "User-agent: Gaisbot\n", - "Disallow: /\n", - "\n", - "User-agent: GetRight/4.2\n", - "Disallow: /\n", - "\n", - "User-agent: gigabot\n", - "Disallow: /\n", - "\n", - "User-agent: grub\n", - "Disallow: /\n", - "\n", - "User-agent: grub-client\n", - "Disallow: /\n", - "\n", - "User-agent: Harvest/1.5\n", - "Disallow: /\n", - "\n", - "User-agent: Hatena Antenna\n", - "Disallow: /\n", - "\n", - "User-agent: hloader\n", - "Disallow: /\n", - "\n", - "User-agent: http://www.SearchEngineWorld.com bot\n", - "Disallow: /\n", - "\n", - "User-agent: http://www.WebmasterWorld.com bot\n", - "Disallow: /\n", - "\n", - "User-agent: HTTP_Request\n", - "Disallow: /\n", - "\n", - "User-agent: HTTP_Request2\n", - "Disallow: /\n", - "\n", - "User-agent: httplib\n", - "Disallow: /\n", - "\n", - "User-agent: humanlinks\n", - "Disallow: /\n", - "\n", - "User-agent: ia_archiver\n", - "Disallow: /\n", - "\n", - "User-agent: ia_archiver\n", - "Disallow: /\n", - "\n", - "User-agent: ia_archiver/1.6\n", - "Disallow: /\n", - "\n", - "User-agent: Indy\\ Library\n", - "Disallow: /\n", - "\n", - "User-agent: InfoNaviRobot\n", - "Disallow: /\n", - "\n", - "User-agent: ip\\-web\\-crawler\\.com\n", - "Disallow: /\n", - "\n", - "User-agent: Iron33/1.0.2\n", - "Disallow: /\n", - "\n", - "User-agent: Jakarta\\ Commons-HttpClient\n", - "Disallow: /\n", - "\n", - "User-agent: Jeeves\n", - "Disallow: /\n", - "\n", - "User-agent: JennyBot\n", - "Disallow: /\n", - "\n", - "User-agent: Jetbot\n", - "Disallow: /\n", - "\n", - "User-agent: Jetbot/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: JikeSpider\n", - "Disallow: /\n", - "\n", - "User-agent: Kenjin Spider\n", - "Disallow: /\n", - "\n", - "User-agent: Keyword Density/0.9\n", - "Disallow: /\n", - "\n", - "User-agent: larbin\n", - "Disallow: /\n", - "\n", - "User-agent: LexiBot\n", - "Disallow: /\n", - "\n", - "User-agent: libWeb/clsHTTP\n", - "Disallow: /\n", - "\n", - "User-agent: libwww-perl\n", - "Disallow: /\n", - "\n", - "User-agent: lindex\\.com\n", - "Disallow: /\n", - "\n", - "User-agent: linkdex\\.com\n", - "Disallow: /\n", - "\n", - "User-agent: linkdexbot\n", - "Disallow: /\n", - "\n", - "User-agent: LinkextractorPro\n", - "Disallow: /\n", - "\n", - "User-agent: LinkScan/8.1a Unix\n", - "Disallow: /\n", - "\n", - "User-agent: LinkWalker\n", - "Disallow: /\n", - "\n", - "User-agent: lipperhey\n", - "Disallow: /\n", - "\n", - "User-agent: LNSpiderguy\n", - "Disallow: /\n", - "\n", - "User-agent: looksmart\n", - "Disallow: /\n", - "\n", - "User-agent: ltbot\n", - "Disallow: /\n", - "\n", - "User-agent: lwp-trivial\n", - "Disallow: /\n", - "\n", - "User-agent: lwp-trivial/1.34\n", - "Disallow: /\n", - "\n", - "User-agent: Lynx\n", - "Disallow: /\n", - "\n", - "User-agent: magpie\\-crawler\n", - "Disallow: /\n", - "\n", - "User-agent: Mata Hari\n", - "Disallow: /\n", - "\n", - "User-agent: Microsoft URL Control\n", - "Disallow: /\n", - "\n", - "User-agent: Microsoft URL Control - 5.01.4511\n", - "Disallow: /\n", - "\n", - "User-agent: Microsoft URL Control - 6.00.8169\n", - "Disallow: /\n", - "\n", - "User-agent: MIIxpc\n", - "Disallow: /\n", - "\n", - "User-agent: MIIxpc/4.2\n", - "Disallow: /\n", - "\n", - "User-agent: Mister PiX\n", - "Disallow: /\n", - "\n", - "User-agent: MJ12bot\n", - "Disallow: /\n", - "\n", - "User-agent: moget\n", - "Disallow: /\n", - "\n", - "User-agent: moget/2.1\n", - "Disallow: /\n", - "\n", - "User-agent: Mozilla/4.0 (compatible; BullsEye; Windows 95)\n", - "Disallow: /\n", - "\n", - "User-agent: MSIE\\ or\\ Firefox\\ mutant\n", - "Disallow: /\n", - "\n", - "User-agent: MSIECrawler\n", - "Disallow: /\n", - "\n", - "User-agent: naver\n", - "Disallow: /\n", - "\n", - "User-agent: NCBot\n", - "Disallow: /\n", - "\n", - "User-agent: NetAnts\n", - "Disallow: /\n", - "\n", - "User-agent: NetcraftSurveyAgent\n", - "Disallow: /\n", - "\n", - "User-agent: netEstate\\ NE\\ Crawler\n", - "Disallow: /\n", - "\n", - "User-agent: NetMechanic\n", - "Disallow: /\n", - "\n", - "User-agent: Netseer\n", - "Disallow: /\n", - "\n", - "User-agent: NextGenSearchBot\n", - "Disallow: /\n", - "\n", - "User-agent: NICErsPRO\n", - "Disallow: /\n", - "\n", - "User-agent: Nutch\n", - "Disallow: /\n", - "\n", - "User-agent: Nutch\n", - "Disallow: /\n", - "\n", - "User-agent: Ocelli\n", - "Disallow: /\n", - "\n", - "User-agent: Offline Explorer\n", - "Disallow: /\n", - "\n", - "User-agent: OmniExplorer_Bot\n", - "Disallow: /\n", - "\n", - "User-agent: Openbot\n", - "Disallow: /\n", - "\n", - "User-agent: Openfind\n", - "Disallow: /\n", - "\n", - "User-agent: Openfind\n", - "Disallow: /\n", - "\n", - "User-agent: Openfind data gathere\n", - "Disallow: /\n", - "\n", - "User-agent: OpenWebIndex\n", - "Disallow: /\n", - "\n", - "User-agent: Oracle Ultra Search\n", - "Disallow: /\n", - "\n", - "User-agent: PagesInventory\n", - "Disallow: /\n", - "\n", - "User-agent: PEAR\n", - "Disallow: /\n", - "\n", - "User-agent: PeoplePal\n", - "Disallow: /\n", - "\n", - "User-agent: PerMan\n", - "Disallow: /\n", - "\n", - "User-agent: ProCogSEOBot\n", - "Disallow: /\n", - "\n", - "User-agent: ProPowerBot/2.14\n", - "Disallow: /\n", - "\n", - "User-agent: ProWebWalker\n", - "Disallow: /\n", - "\n", - "User-agent: proximic\n", - "Disallow: /\n", - "\n", - "User-agent: psbot\n", - "Disallow: /\n", - "\n", - "User-agent: purebot\n", - "Disallow: /\n", - "\n", - "User-agent: QueryN Metasearch\n", - "Disallow: /\n", - "\n", - "User-agent: QuerySeekerSpider\n", - "Disallow: /\n", - "\n", - "User-agent: Radiation Retriever 1.1\n", - "Disallow: /\n", - "\n", - "User-agent: RepoMonkey\n", - "Disallow: /\n", - "\n", - "User-agent: RepoMonkey Bait & Tackle/v1.01\n", - "Disallow: /\n", - "\n", - "User-agent: Riddler\n", - "Disallow: /\n", - "\n", - "User-agent: RMA\n", - "Disallow: /\n", - "\n", - "User-agent: rojerbot\n", - "Disallow: /\n", - "\n", - "User-agent: RyteBot\n", - "Disallow: /\n", - "\n", - "User-agent: scooter\n", - "Disallow: /\n", - "\n", - "User-agent: ScoutJet\n", - "Disallow: /\n", - "\n", - "User-agent: Scrapy\n", - "Disallow: /\n", - "\n", - "User-agent: ScreenerBot\n", - "Disallow: /\n", - "\n", - "User-agent: searchmetrics\n", - "Disallow: /\n", - "\n", - "User-agent: searchpreview\n", - "Disallow: /\n", - "\n", - "User-agent: SemrushBot\n", - "Disallow: /\n", - "\n", - "User-agent: sentibot\n", - "Disallow: /\n", - "\n", - "User-agent: SEO-CRAWLING\n", - "Disallow: /\n", - "\n", - "User-agent: SEOENGWorldBot\n", - "Disallow: /\n", - "\n", - "User-agent: SEOkicks-Robot\n", - "Disallow: /\n", - "\n", - "User-agent: ShopWiki\n", - "Disallow: /\n", - "\n", - "User-agent: sistrix\n", - "Disallow: /\n", - "\n", - "User-agent: sitebot\n", - "Disallow: /\n", - "\n", - "User-agent: SiteSnagger\n", - "Disallow: /\n", - "\n", - "User-agent: Snoopy\n", - "Disallow: /\n", - "\n", - "User-agent: SocialSearcher\n", - "Disallow: /\n", - "\n", - "User-agent: Sogou\n", - "Disallow: /\n", - "\n", - "User-agent: SolomonoBot\n", - "Disallow: /\n", - "\n", - "User-agent: sootle\n", - "Disallow: /\n", - "\n", - "User-agent: Sosospider\n", - "Disallow: /\n", - "\n", - "User-agent: SpankBot\n", - "Disallow: /\n", - "\n", - "User-agent: spanner\n", - "Disallow: /\n", - "\n", - "User-agent: spbot\n", - "Disallow: /\n", - "\n", - "User-agent: Speedy\n", - "Disallow: /\n", - "\n", - "User-agent: Stanford\n", - "Disallow: /\n", - "\n", - "User-agent: Stanford Comp Sci\n", - "Disallow: /\n", - "\n", - "User-agent: SurveyBot\n", - "Disallow: /\n", - "\n", - "User-agent: suzuran\n", - "Disallow: /\n", - "\n", - "User-agent: Szukacz/1.4\n", - "Disallow: /\n", - "\n", - "User-agent: Szukacz/1.4\n", - "Disallow: /\n", - "\n", - "User-agent: Teleport\n", - "Disallow: /\n", - "\n", - "User-agent: TeleportPro\n", - "Disallow: /\n", - "\n", - "User-agent: Telesoft\n", - "Disallow: /\n", - "\n", - "User-agent: Teoma\n", - "Disallow: /\n", - "\n", - "User-agent: The Intraformant\n", - "Disallow: /\n", - "\n", - "User-agent: The\\ Incutio\\ XML-RPC\\ PHP\\ Library\n", - "Disallow: /\n", - "\n", - "User-agent: TheNomad\n", - "Disallow: /\n", - "\n", - "User-agent: toCrawl/UrlDispatcher\n", - "Disallow: /\n", - "\n", - "User-agent: True_Robot\n", - "Disallow: /\n", - "\n", - "User-agent: True_Robot/1.0\n", - "Disallow: /\n", - "\n", - "User-agent: turingos\n", - "Disallow: /\n", - "\n", - "User-agent: TurnitinBot\n", - "Disallow: /\n", - "\n", - "User-agent: uCrawler\n", - "Disallow: /\n", - "\n", - "User-agent: URL Control\n", - "Disallow: /\n", - "\n", - "User-agent: URL_Spider_Pro\n", - "Disallow: /\n", - "\n", - "User-agent: URLy Warning\n", - "Disallow: /\n", - "\n", - "User-agent: VCI\n", - "Disallow: /\n", - "\n", - "User-agent: VCI WebViewer VCI WebViewer Win32\n", - "Disallow: /\n", - "\n", - "User-agent: visaduhoc\\.info\n", - "Disallow: /\n", - "\n", - "User-agent: WBSearchBot\n", - "Disallow: /\n", - "\n", - "User-agent: Web Image Collector\n", - "Disallow: /\n", - "\n", - "User-agent: WebAuto\n", - "Disallow: /\n", - "\n", - "User-agent: WebBandit\n", - "Disallow: /\n", - "\n", - "User-agent: WebBandit/3.50\n", - "Disallow: /\n", - "\n", - "User-agent: WebCapture\n", - "Disallow: /\n", - "\n", - "User-agent: WebCopier\n", - "Disallow: /\n", - "\n", - "User-agent: WebEnhancer\n", - "Disallow: /\n", - "\n", - "User-agent: WebInDetail\\.com\n", - "Disallow: /\n", - "\n", - "User-agent: WebmasterWorld Extractor\n", - "Disallow: /\n", - "\n", - "User-agent: WebmasterWorldForumBot\n", - "Disallow: /\n", - "\n", - "User-agent: WebSauger\n", - "Disallow: /\n", - "\n", - "User-agent: Website Quester\n", - "Disallow: /\n", - "\n", - "User-agent: WEBSITEtheWEB\\.COM\n", - "Disallow: /\n", - "\n", - "User-agent: Webster Pro\n", - "Disallow: /\n", - "\n", - "User-agent: WebStripper\n", - "Disallow: /\n", - "\n", - "User-agent: WebVac\n", - "Disallow: /\n", - "\n", - "User-agent: WebZip\n", - "Disallow: /\n", - "\n", - "User-agent: WebZip/4.0\n", - "Disallow: /\n", - "\n", - "User-agent: Wget\n", - "Disallow: /\n", - "\n", - "User-agent: Wget/1.5.3\n", - "Disallow: /\n", - "\n", - "User-agent: Wget/1.6\n", - "Disallow: /\n", - "\n", - "User-agent: Wotbot\n", - "Disallow: /\n", - "\n", - "User-agent: www\\.integromedb\\.org\n", - "Disallow: /\n", - "\n", - "User-agent: WWW-Collector-E\n", - "Disallow: /\n", - "\n", - "User-agent: Xenu's\n", - "Disallow: /\n", - "\n", - "User-agent: Xenu's Link Sleuth 1.1c\n", - "Disallow: /\n", - "\n", - "User-agent: xpymep\\.exe\n", - "Disallow: /\n", - "\n", - "User-agent: YamanaLab-Robot\n", - "Disallow: /\n", - "\n", - "User-agent: YisouSpider\n", - "Disallow: /\n", - "\n", - "User-agent: YodaoBot\n", - "Disallow: /\n", - "\n", - "User-agent: YoudaoBot\n", - "Disallow: /\n", - "\n", - "User-agent: Zend_Http_Client\n", - "Disallow: /\n", - "\n", - "User-agent: Zeus\n", - "Disallow: /\n", - "\n", - "User-agent: Zeus 32297 Webster Pro V2.9 Win32\n", - "Disallow: /\n", - "\n", - "User-agent: Zeus Link Scout\n", - "Disallow: /\n", - "\n", - "User-agent: ZmEu\n", - "Disallow: /\n", - "\n", - "User-agent: ZumBot\n", - "Disallow: /\n", - "\n", - "User-agent: Linguee\n", - "Disallow: /\n", + "...\n", "\n", "User-agent: sogou\n", "Disallow: /\n" diff --git a/wyk/03_Tfidf.ipynb b/wyk/03_Tfidf.ipynb index 03d83ab..8177274 100644 --- a/wyk/03_Tfidf.ipynb +++ b/wyk/03_Tfidf.ipynb @@ -3054,7 +3054,7 @@ { "data": { "text/plain": [ - "Opowie\u015b\u0107 prawdziwa... Olsztyn, akademik, 7 pi\u0119tro, impreza u Mariusza, jak to na polskiej najebce bywa kto\u015b rzuci\u0142 tekstem: \"Mariusz nie zjedziesz na nartach po schodach\". Sprawa ucichla, studencii wrocili do tego co lubia i w sumie umiej\u0105 najbardziej czyli picia, lecz nad ranem kolo godziny 6.00 ludzia przypomnialo sie ze Mariusz mia\u0142 zjecha\u0107 na nartach po schodach. Tu warto wspomnie\u0107 \u017ce Mariusz by\u0142 zapalonym narciarzem st\u0105d w\u0142a\u015bnie w jego pokoju znalezc mo\u017cna bylo narty, bo po ki huj komu\u015b narty w Olsztynie! Tak wracajac do historii nasz bohater odzia\u0142 si\u0119 w sprzet, podszed do schodow i niestety da\u0142 rad\u0119 zjecha\u0107 jedynie w po\u0142owie, gdy\u017c jak to powiedzial \"no kurwa potkn\u0105\u0142em sie\", ale nieustraszoony Mariusz pr\u00f3bowal dalej. Nastepny zjazd byl perfekcyjny, jedno pietro zanim, niestety pomiedzy 6 a 5 pietrem Mariusza natrafil na Pania sprz\u0105taczke, kt\u00f3ra potr\u0105ci\u0142 i zwia\u0142 z miejsca wypadku. Ok godziny 10.00 nastopilo przebudzenie Mariusza, ktory zaraz po obudzeniu uslyszal co narobi\u0142, mianowicie o skutkach potracenia, Pani sprzataczka z\u0142amala r\u0119k\u0119 i trafi\u0142a do szpitala. Mog\u0142y powsta\u0107 przez to cie\u017ckie konsekwencje, Mariusz m\u00f3g\u0142 wyleciec z akademika je\u017celi kierownik dowie sie o calym zaj\u015bciu. Wiec koledzy poradzili narcia\u017cowi, aby kupi\u0142 kwiaty i bombonierk\u0119 i poszed\u0142 do szpitala z przeprosinami. Po szybkich zakupach w sasiedniej Biedr\u0105ce, Mariusz byl przygotowany na konfrontacje z Pania sprz\u0105taczka, ale nie mog\u0142o poj\u015b\u0107 pi\u0119knie i g\u0142adko. Po wej\u015bciu do szpitala nasz bohater skierowal swoje kroki do recepcji pytajac si\u0119 o cioci\u0119, kt\u00f3ra mia\u0142a wypadek w akademiku, recepcjonistka skierowa\u0142a go do lekarza, gdzie czeka\u0142 na jego wyj\u015bcie ok 15 minut, gdy lekarz ju\u017c wyszed\u0142 ten odrazu podlecia\u0142 do niego, \u017ceby spyta\u0107 si\u0119 o stan zdrowia Pani sprz\u0105taczki. Wnet uslyszla od lekarz, niestety Pani teraz jest u psychiatry po twierdzi, \u017ce kto\u015b potracil ja zje\u017cdzajac na nartach w akademiku. Po uslyszeniu tej wiadomosci Mariusz odwroci\u0142 si\u0119, wybieg\u0142, kupi\u0142 piecie i szybko pobieg\u0142 do akademika pi\u0107 dalej! Mora\u0142... student potrafi!" + "Opowie\u015b\u0107 prawdziwa... Olsztyn, akademik, 7 pi\u0119tro, […]" ] }, "metadata": {}, @@ -4452,7 +4452,7 @@ { "data": { "text/plain": [ - "na tylnym siedzeniu w autobusie siedzi matka z 7-8 letnim synkiem. naprzeciwko synka siedzi kobieta (zwr\u00f3cona twarz\u0105 do dzieciaka). synek co chwile wymachuje nogami i kopie kobiet\u0119, matka widz\u0105c to nie reaguje na to wog\u00f3le. wreszcie kobieta zwraca uwag\u0119 matce, \u017ceby ta powiedzia\u0142a co\u015b synowi a matka do niej: nie mog\u0119, bo wychowuj\u0119 syna bezstresowo!!! ...ch\u0142opak, kt\u00f3ry sta\u0142 w pobli\u017cu i widzia\u0142 i s\u0142ysza\u0142 ca\u0142e to zaj\u015bcie wyplu\u0142 z ust gum\u0119 do \u017cucia i przyklei\u0142 matce na czo\u0142o i powiedzia\u0142: ja te\u017c by\u0142em bezstresowo wychowywany... autentyczny przypadek w londy\u0144skim autobusie (a tym co przyklei\u0142 matce gum\u0119 na czo\u0142o by\u0142 chyba nawet m\u0142ody Polak)" + "na tylnym siedzeniu w autobusie siedzi matka z 7-8 letnim synkiem. […]" ] }, "metadata": {}, @@ -4471,7 +4471,7 @@ { "data": { "text/plain": [ - "Kr\u00f3tko zwi\u0119\u017ale i na temat. Zastanawia mnie jak ludzie wychowuj\u0105 dzieci. Co prawda sam nie mam potomstwa i nie zamierzam mie\u0107 jak narazie (bo to troch\u0119 g\u0142upie mie\u0107 17-letniego tatusia), ale niestety mam przyjemno\u015b\u0107 ogl\u0105da\u0107 efekty wychowawcze niekt\u00f3rych par (dzi\u0119ki znajomym rodzic\u00f3w w r\u00f3\u017cnym wieku). S\u0105 trzy najbardziej znane mi modele wychowania. Surowe, bezstresowe (w moim znaczeniu) i \"bezstresowe\" w mowie potocznej. Zaczynam od tego pierwszego. Jak nazwa wskazuje, jest to surowe wychowanie, oparte na karach cielesnych lub torturach umys\u0142owych. Nie uwa\u017cam tego za dobre wychowanie, bo dziecko jak b\u0119dzie nieco starsze b\u0119dzie si\u0119 ba\u0142o wszystkiego, bo uzna, \u017c jak zrobi co\u015b \u017cle to spotka je kara. Wi\u0119c bicie za r\u00f3\u017cne rzeczy odpada (no chyba, \u017ce dzieciak na serio nabroi to oczywi\u015bcie). Wychowanie bezstresowe z mojego s\u0142ownika oznacza nienara\u017canie dziecka na stresy, pocieszanie w trudnych sytuacjach, za\u0142atwianie problem\u00f3w przez rozmow\u0119 oraz sta\u0142y kontakt z dzieckiem. I to chyba najlepsze. Sam zosta\u0142em tak wychowany i ciesz\u0119 si\u0119 z tego powodu. I oczywi\u015bcie \"wychowanie bezstresowe\". A tu si\u0119 normalnie rozpisz\u0119. Po pierwsze geneza. Wi\u0119c jak dochodzi do takiego wychowania? Odpowied\u017a. Mamusi i tatusiowi si\u0119 zachcia\u0142o bobaska bo to takie malutkie fajniutkie i ooo. Oboje zazdroszcz\u0105 innym parom bo one maj\u0105, a oni nie, wi\u0119c oni te\u017c chc\u0105. No wi\u0119c rodzi im si\u0119 bobasek, chuchaj\u0105 dmuchaj\u0105 na niego p\u00f3ki ma\u0142e. Ale przychodzi ten okres, kiedy dziecko trzeba wychowa\u0107 i kiedy ma si\u0119 na dzieciaka najwi\u0119kszy wp\u0142yw. I tu si\u0119 zaczynaj\u0105 schody. Nagle oboje nie maj\u0105 czasu i m\u00f3wi\u0105 \"Wychowamy go/j\u0105/ich (niepotrzebne skre\u015bli\u0107) bezstresowo.\" Po drugie. Decyzja o sposobie wychowania podj\u0119ta. A wi\u0119c jak to wygl\u0105da? Odpowied\u017a. Totalna olewka! Mama i tata baluj\u0105, a dzieciaka zostawiaj\u0105 samemu sobie, albo pod opiek\u0119 babci, kt\u00f3ra r\u00f3wnie\u017c leje na dziecko ciep\u0142ym moczem. Dzieciak ro\u015bnie i ro\u015bnie, nie wie co dobre a co z\u0142e. Przypomnia\u0142a mi si\u0119 pewna, podobno autentyczna scenka. Ch\u0142opak jedzie ze szwagrem autobusem czy tam tramwajem. Na jednym miejscu siedzi starowinka, a na przeciwko niej siedzi lafirynda z brzd\u0105cem na kolanach. No i sobie dzieciak macha n\u00f3\u017ckami i tu ciach i kopn\u0105\u0142 staruszk\u0119 w nog\u0119. Babcia nic sobie z tego nie zrobi\u0142a, a dzieciak nie widz\u0105c reakcji zacz\u0105\u0142 j\u0105 ju\u017c celowo kopa\u0107. Staruszka: Mo\u017ce pani powiedzie\u0107 co\u015b synkowi \u017ceby mnie nie kopa\u0142. Matka: Nie bo ja go wychowuj\u0119 bezstresowo. Szwagier wyci\u0105ga z ust gum\u0119 do \u017cucia i przykleja mamusi na czo\u0142o m\u00f3wi\u0105c: Moja mama te\u017c mnie wychowa\u0142a bezstresowo. Ciekaw jestem ile w tym prawdy by\u0142o, a je\u017celi 100% to czy mamusi si\u0119 odmieni\u0142y pogl\u0105dy. Kto go wie? Po trzecie. Doros\u0142y wychowany bezstresowo. Jaki on jest? Odpowied\u017a. Zupe\u0142nie inny. My\u015bli, \u017ce jest p\u0119pkiem \u015bwiata i \u017ce wszystko musi by\u0107 pod jego dyktando. Pracuj\u0105c w Szwajcarii przy piel\u0119gnacji winogron, syn polskiego kolegi taty zacz\u0105\u0142 rzuca\u0107 we mnie winogronami. Mia\u0142em ochot\u0119 wbi\u0107 mu no\u017cyczki (kt\u00f3rymi podcina\u0142em li\u015bcie) w oczy. A to by\u0142by ciekawy widok. Dzieciak o bia\u0142ych w\u0142osach, sk\u00f3rze i niebieskich oczach sta\u0142by sie albinosem (bo z niebieskich oczu sta\u0142yby sie czerwone jak u bia\u0142ych szczur\u00f3w i myszek). Ojciec sie co prawda na niego wydziera\u0142, \u017ceby nie przeszkadza\u0142, ale jak wida\u0107 dzieciak mia\u0142 to po prostu w dupie. Wi\u0119c skoro dziecko nie s\u0142ucha si\u0119 nawet rodzica, to jak w szkole pos\u0142ucha nauczyciela? Jak znajdzie prac\u0119, w kt\u00f3rej b\u0119dzie jaki\u015b szef (chyba, \u017ce sam sobie b\u0119dzie szefem)? W ten oto spos\u00f3b jak dowiaduj\u0119 si\u0119 o tym, \u017ce kto\u015b wychowuje dzieciaka bezstresowo, ciary przechodz\u0105 mi po plecach, a tego\u017c rodzica mam ochot\u0119 paln\u0105\u0107 mu w \u0142eb tak \u017ceby si\u0119 przekr\u0119ci\u0142 (zar\u00f3wno \u0142eb jak i pogl\u0105dy). A jak mnie wychowano? By\u0142em cz\u0119sto sam sobie zostawiany. Ale nie oznacza \u017ce to byla wspomniana olewka. Jako, \u017ce rodzice pracowali, a rodze\u0144stwo chodzi\u0142o do szko\u0142y, podrzucali mnie do babci. A wieczorami si\u0119 mn\u0105 opiekowali. Gadali jak mia\u0142em problemy i nie bili bo pono\u0107 by\u0142em spokojnym dzieckiem. No i tyle. Do 17 urodzin 2 dni, a szczura chyba nie dostan\u0119. A sam nie kupi\u0119!;(" + "Kr\u00f3tko zwi\u0119\u017ale i na temat. Zastanawia mnie jak ludzie wychowuj\u0105 dzieci. […]" ] }, "metadata": {}, @@ -4508,7 +4508,7 @@ { "data": { "text/plain": [ - "Pewna dziewczyna, wieku mi nieznanego, w mie\u015bcie sto\u0142ecznym - rozwiod\u0142a si\u0119. By\u0142a sama i samotna, wi\u0119c zapragn\u0119\u0142a kupi\u0107 sobie zwierz\u0119, aby sw\u0105 mi\u0142\u0105 obecno\u015bci\u0105 rozja\u015bnia\u0142o jej puste wieczory i takie\u017c poranki. Dziewczyna by\u0142a najwyra\u017aniej ekscentryczk\u0105, bo zamiast rozkosznego, mi\u0119kkiego kociaka z czerwonym k\u0142\u0119buszkiem we\u0142enki lub kud\u0142atego pieska , co sika na parkiet i gryzie skarpetki - kupi\u0142a sobie ... w\u0119\u017ca. W\u0105\u017c zamieszka\u0142 z dziewczyn\u0105, i dobrze im by\u0142o. Gad jad\u0142, spa\u0142 i r\u00f3s\u0142, a po pierwszym okresie oboj\u0119tno\u015bci ( zw\u0142aszcza ze strony w\u0119\u017ca ) nawi\u0105za\u0142a si\u0119 mi\u0119dzy nimi ni\u0107 porozumienia. Przynajmniej dziewczyna odczuwa\u0142a t\u0119 ni\u0107 wyra\u017anie, gdy\u017c w\u0105\u017c reagowa\u0142 na jej obecno\u015b\u0107, a noc\u0105 spa\u0142 zwini\u0119ty w k\u0142\u0119bek w nogach jej \u0142\u00f3\u017cka. Po dw\u00f3ch latach wsp\u00f3lnego bytowania, nie przerywanych \u017cadnym znacz\u0105cym wydarzeniem w ich wzajemnych relacjach, dziewczyna zauwa\u017cy\u0142a, \u017ce w\u0105\u017c sta\u0142 si\u0119 osowia\u0142y. Przesta\u0142 je\u015b\u0107, chowa\u0142 si\u0119 po k\u0105tach, a nocami, zamiast w nogach \u0142\u00f3\u017cka - sypia\u0142 wyci\u0105gni\u0119ty wzd\u0142u\u017c jej boku. Martwi\u0142a si\u0119 o swojego gada i posz\u0142a z nim do weterynarza. Weterynarz zbada\u0142 go, zapisa\u0142 leki na popraw\u0119 apetytu ( ciekawe, jak si\u0119 bada w\u0119\u017ca ? ) i odes\u0142a\u0142 do domu. Zdrowie \u015bliskiego pacjenta nie poprawi\u0142o si\u0119, wi\u0119c troskliwa dziewczyna postanowi\u0142a zasi\u0119gn\u0105\u0107 porady u znawcy gad\u00f3w i gadzich obyczaj\u00f3w. Znawca wys\u0142ucha\u0142 opisu niepokoj\u0105cych objaw\u00f3w, i powiedzia\u0142 : - Prosz\u0119 pani. Ten w\u0105\u017c nie jest chory. On teraz po\u015bci. A le\u017cy wzd\u0142u\u017c pani noc\u0105, bo sprawdza, czy pani si\u0119 zmie\u015bci. To prawdziwa historia. Opowiedzia\u0142a nam j\u0105 dzi\u015b klientka. Le\u017c\u0119 na \u0142\u00f3\u017cku, pisze tego posta, i patrz\u0119 na drzemi\u0105c\u0105 obok mnie kotk\u0119. Troch\u0119 ma\u0142a jest. Raczej nie ma szans, \u017cebym sie zmie\u015bci\u0142a, jakby co.." + "Pewna dziewczyna, wieku mi nieznanego, w mie\u015bcie sto\u0142ecznym - rozwiod\u0142a si\u0119. By\u0142a sama i samotna, wi\u0119c zapragn\u0119\u0142a kupi\u0107 sobie zwierz\u0119, […]" ] }, "metadata": {}, @@ -4517,7 +4517,7 @@ { "data": { "text/plain": [ - "Anakonda. Czy to kolejna miejska legenda? Jaki\u015b czas temu kole\u017canka na jednej z imprez towarzyskich opowiedzia\u0142a mro\u017c\u0105c\u0105 krew w \u017cy\u0142ach histori\u0119 o dziewczynie ze swojej pracy, kt\u00f3ra w Warszawie na dyskotece w Dekadzie pozna\u0142a ch\u0142opaka. Spotyka\u0142a si\u0119 z nim na kaw\u0119 i po drugiej randce dosz\u0142o do poca\u0142unk\u00f3w. Um\u00f3wi\u0142a si\u0119 na trzeci\u0105 randk\u0119, ale zanim do niej dosz\u0142o wyskoczy\u0142 jej jaki\u015b pryszcz na twarzy. Posz\u0142a do lekarza, a ten... zawiadomi\u0142 policj\u0119, prokuratur\u0119 itd. , bo rozpozna\u0142 zara\u017cenie... jadem trupim! Rozpocz\u0119to przes\u0142uchanie dziewczyny i po wyja\u015bnieniach trafiono do ch\u0142opaka, z kt\u00f3rym si\u0119 ca\u0142owa\u0142a. W jego domu odkryto rozk\u0142adaj\u0105ce si\u0119 zw\u0142oki dw\u00f3ch dziewczyn. By\u0142am ta histori\u0105 wstrz\u0105\u015bni\u0119ta. Nast\u0119pnego dnia opowiedzia\u0142am j\u0105 w pracy, a kole\u017canka Justyna przyzna\u0142a, \u017ce ju\u017c o tym slysza\u0142a. To mnie utwierdzi\u0142o, \u017ce historia jest prawdziwa, ale... tylko do wieczora. Co\u015b mi nie dawa\u0142o spokoju. Uwaga TVN nic? Interwencja Polsatu - nic? Nasz rodzimy Telekurier nic? Zacz\u0119\u0142am sprawdza\u0107 w internecie co to jest jad trupi, opryszczka od zaka\u017cenia tym\u017ce jadem i tak... trafi\u0142am na miejsk\u0105 legend\u0119. Historia wydarzy\u0142a si\u0119 nie tylko w Warszawie, ale i w Olsztynie, Toruniu, Wroc\u0142awiu i Krakowie, a by\u0107 mo\u017ce w og\u00f3le za granic\u0105. Cho\u0107 prawdopodobne jest, \u017ce nie wydarzy\u0142a si\u0119 nigdy. G\u0142o\u015bno o niej by\u0142o na miejskch forach. Za ka\u017cdym razem ofiara by\u0142a czyj\u0105\u015b znajom\u0105. Po przeczytaniu kolejnej wersji historii zadzwoni\u0142am do kole\u017canki, kt\u00f3ra opowiedzia\u0142a mi t\u0119 histori\u0119 i skl\u0119\u0142am czym \u015bwiat stoi. Dlatego kiedy kilka dni temu inna kole\u017canka opowiedzia\u0142a kolejn\u0105 mro\u017c\u0105c\u0105 krew w \u017cy\u0142ach histori\u0119 - tym razem o anakondzie - rozpocz\u0119\u0142am poszukiwania w internecie czy to nie jest nast\u0119pna miejska legenda. Nic nie znalaz\u0142am. Jednak co\u015b mi nie pasuje, cho\u0107 ta historia mo\u017ce brzmie\u0107 wielce prawdopodobnie. Zw\u0142aszcza, gdy kto\u015b ogl\u0105da\u0142 g\u0142upawy film z J. Lo. Zainteresowa\u0142o mnie to, bo siedz\u0105c nad powie\u015bci\u0105 \"Dzika\" poczyta\u0142am troch\u0119 o w\u0119\u017cach. A o jak\u0105 histori\u0119 mi chodzi? Pewna kobieta (podobno s\u0105siadka tej mojej kole\u017canki z pracy, kt\u00f3ra histori\u0119 opowiada\u0142a) hodowa\u0142a w domu w\u0119\u017ca - anakond\u0119. Hodowa\u0142a j\u0105 pi\u0119\u0107 lat i nie trzyma\u0142a w terrarium. Anakonda chodzi\u0142a (pe\u0142za\u0142a) samopas po domu i co kilka dni dostawa\u0142a chomika, szczura, mysz lub kr\u00f3lika do zjedzenia. Pewnego dnia przesta\u0142a je\u015b\u0107 i zacz\u0119\u0142a si\u0119 dziwnie zachowywa\u0107. Ka\u017cdego ranka po przebudzeniu w\u0142a\u015bcicielka znajdowa\u0142a j\u0105 w swoim \u0142\u00f3\u017cku wyprostowan\u0105 jak struna. Po dw\u00f3ch tygodniach takich zachowa\u0144 ze strony anakondy w\u0142a\u015bcicielka zaniepokojona stanem zdrowia ukochanego w\u0119\u017ca posz\u0142a z nim do lekarza. Ten wys\u0142ucha\u0142 objaw\u00f3w \"choroby\" i powiedzia\u0142, \u017ce anakonda g\u0142odzi\u0142a si\u0119, by zje\u015b\u0107... w\u0142ascicielk\u0119. K\u0142adzenie si\u0119 ko\u0142o niej by\u0142o mierzeniem ile jeszcze g\u0142odzi\u0107 si\u0119 trzeba, by w\u0142a\u015bcicielka zmie\u015bci\u0142a si\u0119 w pysku no i badaniem od kt\u00f3rej strony trzeba j\u0105 zaatakowa\u0107. W\u0119\u017cowi chodzi\u0142o bowiem o to, by smakowity i du\u017cy obiad si\u0119 za bardzo nie broni\u0142. Ja domy\u015bli\u0142am si\u0119 od razu do czego zmierza ta historia (lektura artyku\u0142\u00f3w o w\u0119\u017cach zrobi\u0142a swoje), ale dla reszty, kt\u00f3rzy s\u0142uchali by\u0142o to szokiem. Mnie szokuje co innego. Po co trzyma\u0107 w\u0119\u017ca skoro nie ma z nim cz\u0142owiek \u017cadnego kontaktu? To nie pies, kot czy inny ssak. To nie ptak. W\u0105\u017c to w\u0105\u017c! Nie przyjdzie na zawo\u0142anie. Jaby kto\u015b nie wiedzia\u0142 to... W\u0119\u017ce s\u0105 mi\u0119so\u017cerne. Po\u0142ykaj\u0105 ofiary w ca\u0142o\u015bci, mimo \u017ce cz\u0119sto wielokrotnie s\u0105 one wi\u0119ksze od samego w\u0119\u017ca. Po\u0142ykanie polega na nasuwaniu si\u0119 w\u0119\u017ca na swoj\u0105 ofiar\u0119. A anakonda... \u017cyje zwykle w wodzie i na drzewach, \u017cywi\u0105c si\u0119 ssakami (m.in. tapiry, dziki, kapibary, jelenie!, gryzonie, niekiedy nawet jaguary), gadami (kajmany), rybami i ptakami, poluj\u0105c zazwyczaj w nocy. Jest w stanie po\u0142kn\u0105\u0107 ofiar\u0119 znacznie szersz\u0105 od swojego cia\u0142a, co jest mo\u017cliwe dzi\u0119ki rozci\u0105gni\u0119ciu szcz\u0119k. Trawienie jest bardzo powolne - po posi\u0142ku w\u0105\u017c trawi wi\u0119ksz\u0105 ofiar\u0119 przez wiele dni, a potem mo\u017ce po\u015bci\u0107 przez szereg tygodni lub miesi\u0119cy. Zanotowany rekord postu, w przypadku anakondy znajduj\u0105cej si\u0119 w niewoli, wynosi 2 lata. Z historii wynika, \u017ce gdyby nie interwencja u weterynarza mog\u0142aby rodzina przez kilka lat szuka\u0107 w\u0142a\u015bcicielki anakondy. My\u015bleliby, \u017ce jest na wycieczce a ona w brzuszku w postaci obiadku. Jest tylko jedno ale. Nigdzie nie znalaz\u0142am jednak \u015bladu, ani nawet wzmianki o tym, \u017ce anakonda zjad\u0142a cz\u0142owieka. I dlatego ci\u0105gle w sumie mam w\u0105tpliwo\u015bci. ps. Dalszy los anakondy \"s\u0105siadki\" kole\u017canki nie jest mi znany." + "Anakonda. Czy to kolejna miejska legenda? Jaki\u015b czas temu kole\u017canka na jednej z imprez towarzyskich opowiedzia\u0142a mro\u017c\u0105c\u0105 krew w \u017cy\u0142ach histori\u0119 o dziewczynie ze swojej pracy, kt\u00f3ra w Warszawie na dyskotece w Dekadzie pozna\u0142a ch\u0142opaka. […]" ] }, "metadata": {}, diff --git a/wyk/09_neurozoo.ipynb b/wyk/09_neurozoo.ipynb index e93fb77..ff8d552 100644 --- a/wyk/09_neurozoo.ipynb +++ b/wyk/09_neurozoo.ipynb @@ -1437,205 +1437,9 @@ "output_type": "stream", "text": [ "0.04162006452679634 2.081003189086914 0 0 tensor([[0.1248, 0.1249, 0.1252, 0.1248, 0.1248, 0.1253, 0.1251, 0.1251]],\n", - " grad_fn=) MŚ w hokeju: mocny początek Finów w Danii. Francja podniosła się po laniu od Rosjan Reprezentacja Finlandii po niepowodzeniach na ostatnich igrzyskach olimpijskich rozpoczęła dobrze tegoroczny turniej mistrzostw świata elity od pewnej wygranej z Koreą Południową. Francuzi zdobyli pierwsze punkty po pokonaniu Białorusi.\n", - "2.0791335105895996 2.0685672760009766 50 4 tensor([[0.1260, 0.1265, 0.1247, 0.1244, 0.1264, 0.1241, 0.1239, 0.1241]],\n", - " grad_fn=) Fotorelacja: Ważenie przed galą KSW 27 - Cage Time Prezentujemy fotorelację z oficjalnej ceremonii ważenia przed sobotnią galą KSW 27 - Cage Time.\n", - "2.069852828979492 2.1081838607788086 100 5 tensor([[0.1268, 0.1265, 0.1260, 0.1250, 0.1262, 0.1215, 0.1222, 0.1258]],\n", - " grad_fn=) Wisła podpisała swój najważniejszy kontrakt Gdyby nie firma Can-Pack S.A. nie byłoby w ostatnich latach wielkich sukcesów koszykarek z Krakowa. We wtorek ogłoszono przedłużenie umowy i koszykarki spod znaku Białej Gwiazdy nadal będą występować pod nazwą Wisła Can-Pack Kraków.\n", - "2.0650603771209717 2.0957107543945312 150 5 tensor([[0.1307, 0.1279, 0.1246, 0.1245, 0.1251, 0.1230, 0.1177, 0.1266]],\n", - " grad_fn=) Basket 90 znalazł nową podkoszową. W poprzednim sezonie grała w polskim klubie Nie trzeba było długo czekać na koszykarkę, która wypełni podkoszową lukę w Baskecie 90 Gdynia. Nową zawodniczką ekipy z Trójmiasta została Niemka Sonja Greinacher, która ostatni sezon spędziła w Wiśle CanPack Kraków.\n", - "2.058483362197876 2.0446863174438477 200 0 tensor([[0.1294, 0.1279, 0.1260, 0.1219, 0.1224, 0.1241, 0.1218, 0.1263]],\n", - " grad_fn=) Wicemistrzyni olimpijska zakończyła karierę Olga Wiłuchina podjęła decyzję o zakończeniu sportowej kariery. Największymi sukcesami rosyjskiej biathlonistki są dwa srebrne medale wywalczone na igrzyskach olimpijskich w Soczi.\n", - "2.048689126968384 2.0999209880828857 250 5 tensor([[0.1226, 0.1300, 0.1219, 0.1229, 0.1239, 0.1225, 0.1261, 0.1300]],\n", - " grad_fn=) Duże wzmocnienie reprezentacji Polski. Wraca Maciej Lampe Maciej Lampe dołączył już do reprezentacji Polski, która przygotowuje się do eliminacyjnych meczów z Litwą oraz Kosowem. 33-latek wraca do kadry po dwuletniej przerwie.\n", - "2.0371503829956055 2.0841071605682373 300 5 tensor([[0.1309, 0.1342, 0.1226, 0.1171, 0.1202, 0.1244, 0.1222, 0.1284]],\n", - " grad_fn=) Kibice Celtów mogą spać spokojnie. Kyrie Irving planuje zostać w Bostonie Rozgrywający Boston Celtics, Kyrie Irving, przyznał, że w następne lato zamierza przedłużyć swoją umowę z klubem, o ile ten nadal będzie go uwzględniał w swoich planach.\n", - "2.0365874767303467 2.0405309200286865 350 6 tensor([[0.1256, 0.1288, 0.1273, 0.1186, 0.1148, 0.1229, 0.1300, 0.1319]],\n", - " grad_fn=) We włoskiej Serie A nie ma żartów. Kolejny trener stracił posadę Brak cierpliwości włodarzy włoskich klubów charakteryzuje tegoroczne rozgrywki Serie A. Ostatnio z rolą szkoleniowca Exprivia Molfetta pożegnał się Vincenzo Di Pinto. Nie jest on pierwszym trenerem, który po 7. kolejce rozgrywek stracił posadę.\n", - "2.0280144214630127 2.0845110416412354 400 3 tensor([[0.1276, 0.1223, 0.1311, 0.1244, 0.1142, 0.1192, 0.1308, 0.1304]],\n", - " grad_fn=) Polska B rozpoczyna turniej w Płocku Od piątku do niedzieli w płockiej Orlen Arenie odbędzie się turniej z udziałem reprezentacji Polski B. Wezmą w nim też udział druga reprezentacja Danii, a także pierwsze kadry Wysp Owczych i Estonii.\n", - "2.0075767040252686 2.0585439205169678 450 0 tensor([[0.1276, 0.1289, 0.1236, 0.1232, 0.1221, 0.1172, 0.1307, 0.1266]],\n", - " grad_fn=) Najpiękniesze polskie sportsmenki! Sprawdź kto znalazł się w zestawieniu! Przygotowaliśmy dla was zestawienie 20 najpiękniejszych polskich sportsmenek! Zgadzacie się z naszym wyborem? Swoje typy wpisujcie w komentarzach! Razem wybierzemy tę najładniejszą.\n", - "2.011418581008911 1.9737845659255981 500 0 tensor([[0.1389, 0.1302, 0.1213, 0.1188, 0.1176, 0.1193, 0.1243, 0.1295]],\n", - " grad_fn=) Aleksander Zniszczoł został ojcem. Urodziła mu się córka Piątek był niezwykle ważnym dniem w życiu Aleksandra Zniszczoła. Polskiemu skoczkowi narciarskiemu urodziła się córka. Pochwalił się jej zdjęciem na Instagramie.\n", - "2.0087714195251465 2.0379459857940674 550 1 tensor([[0.1339, 0.1303, 0.1195, 0.1186, 0.1221, 0.1194, 0.1287, 0.1274]],\n", - " grad_fn=) Rajd Azorów: czołówka miała problemy. Łukjaniuk się broni Aleksiej Łukjaniuk pod nieobecność Kajetana Kajetanowicza obronił pozycję lidera klasyfikacji generalnej Rajdu Azorów. Do czołowej dziesiątki przebił się Łukasz Habaj.\n", - "1.996700406074524 2.0396344661712646 600 4 tensor([[0.1274, 0.1270, 0.1201, 0.1230, 0.1301, 0.1189, 0.1227, 0.1307]],\n", - " grad_fn=) Andrzej Kostyra: Ciosy muszą się kumulować Podczas sobotniej gali Tomasz Adamek zmierzy się z Arturem Szpilką. Andrzej Kostyra większe szanse daje temu pierwszemu, ale zauważa też pewne mankamenty.\n", - "1.9674354791641235 2.064871072769165 650 3 tensor([[0.1315, 0.1254, 0.1290, 0.1268, 0.1149, 0.1162, 0.1210, 0.1350]],\n", - " grad_fn=) IO 2016: skład Chorwacji na przygotowania do Rio. Na liście Lovro Mihić, Manuel Strlek i Ivan Cupić Chorwacki selekcjoner Żeljko Babić powołał kadrę na przygotowania do igrzysk olimpijskich w Rio de Janeiro. Na liście nazwisk nie zabrakło \"polskich\" akcentów. Na zgrupowanie pojadą Manuel Strlek, Lovro Mihić, Filip Ivić i Ivan Cupić.\n", - "1.9685375690460205 1.9720581769943237 700 2 tensor([[0.1150, 0.1331, 0.1392, 0.1129, 0.1123, 0.1159, 0.1247, 0.1469]],\n", - " grad_fn=) Andy Murray: Kostka boli, ale wszystko z nią w porządku W swoim felietonie dla BBC Andy Murray ocenił środowy pojedynek II rundy z Andriejem Rublowem i cieszył się z sukcesu Daniela Evansa w Australian Open 2017. Lider rankingu ATP przyznał, że z jego kostką jest wszystko w porządku.\n", - "1.9755648374557495 1.8178434371948242 750 1 tensor([[0.1203, 0.1624, 0.1207, 0.1146, 0.1109, 0.1177, 0.1230, 0.1304]],\n", - " grad_fn=) Daniel Ricciardo sugeruje Red Bullowi wybór silnika Daniel Ricciardo przyznał, że patrząc na obecny rozwój jednostki napędowej Renault, byłby gotowy zaufać francuskiemu producentowi także w kolejnym sezonie F1.\n", - "1.9461817741394043 2.115739107131958 800 3 tensor([[0.1252, 0.1380, 0.1297, 0.1205, 0.1064, 0.1249, 0.1235, 0.1317]],\n", - " grad_fn=) Kamil Mokrzki jako jedyny gracz Gwardii Opole dobił do granicy 100 goli 24-letni rozgrywający opolan był najlepszym strzelcem zespołu w sezonie 2015/2016. Drugiego w wewnętrznej klasyfikacji Antoniego Łangowskiego wyprzedził o 10 trafień.\n", - "1.976528286933899 2.018634080886841 850 4 tensor([[0.1226, 0.1330, 0.1265, 0.1109, 0.1328, 0.1160, 0.1143, 0.1438]],\n", - " grad_fn=) Deontay Wilder rzucił wyzwanie Anthony'emu Joshui. \"Aż krew się we mnie gotuje!\" - Anthony Joshua to facet, z którym chcę walczyć - mówi Deontay Wilder. Mistrz świata organizacji WBC wyzwał Anglika na pojedynek i liczy na to, że ten potraktuje jego propozycję na poważnie.\n", - "1.9369778633117676 2.0240039825439453 900 2 tensor([[0.1282, 0.1321, 0.1321, 0.1175, 0.1185, 0.1192, 0.1179, 0.1344]],\n", - " grad_fn=) Ronaldo, Bouchard, Bolt. Gwiazdy sportu wybierają stroje na Halloween Znani sportowcy wzięli udział w zabawie w wymyślaniu kostiumów na wieczór halloweenowych szaleństw. Kto zaprezentował najbardziej oryginalne przebranie?\n", - "1.938151240348816 1.998972773551941 950 4 tensor([[0.1241, 0.1263, 0.1215, 0.1199, 0.1355, 0.1184, 0.1261, 0.1283]],\n", - " grad_fn=) Andrzej Kostyra stworzył \"idealnego polskiego boksera\". Jest dużo cech Tomasza Adamka Andrzej Kostyra, ekspert bokserski, stworzył model \"idealnego polskiego pięściarza\". Wymienił najlepsze cechy poszczególnych bokserów. Najwięcej jest Tomasza Adamka.\n", - "1.928910732269287 1.9361062049865723 1000 1 tensor([[0.1222, 0.1443, 0.1320, 0.1216, 0.1117, 0.1137, 0.1200, 0.1346]],\n", - " grad_fn=) Rajd Niemiec: Andreas Mikkelsen i Jari-Matti Latvala najszybsi na shakedown W czwartek kierowcy mieli do pokonania odcinek testowy przed Rajdem Niemiec. Na mecie okazało się, że Andreas Mikkelsen i Jari-Matti Latvala uzyskali identyczny czas.\n", - "1.9247257709503174 1.9077305793762207 1050 4 tensor([[0.1264, 0.1246, 0.1286, 0.1161, 0.1484, 0.1108, 0.1174, 0.1276]],\n", - " grad_fn=) Była rywalka Joanny Jędrzejczyk na dopingu. Czeka ją zawieszenie Była pretendenta to tytułu mistrzyni UFC w wadze słomkowej, Jessica Penne (MMA 12-5) została zawieszona przez Amerykańską Agencję Antydopingową za stosowanie niedozwolonego środka. Amerykankę czeka 1,5-roczne zawieszenie.\n", - "1.9094451665878296 1.8653218746185303 1100 2 tensor([[0.1117, 0.1150, 0.1548, 0.1148, 0.1137, 0.1239, 0.1094, 0.1566]],\n", - " grad_fn=) Finał WTA Sydney: Radwańska - Konta na żywo. Transmisja TV, stream online W piątek Agnieszka Radwańska zmierzy się z Johanną Kontą w ramach finału WTA Sydney. Transmisja TV na antenie TVP 1 i TVP Sport. Stream online w sport.tvp.pl.\n", - "1.9157683849334717 1.9492340087890625 1150 7 tensor([[0.1213, 0.1256, 0.1152, 0.1315, 0.1243, 0.1176, 0.1222, 0.1424]],\n", - " grad_fn=) Piękne zachowanie piłkarza Borussii. Pomógł kibicowi Takim zachowaniem piłkarze zyskują ogromny szacunek u kibiców. Christian Pulisić uratował fana, którym podczas próby zrobienia wspólnego zdjęcia z zawodnikiem Borussii Dortmund zajęła się ochrona.\n", - "1.865821123123169 2.0228006839752197 1200 4 tensor([[0.1116, 0.1368, 0.1280, 0.1275, 0.1323, 0.1158, 0.1208, 0.1272]],\n", - " grad_fn=) W przyszłym roku dojdzie do walki Joshua - Kliczko. \"Umowa jest dogadana\" Po fiasku wcześniejszych negocjacji wreszcie osiągnięto porozumienie. W przyszłym roku Anthony Joshua zmierzy się z Władimirem Kliczką, a w stawce będą dwa pasy mistrzowskie - informują menadżerowie obu pięściarzy. Został tylko jeden warunek.\n", - "1.8944953680038452 1.8922208547592163 1250 4 tensor([[0.1134, 0.1291, 0.1183, 0.1147, 0.1507, 0.1225, 0.1236, 0.1276]],\n", - " grad_fn=) MMA: Bartosz Fabiński zasila powracającą Fighters Arenę Bartosz Fabiński wystąpi na gali Fighters Arena 9, która 8 czerwca odbędzie się w Józefowie. Dla zawodnika z Warszawy będzie to już czwarta walka w tym roku.\n", - "1.880069375038147 1.9415850639343262 1300 7 tensor([[0.1157, 0.1171, 0.1131, 0.1464, 0.1034, 0.1277, 0.1331, 0.1435]],\n", - " grad_fn=) Oficjalnie: Polski mecz w Serie A! Godzinę przed pierwszym gwizdkiem (20:45) meczu między Sampdorią, a Napoli potwierdziły się doniesienia włoskiej prasy. Po raz pierwszy w obecnym sezonie to samo spotkanie Serie A rozpocznie w wyjściowej jedenastce aż 4 polskich piłkarzy.\n", - "1.856698751449585 1.7814764976501465 1350 1 tensor([[0.1144, 0.1684, 0.1176, 0.1232, 0.1149, 0.1156, 0.1183, 0.1275]],\n", - " grad_fn=) Bernie Ecclestone: Ferrari ma lepszy bolid Zdaniem Berniego Ecclestone'a, sezon 2017 będzie należeć do Ferrari. Włoski zespół ma spore szanse na pierwszy mistrzowski tytuł wśród konstruktorów od wielu lat.\n", - "1.864432692527771 1.7103632688522339 1400 1 tensor([[0.1176, 0.1808, 0.1134, 0.1188, 0.1131, 0.1201, 0.1122, 0.1240]],\n", - " grad_fn=) Sauber potwierdza brak Pascala Wehrleina na testach. Kto go zastąpi? Po czwartkowych medialnych doniesieniach, w piątek zespół Sauber F1 Team oficjalnie potwierdził, iż Pascal Wehrlein opuści pierwszą turę przedsezonowych testów pod Barceloną.\n", - "1.8556106090545654 1.6862224340438843 1450 6 tensor([[0.1019, 0.1062, 0.1194, 0.1385, 0.0955, 0.1352, 0.1852, 0.1180]],\n", - " grad_fn=) Polski Cukier Muszynianka Enea - Giacomini Budowlani: przełamać pasmo porażek W 7. kolejce Orlen Ligi siatkarki Polskiego Cukru Muszynianki Enea Muszyna podejmą Giacomini Budowlani Toruń. Przyjezdne w czterech ostatnich meczach rozgrywek nie wygrały nawet seta i tą złą serię chcą przerwać w Małopolsce.\n", - "1.8279104232788086 1.714841604232788 1500 6 tensor([[0.1144, 0.1191, 0.1098, 0.1388, 0.0905, 0.1315, 0.1800, 0.1160]],\n", - " grad_fn=) Przyjmująca zostaje w Toruniu. Budowlani zamknęli skład W sezonie 2017/2018 Orlen Ligi w Budowlanych Toruń nadal będzie występować Marina Paulava. Ta siatkarka zamknęła skład zespołu.\n", - "1.8162095546722412 1.6665536165237427 1550 7 tensor([[0.1020, 0.1058, 0.1215, 0.1180, 0.1061, 0.1215, 0.1362, 0.1889]],\n", - " grad_fn=) Borussia Dortmund - Red Bull Salzburg na żywo. Transmisja TV, stream online W czwartek, w ramach 1/8 finału Ligi Europy, odbędzie się mecz Borussia Dortmund - Red Bull Salzburg. Transmisja TV na antenie Eurosport 1. Stream online na platformie Eurosport Player i Ipla TV. Relacja LIVE w WP SportoweFakty.\n", - "1.81099271774292 1.7798329591751099 1600 0 tensor([[0.1687, 0.1025, 0.1230, 0.1102, 0.1030, 0.1188, 0.1179, 0.1559]],\n", - " grad_fn=) PŚ w Lahti: konkurs drużynowy na żywo. Transmisja TV, stream online za darmo W sobotę, w ramach Pucharu Świata w skokach narciarskich w Lahti odbędzie się konkurs drużynowy. Transmisja TV na antenie TVP 1 i Eurosport. Stream online za darmo w WP Pilot. Relacja LIVE w WP SportoweFakty.\n", - "1.8140941858291626 1.8500407934188843 1650 5 tensor([[0.0951, 0.1068, 0.1140, 0.1381, 0.1080, 0.1572, 0.1369, 0.1438]],\n", - " grad_fn=) Panathinaikos ma dość Euroligi. Wielki klub chce się wycofać z rozgrywek! Koszykarska Euroliga bez Panathinaikosu Ateny? To bardzo możliwy scenariusz. Właściciel klubu - Dimitrios Giannakopoulos - zapowiedział wycofanie drużyny ze stolicy Grecji z elitarnych rozgrywek.\n", - "1.792924404144287 1.8001683950424194 1700 4 tensor([[0.1270, 0.1361, 0.1167, 0.1184, 0.1653, 0.1104, 0.0993, 0.1269]],\n", - " grad_fn=) Tomasz Adamek wrócił na salę treningową. Zobacz, w jakiej formie jest \"Góral\" (wideo) Coraz więcej wskazuje na to, że Tomasz Adamek raz jeszcze powróci na ring. Były mistrz świata kategorii półciężkiej i junior ciężkiej regularnie pojawia się na sali treningowej. W jakiej formie jest 40-latek?\n", - "1.795984148979187 1.843177080154419 1750 0 tensor([[0.1583, 0.1008, 0.1063, 0.1622, 0.1017, 0.1220, 0.1319, 0.1169]],\n", - " grad_fn=) 18 zawodników w finskiej kadrze. Aino-Kaisa Saarinen poza reprezentacją Finowie ogłosili skład reprezentacji na nadchodzący Puchar Świata w biegach narciarskich. W drużynie znalazło się 8 zawodniczek i 10 zawodników.\n", - "1.8073369264602661 1.7174080610275269 1800 4 tensor([[0.1065, 0.1124, 0.1060, 0.1050, 0.1795, 0.1232, 0.1324, 0.1350]],\n", - " grad_fn=) FEN 19: karta walk skompletowana Znamy ostatnie, dziesiąte zestawienie na gali Fight Exclusive Night 19 \"Bitwa o Wrocław\". W kategorii do 70 kilogramów w formule K-1 zmierzą się ze sobą Marcin Stopka (2-2) i Krzysztof Kottas (0-0).\n", - "1.813085675239563 1.8584522008895874 1850 1 tensor([[0.1218, 0.1559, 0.1244, 0.1247, 0.1089, 0.1195, 0.1167, 0.1281]],\n", - " grad_fn=) Rajd Nadwiślański: Grzegorz Grzyb Liderem Grzegorz Grzyb i Robert Hundla zostali liderami Rajdu Nadwiślańskiego po przejechaniu dwóch sobotnich odcinków specjalnych.\n", - "1.8126273155212402 2.0152177810668945 1900 3 tensor([[0.1352, 0.1214, 0.1278, 0.1333, 0.1161, 0.1320, 0.1177, 0.1165]],\n", - " grad_fn=) Bundesliga: Berlińskie TGV. Kolejna stacja w Hanowerze Füchse Berlin w niedzielę powalczy w Hanowerze o dziewiąte kolejne zwycięstwo w sezonie. Takiego otwarcia „Lisy” nie miały jeszcze nigdy. Z kolei wieczorem polski pojedynek w Magdeburgu: Piotr Chrapkowski vs Andrzej Rojewski. Oba mecze w Sportklubie.\n", - "1.8037822246551514 1.9507031440734863 1950 4 tensor([[0.1258, 0.1343, 0.1078, 0.1292, 0.1422, 0.1202, 0.1165, 0.1241]],\n", - " grad_fn=) Utytułowany pięściarz zakończył karierę Czterokrotny obrońca tytułu mistrza świata kategorii super średniej Mikkel Kessler ogłosił zakończenie kariery pięściarskiej. To najbardziej utytułowany zawodnik w historii duńskiego boksu.\n", - "1.7356246709823608 1.938697099685669 2000 6 tensor([[0.1114, 0.0960, 0.1303, 0.1193, 0.1003, 0.1257, 0.1439, 0.1731]],\n", - " grad_fn=) KMŚ 2017: ZAKSA - Sarmayeh Bank Teheran na żywo. Gdzie oglądać transmisję TV i online? We wtorek, ZAKSA Kędzierzyn-Koźle zmierzy się z Sarmayeh Bank Teheran w ramach Klubowych Mistrzostw Świata w siatkówce. Transmisja TV na antenie Polsat Sport. Stream online w Ipla TV. Relacja LIVE w WP SportoweFakty za darmo.\n", - "1.7901594638824463 1.9917528629302979 2050 1 tensor([[0.1212, 0.1365, 0.1351, 0.1287, 0.1104, 0.1252, 0.1179, 0.1250]],\n", - " grad_fn=) Wakacyjny freestyle Przygońskiego i Pawlusiaka na pustyni Pędzące po wydmach dakarowe MINI, specjalnie dostosowany snowboard, lina i dwóch utalentowanych sportowców - tak w skrócie można opisać projekt \"Przygoński & Pawlusiak Dune Freestyle\".\n", - "1.7326788902282715 1.8687950372695923 2100 5 tensor([[0.1091, 0.1428, 0.1050, 0.1267, 0.1092, 0.1543, 0.1100, 0.1429]],\n", - " grad_fn=) Martynas Sajus: Sobin jest bardziej doświadczonym graczem, ale w przyszłości będę od niego lepszy Pojedynek Josipa Sobina z Martynasem Sajusem może być jednym ze smaczków piątkowego spotkania Anwilu z Polpharmą. Który ze środkowych da więcej swojej ekipie? - On jest bardziej doświadczony, ale w przyszłości to ja będę lepszy - śmieje się Sajus.\n", - "1.7521668672561646 1.5104379653930664 2150 2 tensor([[0.0978, 0.1259, 0.2208, 0.1105, 0.1043, 0.1174, 0.1048, 0.1186]],\n", - " grad_fn=) Łukasz Iwanek: Każda tenisistka może być Williams, nie każda może zostać Radwańską (komentarz) W II rundzie Australian Open najlepsza polska tenisistka została stłamszona przez rywalkę uderzającą szybko i celnie. Każda tenisistka może w pojedynczym meczu zostać Sereną Williams, nie każda może być Agnieszką Radwańską.\n", - "1.7391993999481201 1.7570909261703491 2200 5 tensor([[0.1101, 0.0949, 0.1162, 0.1437, 0.0984, 0.1725, 0.1351, 0.1290]],\n", - " grad_fn=) Kolejny występ Przemysława Karnowskiego w Lidze Letniej NBA Kolejny występ w rozgrywkach Ligi Letniej NBA zanotował Przemysław Karnowski. Polak, który reprezentuje Charlotte Hornets, w przegranym meczu z Indianą Pacers (77:84) zdobył cztery punkty i miał trzy zbiórki.\n", - "1.6614245176315308 1.5924513339996338 2250 1 tensor([[0.1038, 0.2034, 0.1055, 0.1092, 0.1229, 0.1111, 0.1111, 0.1329]],\n", - " grad_fn=) Niebieskie flagi mogą zniknąć z F1 Formuła 1 rozważa, czy nie zrezygnować ze stosowania niebieskich flag podczas wyścigu. W ostatnich sezonach kierowcy często narzekali, iż rywale nie stosowali się do takiej sygnalizacji.\n", - "1.661994218826294 1.8809857368469238 2300 5 tensor([[0.1059, 0.1278, 0.1030, 0.1494, 0.1201, 0.1524, 0.1246, 0.1169]],\n", - " grad_fn=) Nemanja Jaramaz nowym zawodnikiem Anwilu Włocławek! Doskonale znany na polskich parkietach z występów w drużynie ze Zgorzelca Nemanja Jaramaz został nowym zawodnikiem Anwilu Włocławek. Kontrakt z Serbem będzie obowiązywał do końca bieżącego sezonu.\n", - "1.7554911375045776 1.7680193185806274 2350 5 tensor([[0.1027, 0.1128, 0.1075, 0.1352, 0.1200, 0.1707, 0.1245, 0.1267]],\n", - " grad_fn=) TOP5 zagrań minionej nocy NBA (wideo) 3 mecze odbyły się w nocy z wtorku na środę w NBA, dlatego liga miała mniejszy wybór do zestawienia najlepszych akcji. Na czele listy TOP5 zagrań znalazły się rzuty z elektryzującej końcówki spotkania Dallas Mavericks-Portland Trail Blazers.\n", - "1.7369928359985352 1.9102388620376587 2400 2 tensor([[0.1144, 0.1583, 0.1480, 0.1184, 0.1097, 0.1227, 0.1076, 0.1208]],\n", - " grad_fn=) Roger Federer będzie występował w Bazylei aż do 2019 roku Roger Federer potwierdził, że na pewno do sezonu 2019 będzie występował w turnieju Swiss Indoors Basel, który jest organizowany pod koniec października w jego rodzinnej miejscowości.\n", - "1.671631932258606 1.793396234512329 2450 4 tensor([[0.1104, 0.1304, 0.1188, 0.1231, 0.1664, 0.1170, 0.1101, 0.1238]],\n", - " grad_fn=) Łukasz Wichowski przed DSF Kickboxing Challenge: Będzie ciężka walka i duże widowisko Już w sobotę odbędzie się gala DSF Kickboxing Challenge: Bitwa w Piasecznie. Walką wieczoru będzie starcie Łukasza Wichowskiego z Piotrem Kołakowskim. - To dodatkowa mobilizacja - mówi Wichowski.\n", - "1.6898339986801147 1.8184137344360352 2500 5 tensor([[0.1091, 0.1339, 0.1128, 0.1309, 0.1144, 0.1623, 0.1074, 0.1292]],\n", - " grad_fn=) Specjaliści od dzikich kart. Co GTK Gliwice może wnieśc do PLK? GTK Gliwice prawdopodobnie będzie 17. zespołem w ekstraklasie. Przybliżamy sylwetkę ekipy ze Śląska, dla której gra w PLK będzie absolutnym debiutem.\n", - "1.6765532493591309 1.7610383033752441 2550 7 tensor([[0.1266, 0.1095, 0.1140, 0.1418, 0.1051, 0.1029, 0.1283, 0.1719]],\n", - " grad_fn=) Agent Oezila przerywa milczenie i oskarża reprezentantów Niemiec Erkut Sogut, agent Mesuta Oezila przemówił na temat zakończenia kariery reprezentacyjnej przez pomocnika. Oberwało się trzem reprezentantom Niemiec.\n", - "1.6663236618041992 1.6887623071670532 2600 5 tensor([[0.0998, 0.1291, 0.0841, 0.1349, 0.1218, 0.1847, 0.1053, 0.1402]],\n", - " grad_fn=) NBA: ci koszykarze nie mają jeszcze kontraktu Dobiega końca lipiec, a wciąż bez kontraktów na kolejny sezon pozostaje kilku zawodników o znanych nazwiskach. Najbardziej znany to oczywiście LeBron James, ale on akurat lada moment ma podpisać nową umowę z Cleveland Cavaliers.\n", - "1.660627841949463 1.0679386854171753 2650 2 tensor([[0.0997, 0.0816, 0.3437, 0.1018, 0.0988, 0.0842, 0.0996, 0.0905]],\n", - " grad_fn=) ATP Toronto: Tuzin zwycięstw nad Gaelem Monfilsem. Novak Djoković zmierza po kolejne trofeum Novak Djoković powalczy w niedzielę z Keiem Nishikorim o triumf w turnieju ATP World Tour Masters 1000 na kortach twardych w Toronto. W sobotnim półfinale Serb pewnie rozprawił się z Gaelem Monfilsem, zwyciężając Francuza 6:3, 6:2.\n", - "1.6437948942184448 1.9171419143676758 2700 6 tensor([[0.1121, 0.1250, 0.0957, 0.1340, 0.1204, 0.1323, 0.1470, 0.1335]],\n", - " grad_fn=) Joanna Wołosz: Mamy prawo do małego dołka Chemik Police poniósł trzecią ligową porażkę, tym razem ze zdecydowanie niżej notowanym Atomem Trefl Sopot. Kryzys mistrza Polski? Joanna Wołosz uspokaja zaniepokojonych kibiców.\n", - "1.6391946077346802 2.0095250606536865 2750 4 tensor([[0.1318, 0.1551, 0.1222, 0.1035, 0.1341, 0.1162, 0.1034, 0.1338]],\n", - " grad_fn=) Legenda MMA czuje się jak wrak człowieka. Przeszedł 22 operacje Po raz pierwszy trafił na stół operacyjny jako dziecko. Antonio Rodrigo Nogueira wpadł pod koła ciężarówki, walczył o życie. Później musiał poddawać się zabiegom po kontuzjach odniesionych na treningach i w walkach. - Jestem cały rozbity - przyznaje.\n", - "1.6332921981811523 1.2052042484283447 2800 2 tensor([[0.1205, 0.1072, 0.2996, 0.1031, 0.0922, 0.0857, 0.0875, 0.1042]],\n", - " grad_fn=) Ostatni sprawdzian Kamila Majchrzaka przed Rolandem Garrosem. Polak zagra w Niemczech Kamil Majchrzak weźmie udział w turnieju ATP Challenger Tour na kortach ziemnych w niemieckim Heilbronn. Dla Polaka będzie to ostatni sprawdzian przed eliminacjami do wielkoszlemowego Rolanda Garrosa 2018.\n", - "1.6281371116638184 1.3348133563995361 2850 7 tensor([[0.1050, 0.0828, 0.1172, 0.1081, 0.0920, 0.1131, 0.1186, 0.2632]],\n", - " grad_fn=) Real Sociedad - Atletico Madryt na żywo. Gdzie oglądać transmisję TV i stream online? W czwartek, w ramach Primera Division, odbędzie się spotkanie Real Sociedad - Atletico Madryt. Transmisja TV na antenie Eleven Sports 1. Stream online w WP Pilot. Relacja LIVE w WP SportoweFakty.\n", - "1.6222891807556152 1.3981242179870605 2900 1 tensor([[0.1193, 0.2471, 0.1043, 0.0929, 0.0984, 0.1156, 0.1038, 0.1185]],\n", - " grad_fn=) Williams został w tyle za rywalami. \"Nie odrobiliśmy swojej pracy domowej\" Problemy Williamsa w tym sezonie zdają się nie mieć końca. Paddy Lowe jest zdania, że na sytuację wpływa zacięta rywalizacja w Formule 1. - Obecnie każdy z zespołów funkcjonuje na bardzo wysokim poziomie - twierdzi Brytyjczyk.\n", - "1.6525822877883911 1.6196324825286865 2950 5 tensor([[0.1021, 0.1232, 0.0984, 0.1353, 0.1010, 0.1980, 0.1131, 0.1289]],\n", - " grad_fn=) Basket 90 Gdynia zamknął \"zagraniczną\" kadrę na nowy sezon Basket 90 Gdynia zakończył poszukiwania zawodniczek zagranicznych na sezon 2016/2017. Ostatnią koszykarką spoza granic naszego kraju, która związała się z ekipą z Trójmiasta, jest Litwinka Monika Grigalauskyte.\n", - "1.6379656791687012 1.4863052368164062 3000 3 tensor([[0.0881, 0.0816, 0.1089, 0.2262, 0.0698, 0.1202, 0.1658, 0.1394]],\n", - " grad_fn=) Liga Mistrzów: Paris Saint-Germain HB kolejnym uczestnikiem Final Four Paris Saint-Germain HB zremisował z MOL-Pickiem Szeged 30:30 w rewanżowym meczu ćwierćfinałowym Ligi Mistrzów 2016/2017, tym samym zdobywając awans do turnieju finałowego w Kolonii.\n", - "1.620102047920227 1.955077886581421 3050 5 tensor([[0.0998, 0.1599, 0.1024, 0.1031, 0.1239, 0.1416, 0.1172, 0.1520]],\n", - " grad_fn=) Chewbacca ma nową twarz. Jak koszykarz z Finlandii trafił do \"Gwiezdnych Wojen\" Zbliżający się weekend będzie tym, w którym miliony fanów \"Gwiezdnych Wojen\" zaczną szturmować kina, by obejrzeć 8. część sagi. Wielu z nich nie wie, że za maską Chewbakki od niedawna skrywa się nowa twarz - fińskiego koszykarza, Joonasa Suotamo.\n", - "1.6508986949920654 1.7872048616409302 3100 7 tensor([[0.1113, 0.1329, 0.0890, 0.1126, 0.1327, 0.1295, 0.1246, 0.1674]],\n", - " grad_fn=) Ireneusz Mamrot liczy na przełamanie. \"Jest sportowa złość, która musi się przełożyć na naszą korzyść\" - Nie ma zdenerwowania, ale jest duża sportowa złość. To musi się przełożyć na naszą korzyść - mówi przed sobotnim pojedynkiem z Koroną Kielce trener Jagiellonii Białystok, Ireneusz Mamrot. - Nie można wiecznie mieć gorszego okresu - dodaje.\n", - "1.5091105699539185 1.5536433458328247 3150 2 tensor([[0.1030, 0.1194, 0.2115, 0.1183, 0.1021, 0.1098, 0.1085, 0.1274]],\n", - " grad_fn=) Roland Garros: bogaty program gier na środę. Matkowski czeka na dokończenie meczu z braćmi Bryanami Przez ostatnie dwa dni tenisiści niemal nie rywalizowali na kortach Rolanda Garrosa. Plan gier na 11. dzień turnieju jest naprawdę bogaty.\n", - "1.64374577999115 1.6283594369888306 3200 4 tensor([[0.0947, 0.1278, 0.1324, 0.1141, 0.1963, 0.1059, 0.1183, 0.1106]],\n", - " grad_fn=) Deontaya Wildera czekają dwie operacje. Na ring wróci w 2017 roku Deontay Wilder bez problemów pokonał Chrisa Arreolę w Birmingham i obronił pas mistrza świata federacji WBC. Podczas pojedynku \"Brązowy Bombardier\" nabawił się jednak dwóch kontuzji, które na dłuższy okres wykluczą go z walk.\n", - "1.4641040563583374 1.66716468334198 3250 5 tensor([[0.0888, 0.0941, 0.0920, 0.1388, 0.1155, 0.1888, 0.1545, 0.1276]],\n", - " grad_fn=) Sfrustrowany Tweety Carter: Powinienem zatrzymać Irelanda W ramach 20. kolejki PLK PGE Turów przegrał na własnym parkiecie z Treflem Sopot 79:81. - To bardzo, bardzo frustrująca porażka - mówi Tweety Carter, który zawiódł w ostatniej minucie tego starcia.\n", - "1.6305592060089111 1.6195734739303589 3300 1 tensor([[0.1346, 0.1980, 0.1101, 0.1144, 0.1032, 0.1227, 0.1072, 0.1099]],\n", - " grad_fn=) Rajd Estonii: Kajetanowicz utrzymuje podium Polska załoga Kajetan Kajetanowicz - Jarosław Baran jest coraz bliżej sięgnięcia po kolejne podium w wyścigach ERC. Po pewne zwycięstwo w Rajdzie Estonii zmierza Aleksiej Łukjaniuk.\n", - "1.5722557306289673 1.681894302368164 3350 5 tensor([[0.0974, 0.1164, 0.1069, 0.1205, 0.0956, 0.1860, 0.1081, 0.1691]],\n", - " grad_fn=) Basket Poznań wrócił na właściwe tory? \"Do stacji końcowej jeszcze daleka droga\" I-ligowy Biofarm Basket Poznań jest projektem, który skupia wokół siebie wielu młodych graczy. W zespole możemy znaleźć także dwóch doświadczonych zawodników, a jednym z nich jest Tomasz Smorawiński.\n", - "1.513804316520691 1.353588581085205 3400 4 tensor([[0.1068, 0.1058, 0.1009, 0.1070, 0.2583, 0.1113, 0.1052, 0.1048]],\n", - " grad_fn=) Łukasz Rambalski i Wojciech Wierzbicki w karcie walk gali FEN 10 Do ciekawej walki dojdzie na gali FEN 10, 9 stycznia w Lubinie. Jeden z najbardziej utytułowanych polskich zawodników kickboxingu, Łukasz Rambalski, zmierzy się z aktualnym zawodowym mistrzem Europy organizacji WAKO-PRO, Wojciechem Wierzbickim.\n", - "1.549415111541748 1.5709004402160645 3450 5 tensor([[0.0968, 0.0769, 0.1763, 0.1564, 0.0748, 0.2079, 0.1181, 0.0927]],\n", - " grad_fn=) Świetny mecz Marcina Sroki. Sokół z Pogonią w finale turnieju w Prudniku Marcin Sroka zdobył 25 punktów i poprowadził Max Elektro Sokół Łańcut do zwycięstwa 95:69 nad BK NH Ostrava. W drugim półfinale międzynarodowego koszykarskiego turnieju w Prudniku gospodarze pokonali Jamalex Polonię 1912 Leszno.\n", - "1.5036178827285767 1.6746760606765747 3500 1 tensor([[0.1181, 0.1874, 0.1078, 0.1015, 0.1282, 0.1220, 0.1091, 0.1260]],\n", - " grad_fn=) Niki Lauda wspomina Jamesa Hunta. \"Jego cząstka żyje we mnie\" Przed laty rywalizacja Nikiego Laudy i Jamesa Hunta emocjonowała kibiców Formuły 1. Austriaka i Brytyjczyka, choć na torze byli rywalami, połączyła specjalna więź. - Jakaś cząstka Jamesa żyje teraz we mnie - mówi Lauda.\n", - "1.458483099937439 1.312494158744812 3550 1 tensor([[0.1023, 0.2691, 0.1057, 0.0845, 0.1266, 0.0953, 0.0950, 0.1214]],\n", - " grad_fn=) Eksperci o słowach Felipe Massy. \"Sam wykluczył się z walki o miejsce w Williamsie\" Felipe Massa w ostrych słowach skomentował możliwy powrót Roberta Kubicy do Formuły 1. - Wygląda na to, że Brazylijczyk sam wykluczył się z walki o miejsce w Williamsie - twierdzi Tiff Needell, były prowadzący \"Top Gear\".\n", - "1.6343040466308594 1.5306463241577148 3600 3 tensor([[0.1112, 0.0902, 0.0923, 0.2164, 0.0924, 0.1184, 0.1386, 0.1404]],\n", - " grad_fn=) AMŚ: pierwsza wygrana Biało-Czerwonych. Polska rozbiła Chińskie Tajpej Reprezentacja Polski piłkarzy ręcznych odniosła pierwsze zwycięstwo na Akademickich Mistrzostwach Świata. Drużyna Piotra Przybeckiego zgodnie z oczekiwaniami pokonała Chińskie Tajpej (35:20).\n", - "1.4308090209960938 0.6783717274665833 3650 2 tensor([[0.0740, 0.0568, 0.5074, 0.0749, 0.0623, 0.0691, 0.0896, 0.0659]],\n", - " grad_fn=) ATP Tokio: Kei Nishikori wygrał japońskie starcie. W II rundzie także Milos Raonić i Denis Shapovalov Faworyt gospodarzy Kei Nishikori w dwóch setach pokonał Yuichiego Sugitę w I rundzie rozgrywanego na kortach twardych w hali turnieju ATP World Tour 500 w Tokio. Do 1/8 finału awansowali też Kanadyjczycy - Milos Raonić i Denis Shapovalov.\n", - "1.523067831993103 1.5078588724136353 3700 2 tensor([[0.1061, 0.1269, 0.2214, 0.0988, 0.0970, 0.1362, 0.1111, 0.1025]],\n", - " grad_fn=) James Blake jak Tommy Haas czy Feliciano Lopez. Został dyrektorem turnieju w Miami Organizatorzy turnieju Miami Open ogłosili, że nowym dyrektorem tych kobiecych i męskich zawodów został były amerykański tenisista, James Blake. Tym samym potwierdziły się medialne doniesienia z ostatnich tygodni.\n", - "1.498782992362976 1.39162015914917 3750 7 tensor([[0.1257, 0.0678, 0.0980, 0.1364, 0.0640, 0.1027, 0.1567, 0.2487]],\n", - " grad_fn=) Mundial 2018. Historyczny wyczyn reprezentacji Rosji! Takiego pogromu w meczu otwarcia jeszcze nie było Na inaugurację MŚ 2018 Rosja pokonała Arabię Saudyjską aż 5:0 i ustanowiła nowy rekord mundialu - nigdy wcześniej w meczu otwarcia mistrzostw świata nie padł tak wysoki wynik.\n", - "1.494296669960022 1.5732029676437378 3800 3 tensor([[0.1084, 0.1078, 0.1186, 0.2074, 0.0942, 0.1287, 0.1335, 0.1015]],\n", - " grad_fn=) Wojciech Gumiński odnalazł się w Azotach. \"Start w nowym klubie bywa trudny\" Przeciętny początek rozgrywek i znacznie lepsza druga połowa sezonu. Wojciech Gumiński zaczyna spełniać oczekiwania w Azotach Puławy, stał się czołowym strzelcem brązowych medalistów PGNiG Superligi.\n", - "1.4970916509628296 1.9664472341537476 3850 2 tensor([[0.1420, 0.1164, 0.1400, 0.1578, 0.1105, 0.1187, 0.1133, 0.1014]],\n", - " grad_fn=) Rio 2016. To nie są igrzyska faworytów Tenisowe turnieje olimpijskie rządzą się swoimi prawami i wielkie niespodzianki są w nich na porządku dziennym, ale chyba mało kto przypuszczał, że w Rio de Janeiro dojdzie do aż tylu niespodziewanych rozstrzygnięć.\n", - "1.4386285543441772 1.7763383388519287 3900 5 tensor([[0.1042, 0.0926, 0.1017, 0.1574, 0.0956, 0.1693, 0.1595, 0.1197]],\n", - " grad_fn=) Niezawodny Klima, szalejący Obarek. Najlepsi gracze 18. kolejki I ligi Marcin Dymała oraz Maciej Klima to stali bywalce w naszym rankingu. Którzy zawodnicy znaleźli się jeszcze w najlepszej piątce 18. kolejki?\n", - "1.4847553968429565 1.4366589784622192 3950 4 tensor([[0.0837, 0.1276, 0.1146, 0.1064, 0.2377, 0.1054, 0.1089, 0.1156]],\n", - " grad_fn=) Czołowy brytyjski pięściarz zaproponował pojedynek Tomaszowi Adamkowi Tomasz Adamek otrzymał propozycję walki z Davidem Pricem. Jak poinformował portal worldboxingnews.net, obóz brytyjskiego pięściarza złożył \"Góralowi\" atrakcyjną ofertę.\n", - "1.4597876071929932 1.3940199613571167 4000 7 tensor([[0.0933, 0.1557, 0.0803, 0.0930, 0.1256, 0.1070, 0.0970, 0.2481]],\n", - " grad_fn=) Grzegorz Krychowiak na zakręcie. Mundial to ostatnia szansa Grzegorz Krychowiak znowu jest na zakręcie i musi szukać nowego klubu. Paris-Saint Germain chce się pozbyć Polaka na dobre. Mundial w Rosji to dla mistrzów Francji ostatnia szansa, żeby sprzedać go za godne pieniądze.\n", - "1.4579588174819946 1.5661852359771729 4050 6 tensor([[0.0991, 0.1113, 0.0903, 0.1400, 0.0902, 0.1380, 0.2088, 0.1223]],\n", - " grad_fn=) ZAKSA Kędzierzyn-Koźle trenuje już niemal w komplecie Na początku tygodnia do kędzierzyńskiej drużyny dołączyli zawodnicy, którzy brali udział w mistrzostwach Europy. Wyjątkiem jest francuski rozgrywający Benjamin Toniutti.\n", - "1.524263858795166 1.2569677829742432 4100 1 tensor([[0.0736, 0.2845, 0.0688, 0.0741, 0.1107, 0.1046, 0.1125, 0.1710]],\n", - " grad_fn=) Krzysztof Hołowczyc trzyma kciuki za Kubicę. \"Ci, którzy nie chcą jego powrotu, po prostu się go boją\" Trwa walka Roberta Kubicy o powrót do Formuły 1. Polak jest jednym z kandydatów do reprezentowania w przyszłym sezonie barw zespołu Williams. Za Kubicę kciuki trzyma Krzysztof Hołowczyc.\n", - "1.4493881464004517 1.4371377229690552 4150 1 tensor([[0.1067, 0.2376, 0.1001, 0.0918, 0.1164, 0.1187, 0.1077, 0.1211]],\n", - " grad_fn=) Honda znów ma problem z silnikiem. \"Musimy znaleźć główną przyczynę niepowodzeń\" Honda po raz kolejny ma problemy ze swoim silnikiem. Japończycy uważają jednak, że w przypadku Brendona Hartleya we Francji doszło do innej usterki niż w jednostce napędowej Pierre'a Gasly'ego w Kanadzie.\n", - "1.5475350618362427 1.0887583494186401 4200 2 tensor([[0.0726, 0.0993, 0.3366, 0.0964, 0.0821, 0.1156, 0.1075, 0.0898]],\n", - " grad_fn=) Jelena Janković marzy o drugim tygodniu Wimbledonu. We wtorek Serbka zagra z Agnieszką Radwańską Jelena Janković chciałaby dojść do drugiego tygodnia Wimbledonu 2017. Serbka będzie rywalką Agnieszki Radwańskiej w I rundzie.\n", - "1.4706852436065674 1.9419291019439697 4250 4 tensor([[0.1107, 0.1165, 0.1035, 0.1279, 0.1434, 0.1301, 0.1392, 0.1287]],\n", - " grad_fn=) Kontrowersyjny klub MMA w Chinach. Walczą 12-letnie dzieci W Enbo Fight Club trenuje nawet 400 młodych ludzi. Część z nich stanowią osierocone dzieci. Działalność klubu wywołuje spore emocje w Chinach.\n", - "1.4309391975402832 0.8164663314819336 4300 1 tensor([[0.1202, 0.4420, 0.0652, 0.0702, 0.0816, 0.0791, 0.0730, 0.0687]],\n", - " grad_fn=) MotoGP: Marc Marquez najlepszy w ostatnim treningu Marc Marquez wygrał ostatnią sesję treningową przed wyścigiem o Grand Prix Ameryk na torze w Austin. Kolejne pozycje zajęli Dani Pedrosa oraz Maverick Vinales.\n", - "1.421707034111023 1.5885950326919556 4350 3 tensor([[0.0740, 0.1260, 0.0926, 0.2042, 0.1067, 0.1426, 0.1267, 0.1271]],\n", - " grad_fn=) Rafał Przybylski odchodzi z Azotów Puławy. Kierunek - zagranica Rafał Przybylski po zakończeniu sezonu 2016/17 odejdzie z Azotów Puławy. 25-letni prawy rozgrywający wyjedzie z Polski. W jakim kierunku? Tego jeszcze nie wiadomo. Po Polaka zgłosiło się kilka klubów. Rozmowy trwają.\n", - "1.419579029083252 0.8860330581665039 4400 2 tensor([[0.0848, 0.0764, 0.4123, 0.0851, 0.0743, 0.0952, 0.0910, 0.0810]],\n", - " grad_fn=) WTA Lugano: Stefanie Voegele wygrała dwudniowy mecz z Magdaleną Fręch. Polka jeszcze bez zwycięstwa w tourze Stefanie Vögele okazała się w dwóch setach lepsza od Magdaleny Fręch w I rundzie turnieju WTA International na kortach ziemnych w Lugano. Polska tenisistka musi jeszcze poczekać na premierową wygraną w głównym cyklu.\n", - "1.3413941860198975 1.3380266427993774 4450 0 tensor([[0.2624, 0.1457, 0.0719, 0.1039, 0.0734, 0.0958, 0.1211, 0.1259]],\n", - " grad_fn=) MŚ w Lahti: Niemcy na czele klasyfikacji medalowej. To był ich piątek marzeń Niemcy znajdą się na prowadzeniu w klasyfikacji medalowej mistrzostw świata w Lahti po trzech dniach imprezy. W piątkowych konkurencjach reprezentanci tego kraju byli zdecydowanie najlepsi.\n", - "1.4630906581878662 1.8144276142120361 4500 0 tensor([[0.1629, 0.1532, 0.0742, 0.1222, 0.0932, 0.1240, 0.1055, 0.1647]],\n", - " grad_fn=) Pjongczang 2018. Austriacy zabiorą nam Horngachera? Trzeba jak najszybciej podpisać kontrakt Stefan Horngacher, jeden z autorów trzeciego złota Kamila Stocha, nie ma jeszcze podpisanego nowego kontraktu. PZN powinien uczynić to jak najszybciej, by sprzed nosa świetnego trenera nie zabrali polskiej kadrze Austriacy.\n", - "1.4926103353500366 0.9573735594749451 4550 1 tensor([[0.0927, 0.3839, 0.0863, 0.0762, 0.1012, 0.0837, 0.0782, 0.0977]],\n", - " grad_fn=) Wewnętrzna rywalizacja w Red Bull Racing. \"Powinienem wiedzieć, gdzie jest limit\" Wewnętrzna rywalizacja Daniela Ricciardo z Maxem Verstappenem korzystnie wpływa na formę kierowców Red Bull Racing. Australijczyk zdradził jednak, że w niektórych wyścigach przesadził z jazdą na limicie. - Zawsze byłem przed nim - odpowiada Holender.\n", - "1.493160367012024 1.1073386669158936 4600 6 tensor([[0.0816, 0.0615, 0.0737, 0.1037, 0.0659, 0.1300, 0.3304, 0.1531]],\n", - " grad_fn=) Puchar Polski: Skra Bełchatów - Asseco Resovia na żywo. Gdzie oglądać transmisję? W środę, w ramach Pucharu Polski w siatkówce odbędzie się mecz PGE Skra Bełchatów - Asseco Resovia Rzeszów. Tranmisja TV na antenie Polsat Sport. Stream online w Ipla TV. Relacja LIVE w WP SportoweFakty.\n", - "1.4486230611801147 1.1242272853851318 4650 1 tensor([[0.0861, 0.3249, 0.0828, 0.1040, 0.0873, 0.0995, 0.1066, 0.1088]],\n", - " grad_fn=) Mercedes z czwartym tytułem z rzędu jako czwarty zespół w historii Mercedes dzięki wygranej Lewisa Hamiltona w Austin zapewnił sobie kolejny z rzędu tytuł mistrzowski, który klasyfikuje niemiecki zespół wśród największych stajni w historii Formuły 1.\n", - "1.4269776344299316 1.2119630575180054 4700 6 tensor([[0.0843, 0.0775, 0.0978, 0.1276, 0.0649, 0.1554, 0.2976, 0.0949]],\n", - " grad_fn=) PlusLiga: ta ostatnia, decydująca niedziela W niedzielę zostanie rozegrana ostatnia kolejka PlusLigi. Poznamy w niej odpowiedzi na pytania, które drużyny zagrają o medale, a która pożegna się z rozgrywkami. Czy Indykpol AZS, Asseco Resovia i Jastrzębski Węgiel wykorzystają potknięcie ONICO?\n", - "1.4327268600463867 0.915303111076355 4750 0 tensor([[0.4004, 0.0969, 0.0800, 0.0819, 0.0717, 0.0826, 0.0907, 0.0959]],\n", - " grad_fn=) Hula, Żyła i Kubacki szczęśliwi po MŚ w lotach. Już szykują się na konkurs drużynowy Polscy skoczkowie byli w bardzo dobrych nastrojach po indywidualnych MŚ w lotach narciarskich. Teraz wszyscy są myślami przy niedzielnej rywalizacji drużynowej.\n", - "1.4646613597869873 1.0098087787628174 4800 1 tensor([[0.1289, 0.3643, 0.0871, 0.0714, 0.0703, 0.0957, 0.0766, 0.1056]],\n", - " grad_fn=) Maverick Vinales myśli tylko o wygranej. \"Walka o podium mi nie wystarczy\" Upadek w Grand Prix Holandii sprawił, że Maverick Vinales stracił prowadzenie w klasyfikacji generalnej MotoGP. Hiszpan ma teraz jeden cel. Wygrać wyścig na Sachsenringu i wrócić na szczyt tabeli.\n", - "1.4902805089950562 1.4387915134429932 4850 5 tensor([[0.0798, 0.1133, 0.1002, 0.1091, 0.1097, 0.2372, 0.1071, 0.1435]],\n", - " grad_fn=) Zagrał na własne życzenie i... doznał kontuzji. Co dalej z Markiem Carterem? Marc Carter za wszelką cenę chciał pomóc drużynie w meczu z PGE Turowem Zgorzelec (93:78). Niestety Amerykanin swój występ przepłacił kontuzją ścięgna Achillesa. Na razie nie wiadomo, jak poważny jest uraz jednego z czołowych zawodników BM Slam Stal.\n", - "1.4317628145217896 1.2453986406326294 4900 7 tensor([[0.0937, 0.0673, 0.0873, 0.1039, 0.0762, 0.1123, 0.1714, 0.2878]],\n", - " grad_fn=) Anglia - Nigeria na żywo. Transmisja TV, stream online W sobotę, w ramach meczu towarzyskiego, odbędzie się starcie Anglia - Nigeria. Transmisja TV na antenie Eleven Sports 1. Stream online w WP Pilot. Relacja LIVE w WP SportoweFakty.\n", + " grad_fn=) MŚ w hokeju: [...]\n", "1.3499293327331543 1.4718239307403564 4950 5 tensor([[0.1089, 0.0784, 0.1235, 0.1255, 0.0868, 0.2295, 0.1285, 0.1189]],\n", - " grad_fn=) Liga Letnia NBA: Zespół Ponitki w ćwierćfinale, 4 punkty Polaka Mateusz Ponitka zdobył cztery punkty dla Denver Nuggets, którzy pokonali Utah Jazz 80:60 i awansowali do ćwierćfinału Ligi Letniej NBA w Las Vegas.\n" + " grad_fn=) Liga Letnia NBA: [...].\n" ] } ], diff --git a/wyk/12_bpe.ipynb b/wyk/12_bpe.ipynb index c29d4f7..5c43f6e 100644 --- a/wyk/12_bpe.ipynb +++ b/wyk/12_bpe.ipynb @@ -1,861 +1,859 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", - "
\n", - "

Ekstrakcja informacji

\n", - "

12. Kodowanie BPE [wyk\u0142ad]

\n", - "

Filip Grali\u0144ski (2021)

\n", - "
\n", - "\n", - "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Podzia\u0142 na jednostki podwyrazowe\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### S\u0142ownik nie mo\u017ce by\u0107 za du\u017cy\u2026\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Je\u015bli u\u017cywamy wyuczalnych zanurze\u0144 s\u0142\u00f3w (embedding\u00f3w), w\u00f3wczas musimy\n", - "je dopisa\u0107 do listy parametr\u00f3w ca\u0142ego modelu \u2014 jest to $|V|n$ wag,\n", - "gdzie $n$ to rozmiar embedding\u00f3w; w wypadku uczenia dodatkowo musimy\n", - "jeszcze pami\u0119ta\u0107 zwi\u0105zane z embeddingami gradienty. Pami\u0119\u0107 RAM karty\n", - "graficznej jest rzecz jasna ograniczona, s\u0142ownik wi\u0119c nie mo\u017ce by\u0107\n", - "dowolnie du\u017cy. Dla danego modelu karty graficznej do\u015b\u0107 \u0142atwo ustali\u0107\n", - "maksymalny rozmiar s\u0142ownika \u2014 jest \u201etwarde\u201d ograniczenie, kt\u00f3re musimy\n", - "spe\u0142ni\u0107.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Czy rzeczywi\u015bcie s\u0142ownik mo\u017ce by\u0107 taki du\u017cy?\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Ile jest r\u00f3\u017cnych form fleksyjnych w j\u0119zyku polskim? Zobaczmy w s\u0142owniku PoliMorf\u2026\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "a\n", - "aa\n", - "AA\n", - "Aachen\n", - "Aalborg\n", - "Aalborgiem\n", - "Aalborgowi\n", - "Aalborgu\n", - "AAP\n", - "Aar\n", - "Aarem\n", - "Aarowi\n", - "Aaru\n", - "Aarze\n", - "Aara\n", - "Aar\u0105\n", - "Aar\u0119\n", - "Aaro\n", - "Aary\n", - "Aarze\n", - "uniq: b\u0142\u0105d zapisu: Przerwany potok\n" - ] - } - ], - "source": [ - "! wget -q 'http://zil.ipipan.waw.pl/PoliMorf?action=AttachFile&do=get&target=PoliMorf-0.6.7.tab.gz' -O - | zcat | cut -f 1 | uniq | head -n 20" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "3844535\n" - ] - } - ], - "source": [ - "! wget -q 'http://zil.ipipan.waw.pl/PoliMorf?action=AttachFile&do=get&target=PoliMorf-0.6.7.tab.gz' -O - | zcat | cut -f 1 | sort -u | wc -l" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Pytanie** W kt\u00f3rym j\u0119zyku europejskim wyraz\u00f3w b\u0119dzie jeszcze wi\u0119cej ni\u017c j\u0119zyku polskim?\n", - "\n", - "Tak naprawd\u0119 form jest jeszcze wi\u0119cej, oczywi\u015bcie PoliMorf nie wyczerpuje zbioru\u2026\n", - "\n", - "**Pytanie** Podaj przyk\u0142ady \u201eoczywistych\u201d wyraz\u00f3w, kt\u00f3rych nie ma w PoliMorfie. Jak w spos\u00f3b systematyczny szuka\u0107 takich wyraz\u00f3w?\n", - "\n", - "Z drugiej strony, w PoliMorfie jest du\u017co dziwnych, \u201esztucznych\u201d wyraz\u00f3w.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "niebia\u0142o\u015bcienn\u0105\n", - "nieponadosobowo\u015bci\n", - "niekneraj\u0105cy\n", - "inspektorat\u00f3w\n", - "Korytkowskich\n", - "elektrostatyczno\u015bci\n", - "Okola\n", - "bezs\u0142owny\n", - "indygowcu\n", - "gadany\n", - "nie\u0142adowarkowo\u015bciach\n", - "niepaw\u0119\u017cnicowate\n", - "Thom\n", - "poradlmy\n", - "olej\u0105cy\n", - "Ziemianin\u00f3w\n", - "stenotropizmami\n", - "wigiliowo\u015bci\n", - "pognanej\n", - "niekinezyterapeutycznym\n" - ] - } - ], - "source": [ - "! wget -q 'http://zil.ipipan.waw.pl/PoliMorf?action=AttachFile&do=get&target=PoliMorf-0.6.7.tab.gz' -O - | zcat | cut -f 1 | shuf -n 20" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Inaczej, zobaczmy, ile r\u00f3\u017cnych wyraz\u00f3w jest w jakim\u015b rzeczywistym zbiorze tekst\u00f3w, rozpatrzmy\n", - "teksty zebrane na potrzeby identyfikacji p\u0142ci autora tekstu:\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Out[7]:" - ] - } - ], - "source": [ - "! git clone --single-branch --depth 1 git://gonito.net/petite-difference-challenge2" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort -u > vocab.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u02c6\n", - "\u02c7\n", - "\uff9f\n", - "a\n", - "A\n", - "\u00e1\n", - "\u00c1\n", - "\u00e0\n", - "\u00c0\n", - "\u0103\n", - "\u0102\n", - "\u00e2\n", - "\u00c2\n", - "\u00e5\n", - "\u00c5\n", - "\u00e4\n", - "\u00c4\n", - "\u00c3\n", - "\u0101\n", - "aa\n", - "aA\n", - "Aa\n", - "AA\n", - "a\u0102\n", - "A\u0102\n", - "a\u00e2\n", - "a\u00c2\n", - "A\u00e2\n", - "a\u00c5\n", - "a\u00c4\n", - "\u00c2\u00aa\n", - "aaa\n", - "aAa\n", - "Aaa\n", - "AaA\n", - "AAa\n", - "AAA\n", - "aaaa\n", - "aAaa\n", - "Aaaa\n", - "AaAa\n", - "AAaa\n", - "AAAa\n", - "AAAA\n", - "aaaaa\n", - "Aaaaa\n", - "AaaaA\n", - "AAaaa\n", - "AAAAA\n", - "aaaaaa\n" - ] - } - ], - "source": [ - "! head -n 50 vocab.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "2974556 vocab.txt\n" - ] - } - ], - "source": [ - "! wc -l vocab.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Co gorsza, nawet jak we\u017amiemy ca\u0142y taki s\u0142ownik bez ogranicze\u0144 i tak\n", - "nie pokryje on sporej cz\u0119\u015bci tekst\u00f3w przetwarzanych w czasie inferencji.\n", - "Zobaczmy, ilu wyraz\u00f3w ze zbioru deweloperskiego nie b\u0119dzie w s\u0142owniku.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "81380\n" - ] - } - ], - "source": [ - "! cat petite-difference-challenge2/dev-0/in.tsv | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort -u | comm vocab.txt - -13 | wc -l" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Takie wyrazy nazywamy wyrazami **OOV** (*out-of-vocabulary*).\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Obci\u0119cie s\u0142ownika\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Najprostszy spos\u00f3b ograniczenia s\u0142ownika to po prostu obci\u0119cie do $N$ najcz\u0119stszych s\u0142\u00f3w.\n", - "\n", - "Spr\u00f3bujmy zastosowa\u0107 do korpusu \u201ep\u0142ci\u201d:\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sort: b\u0142\u0105d zapisu: 'standardowe wyj\u015bcie': Przerwany potok\n", - "sort: b\u0142\u0105d zapisu\n" - ] - } - ], - "source": [ - "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort | uniq -c | sort -k 1rn | head -n 50000 | sort -k 2 > vocab50000.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Daje to lepszy efekt ni\u017c mo\u017cna si\u0119 spodziewa\u0107. Odrzucamy w ten spos\u00f3b\n", - "tylko bardzo rzadkie s\u0142owa (albo takie, kt\u00f3re wyst\u0105pi\u0142y tylko raz w\n", - "korpusie \u2014 tzw. *hapax legomena*), cho\u0107 tych s\u0142\u00f3w jest bardzo du\u017co.\n", - "\n", - "**Zagadka**: 50000 najcz\u0119stszych s\u0142\u00f3w (1,9% **typ\u00f3w**) pokrywa jaki odsetek **wyst\u0105pie\u0144**?\n", - "\n", - "Rozk\u0142ad normalny w j\u0119zyku nie jest\u2026 normalny \u2014 nie spotkamy si\u0119 z nim\n", - "badaj\u0105c j\u0119zyki. W tekstach dominuj\u0105 \u201eskrzywione\u201d rozk\u0142ady z d\u0142ugimi,\n", - "\u201echudymi\u201d ogonami.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort | uniq -c | sort -k 1rn | cut -f 1 > freqs.txt" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'word-distribution.png'" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "import re\n", - "from math import log\n", - "\n", - "freqs = []\n", - "\n", - "with open('freqs.txt', 'r') as fh:\n", - " for line in fh:\n", - " m = re.match(r'\\s*(\\d+)', line)\n", - " if m:\n", - " freqs.append(log(float(m.group(1))))\n", - "\n", - "plt.plot(range(len(freqs)), freqs)\n", - "fname = 'word-distribution.png'\n", - "plt.savefig(fname)\n", - "fname" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[[file:# Out[25]:\n", - "\n", - " 'word-distribution.png'\n", - "\n", - "![img](./obipy-resources/c0TrCn.png)]]\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Lematyzacja\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Lematyzacja wydaje si\u0119 dobrym pomys\u0142em, zw\u0142aszcza dla j\u0119zyk\u00f3w dla bogatej fleksji:\n", - "\n", - "- znacznie redukujemy s\u0142ownik,\n", - "- formy fleksyjne tego samego wyrazu s\u0105 traktowane tak samo (co wydaje si\u0119 s\u0142uszne).\n", - "\n", - "W praktyce wsp\u00f3\u0142cze\u015bnie **nie** stosuje si\u0119 lematyzacji (w po\u0142\u0105czeniu z\n", - "metodami opartymi na sieciach neuronowych):\n", - "\n", - "- lematyzacja wymaga wiedzy j\u0119zykowej (regu\u0142 lub s\u0142ownika),\n", - " wytworzenie takiej wiedzy mo\u017ce by\u0107 kosztowne, obecnie preferowane\n", - " s\u0105 metody niezale\u017cne od j\u0119zyka;\n", - "- tracimy pewn\u0105 informacj\u0119 niesion\u0105 przez form\u0119 fleksyjn\u0105 (co w szczeg\u00f3lnych\n", - " przypadkach mo\u017ce by\u0107 niefortunne, np. *aspiracja* i *aspiracje*);\n", - "- lematyzacja nie jest trywialnym problemem ze wzgl\u0119du na niejednoznaczno\u015bci\n", - " (*Lekarzu, lecz si\u0119 sam*);\n", - "- niekt\u00f3re niejednoznaczno\u015bci s\u0105 seryjne, wyb\u00f3r lematu mo\u017ce by\u0107 arbitralny,\n", - " np. czy *posiadanie*, *gotowanie*, *skakanie* to rzeczowniki czy czasowniki?\n", - " a *urz\u0105dzenie*, *mieszkanie*?\n", - "- zazwyczaj sieci neuronowe (czy nawet prostsze modele typu Word2vec)\n", - " s\u0105 w stanie nauczy\u0107 si\u0119 rekonstruowania zale\u017cno\u015bci mi\u0119dzy formami fleksyjnymi\n", - " (i wi\u0119cej: b\u0142\u0119dnych form, b\u0142\u0119d\u00f3w ortograficznych, form archaicznych itd.)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Zej\u015bcie na poziom znak\u00f3w\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Skoro s\u0142ownik wyraz\u00f3w jest zbyt du\u017cy, to mo\u017ce zej\u015b\u0107 na poziom znak\u00f3w?\n", - "\n", - "- pojedynczy znak alfabetu wprawdzie nic nie znaczy (co znaczy *h*?)\n", - "\n", - "- \u2026 ale rozmiar wej\u015bcia przy kodowaniu gor\u0105c\u0105 jedynk\u0105\n", - " dramatycznie si\u0119 zmniejsza\n", - "\n", - "- mo\u017ce dzia\u0142a\u0107, je\u015bli doda\u0107 wielowarstwow\u0105 sie\u0107\n", - " neuronow\u0105\n", - "\n", - "- \u2026 ale mo\u017ce by\u0107 bardzo kosztowne obliczeniowo\n", - "\n", - "A mo\u017ce co\u015b po\u015bredniego mi\u0119dzy znakami a wyrazami?\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### BPE\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Ani znaki, ani wyrazy \u2014 co\u015b pomi\u0119dzy: jednostki podwyrazowe (*subword\n", - "units*). Mogliby\u015bmy np. dzieli\u0107 wyraz *superkomputera* na dwie\n", - "jednostki *super/+/komputera*, a mo\u017ce nawet trzy: *super/+/komputer/+/a*?\n", - "\n", - "Najpopularniejszy algorytm podzia\u0142u na jednostki podwyrazowe to BPE\n", - "(*byte-pair encoding*), zainspirowany algorytmami kompresji danych.\n", - "Lista jednostek jest automatycznie indukowana na podstawie tekstu (nie\n", - "potrzeba \u017cadnej wiedzy o j\u0119zyku!). Ich liczba musi by\u0107 natomiast z g\u00f3ry\n", - "okre\u015blona.\n", - "\n", - "W kroku pocz\u0105tkowym zaznaczamy ko\u0144ce wyraz\u00f3w (token\u00f3w), robimy to po\n", - "to, \u017ceby jednostki podwyrazowe nie przekracza\u0142y granic wyraz\u00f3w.\n", - "\n", - "Nast\u0119pnie wykonujemy tyle krok\u00f3w iteracji, ile wynosi rozmiar zadanego\n", - "s\u0142ownika. W ka\u017cdym kroku szukamy najcz\u0119stszego bigramu, od tego\n", - "momentu traktujemy go jako ca\u0142ostk\u0119 (wk\u0142adamy go do \u201epude\u0142ka\u201d).\n", - "\n", - "![img](./bpe.png)\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Implementacja w Pythonie\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['e$', 'to', 'to$', 'be$', 't$', 'th', 'or', 'or$', 'no', 'not$']" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from collections import Counter\n", - "\n", - "def replace_bigram(l, b, r):\n", - " i = 0\n", - " while i < len(l) - 1:\n", - " if (l[i], l[i+1]) == b:\n", - " l[i:i+2] = [r]\n", - " i += 1\n", - " return l\n", - "\n", - "def learn_bpe_vocab(d, max_vocab_size):\n", - " d = list(d.replace(' ', '$') + '$')\n", - "\n", - " vocab = []\n", - "\n", - " for ix in range(0, max_vocab_size):\n", - " bigrams = [(d[i], d[i+1]) for i in range(0, len(d) - 1) if d[i][-1] != '$']\n", - " selected_bigram = Counter(bigrams).most_common(1)[0][0]\n", - "\n", - " new_subword = selected_bigram[0] + selected_bigram[1]\n", - " d = replace_bigram(d, selected_bigram, new_subword)\n", - "\n", - " vocab.append(new_subword)\n", - "\n", - " return vocab\n", - "\n", - "vocab1 = learn_bpe_vocab('to be or not to be that is the question', 10)\n", - "vocab1" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "S\u0142ownik jednostek podwyrazowych mo\u017cemy zastosowa\u0107 do dowolnego tekstu, np. do tekstu,\n", - "na kt\u00f3rym s\u0142ownik by\u0142 wyuczony:\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'to$ be$ or$ not$ to$ be$ th a t$ i s $ th e$ q u e s t i o n $'" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "def apply_bpe_vocab(vocab, d):\n", - " d = list(d.replace(' ', '$') + '$')\n", - " vocab_set = set(vocab)\n", - "\n", - " modified = True\n", - " while modified:\n", - " ix = 0\n", - " modified = False\n", - " while ix < len(d) - 1:\n", - " bigram = d[ix] + d[ix+1]\n", - " if bigram in vocab_set:\n", - " d[ix:ix+2] = [bigram]\n", - " modified = True\n", - " else:\n", - " ix += 1\n", - "\n", - " return d\n", - "\n", - "' '.join(apply_bpe_vocab(vocab1, 'to be or not to be that is the question'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Zauwa\u017cmy, \u017ce opr\u00f3cz jednostek podwyrazowych zosta\u0142y izolowane litery,\n", - "zazwyczaj dodajemy je do s\u0142ownika. (I zazwyczaj, s\u0142ownik jest troch\u0119\n", - "wi\u0119kszy ni\u017c warto\u015b\u0107 podana jako parametr przy uczeniu BPE \u2014 jest\n", - "wi\u0119kszy o znaki i specjalne tokeny typu `UNK`, `BOS`, `EOS`, `PAD`.)\n", - "\n", - "**Pytanie**: Jaki problem mo\u017ce pojawi\u0107 przy zastosowaniu BPE dla tekstu,\n", - "gdzie pojawiaj\u0105 si\u0119 chi\u0144skie znaki? Jak mo\u017cna sobie z nim poradzi\u0107?\n", - "\n", - "S\u0142ownik jednostek podwyrazowych mo\u017cna stosowa\u0107 dla dowolnego tekstu:\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "'to m $ w i l l $ be$ th e$ b e s t$'" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "' '.join(apply_bpe_vocab(vocab1, 'tom will be the best'))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Jak mo\u017cna zauwa\u017cy\u0107 algorytm BPE daje dwa rodzaje jednostek podwyrazowych:\n", - "\n", - "- jednostki, kt\u00f3re mog\u0105 doklejane na pocz\u0105tku wyrazu;\n", - "- jednostki, kt\u00f3re stanowi\u0105 koniec wyrazu, w szczeg\u00f3lno\u015bci s\u0105 ca\u0142ym wyrazem.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Gotowa implementacja\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Po raz pierwszy BPE u\u017cyto do neuronowego t\u0142umaczenia maszynowego.\n", - "U\u017cyjmy modu\u0142u autorstwa Rica Sennricha ([https://github.com/rsennrich/subword-nmt](https://github.com/rsennrich/subword-nmt)).\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "! pip install subword-nmt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Wyindukujmy s\u0142ownik dla zbioru ucz\u0105cego zadania identyfikacji p\u0142ci\n", - "autora tekstu:\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | python -m subword_nmt.learn_bpe -s 50000 -v > bpe_vocab.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Procedura trwa kilka minut, trzeba uzbroi\u0107 si\u0119 w cierpliwo\u015b\u0107 (ale wypisywanie bigram\u00f3w przyspieszy!).\n", - "\n", - " pair 0: n i -> ni (frequency 17625075)\n", - " pair 1: i e -> ie (frequency 11471590)\n", - " pair 2: c z -> cz (frequency 9143490)\n", - " pair 3: ni e -> nie (frequency 7901783)\n", - " pair 4: p o -> po (frequency 7790826)\n", - " pair 5: r z -> rz (frequency 7542046)\n", - " pair 6: s t -> st (frequency 7269069)\n", - " pair 7: e m -> em (frequency 7207280)\n", - " pair 8: d z -> dz (frequency 6860931)\n", - " pair 9: s z -> sz (frequency 6609907)\n", - " pair 10: r a -> ra (frequency 6601618)\n", - " pair 11: o w -> ow (frequency 6395963)\n", - " pair 12: i e -> ie (frequency 5906869)\n", - " pair 13: n a -> na (frequency 5300380)\n", - " pair 14: r o -> ro (frequency 5181363)\n", - " pair 15: n a -> na (frequency 5125807)\n", - " pair 16: a \u0142 -> a\u0142 (frequency 4786696)\n", - " pair 17: j e -> je (frequency 4599579)\n", - " pair 18: s i -> si (frequency 4300984)\n", - " pair 19: a l -> al (frequency 4276823)\n", - " pair 20: t e -> te (frequency 4033344)\n", - " pair 21: w i -> wi (frequency 3939063)\n", - " pair 22: c h -> ch (frequency 3919410)\n", - " pair 23: c h -> ch (frequency 3661410)\n", - " pair 24: k o -> ko (frequency 3629840)\n", - " pair 25: z a -> za (frequency 3625424)\n", - " pair 26: t a -> ta (frequency 3570094)\n", - " pair 27: p rz -> prz (frequency 3494551)\n", - " pair 28: g o -> go (frequency 3279997)\n", - " pair 29: a r -> ar (frequency 3081492)\n", - " pair 30: si \u0119 -> si\u0119 (frequency 2973681)\n", - " ...\n", - " pair 49970: brz mieniu -> brzmieniu (frequency 483)\n", - " pair 49971: bie\u017c\u0105 cych -> bie\u017c\u0105cych (frequency 483)\n", - " pair 49972: biegu nk\u0119 -> biegunk\u0119 (frequency 483)\n", - " pair 49973: ban kowo\u015bci -> bankowo\u015bci (frequency 483)\n", - " pair 49974: ba ku -> baku (frequency 483)\n", - " pair 49975: ba cznie -> bacznie (frequency 483)\n", - " pair 49976: Przypad kowo -> Przypadkowo (frequency 483)\n", - " pair 49977: MA \u0141 -> MA\u0141 (frequency 483)\n", - " pair 49978: Lep pera -> Leppera (frequency 483)\n", - " pair 49979: Ko za -> Koza (frequency 483)\n", - " pair 49980: Jak by\u015b -> Jakby\u015b (frequency 483)\n", - " pair 49981: Geni alne -> Genialne (frequency 483)\n", - " pair 49982: \u017be nada -> \u017benada (frequency 482)\n", - " pair 49983: \u0144 czykiem -> \u0144czykiem (frequency 482)\n", - " pair 49984: zwie \u0144 -> zwie\u0144 (frequency 482)\n", - " pair 49985: zost a\u0142a\u015b -> zosta\u0142a\u015b (frequency 482)\n", - " pair 49986: zni szczona -> zniszczona (frequency 482)\n", - " pair 49987: ze stawi -> zestawi (frequency 482)\n", - " pair 49988: za s\u00f3b -> zas\u00f3b (frequency 482)\n", - " pair 49989: w\u0119d r\u00f3wk\u0119 -> w\u0119dr\u00f3wk\u0119 (frequency 482)\n", - " pair 49990: wysko czy\u0142a -> wyskoczy\u0142a (frequency 482)\n", - " pair 49991: wyle czenia -> wyleczenia (frequency 482)\n", - " pair 49992: wychowaw cze -> wychowawcze (frequency 482)\n", - " pair 49993: w t -> wt (frequency 482)\n", - " pair 49994: un da -> unda (frequency 482)\n", - " pair 49995: udzie la\u0142em -> udziela\u0142em (frequency 482)\n", - " pair 49996: t\u0119 czy -> t\u0119czy (frequency 482)\n", - " pair 49997: tro sce -> trosce (frequency 482)\n", - " pair 49998: s\u0142usz no\u015bci -> s\u0142uszno\u015bci (frequency 482)\n", - " pair 49999: su me -> sume (frequency 482\n", - "\n", - "Zastosujmy teraz wyindukowany s\u0142ownik BPE dla jakiego\u015b rzeczywistego tekstu.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cier@@ pia\u0142em na straszne la@@ gi kilkana\u015bcie sekund lub d\u0142u\u017cej czarnego ekranu przy pr\u00f3bie prze\u0142\u0105@@ czenia si\u0119 uruchomienia prawie ka\u017cdej aplikacji Dodatkowo telefon mi si\u0119 wy\u0142\u0105@@ cza\u0142 czasem bez powodu sam z siebie albo rese@@ towa\u0142 Ostatnio nawet przegl\u0105darka zacz\u0119\u0142a si\u0119 cz\u0119sto zawie@@ sza\u0107 i Android proponowa\u0142 wymu@@ szone zamkni\u0119cie Do tego te problemy z po\u0142\u0105czeniem do komputera przez USB " - ] - } - ], - "source": [ - "! echo 'Cierpia\u0142em na straszne lagi \u2013 kilkana\u015bcie sekund lub d\u0142u\u017cej czarnego ekranu przy pr\u00f3bie prze\u0142\u0105czenia si\u0119 / uruchomienia prawie ka\u017cdej aplikacji. Dodatkowo telefon mi si\u0119 wy\u0142\u0105cza\u0142 czasem bez powodu \u2013 sam z siebie, albo resetowa\u0142. Ostatnio nawet przegl\u0105darka zacz\u0119\u0142a si\u0119 cz\u0119sto zawiesza\u0107 i Android proponowa\u0142 wymuszone zamkni\u0119cie. Do tego te problemy z po\u0142\u0105czeniem do komputera przez USB.' | perl -C -ne 'print \"$& \" while/\\p{L}+/g;' | python -m subword_nmt.apply_bpe -c bpe_vocab.txt" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Ta konkretna implementacja zaznacza za pomoc\u0105 sekwencji ~@@ ~ koniec jednostki podwyrazowej.\n", - "\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.9.2" - }, - "org": null, - "author": "Filip Grali\u0144ski", - "email": "filipg@amu.edu.pl", - "lang": "pl", - "subtitle": "12.Kodowanie BPE[wyk\u0142ad]", - "title": "Ekstrakcja informacji", - "year": "2021" + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Ekstrakcja informacji

\n", + "

12. Kodowanie BPE [wykład]

\n", + "

Filip Graliński (2021)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Podział na jednostki podwyrazowe\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Słownik nie może być za duży…\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jeśli używamy wyuczalnych zanurzeń słów (embeddingów), wówczas musimy\n", + "je dopisać do listy parametrów całego modelu — jest to $|V|n$ wag,\n", + "gdzie $n$ to rozmiar embeddingów; w wypadku uczenia dodatkowo musimy\n", + "jeszcze pamiętać związane z embeddingami gradienty. Pamięć RAM karty\n", + "graficznej jest rzecz jasna ograniczona, słownik więc nie może być\n", + "dowolnie duży. Dla danego modelu karty graficznej dość łatwo ustalić\n", + "maksymalny rozmiar słownika — jest „twarde” ograniczenie, które musimy\n", + "spełnić.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Czy rzeczywiście słownik może być taki duży?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ile jest różnych form fleksyjnych w języku polskim? Zobaczmy w słowniku PoliMorf…\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "aa\n", + "AA\n", + "Aachen\n", + "Aalborg\n", + "Aalborgiem\n", + "Aalborgowi\n", + "Aalborgu\n", + "AAP\n", + "Aar\n", + "Aarem\n", + "Aarowi\n", + "Aaru\n", + "Aarze\n", + "Aara\n", + "Aarą\n", + "Aarę\n", + "Aaro\n", + "Aary\n", + "Aarze\n", + "uniq: błąd zapisu: Przerwany potok\n" + ] + } + ], + "source": [ + "! wget -q 'http://zil.ipipan.waw.pl/PoliMorf?action=AttachFile&do=get&target=PoliMorf-0.6.7.tab.gz' -O - | zcat | cut -f 1 | uniq | head -n 20" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3844535\n" + ] + } + ], + "source": [ + "! wget -q 'http://zil.ipipan.waw.pl/PoliMorf?action=AttachFile&do=get&target=PoliMorf-0.6.7.tab.gz' -O - | zcat | cut -f 1 | sort -u | wc -l" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Pytanie** W którym języku europejskim wyrazów będzie jeszcze więcej niż języku polskim?\n", + "\n", + "Tak naprawdę form jest jeszcze więcej, oczywiście PoliMorf nie wyczerpuje zbioru…\n", + "\n", + "**Pytanie** Podaj przykłady „oczywistych” wyrazów, których nie ma w PoliMorfie. Jak w sposób systematyczny szukać takich wyrazów?\n", + "\n", + "Z drugiej strony, w PoliMorfie jest dużo dziwnych, „sztucznych” wyrazów.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "niebiałościenną\n", + "nieponadosobowości\n", + "nieknerający\n", + "inspektoratów\n", + "Korytkowskich\n", + "elektrostatyczności\n", + "Okola\n", + "bezsłowny\n", + "indygowcu\n", + "gadany\n", + "nieładowarkowościach\n", + "niepawężnicowate\n", + "Thom\n", + "poradlmy\n", + "olejący\n", + "Ziemianinów\n", + "stenotropizmami\n", + "wigiliowości\n", + "pognanej\n", + "niekinezyterapeutycznym\n" + ] + } + ], + "source": [ + "! wget -q 'http://zil.ipipan.waw.pl/PoliMorf?action=AttachFile&do=get&target=PoliMorf-0.6.7.tab.gz' -O - | zcat | cut -f 1 | shuf -n 20" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Inaczej, zobaczmy, ile różnych wyrazów jest w jakimś rzeczywistym zbiorze tekstów, rozpatrzmy\n", + "teksty zebrane na potrzeby identyfikacji płci autora tekstu:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Out[7]:" + ] + } + ], + "source": [ + "! git clone --single-branch --depth 1 git://gonito.net/petite-difference-challenge2" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort -u > vocab.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ˆ\n", + "ˇ\n", + "゚\n", + "a\n", + "A\n", + "á\n", + "Á\n", + "à\n", + "À\n", + "ă\n", + "Ă\n", + "â\n", + "Â\n", + "å\n", + "Å\n", + "ä\n", + "Ä\n", + "Ã\n", + "ā\n", + "aa\n", + "aA\n", + "Aa\n", + "AA\n", + "aĂ\n", + "AĂ\n", + "aâ\n", + "aÂ\n", + "Aâ\n", + "aÅ\n", + "aÄ\n", + "ª\n", + "aaa\n", + "aAa\n", + "Aaa\n", + "AaA\n", + "AAa\n", + "AAA\n", + "aaaa\n", + "aAaa\n", + "Aaaa\n", + "AaAa\n", + "AAaa\n", + "AAAa\n", + "AAAA\n", + "aaaaa\n", + "Aaaaa\n", + "AaaaA\n", + "AAaaa\n", + "AAAAA\n", + "aaaaaa\n" + ] + } + ], + "source": [ + "! head -n 50 vocab.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2974556 vocab.txt\n" + ] + } + ], + "source": [ + "! wc -l vocab.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Co gorsza, nawet jak weźmiemy cały taki słownik bez ograniczeń i tak\n", + "nie pokryje on sporej części tekstów przetwarzanych w czasie inferencji.\n", + "Zobaczmy, ilu wyrazów ze zbioru deweloperskiego nie będzie w słowniku.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "81380\n" + ] + } + ], + "source": [ + "! cat petite-difference-challenge2/dev-0/in.tsv | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort -u | comm vocab.txt - -13 | wc -l" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Takie wyrazy nazywamy wyrazami **OOV** (*out-of-vocabulary*).\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Obcięcie słownika\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Najprostszy sposób ograniczenia słownika to po prostu obcięcie do $N$ najczęstszych słów.\n", + "\n", + "Spróbujmy zastosować do korpusu „płci”:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sort: błąd zapisu: 'standardowe wyjście': Przerwany potok\n", + "sort: błąd zapisu\n" + ] + } + ], + "source": [ + "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort | uniq -c | sort -k 1rn | head -n 50000 | sort -k 2 > vocab50000.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Daje to lepszy efekt niż można się spodziewać. Odrzucamy w ten sposób\n", + "tylko bardzo rzadkie słowa (albo takie, które wystąpiły tylko raz w\n", + "korpusie — tzw. *hapax legomena*), choć tych słów jest bardzo dużo.\n", + "\n", + "**Zagadka**: 50000 najczęstszych słów (1,9% **typów**) pokrywa jaki odsetek **wystąpień**?\n", + "\n", + "Rozkład normalny w języku nie jest… normalny — nie spotkamy się z nim\n", + "badając języki. W tekstach dominują „skrzywione” rozkłady z długimi,\n", + "„chudymi” ogonami.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | sort | uniq -c | sort -k 1rn | cut -f 1 > freqs.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'word-distribution.png'" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" }, - "nbformat": 4, - "nbformat_minor": 4 -} \ No newline at end of file + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import re\n", + "from math import log\n", + "\n", + "freqs = []\n", + "\n", + "with open('freqs.txt', 'r') as fh:\n", + " for line in fh:\n", + " m = re.match(r'\\s*(\\d+)', line)\n", + " if m:\n", + " freqs.append(log(float(m.group(1))))\n", + "\n", + "plt.plot(range(len(freqs)), freqs)\n", + "fname = 'word-distribution.png'\n", + "plt.savefig(fname)\n", + "fname" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[[file:# Out[25]:\n", + "\n", + " 'word-distribution.png'\n", + "\n", + "![img](./obipy-resources/c0TrCn.png)]]\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Lematyzacja\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Lematyzacja wydaje się dobrym pomysłem, zwłaszcza dla języków dla bogatej fleksji:\n", + "\n", + "- znacznie redukujemy słownik,\n", + "- formy fleksyjne tego samego wyrazu są traktowane tak samo (co wydaje się słuszne).\n", + "\n", + "W praktyce współcześnie **nie** stosuje się lematyzacji (w połączeniu z\n", + "metodami opartymi na sieciach neuronowych):\n", + "\n", + "- lematyzacja wymaga wiedzy językowej (reguł lub słownika),\n", + " wytworzenie takiej wiedzy może być kosztowne, obecnie preferowane\n", + " są metody niezależne od języka;\n", + "- tracimy pewną informację niesioną przez formę fleksyjną (co w szczególnych\n", + " przypadkach może być niefortunne, np. *aspiracja* i *aspiracje*);\n", + "- lematyzacja nie jest trywialnym problemem ze względu na niejednoznaczności\n", + " (*Lekarzu, lecz się sam*);\n", + "- niektóre niejednoznaczności są seryjne, wybór lematu może być arbitralny,\n", + " np. czy *posiadanie*, *gotowanie*, *skakanie* to rzeczowniki czy czasowniki?\n", + " a *urządzenie*, *mieszkanie*?\n", + "- zazwyczaj sieci neuronowe (czy nawet prostsze modele typu Word2vec)\n", + " są w stanie nauczyć się rekonstruowania zależności między formami fleksyjnymi\n", + " (i więcej: błędnych form, błędów ortograficznych, form archaicznych itd.)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Zejście na poziom znaków\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Skoro słownik wyrazów jest zbyt duży, to może zejść na poziom znaków?\n", + "\n", + "- pojedynczy znak alfabetu wprawdzie nic nie znaczy (co znaczy *h*?)\n", + "\n", + "- … ale rozmiar wejścia przy kodowaniu gorącą jedynką\n", + " dramatycznie się zmniejsza\n", + "\n", + "- może działać, jeśli dodać wielowarstwową sieć\n", + " neuronową\n", + "\n", + "- … ale może być bardzo kosztowne obliczeniowo\n", + "\n", + "A może coś pośredniego między znakami a wyrazami?\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### BPE\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ani znaki, ani wyrazy — coś pomiędzy: jednostki podwyrazowe (*subword\n", + "units*). Moglibyśmy np. dzielić wyraz *superkomputera* na dwie\n", + "jednostki *super/+/komputera*, a może nawet trzy: *super/+/komputer/+/a*?\n", + "\n", + "Najpopularniejszy algorytm podziału na jednostki podwyrazowe to BPE\n", + "(*byte-pair encoding*), zainspirowany algorytmami kompresji danych.\n", + "Lista jednostek jest automatycznie indukowana na podstawie tekstu (nie\n", + "potrzeba żadnej wiedzy o języku!). Ich liczba musi być natomiast z góry\n", + "określona.\n", + "\n", + "W kroku początkowym zaznaczamy końce wyrazów (tokenów), robimy to po\n", + "to, żeby jednostki podwyrazowe nie przekraczały granic wyrazów.\n", + "\n", + "Następnie wykonujemy tyle kroków iteracji, ile wynosi rozmiar zadanego\n", + "słownika. W każdym kroku szukamy najczęstszego bigramu, od tego\n", + "momentu traktujemy go jako całostkę (wkładamy go do „pudełka”).\n", + "\n", + "![img](./bpe.png)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Implementacja w Pythonie\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['e$', 'to', 'to$', 'be$', 't$', 'th', 'or', 'or$', 'no', 'not$']" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from collections import Counter\n", + "\n", + "def replace_bigram(l, b, r):\n", + " i = 0\n", + " while i < len(l) - 1:\n", + " if (l[i], l[i+1]) == b:\n", + " l[i:i+2] = [r]\n", + " i += 1\n", + " return l\n", + "\n", + "def learn_bpe_vocab(d, max_vocab_size):\n", + " d = list(d.replace(' ', '$') + '$')\n", + "\n", + " vocab = []\n", + "\n", + " for ix in range(0, max_vocab_size):\n", + " bigrams = [(d[i], d[i+1]) for i in range(0, len(d) - 1) if d[i][-1] != '$']\n", + " selected_bigram = Counter(bigrams).most_common(1)[0][0]\n", + "\n", + " new_subword = selected_bigram[0] + selected_bigram[1]\n", + " d = replace_bigram(d, selected_bigram, new_subword)\n", + "\n", + " vocab.append(new_subword)\n", + "\n", + " return vocab\n", + "\n", + "vocab1 = learn_bpe_vocab('to be or not to be that is the question', 10)\n", + "vocab1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Słownik jednostek podwyrazowych możemy zastosować do dowolnego tekstu, np. do tekstu,\n", + "na którym słownik był wyuczony:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'to$ be$ or$ not$ to$ be$ th a t$ i s $ th e$ q u e s t i o n $'" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def apply_bpe_vocab(vocab, d):\n", + " d = list(d.replace(' ', '$') + '$')\n", + " vocab_set = set(vocab)\n", + "\n", + " modified = True\n", + " while modified:\n", + " ix = 0\n", + " modified = False\n", + " while ix < len(d) - 1:\n", + " bigram = d[ix] + d[ix+1]\n", + " if bigram in vocab_set:\n", + " d[ix:ix+2] = [bigram]\n", + " modified = True\n", + " else:\n", + " ix += 1\n", + "\n", + " return d\n", + "\n", + "' '.join(apply_bpe_vocab(vocab1, 'to be or not to be that is the question'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Zauważmy, że oprócz jednostek podwyrazowych zostały izolowane litery,\n", + "zazwyczaj dodajemy je do słownika. (I zazwyczaj, słownik jest trochę\n", + "większy niż wartość podana jako parametr przy uczeniu BPE — jest\n", + "większy o znaki i specjalne tokeny typu `UNK`, `BOS`, `EOS`, `PAD`.)\n", + "\n", + "**Pytanie**: Jaki problem może pojawić przy zastosowaniu BPE dla tekstu,\n", + "gdzie pojawiają się chińskie znaki? Jak można sobie z nim poradzić?\n", + "\n", + "Słownik jednostek podwyrazowych można stosować dla dowolnego tekstu:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'to m $ w i l l $ be$ th e$ b e s t$'" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "' '.join(apply_bpe_vocab(vocab1, 'tom will be the best'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Jak można zauważyć algorytm BPE daje dwa rodzaje jednostek podwyrazowych:\n", + "\n", + "- jednostki, które mogą doklejane na początku wyrazu;\n", + "- jednostki, które stanowią koniec wyrazu, w szczególności są całym wyrazem.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Gotowa implementacja\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Po raz pierwszy BPE użyto do neuronowego tłumaczenia maszynowego.\n", + "Użyjmy modułu autorstwa Rica Sennricha ([https://github.com/rsennrich/subword-nmt](https://github.com/rsennrich/subword-nmt)).\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "! pip install subword-nmt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wyindukujmy słownik dla zbioru uczącego zadania identyfikacji płci\n", + "autora tekstu:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "! xzcat petite-difference-challenge2/train/in.tsv.xz | perl -C -ne 'print \"$&\\n\" while/\\p{L}+/g;' | python -m subword_nmt.learn_bpe -s 50000 -v > bpe_vocab.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Procedura trwa kilka minut, trzeba uzbroić się w cierpliwość (ale wypisywanie bigramów przyspieszy!).\n", + "\n", + " pair 0: n i -> ni (frequency 17625075)\n", + " pair 1: i e -> ie (frequency 11471590)\n", + " pair 2: c z -> cz (frequency 9143490)\n", + " pair 3: ni e -> nie (frequency 7901783)\n", + " pair 4: p o -> po (frequency 7790826)\n", + " pair 5: r z -> rz (frequency 7542046)\n", + " pair 6: s t -> st (frequency 7269069)\n", + " pair 7: e m -> em (frequency 7207280)\n", + " pair 8: d z -> dz (frequency 6860931)\n", + " pair 9: s z -> sz (frequency 6609907)\n", + " pair 10: r a -> ra (frequency 6601618)\n", + " pair 11: o w -> ow (frequency 6395963)\n", + " pair 12: i e -> ie (frequency 5906869)\n", + " pair 13: n a -> na (frequency 5300380)\n", + " pair 14: r o -> ro (frequency 5181363)\n", + " pair 15: n a -> na (frequency 5125807)\n", + " pair 16: a ł -> ał (frequency 4786696)\n", + " pair 17: j e -> je (frequency 4599579)\n", + " pair 18: s i -> si (frequency 4300984)\n", + " pair 19: a l -> al (frequency 4276823)\n", + " pair 20: t e -> te (frequency 4033344)\n", + " pair 21: w i -> wi (frequency 3939063)\n", + " pair 22: c h -> ch (frequency 3919410)\n", + " pair 23: c h -> ch (frequency 3661410)\n", + " pair 24: k o -> ko (frequency 3629840)\n", + " pair 25: z a -> za (frequency 3625424)\n", + " pair 26: t a -> ta (frequency 3570094)\n", + " pair 27: p rz -> prz (frequency 3494551)\n", + " pair 28: g o -> go (frequency 3279997)\n", + " pair 29: a r -> ar (frequency 3081492)\n", + " pair 30: si ę -> się (frequency 2973681)\n", + " ...\n", + " pair 49970: brz mieniu -> brzmieniu (frequency 483)\n", + " pair 49971: bieżą cych -> bieżących (frequency 483)\n", + " pair 49972: biegu nkę -> biegunkę (frequency 483)\n", + " pair 49973: ban kowości -> bankowości (frequency 483)\n", + " pair 49974: ba ku -> baku (frequency 483)\n", + " pair 49975: ba cznie -> bacznie (frequency 483)\n", + " pair 49976: Przypad kowo -> Przypadkowo (frequency 483)\n", + " pair 49977: MA Ł -> MAŁ (frequency 483)\n", + " pair 49978: Lep pera -> Leppera (frequency 483)\n", + " pair 49979: Ko za -> Koza (frequency 483)\n", + " pair 49980: Jak byś -> Jakbyś (frequency 483)\n", + " pair 49981: Geni alne -> Genialne (frequency 483)\n", + " pair 49982: Że nada -> Żenada (frequency 482)\n", + " pair 49983: ń czykiem -> ńczykiem (frequency 482)\n", + " pair 49984: zwie ń -> zwień (frequency 482)\n", + " pair 49985: zost ałaś -> zostałaś (frequency 482)\n", + " pair 49986: zni szczona -> zniszczona (frequency 482)\n", + " pair 49987: ze stawi -> zestawi (frequency 482)\n", + " pair 49988: za sób -> zasób (frequency 482)\n", + " pair 49989: węd rówkę -> wędrówkę (frequency 482)\n", + " pair 49990: wysko czyła -> wyskoczyła (frequency 482)\n", + " pair 49991: wyle czenia -> wyleczenia (frequency 482)\n", + " pair 49992: wychowaw cze -> wychowawcze (frequency 482)\n", + " pair 49993: w t -> wt (frequency 482)\n", + " pair 49994: un da -> unda (frequency 482)\n", + " pair 49995: udzie lałem -> udzielałem (frequency 482)\n", + " pair 49996: tę czy -> tęczy (frequency 482)\n", + " pair 49997: tro sce -> trosce (frequency 482)\n", + " pair 49998: słusz ności -> słuszności (frequency 482)\n", + " pair 49999: su me -> sume (frequency 482\n", + "\n", + "Zastosujmy teraz wyindukowany słownik BPE dla jakiegoś rzeczywistego tekstu.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cier@@ piałem na straszne la@@ gi [...]" + ] + } + ], + "source": [ + "! echo 'Cierpiałem na straszne lagi [...]' | perl -C -ne 'print \"$& \" while/\\p{L}+/g;' | python -m subword_nmt.apply_bpe -c bpe_vocab.txt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ta konkretna implementacja zaznacza za pomocą sekwencji ~@@ ~ koniec jednostki podwyrazowej.\n", + "\n" + ] + } + ], + "metadata": { + "author": "Filip Graliński", + "email": "filipg@amu.edu.pl", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "lang": "pl", + "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.6" + }, + "org": null, + "subtitle": "12.Kodowanie BPE[wykład]", + "title": "Ekstrakcja informacji", + "year": "2021" + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/wyk/13_generative_approach.ipynb b/wyk/13_generative_approach.ipynb index 32dae7b..49f7cf6 100644 --- a/wyk/13_generative_approach.ipynb +++ b/wyk/13_generative_approach.ipynb @@ -1,135 +1,133 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", - "
\n", - "

Ekstrakcja informacji

\n", - "

13. Podej\u015bcie generatywne w ekstrakcji informacji [wyk\u0142ad]

\n", - "

Filip Grali\u0144ski (2021)

\n", - "
\n", - "\n", - "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Ekstrakcja informacji a podej\u015bcie generatywne\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Podej\u015bcie generatywne\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Do tej pory zadanie ekstrakcji informacji traktowali\u015bmy jako zadanie etykietowania sekwencji, tzn. uczyli\u015bmy system zaznacza\u0107 tokeny sk\u0142adaj\u0105ce si\u0119 na ekstrahowane informacje.\n", - "\n", - "![img](./ie-seqlab.png)\n", - "\n", - "Mo\u017cliwe jest inne pode\u015bcie, **generatywne**, w kt\u00f3rym podchodzimy do problemu ekstrakcji informacji jak do swego rodzaju **t\u0142umaczenia maszynowego** \u2014 \u201et\u0142umaczymy\u201d tekst (wraz z pytaniem lub etykiet\u0105) na informacj\u0119.\n", - "\n", - "![img](./ie-gener.png)\n", - "\n", - "To podej\u015bcie mo\u017ce si\u0119 wydawa\u0107 trudniejsze ni\u017c etykietowanie sekwencji, ale wystarczaj\u0105co zaawansowanej architekturze sieci, jest wykonalne.\n", - "\n", - "Zalety:\n", - "\n", - "- informacja nie musi by\u0107 dos\u0142ownie zapisana w tek\u015bcie, ekstraktor mo\u017ce nauczy\u0107 si\u0119 r\u00f3wnie\u017c normalizacji czy parafrazowania,\n", - "- nie wprowadzamy wielu krok\u00f3w przetwarzania (gdzie b\u0142\u0119dy mog\u0105 si\u0119\n", - " namna\u017ca\u0107), system dzia\u0142a na zasadzie *end-to-end*.\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Atencja\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Pierwsze systemu neuronowego t\u0142umaczenia maszynowego u\u017cywa\u0142y siecie LSTM. Dopiero jednak dodanie tzw. atencji (*attention*) umo\u017cliwi\u0142o du\u017cy przeskok jako\u015bciowy. Najpierw atencj\u0119 dodano do sieci rekurencyjnych, p\u00f3\u017aniej powsta\u0142y sieci oparte *wy\u0142\u0105cznie* na atencji \u2014 modele Transformer.\n", - "\n", - "Idea atencji polega na tym, \u017ce sie\u0107 mo\u017ce kierowa\u0107 selektywnie \u201esnop\u201d uwagi na wyrazy na wej\u015bciu lub do tej pory wygenerowane wyrazy.\n", - "\n", - "Mechanizm atencji korzysta z:\n", - "\n", - "- z poprzedniego stanu sieci $\\vec{s^{k-1}}$ (to jest \u201emiejsce\u201d, z kt\u00f3rego \u201ekierujemy\u201d atencj\u0119),\n", - "- z wektora reprezentuj\u0105cego s\u0142owo $\\vec{v}(t_i)$ (to jest \u201emiejsce\u201d, na kt\u00f3re kierujemy atencj\u0119), gdzie\n", - " $\\vec{v}(t_i)$ to reprezentacja wektorowa wyrazu $t_i$ (statyczny embedding lub reprezentacja wektorowa\n", - " z poprzedniej warstwy dla sieci wielowarstwowej),\n", - "\n", - "aby wytworzy\u0107 wektor kontekstu $\\vec{\\xi^k}$ (kt\u00f3ry z kolei b\u0119dzie w jaki\u015b spos\u00f3b wnosi\u0142 wk\u0142ad do wyliczenia nowej warto\u015bci stanu $\\vec{s^k}$ lub wyj\u015bcia $y^k$.\n", - "\n", - "Najpierw wyliczymy skalarne warto\u015bci atencji, tzn. liczby, kt\u00f3re b\u0119d\u0105 sygnalizowa\u0142y, jak bardzo wektor $\\vec{v}(t_i)$ \u201epasuje\u201d do $\\vec{s^{k-1}}$, w najprostszej wersji mo\u017cna po prostu skorzysta\u0107 z iloczynu skalarnego (o ile $n=m$),\n", - "\n", - "$$a(\\vec{s^{k-1}}, \\vec{v}(t_i)) = \\vec{s^{k-1}}\\vec{v}(t_i).$$\n", - "\n", - "**Pytanie**: co je\u015bli $n$ nie jest r\u00f3wne $m$, tzn. rozmiar embeddingu nie jest r\u00f3wny rozmiarowi wektora stanu?\n", - "\n", - "W przypadku sieci LSTM korzysta si\u0119 cz\u0119\u015bciej z bardziej skomplikowanego wzoru zawieraj\u0105cego dodatkowe wyuczalne wagi:\n", - "\n", - "$$a(\\vec{s^{k-1}}, \\vec{v}(t_i)) = \\vec{w_a}\\operatorname{tanh}(W_a\\vec{s^{k-1}} + U_a\\vec{v}(t_i))$$\n", - "\n", - "**Pytanie**: jakie rozmiary maj\u0105 macierze $W_a$, $U_a$ i wektor $w_a$?\n", - "\n", - "Powt\u00f3rzmy, \u017ce warto\u015bci $a$ s\u0105 warto\u015bciami skalarnymi, natomiast nie s\u0105 one znormalizowane (nie sumuj\u0105 si\u0119 do jedynki), normalizujemy je u\u017cywaj\u0105c schematu podobnego do softmaxa:\n", - "\n", - "$$\\alpha_{i} = \\frac{e^{a(\\vec{s^{k-1}}, \\vec{v}(t_i))}}{\\sum_j e^{a(\\vec{s^{k-1}}, \\vec{v}(t_j))}}$$\n", - "\n", - "Wektor kontekstu $\\vec{\\xi^k}$ b\u0119dzie po prostu \u015bredni\u0105 wa\u017con\u0105 wektorowych reprezentacji s\u0142\u00f3w:\n", - "\n", - "$$\\vec{\\xi^k} = \\sum_i \\alpha_i\\vec{v}(t_i)$$\n", - "\n", - "**Pytanie**: zasadniczo atencja jest \u015brodkiem do celu (\u017ceby sie\u0107 si\u0119 sprawniej uczy\u0142a), czy mo\u017cna atencja sama w sobie mo\u017ce by\u0107 do czego\u015b przydatna?\n", - "\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.9.2" - }, - "org": null, - "author": "Filip Grali\u0144ski", - "email": "filipg@amu.edu.pl", - "lang": "pl", - "subtitle": "13.Podej\u015bcie generatywne w ekstrakcji informacji[wyk\u0142ad]", - "title": "Ekstrakcja informacji", - "year": "2021" - }, - "nbformat": 4, - "nbformat_minor": 1 -} \ No newline at end of file + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Ekstrakcja informacji

\n", + "

13. Podejście generatywne w ekstrakcji informacji [wykład]

\n", + "

Filip Graliński (2021)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Ekstrakcja informacji a podejście generatywne\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Podejście generatywne\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Do tej pory zadanie ekstrakcji informacji traktowaliśmy jako zadanie etykietowania sekwencji, tzn. uczyliśmy system zaznaczać tokeny składające się na ekstrahowane informacje.\n", + "\n", + "![img](./ie-seqlab.png)\n", + "\n", + "Możliwe jest inne podeście, **generatywne**, w którym podchodzimy do problemu ekstrakcji informacji jak do swego rodzaju **tłumaczenia maszynowego** — „tłumaczymy” tekst (wraz z pytaniem lub etykietą) na informację.\n", + "\n", + "![img](./ie-gener.png)\n", + "\n", + "To podejście może się wydawać trudniejsze niż etykietowanie sekwencji, ale wystarczająco zaawansowanej architekturze sieci, jest wykonalne.\n", + "\n", + "Zalety:\n", + "\n", + "- informacja nie musi być dosłownie zapisana w tekście, ekstraktor może nauczyć się również normalizacji czy parafrazowania,\n", + "- nie wprowadzamy wielu kroków przetwarzania (gdzie błędy mogą się\n", + " namnażać), system działa na zasadzie *end-to-end*.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Atencja\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pierwsze systemu neuronowego tłumaczenia maszynowego używały siecie LSTM. Dopiero jednak dodanie tzw. atencji (*attention*) umożliwiło duży przeskok jakościowy. Najpierw atencję dodano do sieci rekurencyjnych, później powstały sieci oparte *wyłącznie* na atencji — modele Transformer.\n", + "\n", + "Idea atencji polega na tym, że sieć może kierować selektywnie „snop” uwagi na wyrazy na wejściu lub do tej pory wygenerowane wyrazy.\n", + "\n", + "Mechanizm atencji korzysta z:\n", + "\n", + "- z poprzedniego stanu sieci $\\vec{s^{k-1}}$ (to jest „miejsce”, z którego „kierujemy” atencję),\n", + "- z wektora reprezentującego słowo $\\vec{v}(t_i)$ (to jest „miejsce”, na które kierujemy atencję), gdzie\n", + " $\\vec{v}(t_i)$ to reprezentacja wektorowa wyrazu $t_i$ (statyczny embedding lub reprezentacja wektorowa\n", + " z poprzedniej warstwy dla sieci wielowarstwowej),\n", + "\n", + "aby wytworzyć wektor kontekstu $\\vec{\\xi^k}$ (który z kolei będzie w jakiś sposób wnosił wkład do wyliczenia nowej wartości stanu $\\vec{s^k}$ lub wyjścia $y^k$.\n", + "\n", + "Najpierw wyliczymy skalarne wartości atencji, tzn. liczby, które będą sygnalizowały, jak bardzo wektor $\\vec{v}(t_i)$ „pasuje” do $\\vec{s^{k-1}}$, w najprostszej wersji można po prostu skorzystać z iloczynu skalarnego (o ile $n=m$),\n", + "\n", + "$$a(\\vec{s^{k-1}}, \\vec{v}(t_i)) = \\vec{s^{k-1}}\\vec{v}(t_i).$$\n", + "\n", + "**Pytanie**: co jeśli $n$ nie jest równe $m$, tzn. rozmiar embeddingu nie jest równy rozmiarowi wektora stanu?\n", + "\n", + "W przypadku sieci LSTM korzysta się częściej z bardziej skomplikowanego wzoru zawierającego dodatkowe wyuczalne wagi:\n", + "\n", + "$$a(\\vec{s^{k-1}}, \\vec{v}(t_i)) = \\vec{w_a}\\operatorname{tanh}(W_a\\vec{s^{k-1}} + U_a\\vec{v}(t_i))$$\n", + "\n", + "**Pytanie**: jakie rozmiary mają macierze $W_a$, $U_a$ i wektor $w_a$?\n", + "\n", + "Powtórzmy, że wartości $a$ są wartościami skalarnymi, natomiast nie są one znormalizowane (nie sumują się do jedynki), normalizujemy je używając schematu podobnego do softmaxa:\n", + "\n", + "$$\\alpha_{i} = \\frac{e^{a(\\vec{s^{k-1}}, \\vec{v}(t_i))}}{\\sum_j e^{a(\\vec{s^{k-1}}, \\vec{v}(t_j))}}$$\n", + "\n", + "Wektor kontekstu $\\vec{\\xi^k}$ będzie po prostu średnią ważoną wektorowych reprezentacji słów:\n", + "\n", + "$$\\vec{\\xi^k} = \\sum_i \\alpha_i\\vec{v}(t_i)$$\n", + "\n", + "**Pytanie**: zasadniczo atencja jest środkiem do celu (żeby sieć się sprawniej uczyła), czy można atencja sama w sobie może być do czegoś przydatna?\n", + "\n" + ] + } + ], + "metadata": { + "author": "Filip Graliński", + "email": "filipg@amu.edu.pl", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "lang": "pl", + "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.6" + }, + "org": null, + "subtitle": "13.Podejście generatywne w ekstrakcji informacji[wykład]", + "title": "Ekstrakcja informacji", + "year": "2021" + }, + "nbformat": 4, + "nbformat_minor": 4 +}