BOT產(chǎn)品的框架與認(rèn)知:本質(zhì)是什么,邊界在哪里?

8 評(píng)論 9355 瀏覽 20 收藏 27 分鐘

邊界對(duì)BOT產(chǎn)品極為重要,因?yàn)槊恳粋€(gè)模塊要么是為了解決一個(gè)邊界問題,要么是在某個(gè)邊界內(nèi)去解決某類問題。

下面的文章,是我在做BOT產(chǎn)品上時(shí)最近的一些思考,其中并不代表現(xiàn)在做BOT的通用思維或方法論,我更想通過自己的思考和總結(jié),去嘗試推演出在做BOT產(chǎn)品時(shí),到底要解決的是什么問題,而這個(gè)問題對(duì)我們來說的本質(zhì)是什么,邊界是在哪里。

一、BOT配置架構(gòu)

這個(gè)架構(gòu)流程,是我所理解的系統(tǒng)搭建一個(gè)場景的模塊與流程,其中每個(gè)模塊都是去解決一個(gè)子問題,整個(gè)對(duì)話系統(tǒng)由他們構(gòu)成。

二、NLU語義解析框架

建立NLU語義解析框架是做BOT的基礎(chǔ)與核心,現(xiàn)在絕大多數(shù)的做法,都是通過場景(即Domain)去建立場景內(nèi)的用戶意圖和槽位信息。

這個(gè)框架之所以非常重要,是因?yàn)橐环矫嬖谝痪銺uery進(jìn)來之后,要通過以這個(gè)框架為基礎(chǔ)的去觸發(fā)意圖,解析信息;另一方面又連接起解析完成后服務(wù)的請(qǐng)求,以及給用戶的話術(shù)回復(fù)的配置。

在我個(gè)人看來,產(chǎn)品在這個(gè)模塊工作本質(zhì)是為“NLU語義”、“用戶語音交互需求”和“服務(wù)或內(nèi)容”這三個(gè)維度找到交集,并據(jù)此建立解析框架。

對(duì)NLU技術(shù)團(tuán)隊(duì)來說,理論上是可以把任何形式話語或詞語設(shè)置成意圖句式和槽位信息去處理,但這樣的技術(shù)實(shí)現(xiàn)沒有任何現(xiàn)實(shí)意義,解析出來的信息必須是去尋找用戶的意圖和其中的關(guān)鍵信息,但兩個(gè)集合的交集還不夠。

語音交互本身只是一種信息傳遞形式,最終目的是通過這個(gè)傳遞方式,幫助用戶獲取滿足其需求的服務(wù)價(jià)值——那也就必須考慮到服務(wù)本身,反過來對(duì)BOT上的限制,或者“參考”可能更加合理。因?yàn)樽罱K的目的是去通過語義解析的參數(shù),去精準(zhǔn)映射服務(wù)的不同信息,并且根據(jù)不同信息的組合,去差異化配置回復(fù)話術(shù)。

這個(gè)服務(wù)方的“參考”非常重要——因?yàn)槿魏涡问降姆?wù),無論是像聽音樂聽相聲這樣的內(nèi)容服務(wù),還是查天氣或訂票這樣的生活服務(wù)(可能閑聊除外),服務(wù)價(jià)值本身是先于“語音交互”這個(gè)形式而存在的,服務(wù)方已經(jīng)和用戶經(jīng)過長久的互動(dòng)和連接,彼此早就形成了互相認(rèn)同信息框架。

比如對(duì)于內(nèi)容播報(bào)這個(gè)領(lǐng)域來說,“信息傳遞框架”可提供的就像是“資源名稱、創(chuàng)作者、表演者、風(fēng)格、年代、適合播放場景”這樣的信息;對(duì)于天氣服務(wù)來說,可提供的就是“城市、經(jīng)緯度和日期”這樣的參數(shù)。

也就是說,用戶Query經(jīng)過BOT后,必須能夠獲得完美映射服務(wù)的不同參數(shù),以獲取不同的信息,才能返回給用戶他們所需要的服務(wù),這樣才算是一個(gè)完整的以語音交互形式,從需求到價(jià)值滿足的閉環(huán)

所以,搭建NLU語義解析框架這個(gè)問題的本質(zhì),是基于以上這三個(gè)維度,去尋找一個(gè)“最優(yōu)解集合”的問題

三、意圖句式配置

3.1意圖要素

