LinkedIn發(fā)布了一款新的自然語(yǔ)言處理(NLP)推薦引擎,該引擎用于向成員提供智能回復(fù)的推薦。工程團(tuán)隊(duì)在近期的一篇博客文章中詳細(xì)地記錄了該模型以及基礎(chǔ)架構(gòu)的開發(fā)過程。
傳統(tǒng)的生成消息回復(fù)的方法是一個(gè) sequence-to-sequence模型(在該方法中,回復(fù)是逐詞計(jì)算出來的),但是LinkedIn的方法是從有限的庫(kù)中選擇出一個(gè)回復(fù)。他們的工程師解釋說,這樣做可以將問題視為多項(xiàng)分類而不是文本生成,從而帶來以下優(yōu)勢(shì):
易于訓(xùn)練 更快的進(jìn)行訓(xùn)練,這是他們能夠立即提出回復(fù)建議的關(guān)鍵所在 降低不恰當(dāng)回復(fù)的風(fēng)險(xiǎn)為了創(chuàng)建一組候選回復(fù),LinkedIn首先將一組對(duì)話匿名化,用占位符替代合適的部分。例如,在私人信息中姓名這樣的詞匯會(huì)被替換成“RECIPIENT_FIRST_NAME”。他們還將消息進(jìn)行標(biāo)準(zhǔn)化處理,該過程會(huì)把具有相同含義的消息進(jìn)行處理成為等同意義的消息(例如“Yup”、“ok!!!”、“Yes, ok!”這樣的詞匯),并且將這些詞匯的含義歸為一組。
為了建立多項(xiàng)分類模型,LinkedIn使用了他們自己的機(jī)器學(xué)習(xí)框架Dagli。它應(yīng)用了Java API,使用有向無循環(huán)圖來表示機(jī)器學(xué)習(xí)流程,并且該框架將來很可能會(huì)開源。
智能回復(fù)的一個(gè)要求是,僅用一種方式來表示相同意義的建議。例如,“yes”,“yep” 和“yeah”表示的意思全都是“yes”,因此提出這三個(gè)相同的回復(fù)建議是毫無意義的。工程師們通過只從相同語(yǔ)義組返回一條消息就解決了這個(gè)問題。例如,所有的類似“yes”的回復(fù)都屬于肯定類型的回復(fù)組,因此其中只有一條回復(fù)會(huì)被推薦。
使用語(yǔ)義組來分類存儲(chǔ)消息的另一個(gè)優(yōu)點(diǎn)是易于評(píng)估。LinkedIn只需要在預(yù)測(cè)和實(shí)際的回復(fù)組之間做一個(gè)對(duì)比,就可以了解它們的準(zhǔn)確程度,其中關(guān)注的是含義,而不是具體的文本。
LinkedIn還指出,由于用戶在系統(tǒng)內(nèi)發(fā)送消息的數(shù)量巨大,因此在迅速生成智能回復(fù)方面存在巨大的規(guī)模性挑戰(zhàn)。LinkedIn團(tuán)隊(duì)解決這個(gè)問題的方法是提前計(jì)算回復(fù)(當(dāng)它們被發(fā)送時(shí)),并將它們存儲(chǔ)到Expresso中,Expresso是LinkedIn內(nèi)部的NoSQL數(shù)據(jù)庫(kù)。這就避免了昂貴的即時(shí)計(jì)算,并且這使得在一瞬間就能夠提供或多或少的智能回復(fù)。
LinkedIn還建立了一套機(jī)制,以確保其成員的信息保持私密。首先,通過對(duì)消息進(jìn)行匿名化,在訓(xùn)練數(shù)據(jù)中使用信息之前,任何用戶的個(gè)人信息都應(yīng)該被匿名化。其次,會(huì)有一個(gè)選擇退出的選項(xiàng),選擇了該選項(xiàng)就意味著用戶消息數(shù)據(jù)不會(huì)被系統(tǒng)所使用。
點(diǎn)擊這里查看完整的架構(gòu)的在線文檔。
查看英文原文:Smart Replies For Member Messages at LinkedIn