當前位置:首頁 » 編程軟體 » 編譯原理token序列作用

編譯原理token序列作用

發布時間: 2023-01-23 23:02:48

① 詞法分析程序中token代碼是什麼

token就是把程序的語句進行類似分詞得到的單詞。
它是下步語法分析的輸入。
typedef struct Token
{
int label;
char name[buf];
int code;
}Token;
是一個結構體。
C語言中單詞可以分為
保留字,就是int,while等。
標識符,例如int m;m就是標識符。
數字,有整數和小數
字元,+,-,.,*,;等字元,其中也包括++,--,!=等。
label應該標識token的類型。
name表示的就是程序中對應的字元序列。例如:int等。
最後code的意思,看不出來。。。,不過個人認為,上面的兩項就可以表示
token的信息。
主要是類型和內容。

② 什麼是根據re生成的token +編譯原理

token= '';
s=getchar();
getbe();
switch(s){
case '

③ 怎麼理解token,tokenize,tokenizer.

1、一種解釋

token:令牌
tokenize:令牌化
tokenizer:令牌解析器

2、另一種翻譯是:token可以翻譯為「標記」,tokenize可以翻譯為「標記解析」或「解析標記」,tokenizer可以翻譯為「標記解析器」。

在編寫詞法分析器(Lexer)或語法分析器(Parser)的時候,除了Lexer和Parser這兩個詞會經常使用外,tokenize和tokenizer也會經常出現,基本上所有涉及到詞法解析的源碼都會用到tokenize。

在邱仲潘譯的《Mastering Java 2》有這兒一段:

StreamTokenizer類根據用戶定義的規則,從輸入流中提取可識別的子串和標記符號,這個過程稱為令牌化 ([i]tokenizing[/i]),因為流簡化為了令牌符號。令牌([i]token[/i])通常代表關鍵字、變數名、字元串、直接量和大括弧等 語法標點。

④ 編譯原理:詞法分析中,token 為什麼要長度統一

每一個token都是從源文本中讀取的符合詞法規則的單詞。比如,有文本:
I love you,詞法為:I | love | you,則經分析將分別獲得tokens:I,love,you。token需要長度統一嗎?我認為不需要,從來都不需要,不知你從哪獲得的知識,也許是個誤會吧。

⑤ 編譯原理中什麼事token結構

在最開始詞法分析階段,所有的符號(字元串如:string, 自定義或是語法需要的符號如=,>,{,},)都作為後續編譯的基本單位,稱作token。

⑥ Bert技術

google在2018年10月底公布BERT在11項nlp任務中的卓越表現,NLP任務的兩個衡量指標上全面超越人類,並且還在11種不同NLP測試中創出最佳成績,包括將GLUE基準推至80.4%(絕對改進7.6%),MultiNLI准確度達到86.7% (絕對改進率5.6%)等,此後,BERT(Bidirectional Encoder Representation from Transformers)就成為NLP領域大火、整個ML界略有耳聞的模型。

BERT的出現,徹底改變了預訓練產生詞向量和下游具體NLP任務的關系,提出龍骨級的訓練詞向量概念。

詞向量,就是用一個向量的形式表示一個詞。

(1)one-hot編碼:詞的符號化。

(2)詞的分布式表示:詞的語義由其上下文決定。以(CBOW)為例,如果有一個句子「the cat sits one the mat」,在訓練的時候,將「the cat sits one the」作為輸入,預測出最後一個詞是「mat」。分布式表示的較大優點在於它具有非常強大的表徵能力,比如n維向量每維k個值,可以表徵k的n次方個概念。

其中,詞嵌入就是分布式表示的一種:基於神經網路的分布表示一般稱為詞向量、詞嵌入( word embedding)或分布式表示( distributed representation)。核心依然是上下文的表示以及上下文與目標詞之間的關系的建模。本質:詞向量是訓練神經網路時候的隱藏層參數或者說矩陣。

兩種訓練模式:CBOW (Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model)

NLP任務分成兩部分,一是預訓練產生詞向量,二是對詞向量操作實現特定功能。而詞向量模型是一個工具,可以把抽象存在的文字轉換成可以進行數學公式操作的向量,而對這些向量的操作,才是NLP真正要做的任務。從word2vec到ELMo到BERT,做的其實主要是把下游具體NLP任務的活逐漸移到預訓練產生詞向量上。

(1)word2vec:上下文概率的一種表示,但無法對一詞多義進行建模

(2)ELMo:用的是一個雙向的LSTM語言模型,由一個前向和一個後向語言模型構成,目標函數就是取這兩個方向語言模型的最大似然。

在預訓練好這個語言模型之後,ELMo就是根據下面的公式來用作詞表示,其實就是把這個雙向語言模型的每一中間層進行一個求和。最簡單的也可以使用最高層的表示來作為ELMo。

然後在進行有監督的NLP任務時,可以將ELMo直接當做特徵拼接到具體任務模型的詞向量輸入或者是模型的最高層表示上。總結一下,不像傳統的詞向量,每一個詞只對應一個詞向量,ELMo利用預訓練好的雙向語言模型,然後根據具體輸入從該語言模型中可以得到上下文依賴的當前詞表示(對於不同上下文的同一個詞的表示是不一樣的),再當成特徵加入到具體的NLP有監督模型里。

(3)bert

word2vec——>ELMo:

結果:上下文無關的static向量變成上下文相關的dynamic向量,比如蘋果在不同語境vector不同。

操作:encoder操作轉移到預訓練產生詞向量過程實現。

ELMo——>BERT:

結果:訓練出的word-level向量變成sentence-level的向量,下游具體NLP任務調用更方便,修正了ELMo模型的潛在問題。

操作:使用句子級負采樣獲得句子表示/句對關系,Transformer模型代替LSTM提升表達和時間上的效率,masked LM解決「自己看到自己」的問題。

(1)bert模型證明了雙向預訓練對於語言表示的重要性。與採用單向語言模型進行預訓練的模型不同,BERT使用masked language models 進行預訓練的深層雙向表示。

(2)經過預訓練的模型表示解決了許多為特定任務而設計架構的需要。BERT是第一個基於微調的表示模型,它在一系列句子級和詞級別的任務上實現了最先進的性能,優於許多具有特定任務架構的系統。

bert架構由兩步實現:預訓練和模型微調;在預訓練階段,基於無標注數據通過多輪預訓練任務完成。在微調階段,bert模型由預訓練的參數進行初始化,然後由待下游的任務數據進行參數微調。

bert模型是多層雙向transformer編碼器。將層的數量(Transformer blocks)表示為L,隱藏的大小表示為H,而self-attention heads 為A。在所有的情況下,我們將feed-forward/filter大小設置為4H,即H=768時,為3072, H=1024時,為4096.

bert的兩種格式:

BERTBASE : L=12, H=768, A=12, Total Parameter=110M,

BERTLARGE : L=24, H=1024, A=16, Total Parameters=340M

為了使用bert可以應對各式各樣的下游任務,bert的輸入為token序列,它可以表示一個句子或句子對(比如對話)。使用該方案,輸入可以是任意跨度的相鄰文本,即一個token序列可以是單個句子,也可以是多個句子。

具體地說,bert使用30000個詞的詞級別的embeddings。每個序列的起始token是[CLS]。句子對被打包在一個序列中,用兩種方式區別句子。方法一,使用特殊token[SEP];方法二,在每個標記中添加一個學習過的嵌入,表示它是屬於句子A還是句子B。

兩個無監督任務對BERT進行訓練。

任務一:Masked LM語言模型。

為了訓練雙向表示模型,隨機按百分比的方式(一般選15%)屏蔽輸入序列中的部分詞,然後預測那些屏蔽詞。在這種情況下,屏蔽詞的最終隱向量經softmax運算後輸出。有點類似於中文的完形填空。

雖然如些操作可以獲得一個雙向的預訓練模型,但這在預訓練和微調之間創建了一個不匹配,因為在微調過程中從來沒有見過[MASK]詞。為了減輕這一點,我們並不總是用實際的[MASK]詞替換被屏蔽的詞。相反,生成隨機選擇15%的詞進行預測,例如在句子 my dog is hairy 選擇了 hairy。接著執行下面的過程:

數據生成器不會總是用[MASK] 替換所選單詞,而是執行以下操作:

80%的時間,將單詞替換為[MASK]詞。例如 my dog is hairy -> my dog is [MASK]

10%的時間, 用一個隨機詞替換這個詞, 例如 my dog is hairy -> my dog is apple

10%的時間, 保持單詞不變,例如 my dog is hairy -> my dog is hairy。

每一輪使用交叉熵損失來預測原始詞。

任務二:下一句的預測;

許多重要的下游任務,如問答(QA)和自然語言推理(NLI),都基於理解兩個文本句之間的關系,而語言建模並不能直接捕獲到這兩個文本句之間的關系。為了訓練一個理解句子關系的模型,我們預訓練了一個二分類的預測下一個句子的任務,該任務可以由任何單語語料庫生成。

具體來說,在為每個訓練前的例子選擇句子A和B時,50%的時間B是A後面的實際下一個句子,50%的時間B是來自語料庫的隨機句子。例如:

Input =[CLS] the man went to [MASK] store [SEP],he bought a gallon [MASK] milk [SEP]

Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP],penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