在搭建起某個(gè)場景的NLU語義解析框架后(包含意圖和槽位),面臨最重要的問題就是什么樣的Query可以觸發(fā)意圖(這是需要產(chǎn)品去定義和配置的),即把與意圖不相關(guān)的Query擋在外面,把與意圖相關(guān)的Query盡可能使其觸發(fā)對(duì)應(yīng)的意圖。

那么在本質(zhì)上,這就成了一個(gè)“邊界判定”的問題:什么樣的Query可以進(jìn)入到意圖邊界之內(nèi),什么樣的Query要在意圖邊界之外?

那么先暫時(shí)拋開意圖和句式這些東西不談,我嘗試從邏輯上論證并得出這個(gè)“邊界問題”的解,然后關(guān)于“意圖和句式”的問題可能自然就解開了。

假設(shè)一個(gè)元素A,它之所以能夠成為或者能被定義為元素A,而不是元素B、C或D,那么它一定含有只有它才有的要素,是其他元素“B、C、D”所沒有的;或者說即使有,也因?yàn)闃?gòu)成要素之間的排序差別,導(dǎo)致不同。

因?yàn)槿绻谹與元素B擁有的要素全部相同且順序相同,那么也就不存在“A與B”的區(qū)別。

也就是說,元素A之所以能夠成為A,是因?yàn)樗邆浞铣蔀锳的所有要素條件。

舉個(gè)栗子:

假設(shè)一臺(tái)“臺(tái)式電腦”(A)能夠成為電腦的必要要素是“屏幕”和“鍵盤”與“主機(jī)”(注意這里是假設(shè),而不是事實(shí)),那么因?yàn)橐慌_(tái)筆記本電腦(元素B)雖然同樣具備“屏幕”和“鍵盤”,但并不具備“主機(jī)”,他們?cè)凇爸鳈C(jī)”這個(gè)要素上有差異,所以筆記本電腦不是臺(tái)式電腦

那么我們可以用演繹法將這個(gè)結(jié)論放在我們“意圖觸發(fā)邊界”這個(gè)問題上:

一個(gè)“意圖A”之所以能夠成為意圖“A”,一定有符合意圖A的全部必要要素才可以。

換句話說,只有符合該意圖的所有必要要素條件,這個(gè)Query句式才能夠觸發(fā)該意圖。

那么,關(guān)于意圖的邊界判定的問題,就成了一個(gè)“構(gòu)造意圖必要要素”的問題——只有符合該意圖的所有必要要素才能觸發(fā)我們配置的意圖,不符合的就不能觸發(fā)。

那么,我將一句話的信息按照“信息類型”和“必要要素”兩個(gè)維度,去劃分為四個(gè)類別:

  1. 必要槽位信息
  2. 必要意圖信息
  3. 非必要槽位信息
  4. 非必要意圖信息

通過這樣的劃分,基本問題的解就出來了。

在確定一個(gè)意圖后,要找到得就是表格中的“意圖必要要素”,它又有兩種信息類型構(gòu)成即“必要槽位信息”和“必要意圖信息”,只有符合“意圖必要要素”,那么這個(gè)句式才可以觸發(fā)對(duì)應(yīng)的意圖。

先舉個(gè)栗子,假如你的一個(gè)Intent是“查天氣”,那么以下句式都是可以觸發(fā)該意圖:

A:天氣怎么樣

B:今天天氣怎么樣

C:北京今天天氣怎么樣

D:播一下天氣預(yù)報(bào)

我們來簡單分析一下:

  • 在句式A,它的必要要素有兩個(gè)“天氣”和“怎么樣”;
  • 在B,必要要素為“天氣”和“怎么樣”,非必要要素為“今天”;
  • 在C,必要要素為“天氣”和“怎么樣”,非必要要素為“今天”和“北京”;
  • 在D,必要要素為“播”和“天氣”,非必要要素為“一下”和“預(yù)報(bào)”

3.2“意圖必要”與“意圖必填”

這個(gè)問題需要解釋,“北京”和“今天”明明是必填槽位啊,怎么會(huì)在這里被劃分為“非必要要素”(也即非必要槽位信息)呢?

