亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于依存關(guān)系的自然語(yǔ)言可視化仿真系統(tǒng)

        2021-09-28 10:17:02袁雨軒陳科淇
        關(guān)鍵詞:復(fù)句例句實(shí)體

        袁雨軒,李 放,陳科淇,韓 正

        (1.大連東軟信息學(xué)院 數(shù)字藝術(shù)與設(shè)計(jì)學(xué)院,遼寧 大連 116023;2.華威大學(xué) 華威商學(xué)院,考文垂 CV4 7AL)

        0 引 言

        自然語(yǔ)言處理技術(shù)是在程序設(shè)計(jì)中常用的人工智能算法,也是人工智能的熱點(diǎn)研究方向。主要應(yīng)用場(chǎng)景包括個(gè)性化推薦、搜索糾錯(cuò)等。神經(jīng)網(wǎng)絡(luò)是自然語(yǔ)言處理以及人工智能領(lǐng)域最重要的方法之一。為了讓計(jì)算機(jī)理解自然世界的知識(shí),可以根據(jù)具體研究對(duì)象的特征構(gòu)建不同的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),如適用于圖像處理的卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)、適用于文本和序列數(shù)據(jù)的遞歸神經(jīng)網(wǎng)絡(luò)(recurrent neural networks,RNN)和長(zhǎng)短期記憶網(wǎng)絡(luò)(long short-term memory neural networks,LSTM)等[1-2]。盡管這些網(wǎng)絡(luò)結(jié)構(gòu)在處理不同的任務(wù)時(shí)表現(xiàn)出不同的性能,對(duì)于具體任務(wù)仍很難確定使用哪種網(wǎng)絡(luò)結(jié)構(gòu)[3],所使用模型的訓(xùn)練過程同樣需要耗費(fèi)大量時(shí)間。為了覆蓋更多的語(yǔ)言場(chǎng)景,本系統(tǒng)依賴百度AI開放平臺(tái)的自然語(yǔ)言處理技術(shù)接口。百度AI開放平臺(tái)提供了全面的語(yǔ)言處理基礎(chǔ)能力和語(yǔ)言處理應(yīng)用技術(shù),并以標(biāo)準(zhǔn)化的接口封裝。且該平臺(tái)的訓(xùn)練語(yǔ)料以中文為主,對(duì)中文輸入的接受能力較強(qiáng)。

        對(duì)自然語(yǔ)言處理技術(shù)來(lái)說(shuō),其最細(xì)的劃分粒度是詞語(yǔ)。而在計(jì)算機(jī)仿真領(lǐng)域中可以使用三維模型、圖片等來(lái)模擬名詞,使用動(dòng)畫、聲音等交互系統(tǒng)模擬動(dòng)詞。由于中文的能指極其復(fù)雜,在自然語(yǔ)言處理技術(shù)難以解決的詞語(yǔ)多義性問題上更是雪上加霜。文獻(xiàn)[4]提出了中文句式的三個(gè)層級(jí):(1)表層:形式結(jié)構(gòu),語(yǔ)言中語(yǔ)法項(xiàng)的線性配列式。如主語(yǔ)+謂語(yǔ)構(gòu)成SV句式等。(2)中介層:表現(xiàn)法,語(yǔ)言中線性配列的特定樣式。如抒情、描寫手法等。(3)深層思維方式:反映說(shuō)話者心理的主體意識(shí)。并提出深層思維方式的表達(dá)注重于主觀感受的抒發(fā),即為了滿足句子表層結(jié)構(gòu)的語(yǔ)法在表達(dá)中的正確性,其深層思維方式可以不嚴(yán)格滿足語(yǔ)法規(guī)則。由于深層思維方式不執(zhí)著于邏輯和形式結(jié)構(gòu)規(guī)范,其表達(dá)與所指的聯(lián)系也更緊密。

        基于以上分析,文中將深入討論句子中不同實(shí)體之間的依存關(guān)系,排除中介層和表層結(jié)構(gòu)中的修飾成分,從而得到易于計(jì)算機(jī)理解句子深層邏輯的輸入。并提出了一種可視化的虛擬仿真解決方案,用實(shí)體所指代的對(duì)象代替中文復(fù)雜的能指,并以視頻的形式可視化呈現(xiàn)。

        1 系統(tǒng)開發(fā)中的關(guān)鍵技術(shù)

        1.1 中文依存關(guān)系的研究

        聚類(cluster)是一組數(shù)據(jù)對(duì)象的集合,在文中對(duì)應(yīng)著人們使用自然語(yǔ)言輸入、不利于計(jì)算機(jī)理解的句子。文獻(xiàn)[5]在引用中總結(jié)到,聚類的基本劃分方法存在需要事先給出樣例的缺陷。而人工定義的語(yǔ)法規(guī)則也是難以窮舉、無(wú)法事先給出的。同時(shí),中文的依存句法分析區(qū)別于英文,需要對(duì)句子進(jìn)行分詞[6]。對(duì)過于復(fù)雜而無(wú)法進(jìn)行預(yù)處理的數(shù)據(jù)可以考慮使用基于深度學(xué)習(xí)算法的模型。百度AI依存句法分析接口提供了使用百度日常搜索內(nèi)容做訓(xùn)練數(shù)據(jù)的Query模型,該模型擅長(zhǎng)對(duì)口語(yǔ)Query句式的處理。以及來(lái)源于全網(wǎng)網(wǎng)頁(yè)數(shù)據(jù)的Web模型,該模型偏向表達(dá)規(guī)整的書面語(yǔ)法。以上模型可以解析出共34種依存關(guān)系。對(duì)此可以根據(jù)集合學(xué)習(xí)的思想,構(gòu)建多個(gè)對(duì)不同數(shù)據(jù)的處理效果有明顯偏好的模型,整合出一個(gè)更強(qiáng)大的模型做最后決策。

        為了研究解析出的不同依存關(guān)系對(duì)句子深層邏輯的影響程度,實(shí)驗(yàn)1.2將使用百度AI的短文本相似度接口,采用CNN模型驗(yàn)證去除不同依存關(guān)系后對(duì)句子結(jié)構(gòu)的影響,相比于該接口提供的詞袋模型(bag-of-words model,BOW)和RNN模型,CNN模型的顯著特點(diǎn)是對(duì)序列輸入敏感,但是語(yǔ)義泛化能力較弱。本實(shí)驗(yàn)更關(guān)注實(shí)體之間的邏輯,在對(duì)比實(shí)驗(yàn)的過程中僅去掉某一個(gè)依存關(guān)系對(duì)應(yīng)的實(shí)體,因此對(duì)詞語(yǔ)泛化能力的要求較低,且CNN模型對(duì)句子保留的局部特征更敏感,因此選擇CNN模型可以在實(shí)驗(yàn)中獲得更理想的結(jié)果。

        1.2 實(shí) 驗(yàn)

        中文的語(yǔ)言特點(diǎn)決定了多數(shù)的語(yǔ)言場(chǎng)景需要以復(fù)句的形式完成。處理復(fù)句的難點(diǎn)在于各個(gè)分句間語(yǔ)義關(guān)系的準(zhǔn)確識(shí)別。文獻(xiàn)[7]提出了一種基于句內(nèi)注意力機(jī)制的多路CNN網(wǎng)絡(luò)結(jié)構(gòu),可以識(shí)別分句間的關(guān)聯(lián)特征,以及正確識(shí)別復(fù)句的邏輯關(guān)系。文中虛擬仿真工作產(chǎn)生的效果主要來(lái)自各分句中的名詞模型,其中的邏輯關(guān)系由該分句中的謂語(yǔ)提供,并且中文的表達(dá)習(xí)慣可以保證句子輸入的語(yǔ)序與視頻播放的時(shí)順相對(duì)應(yīng),因此各分句之間可獨(dú)立看待。為了研究使用自然語(yǔ)言輸入的單個(gè)句子中詞語(yǔ)之間的依存關(guān)系,以“袁明吃蛋撻”為例,表1將展示該例句在去掉不同依存關(guān)系所對(duì)應(yīng)的詞語(yǔ)后與原句子的短文本相似度,該數(shù)值介于[0,1]之間,反映了被去掉的依存關(guān)系對(duì)句子邏輯的影響程度。首先排除由復(fù)句產(chǎn)生,或無(wú)實(shí)際意義的虛詞產(chǎn)生的依存關(guān)系,如標(biāo)點(diǎn)符號(hào)、關(guān)聯(lián)詞等共計(jì)17種。

        表1 語(yǔ)義相似度對(duì)比實(shí)驗(yàn)

        1.2.1 討 論

        相似度是一個(gè)十分復(fù)雜的概念[8]。根據(jù)實(shí)驗(yàn)序號(hào)2可知,兩個(gè)完全相同的句子相似度為1,序號(hào)20和21是兩個(gè)與原文無(wú)關(guān)的句子,其相似度在本實(shí)驗(yàn)中的樣例均小于0.3。序號(hào)19介賓關(guān)系是另一個(gè)相似度接近0.3的樣本,原因是丟失掉賓語(yǔ)后與原句本身差異過大。對(duì)以上結(jié)果可暫時(shí)作如下假設(shè):短文本相似度接近0.3甚至更小的句子與原文的出入較大,故應(yīng)取大于相似度0.3的結(jié)果做討論。

        文獻(xiàn)[9]在文本相似度計(jì)算中提到了句子的關(guān)鍵成分與修飾成分的概念,而人們往往從關(guān)鍵成分就可以了解一個(gè)句子的大概意思。在介于(0.9,1)區(qū)間內(nèi)存在十種依存關(guān)系,除核心關(guān)系外,其他的依存關(guān)系均是對(duì)句子邏輯影響較小的結(jié)構(gòu)成分或修飾成分。以上兩種成分的存在保證了句子表層語(yǔ)法規(guī)則的正確。以“地”字結(jié)構(gòu)為例,其語(yǔ)法解析樹如圖1所示。該依存關(guān)系僅修飾動(dòng)詞“吃”。去掉修飾成分對(duì)句子要表達(dá)的深層邏輯影響很小,此句子的動(dòng)畫依然可以由“袁明吃蛋撻”來(lái)表示。對(duì)此結(jié)果不妨假設(shè)在(0.9,1)區(qū)間內(nèi)的修飾成分在生成動(dòng)畫時(shí)可以忽略。

        圖1 例句“袁明瘋狂地吃蛋撻”

        文獻(xiàn)[10]中的例句驗(yàn)證了,在以中文復(fù)句輸入所返回的語(yǔ)法生成樹中,關(guān)系詞都是動(dòng)詞。關(guān)系詞在復(fù)句中常作為分句的核心節(jié)點(diǎn)出現(xiàn),因此本實(shí)驗(yàn)的單句中核心節(jié)點(diǎn)的作用類同于復(fù)句中的關(guān)系詞。

        對(duì)于圖2所示的核心關(guān)系需要特別討論,因?yàn)閯?dòng)詞“吃”是SVO句式的關(guān)鍵成分而不是修飾成分,顯然與上文的假設(shè)相矛盾。這是因?yàn)楸緦?shí)驗(yàn)使用的CNN模型雖然對(duì)局部特征敏感,但是“袁明”和“蛋撻”之間沒有任何成分解釋兩個(gè)詞之間的邏輯關(guān)系,于是該模型默認(rèn)把“袁明”作為修飾成分,原句的意思被泛化成圖3描述的“袁明牌蛋撻”了。CNN模型在卷積層內(nèi)部狀況為詞向量的拼接。詞向量是計(jì)算機(jī)理解詞匯的媒介,這種表示方式是將詞語(yǔ)映射到一個(gè)高維且稠密的向量空間中,用空間距離的形式反映兩個(gè)詞之間的系。文獻(xiàn)[11]提到,將詞語(yǔ)在計(jì)算機(jī)中向量化表示的常用方法有one-hot、詞向量和Word2vec模型等。雖然百度AI平臺(tái)沒有描述短文本相似度接口使用的CNN模型中的詞向量在卷積層內(nèi)部的具體情況,但該平臺(tái)語(yǔ)言處理基礎(chǔ)能力的SDK中也提供了詞向量表示接口。詞向量模型訓(xùn)練過程的初始狀態(tài)下,對(duì)語(yǔ)料庫(kù)內(nèi)包含的所有詞向量隨機(jī)賦初值,按照詞語(yǔ)在樣本句子中的位置相應(yīng)地調(diào)整詞向量在空間中的位置,以“袁明吃蛋撻”為例句訓(xùn)練詞向量,該句子由人名+動(dòng)作+賓語(yǔ)組成。如圖4所示,當(dāng)再次輸入“韓明”和“蛋撻”時(shí),“吃”字在空間中的優(yōu)先級(jí)會(huì)小于其他的動(dòng)詞如“買”。輸入“李明”和“吃”之后“蛋撻”的優(yōu)先級(jí)同樣會(huì)高于其他名詞。類似的,使用訓(xùn)練集中的句子不斷調(diào)整詞向量的位置,多次訓(xùn)練后的詞向量可以作為特征值用于在計(jì)算機(jī)中表示該詞語(yǔ)。

        圖2 例句“袁明吃蛋撻”

        圖3 例句“袁明蛋撻”

        圖4 例句“袁明吃蛋撻”的詞向量訓(xùn)練

        基于以上結(jié)論,對(duì)例句詞語(yǔ)分別調(diào)用百度AI的詞向量表示接口,返回類型為1024維空間大小的詞向量,其中對(duì)“袁明”的返回值為[-0.074 207 4,-0.458 546,-0.010 252 2,0.010 083 9,…],對(duì)“吃”的返回值為[0.015 029 4,1.488 3,-0.482 325,-0.740 492,…],對(duì)“蛋撻”的返回值為[0.015 029 4,1.488 3,-0.482 325,-0.740 492,…]。CNN模型檢測(cè)文本相似度方法的內(nèi)部情況是將以上三個(gè)詞向量拼接成矩陣表示,在池化層完成對(duì)數(shù)據(jù)降維的工作[12]。文獻(xiàn)[13]詳細(xì)描述了目前主流的池化方法:

        (1)平均池,選擇池窗口中的平均值表示池區(qū)信息。

        (2)最大池,選擇池窗口中的最大值,該方法可以獲得池區(qū)的最優(yōu)值,也是最常用的方法。

        (3)K-max池,選擇池窗口中的最大K值,該方法是最大池方法的擴(kuò)展,可以更好地保持文本特征。

        (4)多池,該方法是針對(duì)文本任務(wù)的特點(diǎn),獲得文本的一維向量表示,并在一維向量上使用其他池化方法分段。

        該方法的優(yōu)點(diǎn)是能保留一些詞序信息,可以視為最大池的一種變體。本項(xiàng)目對(duì)于文本相似度接口返回的數(shù)值為離散數(shù)據(jù),且難以描述實(shí)際意義,可以考慮使用聚類方法處理。參考多池的分段方法,研究返回的三個(gè)詞向量之間的關(guān)系可以通過計(jì)算歐氏距離表示詞向量在二維空間下的位置關(guān)系,其中D為絕對(duì)距離,X,Y為實(shí)體,x,y為特征值,計(jì)算方法如下:

        最終計(jì)算“袁明”到“蛋撻”的距離為17.433 217 41,句子“袁明吃蛋撻”的距離之和為39.262 644 02。另一個(gè)例子,“袁明跳蛋撻”是一句顯然不符合表達(dá)習(xí)慣的句子,此句子與“袁明蛋撻”的相似度為0.767 38,且符合上一節(jié)中介值于(0.3,0.9)之間的假設(shè),這個(gè)句子的距離之和為46.659 304 67。將以上距離關(guān)系映射到二維空間下的表示如圖5所示,由于詞向量的特征值僅代表在向量空間下的絕對(duì)位置,因此該坐標(biāo)系下的單位僅作運(yùn)算,無(wú)實(shí)際意義。

        圖5 詞向量在二維空間下的映射

        由數(shù)據(jù)降維后的結(jié)果可見,“吃”字對(duì)卷積運(yùn)算的結(jié)果影響較小,以上結(jié)果是因?yàn)镃NN模型運(yùn)算詞向量時(shí)對(duì)特征敏感而本例句過于簡(jiǎn)單所導(dǎo)致,所以為了保持句子的完整結(jié)構(gòu),核心關(guān)系應(yīng)作為特例保留。

        1.2.2 結(jié) 論

        基于上文的實(shí)驗(yàn),文本相似度處于(0.3,0.9)區(qū)間的依存關(guān)系有主謂關(guān)系、介賓關(guān)系和動(dòng)賓關(guān)系以及做特例的核心四種依存關(guān)系作為句子的關(guān)鍵成分,相似度同樣處于(0.3,0.9)區(qū)間的處所關(guān)系、并列關(guān)系、數(shù)量關(guān)系和“被”字結(jié)構(gòu)是對(duì)句子邏輯影響比較大的修飾成分或結(jié)構(gòu)成分。利用已經(jīng)確定好的八種重要的依存關(guān)系,可以重新組合出更接近句子深層含義的SVO句式。在不改變句子本身邏輯的前提下,去掉盡可能多無(wú)需以動(dòng)畫展示的修飾成分,對(duì)第二節(jié)中生成動(dòng)畫的工作顯然是更友好的。

        2 系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2.1 系統(tǒng)架構(gòu)設(shè)計(jì)

        基于依存關(guān)系的自然語(yǔ)言可視化仿真系統(tǒng)使用C/S分離式架構(gòu)設(shè)計(jì),其時(shí)序圖如圖6所示。使用.net框架中的TCP協(xié)議通信,分離式架構(gòu)的優(yōu)點(diǎn)是可以方便本系統(tǒng)在應(yīng)用層面開發(fā)時(shí)的擴(kuò)展[14],例如將模型資源保存在服務(wù)器上的數(shù)據(jù)庫(kù)中以減少客戶端資源的使用,以及在不修改客戶端的條件下更新數(shù)據(jù)。本系統(tǒng)的核心問題是對(duì)以上依存關(guān)系合理性的驗(yàn)證,故暫時(shí)不考慮在架構(gòu)上做性能優(yōu)化。

        圖6 UML序列圖

        2.2 服務(wù)器的系統(tǒng)開發(fā)

        服務(wù)器的開發(fā)需要調(diào)用百度AI開放平臺(tái)的自然語(yǔ)言處理接口。使用前需要在官方網(wǎng)站申請(qǐng)API_KEY、SECRET_KEY和APPID并下載C#平臺(tái)的SDK,在Visual Studio中新建項(xiàng)目,添加對(duì)SDK中類庫(kù)的引用,并創(chuàng)建InputHandle類和NetWork類。調(diào)用接口時(shí)的請(qǐng)求文本應(yīng)采用GBK編碼,而此編碼在.NET Core平臺(tái)上不可使用。在程序啟動(dòng)時(shí)注冊(cè)RegisterProvider能提供平臺(tái)不可使用的編碼格式,具體代碼如下:

        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

        System.Text.Encoding.GetEncoding("GB2312");

        2.2.1 InputHandle類

        InputHandle類包含了調(diào)用自然語(yǔ)言處理接口和聲明Json解析的方法。首先,將輸入的句子傳入到依存句法分析方法中,使用正則表達(dá)式解析返回的Json結(jié)果,并放入到如下格式的結(jié)構(gòu)體數(shù)組中。

        public struct Word{

        public int head;//頭節(jié)點(diǎn)

        public string word;//詞

        public int id;//節(jié)點(diǎn)編號(hào)

        public string deprel;//關(guān)系

        };

        根據(jù)此結(jié)構(gòu)體數(shù)組,可以獲得一棵有序的語(yǔ)法解析樹,使用Equals()方法判斷結(jié)構(gòu)體中deprel的取值。關(guān)鍵代碼如下:

        string Subject,Verb,Object;

        foreach(Word w in Words) {

        if (Equals(w.deprel,"SBV") Subject =w .word;

        if (Equals(w.deprel,"HED") Verb = w.word;

        if (Equals(w.deprel,"QUN") Verb = w.word;

        if (Equals(w.deprel,"BEI") Verb = w.word;

        if (Equals(w.deprel,"COO") Object = w.word;

        if (Equals(w.deprel,"VOB") Object = w.word;

        if (Equals(w.deprel,"POB") Object = w.word;

        if (Equals(w.deprel,"LOC") Object = w.word;

        }

        將以上代碼賦值后的Subject、Verb、Object變量有序地存入字符串?dāng)?shù)組,此方法封裝到DepPraseHandle類中,并將字符串?dāng)?shù)組作為參數(shù)傳遞給NetWork類。

        2.2.2 NetWork類

        對(duì)于服務(wù)器和客戶端之間的通信問題,本系統(tǒng)采用.net基于套接字為TCP協(xié)議擴(kuò)展的TcpClient類和TcpListener類共同實(shí)現(xiàn)。TcpListener類可以偵聽來(lái)自TCP網(wǎng)絡(luò)客戶端的連接。由于TCP協(xié)議是以穩(wěn)定字節(jié)流的形式將數(shù)據(jù)在網(wǎng)絡(luò)間傳輸[15],TcpClient類中的GetStream()方法可以返回用于發(fā)送和接收的網(wǎng)絡(luò)流。對(duì)于字節(jié)類型可以使用BinaryWriter類和BinaryReader類共同實(shí)現(xiàn)將基元類型讀取和寫入的二進(jìn)制值的操作,以上提及的兩個(gè)類位于命名空間System.IO下。創(chuàng)建ReceiveMessage()方法,包含使用BinaryReader讀取到網(wǎng)絡(luò)流中客戶端發(fā)送的句子,并作為參數(shù)按上文所述的順序調(diào)用InputHandle類中的方法,最終根據(jù)返回的消息找到模型在服務(wù)器上保存的位置,并使用FileStream類的方法寫入流數(shù)據(jù),關(guān)鍵代碼如下:

        public byte[] FileReader(string path)

        {

        FileStream fileStream = File.Open(path, FileMode.Open);

        Console.WriteLine(path);

        byte[] array = new byte[fileStream.Length];

        fileStream.Read(array, 0, array.Length);

        fileStream.Close();

        return array;

        }

        創(chuàng)建SendMessage()方法,包含將返回的字節(jié)數(shù)組使用BinaryWriter.Write()方法寫入到網(wǎng)絡(luò)流NetWorkStream中。其中NetWorkStream位于命名空間System.Net.Sockets下。將上述方法封裝于NetWork類,最終的服務(wù)器UML類圖如圖7所示。

        圖7 服務(wù)器UML類圖

        2.3 客戶端的系統(tǒng)開發(fā)

        2.3.1 命名實(shí)體處理

        在Unity3D中將每個(gè)實(shí)體模型制作為GameObject類型的預(yù)制體,并以實(shí)體的含義命名后保存在數(shù)據(jù)庫(kù)中。

        (1)名詞類。

        由于需要表示的動(dòng)畫不僅是由模型組成,在Unity3D中實(shí)現(xiàn)名詞還可以意味著動(dòng)畫、天空盒子、粒子系統(tǒng)、聲音、視頻等功能,故需要根據(jù)詞語(yǔ)創(chuàng)建模型,并對(duì)非模型類的命名實(shí)體掛載一個(gè)繼承自MonoBehaviour類的腳本,并在Start()方法中調(diào)用不同組件的Play()方法,以便在生命周期開始時(shí)執(zhí)行。

        (2)動(dòng)詞類。

        動(dòng)詞類在中文的單句中作為語(yǔ)法樹的根節(jié)點(diǎn)或度大于一的節(jié)點(diǎn)控制前后名詞類的邏輯,不僅需要訪問名詞類,還要根據(jù)動(dòng)詞本身的意思讓名詞類執(zhí)行不同的操作如的開始、結(jié)束、改變位置、復(fù)制多個(gè)等,在動(dòng)詞類中創(chuàng)建FunSubject()、FunVerb()、FunObject()三個(gè)方法,分別對(duì)應(yīng)著與名詞的主動(dòng)關(guān)系、動(dòng)作和被動(dòng)關(guān)系。通常情況下,數(shù)量關(guān)系、處所關(guān)系等修飾成分充當(dāng)謂語(yǔ)成分時(shí)對(duì)應(yīng)著FunObject()方法的實(shí)體,表示賓語(yǔ)被動(dòng)產(chǎn)生的動(dòng)作。而核心HED往往由動(dòng)詞產(chǎn)生,對(duì)應(yīng)著FunSubject()方法,表示主動(dòng)發(fā)起的動(dòng)作。以FunSubject()方法為例,獲取名詞所對(duì)應(yīng)命名實(shí)體的代碼如下:

        public Inventory Bag;

        public GameObject Mod;

        public string Subject;

        foreach (GameObject b in Bag. itemList){

        if (Equals(b.name,Subject) == true)Mod = b;

        }

        獲取到模型后,首先要分析該動(dòng)詞的含義,在FunVerb()方法中以低代碼化的方式添加簡(jiǎn)單的代碼片段。例如下面的代碼為動(dòng)詞“害怕”添加了音頻并向后移動(dòng)了主語(yǔ)模型的位置。

        public void FunVerb(){

        Instantiate(audioSource);

        Mod.transform.position += new Vector3(0, 0, -1);

        }

        2.3.2 背包系統(tǒng)實(shí)現(xiàn)

        根據(jù)系統(tǒng)架構(gòu)設(shè)計(jì),客戶端需要接收服務(wù)器發(fā)送的字節(jié)數(shù)組。并按照字節(jié)數(shù)組中的順序在客戶端寫入文件并序列化地生成模型,可以考慮使用GameObject類型的泛型列表保存模型,這種方法的優(yōu)點(diǎn)是易于根據(jù)名稱隨機(jī)讀取模型。

        創(chuàng)建背包的方法如下:

        public class Inventory : ScriptableObject{

        ListitemBag = new List();

        }

        2.3.3 控制器設(shè)計(jì)

        首先創(chuàng)建Receive()方法接收到服務(wù)器以字節(jié)流格式發(fā)送的命名實(shí)體,其關(guān)鍵代碼如下:

        publicstring Receive()

        {

        byte[] recvBuf = new byte[102400];

        networkStream.ReadTimeout = 2000;

        int bytesRead = networkStream.Read(recvBuf, 0, 102400);

        if (bytesRead > 0)

        string message = Encoding.UTF8.GetString(recvBuf);

        return message;

        }

        創(chuàng)建FileWrite()方法,用于將字節(jié)數(shù)組寫入文件。在寫入時(shí)需要注意判斷服務(wù)器寫入文件的順序,可以使用標(biāo)簽或分批發(fā)送的方式區(qū)分好不同實(shí)體,下面以動(dòng)詞為例,寫入方法如下:

        public void FileWrite(string message)

        {

        int a = message.IndexOf("%YAML 1.1");

        //在a下標(biāo)的100位之后繼續(xù)尋找下一個(gè)文件的報(bào)頭

        int b = message.IndexOf("%YAML 1.1", a + 100);

        string verb = message.Substring(a, b - a);

        FileStream vFile = new FileStream(@"AssetsResourcesVerb.prefab", FileMode.Create ,FileAccess.ReadWrite);

        StreamWriter Vwriter = new StreamWriter(vFile);

        Vwriter.WriteLine(verb);

        Vwriter.Close();

        }

        若制作的實(shí)體僅由Unity3D自帶的模型組成,可以直接使用UTF-8格式編碼后使用StreamWriter以字符串的形式寫入文件,這種方法相比直接操作字節(jié)而言更易于計(jì)算。否則需要把制作的命名實(shí)體及相關(guān)資源以u(píng)nitypackage包的形式導(dǎo)出,使用BinaryWriter將二進(jìn)制值寫入文件后導(dǎo)入項(xiàng)目。最終將生成的實(shí)體放入背包中,方法如下:

        Bag.itemList.Add(Resources.Load("Verb") as GameObject);

        在執(zhí)行了以上部分的代碼后,此時(shí)已獲取到句子中涉及到的所有模型和對(duì)應(yīng)關(guān)系,名詞類模型包含了具體的屬性,動(dòng)詞類模型可以獲取到名詞的屬性并執(zhí)行相應(yīng)的事件。要實(shí)現(xiàn)動(dòng)畫的播放,則只需要依次從背包中取出對(duì)應(yīng)的實(shí)體并實(shí)例化在場(chǎng)景中即可,關(guān)鍵代碼如下:

        public Inventory Bag;

        void FindVerbsInBag () {

        foreach(GameObject go in verbBag.itemList){

        if (go.name == Subject)Instantiate(go);

        if (go.name == Verb)Instantiate(go);

        if (go.name ==Object)Instantiate(go);

        }}

        在控制器腳本的生命周期結(jié)束時(shí),還應(yīng)添加資源銷毀機(jī)制并清空背包,避免該場(chǎng)景在下一次激活時(shí)執(zhí)行寫入或查找操作出現(xiàn)異常,可以參考如下代碼:

        private void OnDestroy(){

        File.Delete("Assets/Resources/Verb.prefab");

        File.Delete("Assets/Resources/Subject.prefab");

        File.Delete("Assets/Resources/Object.prefab");

        bag.itemList.Clear();

        }

        該方法在添加時(shí)需要慎重考慮,因?yàn)樵趶?fù)句或較復(fù)雜句式的處理中,該模型與下一個(gè)句子可能仍然存有聯(lián)系。應(yīng)考慮具體需求靈活變動(dòng),例如在銷毀前增加條件判斷或創(chuàng)建緩存機(jī)制等。

        3 系統(tǒng)測(cè)試

        以“袁明害怕小狗”,“袁明坐飛機(jī)去上?!睘槔瑸檫@句話中出現(xiàn)的命名實(shí)體制作相應(yīng)的模型,這兩句話在本系統(tǒng)中的運(yùn)行效果如下:圖8(a)按順序出現(xiàn)了模型,并播放了聲音表示害怕,同時(shí)人物的模型向后移動(dòng)了一段距離。圖8(b)按順序出現(xiàn)了模型,并在視頻播放完成后更換了天空。

        (a)例句“袁明害怕小狗”

        (b)例句“袁明坐飛機(jī)去上?!?/p>

        在不銷毀以上模型的條件下,輸入一個(gè)重新組合的句子“袁明到上海,小狗挨著香蕉”,再次制作命名實(shí)體“香蕉”對(duì)應(yīng)的模型,添加動(dòng)詞“到”和“挨著”,并識(shí)別逗號(hào)用做分隔符以兩個(gè)分句的形式連續(xù)調(diào)用上述方法。本系統(tǒng)將以兩個(gè)單句的效果播放動(dòng)畫,最終效果如圖9所示。

        4 結(jié)束語(yǔ)

        在現(xiàn)實(shí)生活中,人們通常更加熟悉該詞語(yǔ)本身所指代的對(duì)象,只是不熟悉這一對(duì)象在某種語(yǔ)言下的表示中所使用的語(yǔ)言符號(hào)。文中為能指與所指之間提供了一種可視化的解決方案,在處理SVO結(jié)構(gòu)單句時(shí)可以表現(xiàn)出理想的效果,適合應(yīng)用于漢英字典例句的可視化翻譯、同一語(yǔ)料庫(kù)內(nèi)的內(nèi)容的可視化。對(duì)于復(fù)句或結(jié)構(gòu)更復(fù)雜的句式可以在輸入時(shí)根據(jù)需求切分并逐條處理,以滿足大多數(shù)應(yīng)用場(chǎng)景。但是對(duì)于不符合語(yǔ)法規(guī)則的口語(yǔ)句式或輸入錯(cuò)誤時(shí)表現(xiàn)出的處理結(jié)果并不理想。除此之外,標(biāo)注大量模型的工作是另一個(gè)難題。筆者將在日后繼續(xù)研究此系統(tǒng)的實(shí)用性擴(kuò)展。

        猜你喜歡
        復(fù)句例句實(shí)體
        連動(dòng)結(jié)構(gòu)“VP1來(lái)VP2”的復(fù)句化及新興小句連接詞“來(lái)”的形成
        漢語(yǔ)復(fù)句學(xué)說(shuō)的源流
        韓國(guó)語(yǔ)復(fù)句結(jié)構(gòu)的二分說(shuō)
        前海自貿(mào)區(qū):金融服務(wù)實(shí)體
        英聲細(xì)語(yǔ)
        實(shí)體的可感部分與實(shí)體——兼論亞里士多德分析實(shí)體的兩種模式
        兩會(huì)進(jìn)行時(shí):緊扣實(shí)體經(jīng)濟(jì)“釘釘子”
        振興實(shí)體經(jīng)濟(jì)地方如何“釘釘子”
        好詞好句
        好詞好句
        97久久久一区二区少妇| 亚洲国产精品嫩草影院久久av| 日产一区日产2区日产| 国产裸体美女永久免费无遮挡| 一本色道久久综合亚洲精品不卡| 国产一级三级三级在线视| 天天射色综合| 风流少妇一区二区三区 | 国产激情视频在线观看大全| 成人影院yy111111在线| a级毛片成人网站免费看| 久久青草免费视频| 亚洲中文字幕在线精品2021| 国内自拍情侣露脸高清在线| 乱子伦一区二区三区| 一卡二卡三卡视频| 国产女主播强伦视频网站| 国产主播一区二区三区在线观看| 日韩精品人妻久久久一二三| 亚洲av无码精品色午夜在线观看 | 欧美日韩免费一区中文字幕| 久久精品国产亚洲av网在| 国产精品免费一区二区三区四区| 国产香蕉尹人在线观看视频 | 午夜精品久视频在线观看| 久久精品亚洲国产av网站| 色翁荡息又大又硬又粗视频| 国产农村乱子伦精品视频| 色婷婷资源网| 成人偷拍自拍在线视频| 日本成人精品在线播放| 99国产精品自在自在久久| 伊人久久中文大香线蕉综合| 一区二区三区人妻在线| 日本丰满老妇bbw| 野外性史欧美k8播放| 亚洲在线一区二区三区四区| 青青草在线免费播放视频| 国产成人精品综合在线观看| 无遮挡中文毛片免费观看| 国产丝袜一区丝袜高跟美腿|