我們完全隨機選擇NotNext 句子,最終預測模型在這個任務中達到97%-98%的准確率。

預訓練數據:預訓練過程很大程度上依賴現有語言模型的數據。從維基網路上抽取文本信息,忽略列表,表格和標題。對於預訓練過程來說,使用文檔級別的語料庫而不是經過亂序後的句子級語料庫來提取長的連續序列是很重要的。

對於序列級別分類任務,BERT微調很簡單。BERT使用self-attention機制來統一兩個過程。因為編碼文本序列中,使用self-attention有效地包含了兩上句子之間雙向交叉的attention。

微調過程,就是對於每一個任務,簡單地將特定的輸入和輸出接入bert,然後端到端地調節全部參數即可。在輸入端,句子A和句子B類似於(1)語義句子對(2)假設前提(3)問答中的問句(4)文本分類或序列標記中文本。在輸出端,token向量被傳遞給token級別任務的輸出層,例如,序列標簽,問答對的答案。[CLS]向量被傳遞給分類的輸出層,用於分類或情感分析。

相對於預訓練,微調要相對容易。大多數模型超參數與預訓練相同,除了批的大小、學習率和訓練輪數。

可以通過一個額外的輸出層對預訓練的BERT表示進行微調,以創建適用於各種任務的最先進模型,比如問答和語言推斷,無需對特定與任務的架構進行實質性修改。