這里就要澄清一下“必要”和“必填”的概念:他們之間所處的BOT流的模塊和要解決的問題在本質(zhì)上是不一樣的。

  • “意圖必要槽位信息”是用于判定用戶的某句Query能否觸發(fā)某個(gè)意圖,它的本質(zhì)是“邊界判定”,所處的位置是在一句Query進(jìn)來后意圖分類和句式匹配的階段;
  • 而“意圖必填槽位”,是在句式已經(jīng)確認(rèn)完全符合并觸發(fā)某個(gè)配置好的明確意圖之后,去請(qǐng)求后續(xù)服務(wù)而言是否“必填選項(xiàng)”。

還是以天氣為例子,在“天氣怎么樣”這個(gè)句式中,【天氣】和【怎么樣】即上表中“意圖必要信息”,他們不是某個(gè)槽位,但確實(shí)是出發(fā)這個(gè)意圖的“必要要素”,用戶說出這句話,是一定可以觸發(fā)意圖的。

但觸發(fā)意圖之后,要請(qǐng)求“天氣服務(wù)”則必須有“城市”和“日期”兩個(gè)信息才能完成服務(wù),所以這時(shí)候“城市”與“日期”會(huì)成為意圖的兩個(gè)“必填槽位”。

所以可以看出:在配置意圖句式的模塊,對(duì)于能否觸發(fā)意圖這個(gè)邊界而言,“必要要素”是可以不含有解析框架中的任何槽位的。這在我一開始接觸BOT的時(shí)候給我造成了很大的困惑,因?yàn)榉船F(xiàn)在的一些信息,都是突出了槽位相對(duì)于已經(jīng)出發(fā)意圖后,在請(qǐng)求對(duì)應(yīng)服務(wù)上的“必填性”,而沒有強(qiáng)調(diào)在觸發(fā)意圖邊界上的“必要性”,但實(shí)際上他們是兩個(gè)概念。

對(duì)于某個(gè)句式能否觸發(fā)某個(gè)意圖而言,句式中必要要素是可以不含有任何“槽位信息”的(比如上文中不一定含有“北京”和“今天”就能觸發(fā)查詢天氣意圖),但是卻必須有“必要意圖信息”(比如上文的“天氣”和“怎么樣”)

這就為我們提供意圖句式配置的一個(gè)邊界標(biāo)準(zhǔn),一個(gè)句式能否觸發(fā)某個(gè)意圖,一定要含有這個(gè)意圖句式的“必要要素”,而這個(gè)必要要素由兩部分構(gòu)成分別為“必要槽位信息”和“必要意圖信息”,其中“必要槽位信息”是非必須存在的,而必要“必要意圖信息”是必須存在的,這是我在配置意圖句式要素的一個(gè)核心思路

3.3意圖表達(dá)類型句式

接下來,我們?cè)倏纯戳硗庖粋€(gè)現(xiàn)象,比較一下“A”和“D”的共性和區(qū)別。

按照我剛才的說法,A中含有的“必要意圖信息”分別為“天氣”和“怎么樣”;而D中含有的“必要意圖信息”分別為“播”和“天氣”(注意這兩個(gè)句式,都不含有“必要槽位信息”,符合我剛才的理論)。他們之間共有的必要要素為“天氣”,而差異的要素為“怎么樣”和“播”,但是他們可以觸發(fā)的是同一個(gè)Intent(查詢天氣)

這里就再引申我自己給定義的一個(gè)概念,即“意圖表達(dá)類型句式”:同樣的一個(gè)意圖,會(huì)包含有不同的表達(dá)類型句式,但是這些表達(dá)類型不同的句式都可以觸發(fā)這一個(gè)意圖。而不同的“意圖表達(dá)類型句式”,所包含的意圖必要要素又是不一樣的。

比如剛才的“句式A”和“句式D”本質(zhì)上就是觸發(fā)同一個(gè)查詢天氣意圖的不同“意圖類型表達(dá)句式”,一個(gè)是“天氣怎么樣”,另一個(gè)是“播一下天氣”,在這兩個(gè)句式的必要要素中,差異的就是“怎么樣”和“播”,那么他們就屬于不同的“意圖類型表達(dá)句式”。

那么到這里,結(jié)合上面的“意圖要素理論”,可以得出一個(gè)自己在意圖句式配置中,建立意圖邊界的核心思路:

根據(jù)NLU語義解析框架進(jìn)行意圖分類后,按照“意圖必要要素”去劃分出同一個(gè)意圖的不同表達(dá)類型句式,然后將必要要素,可能是槽位,也可能是意圖信息,按照順序排列好,這就可以構(gòu)建“一個(gè)明確意圖、一個(gè)明確表達(dá)句式”的基礎(chǔ)邊界句式,只要符合這個(gè)邊界的句式,全都可以觸發(fā)這個(gè)意圖。

