整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          使用 Next.js 和 Tailwind CSS

          使用 Next.js 和 Tailwind CSS 構建的程序員作品集網站

          是否正在為創建專業的個人作品集網站而苦惱?別再猶豫了!您可以使用開發者作品集模板,立即創建您自己的個性化作品集!我的網站設計用戶友好且易于定制,非常適合開發人員和自由職業者。

          部分

          • 演示
          • 安裝
          • 入門
          • 用法
          • 使用的軟件包
          • 英雄部分
          • 關于我
          • 經驗
          • 技能
          • 項目
          • 教育
          • 博客
          • 聯系方式

          您需要下載 Git 和 Node 來運行此項目

          • Git
          • Node

          確保您的計算機上安裝了最新版本的 Git 和 Node。

          node --version
          git --version
          

          要 Fork 倉庫,請單擊頁面右上角的 fork 按鈕。Fork 倉庫后,打開終端并執行以下命令

          git clone https://github.com/<YOUR GITHUB USERNAME>/developer-portfolio.git
          cd developer-portfolio
          

          從根目錄安裝軟件包

          npm install
          # or
          yarn install
          

          然后,運行開發服務器:

          npm run dev
          # or
          yarn dev
          

          使用瀏覽器打開 http://localhost:3000 查看結果。

          前往 emailjs.com 并創建一個新帳戶以發送郵件。在免費試用版中,您每月將獲得 200 封郵件。設置 emailjs 帳戶后,請從 .env.example 文件創建一個新的 .env 文件。

          例如:

          NEXT_PUBLIC_EMAILJS_SERVICE_ID=NEXT_PUBLIC_EMAILJS_TEMPLATE_ID=NEXT_PUBLIC_EMAILJS_PUBLIC_KEY=NEXT_PUBLIC_GTM=# For site analytics
          NEXT_PUBLIC_APP_URL="http://127.0.0.1:3000"
          NEXT_PUBLIC_RECAPTCHA_SECRET_KEY=# For captcha verification on contact form
          NEXT_PUBLIC_RECAPTCHA_SITE_KEY=

          然后,在 utils/data 文件夾中自定義數據。

          例如:

          export const personalData={
            name: "ABU SAID",
            profile: "/profile.png",
            designation: "Full-Stack Software Developer",
            description: "My name is ABU SAID....",
            email: "abusaid7388@gmail.com",
            phone: "+8801608797655",
            address: "Dhaka, Bangladesh",
            github: "https://github.com/said7388",
            facebook: "https://www.facebook.com/abusaid.riyaz/",
            linkedIn: "https://www.linkedin.com/in/abu-said-bd/",
            twitter: "https://twitter.com/said7388",
            stackOverflow: "https://stackoverflow.com/users/16840768/abu-said",
            leetcode: "https://leetcode.com/said3812/",
            devUsername: "said7388",
            resume: "...",
          };
          

          devUsername 用于從 dev.to 獲取博客。

          使用的軟件包列表

          • next
          • @emailjs/browser
          • lottie-react
          • react-fast-marquee
          • react-icons
          • react-toastify
          • sass
          • tailwindcss

          項目地址:https://github.com/said7388/developer-portfolio

          指南將引導你學習構建一個自動完成任意輸入文本的Web應用程序。

          作者 | Dev Sharma

          譯者 | 蘇本如,責編 | 郭芮

          出品 | CSDN(ID:CSDNnews)

          以下為譯文:

          在本文中,我們將使用OpenAI的新一代表語言模型GPT-2來建立模型,使用Panel框架來構建web頁面的儀表板。本指南分為兩部分。在第一部分中,我們將加載我們的模型并編寫一個預測函數。在第二部分中,我們將構建一個web應用程序。

          自動生成文本的應用程序示例。我們將構建這個web應用程序的一個更簡單的變體。

          準備工作

          本教程假設你已經安裝了Python 3.7+,并且對語言模型有一定的了解。盡管本教程所涉及的所有步驟都可以在Jupyter之外完成,但是強烈建議你使用jupyter notebook。

          我們將使用PyTorch作為我們選擇的深度學習庫。在PyTorch中,我們將使用transformers庫導入預先訓練好的OpenGPT-2模型。可以通過在bash命令行中分別輸入以下命令來安裝這些庫:

          pip install torch
          pip install transformers

          對于我們的web應用程序,我們將利用Panel這個窗口容器/框架,這是一個很好的工具,可以被用來從jupyter notebooks或者常規的Python腳本中輕松地創建可維護的儀表板。可以使用以下命令安裝Panel:

          pip install panel

          第一部分:建立模型

          OpenAI的GPT是一種基于transformer的語言模型,它在生成類似人類語言的文本方面受到了很多關注。如果你以前沒有嘗試過,你很可能會在閱讀結束時得出同樣的觀點。

          加載模型

          首先,我們需要導入所需的包。詳情如下:

          import numpy as np
          import torch
          import torch.nn.functional as F
          from transformers import GPT2Tokenizer, GPT2LMHeadModel
          from random import choice

          接下來,我們將加載OpenGPT2的Tokenizer和語言模型:(如果是第一次運行,可能需要幾分鐘下載預先訓練的模型)

          tok=GPT2Tokenizer.from_pretrained("gpt2")
          model=GPT2LMHeadModel.from_pretrained("gpt2")

          預測函數

          在這個階段,大部分工作已經完成了。因為我們的模型是預先訓練過的,所以我們不需要再次訓練它或做任何修改。我們只需要編寫一個函數,它可以向模型輸入文本并生成預測的文本。

          def get_pred(text, model, tok, p=0.7):
          input_ids=torch.tensor(tok.encode(text)).unsqueeze(0)
          logits=model(input_ids)[0][:, -1]
          probs=F.softmax(logits, dim=-1).squeeze
          idxs=torch.argsort(probs, descending=True)
          res, cumsum=, 0.
          for idx in idxs:
          res.append(idx)
          cumsum +=probs[idx]
          if cumsum > p:
          pred_idx=idxs.new_tensor([choice(res)])
          break
          pred=tok.convert_ids_to_tokens(int(pred_idx))
          return tok.convert_tokens_to_string(pred)

          這個函數中發生了很多事情。因此,讓我們把它分解來看看。首先,我們對input_ids中的輸入文本進行標記(tokenize)和編碼(encode)。接著,我們要求我們的模型為下一個單詞/標記(token)生成一個logits向量。在應用softmax函數并按降序對這些可能的概率結果進行排序之后,我們得到了一個向量idxs,它按各自的概率順序列出了每個token的索引。

          在這個階段,我們可以選擇概率最高的token。但是,我們希望能夠混合結果,以便相同的輸入文本可以生成各種文本。為此,我們將添加一個隨機元素,從最可能的下一個token列表中選擇一個隨機token。這樣的話,我們就不會每次都選擇相同的預測token。為了做到這一點,我們采用了Nucleus (Top-p) Sampling 方式。

          我們通過循環遍歷每個概率來執行此操作,直到循環遍歷的所有概率之和大于p(這里的p是一個介于0到1之間的任意數字)。當p被超過前,所有遍歷到的token都將被存儲在列表res中。一旦p被超過,我們就從這個列表中隨機選擇一個token。請記住,我們正在遍歷的概率列表包含了其按概率排序的索引。注意,p值越高,我們的列表中將包含更多的token。反之亦然。因此,如果每次都希望得到相同的結果,可以將p值設置為0。

          現在,讓我們測試一下我們的預測函數:

          每次都會有不同的結果,這正是我們所期望的。現在,我們的預測功能準備好了。讓我們開始構建我們的Web應用程序吧!

          第二部分:構建web應用程序

          Panel框架簡介

          如果你還不熟悉Panel框架,那請記住,Panel框架可以幫助我們創建一個web儀表板和web應用程序。簡而言之,你需要知道的是它有三個主要組件:

          • Panel:可以包含一個或多個窗格(pane)對象的容器,面板(pane)對象是指文本、圖像、圖形、小部件等(也可以包含其他panel);

          • Pane:任何單個對象,例如文本、圖像、數據幀等;

          • Widget(小部件):用戶可以自行調整的項目,包括文本輸入框、滑塊、按鈕、復選框,等等可以改變窗格的行為的小部件。

          下一個也是最后一個你需要知道的事情是:我們有多種方法來定義不同的窗格和小部件之間的交互方式,我們稱之為“callback(回調)”。例如,如果按下某個按鈕,其他窗格應該如何更新呢?稍后我們將定義一個回調函數來演示它將如何準確地做到這一點。

          Web應用程序簡介

          我們的文本生成器應用程序將有一個輸入窗口,以便用戶輸入他們想要輸入的文本。接下來,用戶應該能夠通過按下按鈕生成新的token。在這之后,它將使用我們在第一部分中定義的預測函數來預測新的token來生成新文本。最后,用戶應該能夠在已經預測的token基礎之上繼續生成新的文本。

          實施

          讓我們首先導入Panel并創建文本輸入小部件:

          import panel as pn
          pn.extension # loading panel's extension for jupyter compatibility text_input=pn.widgets.TextInput

          現在,如果在jupyter中執行文本輸入,我們將得到以下結果:

          接下來,我們需要一個窗格,它會在越來越多的token生成時存儲整個文本:

          generated_text=pn.pane.Markdown(object=text_input.value)

          注意,這里我們將文本對象設置為text_input的值。我們希望generated_text的值與text_input的值相同,因為我們將要在generated_text之上預測新文本。隨著越來越多的token被添加到我們的序列中,我們將繼續基于generated_text進行預測,直到用戶改變了text_input。一旦用戶改變了text_input,這個進程將重新啟動。

          然而,到這里事情還沒有完全結束。盡管generated_text將在開始時接受text_input的值,但如果text_input值發生更改,generated_text值將不會自我更新。為此,我們需要像下面這樣將這兩個對象鏈接在一起:

          text_input.link(generated_text, value='object')

          這里,我們在text_input和generated_text之間形成了單向鏈接。因此,每當text_input的值發生更改時,generated_text值也將更改為新值。如下所示:

          觀察面板中文的text_input和generated_text之間的鏈接行為。注意:作為組件的pn.Row也是一個面板,即它是一個窗格和小部件的容器。

          現在我們有了兩個文本對象,讓我們來創建按鈕小部件:

          button=pn.widgets.Button(name="Generate",button_type="primary")

          很好,現在我們有了一個按鈕,我們只需要把它和我們想要的行為鏈接起來。為此,我們將編寫一個回調函數,該函數將在每次單擊按鈕時運行:

          def click_cb(event):
          pred=get_pred(generated_text.object, model, tok)
          generated_text.object +=pred

          這里發生了兩件事。首先,我們將generated_text作為輸入傳遞給我們之前編寫的預測函數,該函數將生成一個新的token。其次,將此token添加到generated_text中。每次新單擊按鈕時,這個過程都會重復。

          到這里,我們仍然需要將按鈕單擊事件與回調函數綁定在一起。我們可以這樣做:

          button.on_click(click_cb)

          我們現在已經完成了所有小部件、窗格和函數的創建。接下來我們需要做的只是把這些東西放在一個面板里,然后看看會發現什么:

          app=pn.Column(text_input, button, generated_text); app

          注:pn.Column與pn.Row類似,它是另一種類型的panel,即小部件、窗格甚至其他panel的容器。

          讓我們再添加一個標題和一個簡短的描述,我們就大功告成了!

          title=pn.pane.Markdown("# **Text Generator**")
          desc=pn.pane.HTML("<marquee scrollamount='10'><b>Welcome to the text generator! In order to get started, simply enter some starting input text below, click generate a few times and watch it go!</b></marquee>")final_app=pn.Column(title, desc ,app)

          服務你的Web應用程序

          Panel框架使得服務web應用程序變得非常容易。有兩種方法可以用來做這件事。第一個是調用“.show”命令。這種方法通常用于調試,如下面所示。它將啟動一個新窗口,在這個窗口中,一個名為final_app的 panel將作為一個web應用程序運行。

          final_app.show

          而為了讓它在生產環境中運行,你需要使用“.servable”方法。但是,如果你以類似于show方法的方式運行此操作,你的筆記本上不會出現任何東西,你必須像下面這樣在你的筆記本上運行bash腳本:

          panel serve --show text_generation_app.ipynb

          只要你的筆記本中有以下代碼,這個操作將在本地端口上啟動你的web應用:

          final_app.servable

          大功告成!

          現在,你自己有能力構建一個自動生成文本的應用程序。你可以通過添加更多panel組件來進一步完善它。你甚至可以將此應用程序嵌入到其他項目中。像往常一樣,你可以在github上找到我的代碼庫。注意:下面圖片中的app是我在本教程中使用的app(text_generation_app.ipynb)的高級變體:。

          原文:https://towardsdatascience.com/build-a-text-generator-web-app-in-under-50-lines-of-python-9b63d47edabb

          本文為 CSDN 翻譯,轉載請注明來源出處。

          【End】


          習目標


          主站蜘蛛池模板: 亚洲老妈激情一区二区三区| 日韩成人无码一区二区三区 | 视频一区二区中文字幕| 成人精品视频一区二区三区尤物| 天堂一区二区三区精品| 日韩精品一区二区三区视频 | 少妇特黄A一区二区三区| 国产精品夜色一区二区三区| 精品亚洲av无码一区二区柚蜜| 视频一区二区三区免费观看| 在线精品国产一区二区三区| 熟妇人妻AV无码一区二区三区| 国产乱码精品一区二区三区四川人| 视频一区在线播放| 无码视频一区二区三区在线观看 | 成人免费视频一区二区三区| 99久久国产精品免费一区二区| 欧洲精品码一区二区三区免费看 | 日本无卡码一区二区三区| 精品国产一区二区三区AV性色| 成人免费观看一区二区| 久久一区二区三区精华液使用方法| 日韩视频一区二区三区| 另类免费视频一区二区在线观看| 国产福利在线观看一区二区| 精品国产一区二区三区免费看| 在线不卡一区二区三区日韩| 亚洲av午夜福利精品一区人妖| 国产精品久久久久久一区二区三区| 色欲AV无码一区二区三区| 国产电影一区二区| 日韩欧国产精品一区综合无码| 亚洲av乱码中文一区二区三区 | 国产精品日本一区二区不卡视频| 91久久精品国产免费一区| 三上悠亚一区二区观看| 三上悠亚日韩精品一区在线| 天美传媒一区二区三区| 海角国精产品一区一区三区糖心| 无码少妇一区二区性色AV | 精品人妻少妇一区二区三区不卡|