第一,如果NLP任務偏向在語言本身中就包含答案,而不特別依賴文本外的其它特徵,往往應用Bert能夠極大提升應用效果。

第二,Bert特別適合解決句子或者段落的匹配類任務。就是說,Bert特別適合用來解決判斷句子關系類問題,這是相對單文本分類任務和序列標注等其它典型NLP任務來說的,很多實驗結果表明了這一點。

第三,Bert的適用場景,與NLP任務對深層語義特徵的需求程度有關。感覺越是需要深層語義特徵的任務,越適合利用Bert來解決

第四,Bert比較適合解決輸入長度不太長的NLP任務,而輸入比較長的任務,典型的比如文檔級別的任務,Bert解決起來可能就不太好。

【引用】:

bert論文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

https://www.cnblogs.com/robert-dlut/p/8638283.html

https://blog.csdn.net/DarrenXf/article/details/89184225

https://www.cnblogs.com/xlturing/p/10824400.html

https://www.cnblogs.com/ylHe/p/10193166.html

⑦ ##(兩個井號)和#(一個井號)都是什麼意思

連接符 ##(兩個井號) ## 連接符號由兩個井號組成,其功能是在帶參數的宏定義中將兩個子串(token)聯接起來,從而形成一個新的子串。但它不可以是第一個或者最後一個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。具體的定義在編譯原理里有詳盡的解釋 #符是把傳遞過來的參數當成字元串進行替代。 假設程序中已經定義了這樣一個帶參數的宏: #define PRINT( n ) printf( token #n = %d, token##n ) 同時又定義了二個整形變數: int token9 = 9; 現在在主程序中以下面的方式調用這個宏: PRINT( 9 ); 那麼在編譯時,上面的這句話被擴展為: printf( token 9 = %d, token9 ); 注意到在這個例子中,PRINT(9);中的這個」9」被原封不動的當成了一個字元串,與」token」連接在了一起,從而成為了token9。而#n也被」9」所替代。 可想而知,上面程序運行的結果就是在屏幕上列印出token9=9 還有點不明白?! 再來一個例子:

⑧ Token是什麼

token

讀音:英['təʊk(ə)n]美['tokən]

n. 表徵;代幣;記號

adj. 象徵的;表意的;作為對某事的保證的

vt. 象徵;代表

片語短語

by the same token同樣地;出於同樣原因

as a token of作為?的標志

token ring令牌環(一個環狀的區域網路)

in token of表示;作為?的標志

by this token由此看來

拓展資料

雙語例句

1,Later .

稍後我們會將記號序列組合成解析樹。

2,,you cancount oneverytokenin .

在屬性規范化後,可以依靠的屬性中的每個記號是通過空白來與其鄰居區分開來。

3,This littlegiftisatokenofourregard.

這點禮物是我們大家的一點心意。

⑨ token 編譯原理

token= '';
s=getchar();
getbe();
switch(s){
case 'a':
case 'b':

case 'z':
while(letter( )‖digit( ))
{
concatenation( );
getchar( );
}
retract( ); *掃描指針回退一個字元*/
c=reserve( );
if (c==0){
buildlist( ); /*將標識符登錄到符號表中*/
return(id,指向id的符號表入口指針);
}else{
return(保留字碼,null);
}
break;
case '0':
case '1':

case '9':
while (digit( )){
concatenation( );
getchar( );
}
retract();
buildlist( );/*將常數登錄到常數表中*/
return(num,num的常數表入口指針);
break;
case '+':
return('+',null);
break;
case '−':
return('−',null);
break;
case '*':
return('*',null);
break;
case '<':
getchar( );
if (character== '=')
return(relop,LE);
else{
retract();
return(relop,LT);
}
break;
case '=':
getchar( );
if(character== '=')
return (relop, EQ);
else{
retract( );
return('=', null);
}
break;
case ';':
return(';', null);
break;
default:
error( );

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:710
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:972
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:681
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:833
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:741
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1081
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:312
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:192
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:880
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:837