后面的工作就是在這個(gè)基礎(chǔ)上,把一些“非必要要素”配置上去以覆蓋更多句式。這里就不展開說了,比如說在必要要素為“天氣”和“怎么樣”這兩個(gè)要素配置好后,可以放的“非必要要素”是槽位信息“城市”和“日期”,組成多樣的句式如:

  • {城市}天氣怎么樣
  • {日期}天氣怎么樣
  • {城市}{日期}天氣怎么樣
  • {日期}{城市}天氣怎么樣

至于后面的包括非必要要素的配置、排列組合和詞典等,本質(zhì)上都是基于這個(gè)基礎(chǔ)句式去服務(wù),以符合這個(gè)邊界的更多意圖句式的。

四、多輪對(duì)話

多倫對(duì)話現(xiàn)在普遍的劃分方式,分為“線性多倫”和“非線性”多倫。

從功能層面上來講:

  • 線性多倫是在必填槽位缺失,通過系統(tǒng)主動(dòng)發(fā)起追問的方式,去獲得缺失的槽位;
  • 非線性多倫是解決需要聯(lián)系上文才能獲得用戶完整意圖的問題。

雖然都被稱之為“多倫”,但這兩個(gè)模塊本質(zhì)上在整個(gè)系統(tǒng)里所要解決的問題,以及問題的邊界是不同的。

4.1線性多輪定位與邊界

首先先看線性多輪所解決問題的邊界,他是為了在某一個(gè)意圖的對(duì)話中,由于用戶發(fā)起了某項(xiàng)意圖,但是意圖中有缺失的必填槽位,而發(fā)起的一種追問方式以獲取該槽位的信息。而該意圖及其“必填槽位信息”是已經(jīng)事先被定義好的,換句話說,該意圖請(qǐng)求服務(wù)所需要的“完整意圖信息”是已經(jīng)事先被我們所圈定好的,解決的問題只是在缺失時(shí)怎么補(bǔ)上就可以了。

再看它在整個(gè)對(duì)話流中的定位,是在一句Query符合“意圖觸發(fā)必要要素”,可以觸發(fā)場景中的某個(gè)意圖,但是觸發(fā)之后,卻缺失了“意圖請(qǐng)求服務(wù)必要要素”(即某些必填槽位信息)。

線性多輪的存在位置,就是為了彌補(bǔ)上兩者之間的GAP(如下圖):

這里還想?yún)^(qū)分一下“意圖觸發(fā)必要要素”和“意圖請(qǐng)求服務(wù)必要要素”之間的概念區(qū)別:

前者是為了判斷是否能夠觸發(fā)并進(jìn)入某個(gè)意圖的邊界,而后者則是能否具備完整請(qǐng)求后續(xù)服務(wù)的邊界。

4.2非線性多輪

為什么說“非線性多倫”本質(zhì)上與“線性多倫”并不是一回事呢?我們從三個(gè)維度上去看

“用戶完整意圖”定義

從目標(biāo)上,雖然線性多倫與非線性多倫都是為了獲取用戶的完整意圖信息,但在“完整”的定義上,線性多倫是已經(jīng)被設(shè)定死的。

而非線性多倫中,用戶的每一個(gè)意圖是否“完整”,都是不可知的。

問題邊界

再看解決的問題:因?yàn)槿苏f話的習(xí)慣,往往會(huì)把前一兩句說過的信息默認(rèn)忽略,即假定你已經(jīng)知道上面的信息。而計(jì)算機(jī)處理的方式,卻只能以一句完整Query意圖的方式去處理。

比如你第一句“我想聽劉若英的后來”,第二句“換張智霖的”,如果光看第二句,系統(tǒng)并不知道你的完整意圖是“我想聽張智霖唱的后來”。

所以非線性多輪這個(gè)模塊的本質(zhì),是為了解決“人基于上下文說話習(xí)慣”與“計(jì)算機(jī)處理意圖信息”方式之間的GAP。

那么為了彌補(bǔ)上這個(gè)GAP,第一個(gè)要解決的問題,還是邊界問題,即“什么時(shí)候要聯(lián)系上文”——這是在非線性多倫找模塊中,找到得第一個(gè)邊界。

