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