接下來的討論,還是只限定在一個(gè)場景內(nèi),既然是在場景內(nèi),按照指定的語義解析框架,要分為“意圖內(nèi)”和“跨意圖”的非線性多倫。他們兩個(gè)又是在第一個(gè)邊界內(nèi),解決兩類問題。

4.3意圖內(nèi)非線性多輪邊界問題

在用戶發(fā)起第一輪的對(duì)話后,第二輪的對(duì)話是可以任意的,但我們卻沒必要對(duì)所有的Query進(jìn)行理解與回復(fù)。

比如用戶第一輪“我想聽歌”,第二輪如果是“換周杰倫的”,那么系統(tǒng)就有必要基于上文去理解并獲取用戶完整意圖。如果第二輪是“那明天呢”,那么這樣的Query是可以置之不理的。

這樣就引出“意圖內(nèi)非線性多輪”的一個(gè)邊界:需要聯(lián)系上文,且涉及到在相同意圖內(nèi)槽位信息的變動(dòng),才能獲得用戶完整意圖信息。

找到這個(gè)邊界,之后要做得就是在配置好的意圖及句式中,看看哪些槽位是可以改變的,被改變的意圖有哪些,然后按照“意圖要素”去配置句式,為“非線性多輪意圖”劃定可以觸發(fā)的邊界

4.4跨意圖非線性多倫邊界問題

“跨意圖非線性多倫”問題的邊界,我這就給出自己的理解:需要聯(lián)系上文,且兩個(gè)意圖之間的“意圖服務(wù)必要要素”(即必填槽位)必須完全相同,才能獲得用戶完整意圖信息。

因?yàn)橛|發(fā)某個(gè)意圖,是可以不需要任何“槽位信息”的,但請(qǐng)求服務(wù)的時(shí)候,幾乎是必須要含有“槽位信息”的。而用戶在第二輪觸發(fā)“新意圖”的時(shí)候,可以通過不含有任何“槽位信息”的句式觸發(fā)新意圖,但系統(tǒng)如果要在觸發(fā)意圖之后去請(qǐng)求服務(wù),則必須保證“意圖服務(wù)必要要素”的完整,但這時(shí)候是不可能強(qiáng)制讓用戶在Query里體現(xiàn)“槽位信息”。

那么問題就變成了:在第二輪用戶發(fā)起的對(duì)話中,必須保證在不含有任何“槽位信息”的情況下,Query是可以觸發(fā)某個(gè)意圖。觸發(fā)這個(gè)意圖后又不能去通過“線性多輪”這個(gè)模塊去獲取觸發(fā)意圖后的“服務(wù)必要要素”,那么只能通過另一種形式去獲取“必填槽位”,即上一輪的槽位繼承。

這也就限定了“跨意圖非線性多輪”所能解決的問題的邊界:只有在兩個(gè)意圖的“服務(wù)必要要素”(必填槽位)完全相同的情況下,才可以保證在用戶在不提供任何槽位信息的Query中;你是可以通過槽位繼承的方式,滿足此意圖的“服務(wù)必要要素”的槽位信息。否則第二輪中“觸發(fā)意圖”和“意圖服務(wù)”之間的GAP,在不借用“線性多輪”能力的情況下,是沒有辦法完美彌補(bǔ)上的。

可一旦你借用了“線性多輪”追問補(bǔ)槽的能力,那么這個(gè)問題也就不再是一個(gè)“多輪對(duì)話”的問題——因?yàn)樗呀?jīng)超出了“需要聯(lián)系上文才能獲得完整意圖”這個(gè)邊界。

所以,在“跨意圖非線性多倫”這個(gè)問題邊界內(nèi),需要去人為定義哪些意圖之間是可以進(jìn)行跨意圖多倫對(duì)話的。

現(xiàn)在普遍的實(shí)現(xiàn)方式,是去配置一個(gè)意圖的“輸入前置語境”和“輸出語境”,來限定某個(gè)意圖在第二輪的觸發(fā),即時(shí)句式完全相同,也必須在符合配置好的“輸入前置語境”條件下,才能觸發(fā)。

確定好一個(gè)“跨意圖非線性多倫”意圖可觸發(fā)的前置條件后,下面的工作就和“配置意圖句式”模塊流程相似了,配置這個(gè)意圖的可能“意圖表達(dá)類型”和其中的“意圖觸發(fā)必要要素”

比如在“查天氣”這個(gè)場景中,兩個(gè)intent分別為“查溫度”和“查空氣質(zhì)量”。那么在“查空氣質(zhì)量”這個(gè)“跨意圖非線性多倫”的配置中,前置輸入語境條件就是“查溫度”這個(gè)Intent,觸發(fā)“查空氣質(zhì)量”的這個(gè)意圖必要要素就是“空氣質(zhì)量”這四個(gè)字(不含任何槽位信息),比如“那空氣質(zhì)量呢”。

完整過程如下:

QA:北京今天溫度多少 (獲取【城市】與【日期】必填槽位)

AN:氣溫XX度

QA(二輪):那空氣質(zhì)量呢

AN:今天PM2.5XXXXX…..

可以看到,在第一輪的句式Query里,如果用戶僅僅說“那空氣質(zhì)量呢”要么是不會(huì)觸發(fā)意圖,或即時(shí)可以觸發(fā)也需要“線性多倫”或其他方式去補(bǔ)槽。而“查空氣質(zhì)量”這個(gè)意圖,通過“跨意圖非線性多倫”的配置,“那空氣質(zhì)量呢”這個(gè)句式,在符合前置語境條件的情況下,是可以匹配上“查空氣質(zhì)量”這個(gè)意圖,并且后續(xù)通過槽位繼承的方式形成“完整用戶意圖”去請(qǐng)求后續(xù)的服務(wù)

4.5多輪槽位解決方式

在邊界問題之后,就是如何獲取用戶完整意圖的問題。這個(gè)在反而是比較簡單的了,操作的方式無非是槽位的“繼承、替換和新增”上,并且這樣的操作方式是可以直接在邏輯上得以證明的。

當(dāng)然,還有一些比較特殊的Query進(jìn)行槽位的特殊處理。

比如用戶第一輪“我想聽《愛我別走》”,系統(tǒng)隨機(jī)放了一首張震岳唱的愛我別走,用戶聽著聽著第二輪“換別人唱的”。這種情況下用戶的完整意圖是“我不想聽張震岳版本的《愛我別走》”(原諒我是個(gè)周杰倫粉….),但你會(huì)驚人地發(fā)現(xiàn),兩輪Query的槽位只有一個(gè)“愛我別走”(歌曲名稱槽位),但用戶的完整意圖是“我想聽不是張震岳唱的《愛我別走》”,你怎么破!

這樣的特殊情況,也是有一套通用的方法,是可以通過特殊句式匹配和槽位處理方式,以及后續(xù)的搜索手段去解決的。

在“非線性多倫”這個(gè)模塊,我更多是提出了自己的問題,而沒有在解決思路和方法論的層面上做過的的闡述,因?yàn)榫拖裎以谧铋_始說的,我更希望通過這篇文章,去思考在整個(gè)BOT對(duì)話中,在每一模塊,我們要解決的是什么問題。

到這里,我大概論述了我對(duì)整個(gè)BOT產(chǎn)品的框架的認(rèn)知,其中涉及到最多的關(guān)鍵字,就是“邊界”。隨著了解和思考的深入,越來越體會(huì)到邊界對(duì)BOT產(chǎn)品極為重要,因?yàn)槊恳粋€(gè)模塊要么是為了解決一個(gè)邊界問題,要么是在某個(gè)邊界內(nèi)去解決某類問題。

當(dāng)然,以上僅是基于個(gè)人的一些思考和想法,也并沒有在上面過多提及方法論層面上的東西,也希望之后會(huì)能分享出來。

 

本文由 @free 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash ,基于 CC0 協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 寫的很好,很有幫助,謝謝分享~

    來自上海 回復(fù)
  2. 寫的太好了,我之前有開發(fā)經(jīng)驗(yàn),覺得描述的很棒,很貼切。棒棒的

    來自北京 回復(fù)
  3. 能個(gè)聯(lián)系方式私下交流一下嗎?

    來自江蘇 回復(fù)
  4. 對(duì)AI相關(guān)的東西不是很懂,表示崇拜

    來自浙江 回復(fù)
  5. 講的挺好,但是把要素抽象成槽位卻沒有說明,讓我暈眩了好久。

    來自廣東 回復(fù)
  6. 用各種很像的名詞和概念把這個(gè)事情復(fù)雜化了

    來自浙江 回復(fù)
  7. 看不懂就對(duì)了,我也看不懂。 ??

    來自湖北 回復(fù)
  8. 我都看不懂 ??

    來自湖北 回復(fù)